diff --git a/glci.yaml b/glci.yaml index eccbafa..19a26d0 100644 --- a/glci.yaml +++ b/glci.yaml @@ -1,58 +1,31 @@ flavors: -- target_type: Aliyun - flavor: ali-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod-arm64 -- target_type: Azure - flavor: azure-gardener_prod-amd64 -- target_type: Azure - flavor: azure-gardener_prod-arm64 -- target_type: GCP - flavor: gcp-gardener_prod-amd64 -- target_type: GCP - flavor: gcp-gardener_prod-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod-amd64 -- target_type: OpenStack - flavor: openstack-gardener-metal_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-arm64 -- target_type: Azure - flavor: azure-gardener_prod_usi-amd64 -- target_type: Azure - flavor: azure-gardener_prod_usi-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod_usi-amd64 -- target_type: OpenStack - flavor: openstack-gardener-metal_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-arm64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-amd64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 +- flavor: ali-gardener_prod-amd64 +- flavor: aws-gardener_prod-amd64 +- flavor: aws-gardener_prod-arm64 +- flavor: aws-gardener_fips_prod-amd64 +- flavor: aws-gardener_fips_prod-arm64 +- flavor: azure-gardener_prod-amd64 +- flavor: azure-gardener_prod-arm64 +- flavor: gcp-gardener_prod-amd64 +- flavor: gcp-gardener_prod-arm64 +- flavor: openstack-gardener_prod-amd64 +- flavor: openstack-gardener-metal_prod-amd64 +- flavor: aws-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_usi-arm64 +- flavor: aws-gardener_fips_prod_usi-amd64 +- flavor: aws-gardener_fips_prod_usi-arm64 +- flavor: azure-gardener_prod_usi-amd64 +- flavor: azure-gardener_prod_usi-arm64 +- flavor: gcp-gardener_prod_usi-amd64 +- flavor: gcp-gardener_prod_usi-arm64 +- flavor: openstack-gardener_prod_usi-amd64 +- flavor: openstack-gardener-metal_prod_usi-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-arm64 +- flavor: azure-gardener_prod_tpm2_trustedboot-amd64 +- flavor: azure-gardener_prod_tpm2_trustedboot-arm64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 publishing: credentials: source: Vault diff --git a/glci_1592.yaml b/glci_1592.yaml index d33ec99..f7901fe 100644 --- a/glci_1592.yaml +++ b/glci_1592.yaml @@ -1,22 +1,13 @@ flavors: -- target_type: Aliyun - flavor: ali-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-arm64 -- target_type: Azure - flavor: azure-gardener_prod-amd64 -- target_type: Azure - flavor: azure-gardener_prod-arm64 -- target_type: GCP - flavor: gcp-gardener_prod-amd64 -- target_type: GCP - flavor: gcp-gardener_prod-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod-amd64 -- target_type: OpenStack - flavor: openstackbaremetal-gardener_prod-amd64 +- flavor: ali-gardener_prod-amd64 +- flavor: aws-gardener_prod-amd64 +- flavor: aws-gardener_prod-arm64 +- flavor: azure-gardener_prod-amd64 +- flavor: azure-gardener_prod-arm64 +- flavor: gcp-gardener_prod-amd64 +- flavor: gcp-gardener_prod-arm64 +- flavor: openstack-gardener_prod-amd64 +- flavor: openstackbaremetal-gardener_prod-amd64 publishing: credentials: source: Vault diff --git a/glci_1877.yaml b/glci_1877.yaml index eade304..506e8a7 100644 --- a/glci_1877.yaml +++ b/glci_1877.yaml @@ -1,56 +1,30 @@ flavors: -- target_type: Aliyun - flavor: ali-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod-arm64 -- target_type: Azure - flavor: azure-gardener_prod-amd64 -- target_type: Azure - flavor: azure-gardener_prod-arm64 -- target_type: GCP - flavor: gcp-gardener_prod-amd64 -- target_type: GCP - flavor: gcp-gardener_prod-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod-amd64 -- target_type: OpenStack - flavor: openstackbaremetal-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-arm64 -- target_type: Azure - flavor: azure-gardener_prod_usi-amd64 -- target_type: Azure - flavor: azure-gardener_prod_usi-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-arm64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-amd64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 +- flavor: ali-gardener_prod-amd64 +- flavor: aws-gardener_prod-amd64 +- flavor: aws-gardener_prod-arm64 +- flavor: aws-gardener_fips_prod-amd64 +- flavor: aws-gardener_fips_prod-arm64 +- flavor: azure-gardener_prod-amd64 +- flavor: azure-gardener_prod-arm64 +- flavor: gcp-gardener_prod-amd64 +- flavor: gcp-gardener_prod-arm64 +- flavor: openstack-gardener_prod-amd64 +- flavor: openstackbaremetal-gardener_prod-amd64 +- flavor: aws-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_usi-arm64 +- flavor: aws-gardener_fips_prod_usi-amd64 +- flavor: aws-gardener_fips_prod_usi-arm64 +- flavor: azure-gardener_prod_usi-amd64 +- flavor: azure-gardener_prod_usi-arm64 +- flavor: gcp-gardener_prod_usi-amd64 +- flavor: gcp-gardener_prod_usi-arm64 +- flavor: openstack-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-arm64 +- flavor: azure-gardener_prod_tpm2_trustedboot-amd64 +- flavor: azure-gardener_prod_tpm2_trustedboot-arm64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 publishing: credentials: source: Vault diff --git a/glci_2150.yaml b/glci_2150.yaml index 25f7816..1e9a8e0 100644 --- a/glci_2150.yaml +++ b/glci_2150.yaml @@ -1,50 +1,27 @@ flavors: -- target_type: Aliyun - flavor: ali-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-arm64 -- target_type: Azure - flavor: azure-gardener_prod-amd64 -- target_type: Azure - flavor: azure-gardener_prod-arm64 -- target_type: GCP - flavor: gcp-gardener_prod-amd64 -- target_type: GCP - flavor: gcp-gardener_prod-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod-amd64 -- target_type: OpenStack - flavor: openstack-gardener-metal_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-arm64 -- target_type: Azure - flavor: azure-gardener_prod_usi-amd64 -- target_type: Azure - flavor: azure-gardener_prod_usi-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod_usi-amd64 -- target_type: OpenStack - flavor: openstack-gardener-metal_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-arm64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-amd64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 +- flavor: ali-gardener_prod-amd64 +- flavor: aws-gardener_prod-amd64 +- flavor: aws-gardener_prod-arm64 +- flavor: azure-gardener_prod-amd64 +- flavor: azure-gardener_prod-arm64 +- flavor: gcp-gardener_prod-amd64 +- flavor: gcp-gardener_prod-arm64 +- flavor: openstack-gardener_prod-amd64 +- flavor: openstack-gardener-metal_prod-amd64 +- flavor: aws-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_usi-arm64 +- flavor: azure-gardener_prod_usi-amd64 +- flavor: azure-gardener_prod_usi-arm64 +- flavor: gcp-gardener_prod_usi-amd64 +- flavor: gcp-gardener_prod_usi-arm64 +- flavor: openstack-gardener_prod_usi-amd64 +- flavor: openstack-gardener-metal_prod_usi-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-arm64 +- flavor: azure-gardener_prod_tpm2_trustedboot-amd64 +- flavor: azure-gardener_prod_tpm2_trustedboot-arm64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 publishing: credentials: source: Vault diff --git a/glci_dev.yaml b/glci_dev.yaml index dc06a84..d0ba7b1 100644 --- a/glci_dev.yaml +++ b/glci_dev.yaml @@ -1,54 +1,29 @@ flavors: -- target_type: Aliyun - flavor: ali-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod-arm64 -- target_type: Azure - flavor: azure-gardener_prod-amd64 -- target_type: Azure - flavor: azure-gardener_prod-arm64 -- target_type: GCP - flavor: gcp-gardener_prod-amd64 -- target_type: GCP - flavor: gcp-gardener_prod-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_usi-arm64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_fips_prod_usi-arm64 -- target_type: Azure - flavor: azure-gardener_prod_usi-amd64 -- target_type: Azure - flavor: azure-gardener_prod_usi-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_usi-arm64 -- target_type: OpenStack - flavor: openstack-gardener_prod_usi-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-amd64 -- target_type: AWS - flavor: aws-gardener_prod_tpm2_trustedboot-arm64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-amd64 -- target_type: Azure - flavor: azure-gardener_prod_tpm2_trustedboot-arm64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 -- target_type: GCP - flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 +- flavor: ali-gardener_prod-amd64 +- flavor: aws-gardener_prod-amd64 +- flavor: aws-gardener_prod-arm64 +- flavor: aws-gardener_fips_prod-amd64 +- flavor: aws-gardener_fips_prod-arm64 +- flavor: azure-gardener_prod-amd64 +- flavor: azure-gardener_prod-arm64 +- flavor: gcp-gardener_prod-amd64 +- flavor: gcp-gardener_prod-arm64 +- flavor: openstack-gardener_prod-amd64 +- flavor: aws-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_usi-arm64 +- flavor: aws-gardener_fips_prod_usi-amd64 +- flavor: aws-gardener_fips_prod_usi-arm64 +- flavor: azure-gardener_prod_usi-amd64 +- flavor: azure-gardener_prod_usi-arm64 +- flavor: gcp-gardener_prod_usi-amd64 +- flavor: gcp-gardener_prod_usi-arm64 +- flavor: openstack-gardener_prod_usi-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-amd64 +- flavor: aws-gardener_prod_tpm2_trustedboot-arm64 +- flavor: azure-gardener_prod_tpm2_trustedboot-amd64 +- flavor: azure-gardener_prod_tpm2_trustedboot-arm64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-amd64 +- flavor: gcp-gardener_prod_tpm2_trustedboot-arm64 publishing: credentials: source: Vault diff --git a/internal/publisher/publish.go b/internal/publisher/publish.go index ec94152..b7e58cc 100644 --- a/internal/publisher/publish.go +++ b/internal/publisher/publish.go @@ -49,7 +49,7 @@ func (p *Publisher) publish(ctx context.Context, version, commit string, omitCom for i, flavorConfig := range p.flavors { fetchManifests.Go(func(ctx context.Context) (parallel.ResultSyncFunc, error) { manifestKey := fmt.Sprintf("meta/singles/%s-%s-%.8s", flavorConfig.Flavor, version, commit) - ctx = log.WithValues(ctx, "flavor", flavorConfig.Flavor, "targetType", flavorConfig.TargetType) + ctx = log.WithValues(ctx, "flavor", flavorConfig.Flavor) log.Info(ctx, "Retrieving manifest") manifest, er := cloudprovider.GetManifest(ctx, p.manifestSource, manifestKey) @@ -85,21 +85,20 @@ func (p *Publisher) publish(ctx context.Context, version, commit string, omitCom manifest = targetManifest } - for _, target := range p.targets { - if target.CanPublish(manifest) { - return func() error { - publications[i] = cloudprovider.Publication{ - Flavor: flavorConfig.Flavor, - Manifest: manifest, - Target: target, - } - - return nil - }, nil - } + var target cloudprovider.PublishingTarget + target, er = p.selectTarget(manifest, flavorConfig.Flavor) + if er != nil { + return nil, er } + return func() error { + publications[i] = cloudprovider.Publication{ + Flavor: flavorConfig.Flavor, + Manifest: manifest, + Target: target, + } - return nil, fmt.Errorf("no publishing target for %s", flavorConfig.Flavor) + return nil + }, nil }) } err = fetchManifests.Wait() diff --git a/internal/publisher/publisher.go b/internal/publisher/publisher.go index d4fb4ad..2d249a6 100644 --- a/internal/publisher/publisher.go +++ b/internal/publisher/publisher.go @@ -6,6 +6,7 @@ import ( "github.com/gardenlinux/glci/internal/cloudprovider" "github.com/gardenlinux/glci/internal/credsprovider" + "github.com/gardenlinux/glci/internal/gardenlinux" "github.com/gardenlinux/glci/internal/module" "github.com/gardenlinux/glci/internal/task" ) @@ -34,8 +35,7 @@ type Publisher struct { // FlavorConfig is a Garden Linux release flavor together with its publishing configuration. type FlavorConfig struct { - TargetType string `mapstructure:"target_type"` - Flavor string `mapstructure:"flavor"` + Flavor string `mapstructure:"flavor"` } type publisherConfig struct { @@ -134,3 +134,22 @@ func (p *Publisher) Configurables() []module.Configurable { configurables = module.AppendConfigurables(configurables, p.targets) return configurables } + +func (p *Publisher) selectTarget(manifest *gardenlinux.Manifest, flavor string) (cloudprovider.PublishingTarget, error) { + var target cloudprovider.PublishingTarget + for _, t := range p.targets { + if !t.CanPublish(manifest) { + continue + } + + if target != nil { + return nil, fmt.Errorf("multiple publishing targets for %s", flavor) + } + target = t + } + if target == nil { + return nil, fmt.Errorf("no publishing target for %s", flavor) + } + + return target, nil +} diff --git a/internal/publisher/unpublish.go b/internal/publisher/unpublish.go index a4002dc..592ead6 100644 --- a/internal/publisher/unpublish.go +++ b/internal/publisher/unpublish.go @@ -43,7 +43,7 @@ func (p *Publisher) Unpublish(ctx context.Context, version, commit string, steam for i, flavorConfig := range p.flavors { fetchManifests.Go(func(ctx context.Context) (parallel.ResultSyncFunc, error) { manifestKey := fmt.Sprintf("meta/singles/%s-%s-%.8s", flavorConfig.Flavor, version, commit) - ctx = log.WithValues(ctx, "flavor", flavorConfig.Flavor, "targetType", flavorConfig.TargetType) + ctx = log.WithValues(ctx, "flavor", flavorConfig.Flavor) log.Info(ctx, "Retrieving manifest") manifest, er := cloudprovider.GetManifest(ctx, p.manifestTarget, manifestKey) @@ -70,21 +70,20 @@ func (p *Publisher) Unpublish(ctx context.Context, version, commit string, steam commit = manifest.BuildCommittish }) - for _, target := range p.targets { - if target.CanPublish(manifest) { - return func() error { - publications[i] = cloudprovider.Publication{ - Flavor: flavorConfig.Flavor, - Manifest: manifest, - Target: target, - } - - return nil - }, nil - } + var target cloudprovider.PublishingTarget + target, er = p.selectTarget(manifest, flavorConfig.Flavor) + if er != nil { + return nil, er } + return func() error { + publications[i] = cloudprovider.Publication{ + Flavor: flavorConfig.Flavor, + Manifest: manifest, + Target: target, + } - return nil, fmt.Errorf("no publishing target for %s", flavorConfig.Flavor) + return nil + }, nil }) } err = fetchManifests.Wait()