From 9dfb595bd9c10315aae719c37dfc4e86f388ece9 Mon Sep 17 00:00:00 2001 From: Ian Main Date: Mon, 20 Jan 2020 14:20:40 -0800 Subject: [PATCH] Generate CR to configure baremetal. Use a template to generate the baremetal config CR for use by the MAO and the baremetal operator. --- ...aremetal-provisioning-config.yaml.template | 10 +++ pkg/asset/manifests/openshift.go | 9 ++- .../baremetal-provisioning-config.go | 64 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 data/data/manifests/openshift/baremetal-provisioning-config.yaml.template create mode 100644 pkg/asset/templates/content/openshift/baremetal-provisioning-config.go diff --git a/data/data/manifests/openshift/baremetal-provisioning-config.yaml.template b/data/data/manifests/openshift/baremetal-provisioning-config.yaml.template new file mode 100644 index 00000000000..df430bce201 --- /dev/null +++ b/data/data/manifests/openshift/baremetal-provisioning-config.yaml.template @@ -0,0 +1,10 @@ +apiVersion: metal3.io/v1alpha1 +kind: Provisioning +metadata: + name: provisioning-configuration +spec: + provisioningInterface: {{.ProvisioningNetworkInterface}} + provisioningIP: {{.ClusterProvisioningIP}} + provisioningNetworkCIDR: {{.ProvisioningNetworkCIDR}} + provisioningDHCPExternal: {{.ProvisioningDHCPExternal}} + provisioningDHCPRange: {{.ProvisioningDHCPRange}} diff --git a/pkg/asset/manifests/openshift.go b/pkg/asset/manifests/openshift.go index a5cb4e53a48..3724d3f6ba6 100644 --- a/pkg/asset/manifests/openshift.go +++ b/pkg/asset/manifests/openshift.go @@ -24,6 +24,7 @@ import ( "github.com/openshift/installer/pkg/types" awstypes "github.com/openshift/installer/pkg/types/aws" azuretypes "github.com/openshift/installer/pkg/types/azure" + baremetaltypes "github.com/openshift/installer/pkg/types/baremetal" gcptypes "github.com/openshift/installer/pkg/types/gcp" openstacktypes "github.com/openshift/installer/pkg/types/openstack" ovirttypes "github.com/openshift/installer/pkg/types/ovirt" @@ -60,6 +61,7 @@ func (o *Openshift) Dependencies() []asset.Asset { &openshift.KubeadminPasswordSecret{}, &openshift.RoleCloudCredsSecretReader{}, &openshift.PrivateClusterOutbound{}, + &openshift.BaremetalConfig{}, } } @@ -179,10 +181,13 @@ func (o *Openshift) Generate(dependencies asset.Parents) error { cloudCredsSecret := &openshift.CloudCredsSecret{} kubeadminPasswordSecret := &openshift.KubeadminPasswordSecret{} roleCloudCredsSecretReader := &openshift.RoleCloudCredsSecretReader{} + baremetalConfig := &openshift.BaremetalConfig{} + dependencies.Get( cloudCredsSecret, kubeadminPasswordSecret, - roleCloudCredsSecretReader) + roleCloudCredsSecretReader, + baremetalConfig) assetData := map[string][]byte{ "99_kubeadmin-password-secret.yaml": applyTemplateData(kubeadminPasswordSecret.Files()[0].Data, templateData), @@ -192,6 +197,8 @@ func (o *Openshift) Generate(dependencies asset.Parents) error { case awstypes.Name, openstacktypes.Name, vspheretypes.Name, azuretypes.Name, gcptypes.Name, ovirttypes.Name: assetData["99_cloud-creds-secret.yaml"] = applyTemplateData(cloudCredsSecret.Files()[0].Data, templateData) assetData["99_role-cloud-creds-secret-reader.yaml"] = applyTemplateData(roleCloudCredsSecretReader.Files()[0].Data, templateData) + case baremetaltypes.Name: + assetData["99_baremetal-provisioning-config.yaml"] = applyTemplateData(baremetalConfig.Files()[0].Data, *installConfig.Config.Platform.BareMetal) } if platform == azuretypes.Name && installConfig.Config.Publish == types.InternalPublishingStrategy { diff --git a/pkg/asset/templates/content/openshift/baremetal-provisioning-config.go b/pkg/asset/templates/content/openshift/baremetal-provisioning-config.go new file mode 100644 index 00000000000..7f054731ed9 --- /dev/null +++ b/pkg/asset/templates/content/openshift/baremetal-provisioning-config.go @@ -0,0 +1,64 @@ +package openshift + +import ( + "os" + "path/filepath" + + "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/templates/content" +) + +const ( + baremetalConfigFilename = "baremetal-provisioning-config.yaml.template" +) + +var _ asset.WritableAsset = (*BaremetalConfig)(nil) + +// BaremetalConfig is the custom resource definitions for the baremetal deployment +type BaremetalConfig struct { + FileList []*asset.File +} + +// Dependencies returns all of the dependencies directly needed by the asset +func (t *BaremetalConfig) Dependencies() []asset.Asset { + return []asset.Asset{} +} + +// Name returns the human-friendly name of the asset. +func (t *BaremetalConfig) Name() string { + return "Baremetal Config CR" +} + +// Generate generates the actual files by this asset +func (t *BaremetalConfig) Generate(parents asset.Parents) error { + fileName := baremetalConfigFilename + data, err := content.GetOpenshiftTemplate(fileName) + if err != nil { + return err + } + t.FileList = []*asset.File{ + { + Filename: filepath.Join(content.TemplateDir, fileName), + Data: []byte(data), + }, + } + return nil +} + +// Files returns the files generated by the asset. +func (t *BaremetalConfig) Files() []*asset.File { + return t.FileList +} + +// Load returns the asset from disk. +func (t *BaremetalConfig) Load(f asset.FileFetcher) (bool, error) { + file, err := f.FetchByName(filepath.Join(content.TemplateDir, baremetalConfigFilename)) + if err != nil { + if os.IsNotExist(err) { + return false, nil + } + return false, err + } + t.FileList = append(t.FileList, file) + return true, nil +}