Merge "Add selector to filter docs to be deplyed to k8s"
This commit is contained in:
commit
868700c98d
@ -1,6 +1,8 @@
|
||||
apiVersion: metal3.io/v1alpha1
|
||||
kind: BareMetalHost
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/local-config: "true"
|
||||
labels:
|
||||
airshipit.org/ephemeral-node: "true"
|
||||
name: master-0
|
||||
|
@ -1,6 +1,8 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/local-config: "true"
|
||||
labels:
|
||||
airshipit.org/ephemeral-user-data: "true"
|
||||
name: node1-bmc-secret
|
||||
@ -115,6 +117,8 @@ stringData:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/local-config: "true"
|
||||
name: ephemeral-network-data
|
||||
namespace: default
|
||||
type: Opaque
|
||||
|
@ -66,7 +66,7 @@ func (infra *Infra) Deploy() error {
|
||||
}
|
||||
|
||||
// Returns all documents for this phase
|
||||
docs, err := b.GetAllDocuments()
|
||||
docs, err := b.Select(document.NewDeployToK8sSelector())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1,11 +1,16 @@
|
||||
package document
|
||||
|
||||
const (
|
||||
// Selectors
|
||||
// Label Selectors
|
||||
BaseAirshipSelector = "airshipit.org"
|
||||
EphemeralHostSelector = BaseAirshipSelector + "/ephemeral-node in (True, true)"
|
||||
EphemeralUserDataSelector = BaseAirshipSelector + "/ephemeral-user-data in (True, true)"
|
||||
InitInfraSelector = BaseAirshipSelector + "/phase = initinfra"
|
||||
|
||||
// Annotation Selectors
|
||||
// Please note that by default every document in the manifest is to be deployed to kubernetes cluster.
|
||||
// so this selector simply checks that deploy-k8s label is not equal to true or True (string)
|
||||
DeployToK8sSelector = "config.kubernetes.io/local-config notin (True, true)"
|
||||
)
|
||||
|
||||
// Kinds
|
||||
|
@ -98,3 +98,9 @@ func NewEphemeralNetworkDataSelector(bmhDoc Document) (Selector, error) {
|
||||
|
||||
return selector, nil
|
||||
}
|
||||
|
||||
// NewDeployToK8sSelector returns a selector to get documents that are to be deployed
|
||||
// to kubernetes cluster.
|
||||
func NewDeployToK8sSelector() Selector {
|
||||
return NewSelector().ByAnnotation(DeployToK8sSelector)
|
||||
}
|
||||
|
@ -60,3 +60,21 @@ func TestSelectorsNegative(t *testing.T) {
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestSelectorsSkip(t *testing.T) {
|
||||
// These two tests take bundle with two malformed documents
|
||||
// each of the documents will fail at different locations providing higher
|
||||
// test coverage
|
||||
bundle := testutil.NewTestBundle(t, "testdata/selectors/exclude-from-k8s")
|
||||
|
||||
t.Run("TestNewEphemeralNetworkDataSelectorErr", func(t *testing.T) {
|
||||
selector := document.NewDeployToK8sSelector()
|
||||
docs, err := bundle.Select(selector)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, docs, 5)
|
||||
for _, doc := range docs {
|
||||
assert.NotEqual(t, "ignore-namespace", doc.GetName())
|
||||
assert.NotEqual(t, "ignore-bmh", doc.GetName())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
55
pkg/document/testdata/selectors/exclude-from-k8s/deploy-resources.yaml
vendored
Normal file
55
pkg/document/testdata/selectors/exclude-from-k8s/deploy-resources.yaml
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
## These file provides 3 resource that are to be deployed to k8s
|
||||
## Because they dont have airshipit.org/deploy-k8s: "false" label
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
airshipit.org/clustertype: target
|
||||
labels:
|
||||
app: workflow-controller
|
||||
arbitrary-label: some-label
|
||||
name: workflow-controller
|
||||
namespace: argo-namespace
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: workflow-controller
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: workflow-controller
|
||||
spec:
|
||||
containers:
|
||||
- args:
|
||||
- --configmap
|
||||
- workflow-controller-configmap
|
||||
- --executor-image
|
||||
- argoproj/argoexec:v2.3.0
|
||||
command:
|
||||
- workflow-controller
|
||||
image: argoproj/workflow-controller:v2.3.0
|
||||
name: workflow-controller
|
||||
serviceAccountName: argo
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
airshipit.org/clustertype: target
|
||||
name: workflows.argoproj.io
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: Workflow
|
||||
plural: workflows
|
||||
shortNames:
|
||||
- wf
|
||||
scope: Namespaced
|
||||
version: v1alpha1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: argo-namespace
|
||||
...
|
26
pkg/document/testdata/selectors/exclude-from-k8s/ignore-resources.yaml
vendored
Normal file
26
pkg/document/testdata/selectors/exclude-from-k8s/ignore-resources.yaml
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
## This file provides 2 resources that should be filtered out by DeplyToK8s selector
|
||||
## because they have airshipit.org/deploy-k8s: "false" airshipit.org/deploy-k8s: "False"
|
||||
## labels
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/local-config: "true"
|
||||
name: ignore-namespace
|
||||
---
|
||||
apiVersion: metal3.io/v1alpha1
|
||||
kind: BareMetalHost
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/local-config: "true"
|
||||
name: ignore-bmh
|
||||
spec:
|
||||
online: true
|
||||
bootMACAddress: 00:3b:8b:0c:ec:8b
|
||||
bmc:
|
||||
address: ipmi://192.168.111.1:6230
|
||||
credentialsName: master-0-bmc-secret
|
||||
networkData:
|
||||
namespace: validNamespace
|
||||
...
|
4
pkg/document/testdata/selectors/exclude-from-k8s/kustomization.yaml
vendored
Normal file
4
pkg/document/testdata/selectors/exclude-from-k8s/kustomization.yaml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
resources:
|
||||
- ignore-resources.yaml
|
||||
- deploy-resources.yaml
|
||||
- more-deploy-resources.yaml
|
27
pkg/document/testdata/selectors/exclude-from-k8s/more-deploy-resources.yaml
vendored
Normal file
27
pkg/document/testdata/selectors/exclude-from-k8s/more-deploy-resources.yaml
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
## This file provides 2 resource that are to be deployed to k8s
|
||||
## Because they dont have airshipit.org/deploy-k8s: "false" label
|
||||
---
|
||||
apiVersion: metal3.io/v1alpha1
|
||||
kind: BareMetalHost
|
||||
metadata:
|
||||
annotations:
|
||||
airshipit.org/clustertype: target
|
||||
name: include-machine
|
||||
spec:
|
||||
online: true
|
||||
bootMACAddress: 01:3b:8b:0c:ec:8b
|
||||
bmc:
|
||||
address: ipmi://192.168.111.2:6230
|
||||
credentialsName: master-1-bmc-secret
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
airshipit.org/clustertype: target
|
||||
name: include-machine-secret
|
||||
type: Opaque
|
||||
data:
|
||||
username: YWRtaW4=
|
||||
password: cGFzc3dvcmQ=
|
||||
...
|
Loading…
x
Reference in New Issue
Block a user