|
Packit |
63bb0d |
// This fills and saves a store with more or less arbitrary data. It is meant to generate test stores as
|
|
Packit |
63bb0d |
// test data for testing upgrades to composer.
|
|
Packit |
63bb0d |
package main
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"os"
|
|
Packit |
63bb0d |
"path"
|
|
Packit |
63bb0d |
"time"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/google/uuid"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/distro/fedora32"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/store"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/target"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit Service |
15f37d |
func getManifest(bp blueprint.Blueprint, t distro.ImageType, a distro.Arch, d distro.Distro, rpm_md rpmmd.RPMMD, repos []rpmmd.RepoConfig) distro.Manifest {
|
|
Packit Service |
15f37d |
packageSets := t.PackageSets(bp)
|
|
Packit Service |
15f37d |
pkgSpecSets := make(map[string][]rpmmd.PackageSpec)
|
|
Packit Service |
15f37d |
for name, packages := range packageSets {
|
|
Packit Service |
15f37d |
pkgs, _, err := rpm_md.Depsolve(packages, repos, d.ModulePlatformID(), a.Name())
|
|
Packit Service |
15f37d |
if err != nil {
|
|
Packit Service |
15f37d |
panic(err)
|
|
Packit Service |
15f37d |
}
|
|
Packit Service |
15f37d |
pkgSpecSets[name] = pkgs
|
|
Packit |
63bb0d |
}
|
|
Packit Service |
15f37d |
manifest, err := t.Manifest(bp.Customizations, distro.ImageOptions{}, repos, pkgSpecSets, 0)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
return manifest
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
func main() {
|
|
Packit |
63bb0d |
cwd, err := os.Getwd()
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
id1, err := uuid.NewRandom()
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
id2, err := uuid.NewRandom()
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
hostname := "my-host"
|
|
Packit |
63bb0d |
description := "Mostly harmless."
|
|
Packit |
63bb0d |
password := "password"
|
|
Packit |
63bb0d |
sshKey := "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
|
|
Packit |
63bb0d |
home := "/home/my-home"
|
|
Packit |
63bb0d |
shell := "/bin/true"
|
|
Packit |
63bb0d |
uid := 42
|
|
Packit |
63bb0d |
gid := 42
|
|
Packit |
63bb0d |
bp1 := blueprint.Blueprint{
|
|
Packit |
63bb0d |
Name: "my-blueprint-1",
|
|
Packit |
63bb0d |
Description: "My first blueprint",
|
|
Packit |
63bb0d |
Packages: []blueprint.Package{
|
|
Packit |
63bb0d |
{
|
|
Packit |
63bb0d |
Name: "tmux",
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
Groups: []blueprint.Group{
|
|
Packit |
63bb0d |
{
|
|
Packit |
63bb0d |
Name: "core",
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
bp2 := blueprint.Blueprint{
|
|
Packit |
63bb0d |
Name: "my-blueprint-2",
|
|
Packit |
63bb0d |
Description: "My second blueprint",
|
|
Packit |
63bb0d |
Version: "0.0.2",
|
|
Packit |
63bb0d |
Customizations: &blueprint.Customizations{
|
|
Packit |
63bb0d |
Hostname: &hostname,
|
|
Packit |
63bb0d |
Kernel: &blueprint.KernelCustomization{
|
|
Packit |
63bb0d |
Append: "debug",
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
SSHKey: []blueprint.SSHKeyCustomization{
|
|
Packit |
63bb0d |
{
|
|
Packit |
63bb0d |
User: "me",
|
|
Packit |
63bb0d |
Key: sshKey,
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
User: []blueprint.UserCustomization{
|
|
Packit |
63bb0d |
{
|
|
Packit |
63bb0d |
Name: "myself",
|
|
Packit |
63bb0d |
Description: &description,
|
|
Packit |
63bb0d |
Password: &password,
|
|
Packit |
63bb0d |
Key: &sshKey,
|
|
Packit |
63bb0d |
Home: &home,
|
|
Packit |
63bb0d |
Shell: &shell,
|
|
Packit |
63bb0d |
Groups: []string{
|
|
Packit |
63bb0d |
"wheel",
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
UID: &uid,
|
|
Packit |
63bb0d |
GID: &gid,
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
awsTarget := target.NewAWSTarget(
|
|
Packit |
63bb0d |
&target.AWSTargetOptions{
|
|
Packit |
63bb0d |
Filename: "image.ami",
|
|
Packit |
63bb0d |
Region: "far-away-1",
|
|
Packit |
63bb0d |
AccessKeyID: "MyKey",
|
|
Packit |
63bb0d |
SecretAccessKey: "MySecret",
|
|
Packit |
63bb0d |
Bucket: "list",
|
|
Packit |
63bb0d |
Key: "image",
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
awsTarget.Uuid = id1
|
|
Packit |
63bb0d |
awsTarget.ImageName = "My Image"
|
|
Packit |
63bb0d |
awsTarget.Created = time.Now()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
d := fedora32.New()
|
|
Packit |
63bb0d |
a, err := d.GetArch("x86_64")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
t1, err := a.GetImageType("qcow2")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
t2, err := a.GetImageType("fedora-iot-commit")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
allRepos, err := rpmmd.LoadRepositories([]string{cwd}, "fedora-32")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
repos := allRepos["x86_64"]
|
|
Packit |
63bb0d |
homeDir, err := os.UserHomeDir()
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic("os.UserHomeDir(): " + err.Error())
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
rpmmd := rpmmd.NewRPMMD(path.Join(homeDir, ".cache/osbuild-composer/rpmmd"), "/usr/libexec/osbuild-composer/dnf-json")
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
s := store.New(&cwd, a, nil)
|
|
Packit |
63bb0d |
if s == nil {
|
|
Packit |
63bb0d |
panic("could not create store")
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
err = s.PushBlueprint(bp1, "message 1")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
err = s.PushBlueprint(bp1, "message 2")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
err = s.PushBlueprintToWorkspace(bp2)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
err = s.PushCompose(id1,
|
|
Packit |
63bb0d |
getManifest(bp2, t1, a, d, rpmmd, repos),
|
|
Packit |
63bb0d |
t1,
|
|
Packit |
63bb0d |
&bp2,
|
|
Packit |
63bb0d |
0,
|
|
Packit |
63bb0d |
[]*target.Target{
|
|
Packit |
63bb0d |
awsTarget,
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
id1,
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
err = s.PushCompose(id2,
|
|
Packit |
63bb0d |
getManifest(bp2, t2, a, d, rpmmd, repos),
|
|
Packit |
63bb0d |
t2,
|
|
Packit |
63bb0d |
&bp2,
|
|
Packit |
63bb0d |
0,
|
|
Packit |
63bb0d |
[]*target.Target{
|
|
Packit |
63bb0d |
awsTarget,
|
|
Packit |
63bb0d |
},
|
|
Packit |
63bb0d |
id2,
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
}
|