Blame cmd/osbuild-worker/jobimpl-koji-init.go

Packit Service 509fd4
package main
Packit Service 509fd4
Packit Service 509fd4
import (
Packit Service 509fd4
	"crypto/tls"
Packit Service 509fd4
	"fmt"
Packit Service 509fd4
	"log"
Packit Service 509fd4
	"net/http"
Packit Service 509fd4
	"net/url"
Packit Service 509fd4
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/upload/koji"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/worker"
Packit Service 509fd4
)
Packit Service 509fd4
Packit Service 509fd4
type KojiInitJobImpl struct {
Packit Service 509fd4
	KojiServers map[string]koji.GSSAPICredentials
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (impl *KojiInitJobImpl) kojiInit(server, name, version, release string) (string, uint64, error) {
Packit Service 509fd4
	// Koji for some reason needs TLS renegotiation enabled.
Packit Service 509fd4
	// Clone the default http transport and enable renegotiation.
Packit Service 509fd4
	transport := http.DefaultTransport.(*http.Transport).Clone()
Packit Service 509fd4
	transport.TLSClientConfig = &tls.Config{
Packit Service 509fd4
		Renegotiation: tls.RenegotiateOnceAsClient,
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	serverURL, err := url.Parse(server)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return "", 0, err
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	creds, exists := impl.KojiServers[serverURL.Hostname()]
Packit Service 509fd4
	if !exists {
Packit Service 509fd4
		return "", 0, fmt.Errorf("Koji server has not been configured: %s", serverURL.Hostname())
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	k, err := koji.NewFromGSSAPI(server, &creds, transport)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return "", 0, err
Packit Service 509fd4
	}
Packit Service 509fd4
	defer func() {
Packit Service 509fd4
		err := k.Logout()
Packit Service 509fd4
		if err != nil {
Packit Service 509fd4
			log.Printf("koji logout failed: %v", err)
Packit Service 509fd4
		}
Packit Service 509fd4
	}()
Packit Service 509fd4
Packit Service 509fd4
	buildInfo, err := k.CGInitBuild(name, version, release)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return "", 0, err
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return buildInfo.Token, uint64(buildInfo.BuildID), nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (impl *KojiInitJobImpl) Run(job worker.Job) error {
Packit Service 509fd4
	var args worker.KojiInitJob
Packit Service 509fd4
	err := job.Args(&args)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return err
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	var result worker.KojiInitJobResult
Packit Service 509fd4
	result.Token, result.BuildID, err = impl.kojiInit(args.Server, args.Name, args.Version, args.Release)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		result.KojiError = err.Error()
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	err = job.Update(&result)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return fmt.Errorf("Error reporting job result: %v", err)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return nil
Packit Service 509fd4
}