Completely remove the use of `local` target from all code, which is not required to keep backward compatibility. The target has not been used in composer for some time already, but some unit tests still used its data structures. Mark the target as deprecated and adjust all unit tests that depended on it. The backward compatibility is kept mostly to enable long running osbuild-composer instances, which were upgraded to still read old jobs from the store. While a target with the same intention will be reintroduced, the current `local` target data structures contain many fields which would not be relevant for the new target. In addition, while the "local" target will be ever used only by Weldr API, the name would be a bit misleading. Although the worker usually runs on the same system when using Weldr API, there is no hard requirement enforcing this setup. In reality, the worker will be uploading the image back to the worker server, so there is room for a better name.
340 lines
9 KiB
Go
340 lines
9 KiB
Go
package store
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
"github.com/osbuild/osbuild-composer/internal/common"
|
|
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
"github.com/osbuild/osbuild-composer/internal/distro/test_distro"
|
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
"github.com/osbuild/osbuild-composer/internal/target"
|
|
)
|
|
|
|
func FixtureBase() *Store {
|
|
var bName = "test"
|
|
var b = blueprint.Blueprint{
|
|
Name: bName,
|
|
Version: "0.0.0",
|
|
Packages: []blueprint.Package{},
|
|
Modules: []blueprint.Package{},
|
|
Groups: []blueprint.Group{},
|
|
Customizations: nil,
|
|
}
|
|
|
|
var date = time.Date(2019, 11, 27, 13, 19, 0, 0, time.FixedZone("UTC+1", 60*60))
|
|
|
|
var awsTarget = &target.Target{
|
|
Uuid: uuid.MustParse("10000000-0000-0000-0000-000000000000"),
|
|
Name: target.TargetNameAWS,
|
|
ImageName: "awsimage",
|
|
Created: date,
|
|
Status: common.IBWaiting,
|
|
Options: &target.AWSTargetOptions{
|
|
Region: "frankfurt",
|
|
AccessKeyID: "accesskey",
|
|
SecretAccessKey: "secretkey",
|
|
Bucket: "clay",
|
|
Key: "imagekey",
|
|
},
|
|
}
|
|
|
|
d := test_distro.New()
|
|
arch, err := d.GetArch(test_distro.TestArchName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
|
|
}
|
|
imgType, err := arch.GetImageType(test_distro.TestImageTypeName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get image type %s for a test distro architecture: %v", test_distro.TestImageTypeName, err))
|
|
}
|
|
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, 0)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to create a manifest: %v", err))
|
|
}
|
|
s := New(nil, arch, nil)
|
|
|
|
pkgs := []rpmmd.PackageSpec{
|
|
{
|
|
Name: "test1",
|
|
Epoch: 0,
|
|
Version: "2.11.2",
|
|
Release: "1.fc35",
|
|
Arch: test_distro.TestArchName,
|
|
}, {
|
|
Name: "test2",
|
|
Epoch: 3,
|
|
Version: "4.2.2",
|
|
Release: "1.fc35",
|
|
Arch: test_distro.TestArchName,
|
|
}}
|
|
|
|
s.blueprints[bName] = b
|
|
s.composes = map[uuid.UUID]Compose{
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000000"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBWaiting,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{awsTarget},
|
|
JobCreated: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000001"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBRunning,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000002"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFinished,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{awsTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
JobFinished: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000003"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFailed,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{awsTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
JobFinished: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000004"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFinished,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{awsTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
JobFinished: date,
|
|
},
|
|
Packages: pkgs,
|
|
},
|
|
}
|
|
|
|
return s
|
|
}
|
|
func FixtureFinished() *Store {
|
|
var bName = "test"
|
|
var b = blueprint.Blueprint{
|
|
Name: bName,
|
|
Version: "0.0.0",
|
|
Packages: []blueprint.Package{},
|
|
Modules: []blueprint.Package{},
|
|
Groups: []blueprint.Group{},
|
|
Customizations: nil,
|
|
}
|
|
|
|
var date = time.Date(2019, 11, 27, 13, 19, 0, 0, time.FixedZone("UTC+1", 60*60))
|
|
|
|
var gcpTarget = &target.Target{
|
|
Uuid: uuid.MustParse("20000000-0000-0000-0000-000000000000"),
|
|
Name: target.TargetNameGCP,
|
|
ImageName: "localimage",
|
|
Created: date,
|
|
Status: common.IBWaiting,
|
|
Options: &target.GCPTargetOptions{},
|
|
}
|
|
|
|
var awsTarget = &target.Target{
|
|
Uuid: uuid.MustParse("10000000-0000-0000-0000-000000000000"),
|
|
Name: target.TargetNameAWS,
|
|
ImageName: "awsimage",
|
|
Created: date,
|
|
Status: common.IBWaiting,
|
|
Options: &target.AWSTargetOptions{
|
|
Region: "frankfurt",
|
|
AccessKeyID: "accesskey",
|
|
SecretAccessKey: "secretkey",
|
|
Bucket: "clay",
|
|
Key: "imagekey",
|
|
},
|
|
}
|
|
|
|
d := test_distro.New()
|
|
arch, err := d.GetArch(test_distro.TestArchName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
|
|
}
|
|
imgType, err := arch.GetImageType(test_distro.TestImageTypeName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get image type %s for a test distro architecture: %v", test_distro.TestImageTypeName, err))
|
|
}
|
|
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, 0)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to create a manifest: %v", err))
|
|
}
|
|
s := New(nil, arch, nil)
|
|
|
|
pkgs := []rpmmd.PackageSpec{
|
|
{
|
|
Name: "test1",
|
|
Epoch: 0,
|
|
Version: "2.11.2",
|
|
Release: "1.fc35",
|
|
Arch: test_distro.TestArchName,
|
|
}, {
|
|
Name: "test2",
|
|
Epoch: 3,
|
|
Version: "4.2.2",
|
|
Release: "1.fc35",
|
|
Arch: test_distro.TestArchName,
|
|
}}
|
|
|
|
s.blueprints[bName] = b
|
|
s.composes = map[uuid.UUID]Compose{
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000000"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFinished,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{gcpTarget, awsTarget},
|
|
JobCreated: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000001"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFinished,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{gcpTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000003"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFailed,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{gcpTarget, awsTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
JobFinished: date,
|
|
},
|
|
Packages: []rpmmd.PackageSpec{},
|
|
},
|
|
uuid.MustParse("30000000-0000-0000-0000-000000000004"): {
|
|
Blueprint: &b,
|
|
ImageBuild: ImageBuild{
|
|
QueueStatus: common.IBFinished,
|
|
ImageType: imgType,
|
|
Manifest: manifest,
|
|
Targets: []*target.Target{gcpTarget},
|
|
JobCreated: date,
|
|
JobStarted: date,
|
|
},
|
|
Packages: pkgs,
|
|
},
|
|
}
|
|
|
|
return s
|
|
}
|
|
|
|
func FixtureEmpty() *Store {
|
|
var bName = "test"
|
|
var b = blueprint.Blueprint{
|
|
Name: bName,
|
|
Version: "0.0.0",
|
|
Packages: []blueprint.Package{},
|
|
Modules: []blueprint.Package{},
|
|
Groups: []blueprint.Group{},
|
|
Customizations: nil,
|
|
}
|
|
|
|
d := test_distro.New()
|
|
arch, err := d.GetArch(test_distro.TestArchName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
|
|
}
|
|
|
|
s := New(nil, arch, nil)
|
|
|
|
s.blueprints[bName] = b
|
|
|
|
// 2nd distro blueprint
|
|
b2 := b
|
|
b2.Name = "test-distro-2"
|
|
b2.Distro = "test-distro-2"
|
|
s.blueprints[b2.Name] = b2
|
|
|
|
// Unknown distro blueprint
|
|
b3 := b
|
|
b3.Name = "test-fedora-1"
|
|
b3.Distro = "fedora-1"
|
|
s.blueprints[b3.Name] = b3
|
|
|
|
return s
|
|
}
|
|
|
|
// FixtureOldChanges contains a blueprint and old changes
|
|
// This simulates restarting the service and losing the old blueprints
|
|
func FixtureOldChanges() *Store {
|
|
var bName = "test-old-changes"
|
|
var b = blueprint.Blueprint{
|
|
Name: bName,
|
|
Version: "0.0.0",
|
|
Packages: []blueprint.Package{},
|
|
Modules: []blueprint.Package{},
|
|
Groups: []blueprint.Group{},
|
|
Customizations: nil,
|
|
}
|
|
|
|
d := test_distro.New()
|
|
arch, err := d.GetArch(test_distro.TestArchName)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
|
|
}
|
|
|
|
s := New(nil, arch, nil)
|
|
|
|
s.PushBlueprint(b, "Initial commit")
|
|
b.Version = "0.0.1"
|
|
b.Packages = []blueprint.Package{{Name: "tmux", Version: "1.2.3"}}
|
|
s.PushBlueprint(b, "Add tmux package")
|
|
b.Version = "0.0.2"
|
|
b.Packages = []blueprint.Package{{Name: "tmux", Version: "*"}}
|
|
s.PushBlueprint(b, "Change tmux version")
|
|
|
|
// Replace the associated blueprints. This simulates reading the store from
|
|
// disk which doesn't actually save the old blueprints to disk.
|
|
for bp := range s.blueprintsChanges {
|
|
for c := range s.blueprintsChanges[bp] {
|
|
change := s.blueprintsChanges[bp][c]
|
|
change.Blueprint = blueprint.Blueprint{}
|
|
s.blueprintsChanges[bp][c] = change
|
|
}
|
|
}
|
|
|
|
return s
|
|
}
|