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