debian-forge-composer/cmd/osbuild-store-dump/main.go
Tom Gundersen 50d469fe45 distro: replace BasePackages() with Packages()
Rather than getting a set of base packages from the ImageType, and then
appending the requested packages from the blueprint, pass the blueprint
into the new Packages() function, and return the full set of packages to
be depsolved.

This allows us to also append packages based on other customizations
too, and use that to append chrony when the timezone is set. This
matches the behavior anaconda had, and there was a TODO item to do this,
which had been overlooked.

Fixes #787.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2020-06-29 16:04:38 +02:00

184 lines
4.3 KiB
Go

// 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, rpmmd rpmmd.RPMMD, repos []rpmmd.RepoConfig) distro.Manifest {
packages, excludePackages := t.Packages(bp)
pkgs, _, err := rpmmd.Depsolve(packages, excludePackages, repos, d.ModulePlatformID(), a.Name())
if err != nil {
panic(err)
}
buildPkgs, _, err := rpmmd.Depsolve(t.BuildPackages(), nil, repos, d.ModulePlatformID(), a.Name())
if err != nil {
panic(err)
}
manifest, err := t.Manifest(bp.Customizations, distro.ImageOptions{}, repos, pkgs, buildPkgs)
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)
}
}