Blame cmd/osbuild-store-dump/main.go

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
}