|
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 |
}
|