upload/koji: add helpers to upload to koji
This does not yet actually upload the image, and it only supports empty images. You need to place a an empty file named <filename>, with a valid extension (e.g., .qcow2) in /mnt/koji/work/<directory>/. Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
parent
c508582a63
commit
76515066a8
13 changed files with 1443 additions and 0 deletions
110
cmd/osbuild-koji/main.go
Normal file
110
cmd/osbuild-koji/main.go
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/osbuild/osbuild-composer/internal/upload/koji"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var server, user, password, name, version, release, arch, filename string
|
||||
flag.StringVar(&server, "server", "", "url to API")
|
||||
flag.StringVar(&user, "user", "", "koji username")
|
||||
flag.StringVar(&password, "password", "", "koji password")
|
||||
flag.StringVar(&name, "name", "", "image name")
|
||||
flag.StringVar(&version, "version", "", "image verison")
|
||||
flag.StringVar(&release, "release", "", "image release")
|
||||
flag.StringVar(&arch, "arch", "", "image architecture")
|
||||
flag.StringVar(&filename, "filename", "", "filename")
|
||||
flag.Parse()
|
||||
|
||||
id, err := uuid.NewRandom()
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
dir := fmt.Sprintf("osbuild-%v", id)
|
||||
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
k, err := koji.New(server)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = k.Login("osbuild", "osbuildpass")
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
defer k.Logout()
|
||||
|
||||
hash, length, err := k.Upload(file, dir, path.Base(filename))
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
build := koji.Build{
|
||||
Name: name,
|
||||
Version: version,
|
||||
Release: release,
|
||||
StartTime: time.Now().Unix(),
|
||||
EndTime: time.Now().Unix(),
|
||||
}
|
||||
buildRoots := []koji.BuildRoot{
|
||||
{
|
||||
ID: 1,
|
||||
Host: koji.Host{
|
||||
Os: "RHEL8",
|
||||
Arch: arch,
|
||||
},
|
||||
ContentGenerator: koji.ContentGenerator{
|
||||
Name: "osbuild",
|
||||
Version: "1",
|
||||
},
|
||||
Container: koji.Container{
|
||||
Type: "nspawn",
|
||||
Arch: arch,
|
||||
},
|
||||
Tools: []koji.Tool{},
|
||||
Components: []koji.Component{},
|
||||
},
|
||||
}
|
||||
output := []koji.Output{
|
||||
{
|
||||
BuildRootID: 1,
|
||||
Filename: path.Base(filename),
|
||||
FileSize: length,
|
||||
Arch: arch,
|
||||
ChecksumType: "md5",
|
||||
MD5: hash,
|
||||
Type: "image",
|
||||
Components: []koji.Component{},
|
||||
Extra: koji.OutputExtra{
|
||||
Image: koji.OutputExtraImageInfo{
|
||||
Arch: arch,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err = k.CGImport(build, buildRoots, output, dir)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("Success!\n")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue