diff --git a/Makefile b/Makefile index 7e851c90f..7b3b820e8 100644 --- a/Makefile +++ b/Makefile @@ -386,7 +386,7 @@ ifeq (, $(shell which controller-gen)) CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\ cd $$CONTROLLER_GEN_TMP_DIR ;\ go mod init tmp ;\ - go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.6.1 ;\ + go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.6.2 ;\ rm -rf $$CONTROLLER_GEN_TMP_DIR ;\ } CONTROLLER_GEN=$(GOBIN)/controller-gen @@ -396,4 +396,4 @@ endif # Generate manifests e.g. CRD, RBAC etc. manifests: controller-gen - $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=manifests/function/airshipctl-schemas + find manifests/function/airshipctl-schemas/ -type f -not -name 'kustomization.yaml' -delete && $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=manifests/function/airshipctl-schemas diff --git a/manifests/function/airshipctl-schemas/airshipit.org_baremetalmanagers.yaml b/manifests/function/airshipctl-schemas/airshipit.org_baremetalmanagers.yaml index b225f1e6a..f470cc56d 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_baremetalmanagers.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_baremetalmanagers.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: baremetalmanagers.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_bootconfigurations.yaml b/manifests/function/airshipctl-schemas/airshipit.org_bootconfigurations.yaml index 02dcc6dde..2ced6b6a5 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_bootconfigurations.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_bootconfigurations.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: bootconfigurations.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_clusterctls.yaml b/manifests/function/airshipctl-schemas/airshipit.org_clusterctls.yaml index 910df5b52..7ec238faa 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_clusterctls.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_clusterctls.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: clusterctls.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_clustermaps.yaml b/manifests/function/airshipctl-schemas/airshipit.org_clustermaps.yaml index b2cfbf2b0..e6576d542 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_clustermaps.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_clustermaps.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: clustermaps.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_genericcontainers.yaml b/manifests/function/airshipctl-schemas/airshipit.org_genericcontainers.yaml index c2c793964..367676189 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_genericcontainers.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_genericcontainers.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: genericcontainers.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_hosts.yaml b/manifests/function/airshipctl-schemas/airshipit.org_hosts.yaml index 2bf92f7a8..214e1e0ce 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_hosts.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_hosts.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: hosts.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_isoconfigurations.yaml b/manifests/function/airshipctl-schemas/airshipit.org_isoconfigurations.yaml index de14ccc5f..e674521e7 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_isoconfigurations.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_isoconfigurations.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: isoconfigurations.airshipit.org spec: @@ -39,40 +39,29 @@ spec: description: Cloud Init network config will be retrieved from the doc matching this object properties: - selector: - description: Selector specifies a set of resources. Any resource - that matches intersection of all conditions is included in this - set. - properties: - annotationSelector: - description: AnnotationSelector is a string that follows the - label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api - It matches with the resource annotations. - type: string - group: - type: string - isClusterScoped: - description: isClusterScoped is true if the object is known, - per the openapi data in use, to be cluster scoped, and false - otherwise. - type: boolean - kind: - type: string - labelSelector: - description: LabelSelector is a string that follows the label - selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api - It matches with the resource labels. - type: string - name: - description: Name of the resource. - type: string - namespace: - description: Namespace the resource belongs to, if it can - belong to a namespace. - type: string - version: - type: string - type: object + annotationSelector: + description: AnnotationSelector is a string that follows the label + selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + type: string + kind: + type: string + labelSelector: + description: LabelSelector is a string that follows the label + selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource labels. + type: string + name: + description: Name of the resource. + type: string + namespace: + description: Namespace the resource belongs to, if it can belong + to a namespace. + type: string + version: + type: string type: object outputFileName: description: File name to use for the output image that will be written @@ -86,40 +75,29 @@ spec: description: Cloud Init user data will be retrieved from the doc matching this object properties: - selector: - description: Selector specifies a set of resources. Any resource - that matches intersection of all conditions is included in this - set. - properties: - annotationSelector: - description: AnnotationSelector is a string that follows the - label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api - It matches with the resource annotations. - type: string - group: - type: string - isClusterScoped: - description: isClusterScoped is true if the object is known, - per the openapi data in use, to be cluster scoped, and false - otherwise. - type: boolean - kind: - type: string - labelSelector: - description: LabelSelector is a string that follows the label - selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api - It matches with the resource labels. - type: string - name: - description: Name of the resource. - type: string - namespace: - description: Namespace the resource belongs to, if it can - belong to a namespace. - type: string - version: - type: string - type: object + annotationSelector: + description: AnnotationSelector is a string that follows the label + selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + type: string + kind: + type: string + labelSelector: + description: LabelSelector is a string that follows the label + selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource labels. + type: string + name: + description: Name of the resource. + type: string + namespace: + description: Namespace the resource belongs to, if it can belong + to a namespace. + type: string + version: + type: string type: object type: object container: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_kubeconfigs.yaml b/manifests/function/airshipctl-schemas/airshipit.org_kubeconfigs.yaml index 738786af1..1dd6a05ac 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_kubeconfigs.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_kubeconfigs.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: kubeconfigs.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_kubernetesapplies.yaml b/manifests/function/airshipctl-schemas/airshipit.org_kubernetesapplies.yaml index b055522cd..1655679c6 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_kubernetesapplies.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_kubernetesapplies.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: kubernetesapplies.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_manifestmetadata.yaml b/manifests/function/airshipctl-schemas/airshipit.org_manifestmetadata.yaml index faea6b460..9f85800ca 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_manifestmetadata.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_manifestmetadata.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: manifestmetadata.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_networkcatalogues.yaml b/manifests/function/airshipctl-schemas/airshipit.org_networkcatalogues.yaml index b58c554a6..c26ed2388 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_networkcatalogues.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_networkcatalogues.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: networkcatalogues.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_phaseplans.yaml b/manifests/function/airshipctl-schemas/airshipit.org_phaseplans.yaml index 4596c080b..77e98a022 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_phaseplans.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_phaseplans.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: phaseplans.airshipit.org spec: @@ -67,7 +67,7 @@ spec: type: array kubernetesVersion: description: KubernetesVersion is the version of Kubernetes to validate - against (default "1.21.2"). + against (default "1.18.6"). type: string schemaLocation: description: SchemaLocation is the base URL from which to search for diff --git a/manifests/function/airshipctl-schemas/airshipit.org_phases.yaml b/manifests/function/airshipctl-schemas/airshipit.org_phases.yaml index dd266e9e9..80b312dde 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_phases.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_phases.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: phases.airshipit.org spec: @@ -116,7 +116,7 @@ spec: type: array kubernetesVersion: description: KubernetesVersion is the version of Kubernetes to - validate against (default "1.21.2"). + validate against (default "1.18.6"). type: string schemaLocation: description: SchemaLocation is the base URL from which to search diff --git a/manifests/function/airshipctl-schemas/airshipit.org_replacementtransformers.yaml b/manifests/function/airshipctl-schemas/airshipit.org_replacementtransformers.yaml index 8e86f592f..ffb508985 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_replacementtransformers.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_replacementtransformers.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: replacementtransformers.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_templaters.yaml b/manifests/function/airshipctl-schemas/airshipit.org_templaters.yaml index 0df05d243..100a8e65d 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_templaters.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_templaters.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: templaters.airshipit.org spec: diff --git a/manifests/function/airshipctl-schemas/airshipit.org_versionscatalogues.yaml b/manifests/function/airshipctl-schemas/airshipit.org_versionscatalogues.yaml index 43a60c91c..e2b1dbd47 100644 --- a/manifests/function/airshipctl-schemas/airshipit.org_versionscatalogues.yaml +++ b/manifests/function/airshipctl-schemas/airshipit.org_versionscatalogues.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.6.1 + controller-gen.kubebuilder.io/version: v0.6.2 creationTimestamp: null name: versionscatalogues.airshipit.org spec: diff --git a/pkg/api/v1alpha1/isoconfiguration.go b/pkg/api/v1alpha1/isoconfiguration.go index 06280232a..ccadf4cd9 100644 --- a/pkg/api/v1alpha1/isoconfiguration.go +++ b/pkg/api/v1alpha1/isoconfiguration.go @@ -16,8 +16,6 @@ package v1alpha1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "opendev.org/airship/airshipctl/pkg/document" ) // IsoContainer structure contains parameters related to Docker runtime, used for building image @@ -33,11 +31,11 @@ type IsoContainer struct { // Isogen structure defines document selection criteria for cloud-init metadata type Isogen struct { // Cloud Init user data will be retrieved from the doc matching this object - UserDataSelector document.Selector `json:"userDataSelector,omitempty"` + UserDataSelector Selector `json:"userDataSelector,omitempty"` // Cloud init user data will be retrieved from this document key UserDataKey string `json:"userDataKey,omitempty"` // Cloud Init network config will be retrieved from the doc matching this object - NetworkConfigSelector document.Selector `json:"networkConfigSelector,omitempty"` + NetworkConfigSelector Selector `json:"networkConfigSelector,omitempty"` // Cloud init network config will be retrieved from this document key NetworkConfigKey string `json:"networkConfigKey,omitempty"` // File name to use for the output image that will be written to the container volume root diff --git a/pkg/api/v1alpha1/zz_generated.deepcopy.go b/pkg/api/v1alpha1/zz_generated.deepcopy.go index 1943732a1..40f644a7d 100644 --- a/pkg/api/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/api/v1alpha1/zz_generated.deepcopy.go @@ -1,4 +1,3 @@ -//go:build !ignore_autogenerated // +build !ignore_autogenerated /* diff --git a/pkg/bootstrap/cloudinit/cloud-init.go b/pkg/bootstrap/cloudinit/cloud-init.go index 2253128a1..8489c9d08 100644 --- a/pkg/bootstrap/cloudinit/cloud-init.go +++ b/pkg/bootstrap/cloudinit/cloud-init.go @@ -15,6 +15,7 @@ package cloudinit import ( + "opendev.org/airship/airshipctl/pkg/api/v1alpha1" "opendev.org/airship/airshipctl/pkg/document" ) @@ -27,13 +28,15 @@ const ( // ephemeral node. func GetCloudData( docBundle document.Bundle, - userDataSelector document.Selector, + userDataSelector v1alpha1.Selector, userDataKey string, - networkConfigSelector document.Selector, + networkConfigSelector v1alpha1.Selector, networkConfigKey string, ) (userData []byte, netConf []byte, err error) { + uDataSel := document.NewSelectorFromV1Alpha1(userDataSelector) + nwDataSel := document.NewSelectorFromV1Alpha1(networkConfigSelector) userDataSelectorFinal, userDataKeyFinal := applyDefaultsAndGetData( - userDataSelector, + uDataSel, document.SecretKind, document.EphemeralUserDataSelector, userDataKey, @@ -45,7 +48,7 @@ func GetCloudData( } netConfSelectorFinal, netConfKeyFinal := applyDefaultsAndGetData( - networkConfigSelector, + nwDataSel, document.BareMetalHostKind, document.EphemeralHostSelector, networkConfigKey, diff --git a/pkg/bootstrap/cloudinit/cloud-init_test.go b/pkg/bootstrap/cloudinit/cloud-init_test.go index 16c47d738..ce1a959c1 100644 --- a/pkg/bootstrap/cloudinit/cloud-init_test.go +++ b/pkg/bootstrap/cloudinit/cloud-init_test.go @@ -18,29 +18,40 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "opendev.org/airship/airshipctl/pkg/api/v1alpha1" "opendev.org/airship/airshipctl/pkg/document" ) type selectors struct { - userDataSelector document.Selector + userDataSelector v1alpha1.Selector userDataKey string - networkConfigSelector document.Selector + networkConfigSelector v1alpha1.Selector networkConfigKey string } var ( emptySelectors = selectors{ - userDataSelector: document.NewSelector(), - networkConfigSelector: document.NewSelector(), + userDataSelector: v1alpha1.Selector{}, + networkConfigSelector: v1alpha1.Selector{}, } validSelectors = selectors{ - userDataSelector: document.NewSelector(). - ByKind(secret). - ByLabel(ephUser), + userDataSelector: v1alpha1.Selector{ + ResID: v1alpha1.ResID{ + Gvk: v1alpha1.Gvk{ + Kind: secret, + }, + }, + LabelSelector: ephUser, + }, userDataKey: defaultUserDataKey, - networkConfigSelector: document.NewSelector(). - ByKind(bmh). - ByLabel(ephNode), + networkConfigSelector: v1alpha1.Selector{ + ResID: v1alpha1.ResID{ + Gvk: v1alpha1.Gvk{ + Kind: bmh, + }, + }, + LabelSelector: ephNode, + }, networkConfigKey: defaultNetworkConfigKey, } ) diff --git a/pkg/document/selectors.go b/pkg/document/selectors.go index 2b75293a9..3b3f7c0d8 100644 --- a/pkg/document/selectors.go +++ b/pkg/document/selectors.go @@ -23,6 +23,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/kyaml/resid" + + "opendev.org/airship/airshipctl/pkg/api/v1alpha1" ) // Selector provides abstraction layer in front of kustomize selector @@ -35,6 +37,23 @@ func NewSelector() Selector { return Selector{} } +// NewSelectorFromV1Alpha1 generates selector object from v1alpha1 analog +func NewSelectorFromV1Alpha1(selector v1alpha1.Selector) Selector { + return Selector{types.Selector{ + ResId: resid.ResId{ + Gvk: resid.Gvk{ + Group: selector.Gvk.Group, + Version: selector.Gvk.Version, + Kind: selector.Gvk.Kind, + }, + Name: selector.Name, + Namespace: selector.Namespace, + }, + AnnotationSelector: selector.AnnotationSelector, + LabelSelector: selector.LabelSelector, + }} +} + // Following set of functions allows to build selector object // by name, gvk, label selector and annotation selector