Add selector to filter docs to be deplyed to k8s
By default every document is to be deployed to kubernetes however some documents may need to be skipped, because they serve only informational purposes and have no consumers in kubernetes cluster Change-Id: If2ea5659acb319c15cf3f55e9f3d9e86dc647e9f Relates-To: #130 Closes: #130
This commit is contained in:
parent
7a2d01789e
commit
ad1e160c1a
@ -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