Merge "Add selector to filter docs to be deplyed to k8s"

This commit is contained in:
Zuul 2020-03-26 18:26:53 +00:00 committed by Gerrit Code Review
commit 868700c98d
10 changed files with 149 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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)
}

View File

@ -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())
}
})
}

View 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
...

View 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
...

View File

@ -0,0 +1,4 @@
resources:
- ignore-resources.yaml
- deploy-resources.yaml
- more-deploy-resources.yaml

View 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=
...