Skip to content

Commit 24c0901

Browse files
committed
Migration of Kuttl tests to Chainsaw
Chainsaw makes it easier to write complex operator tests, especially those that require sequenced actions and interaction with statefulset pods or pod logs. The majority of kuttl tests have been rewritten for chainsaw, additional tests will follow in subsequent PR. Jira: OSPRH-13839
1 parent cd27e92 commit 24c0901

20 files changed

+726
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
apiVersion: mariadb.openstack.org/v1beta1
2+
kind: Galera
3+
metadata:
4+
name: openstack
5+
spec:
6+
replicas: ($replicas)
7+
secret: osp-secret
8+
storageRequest: 500M
9+
status:
10+
bootstrapped: true
11+
conditions:
12+
- message: Setup complete
13+
reason: Ready
14+
status: "True"
15+
type: Ready
16+
- message: Create service completed
17+
reason: Ready
18+
status: "True"
19+
type: CreateServiceReady
20+
- message: Deployment completed
21+
reason: Ready
22+
status: "True"
23+
type: DeploymentReady
24+
- message: Input data complete
25+
reason: Ready
26+
status: "True"
27+
type: InputReady
28+
- message: RoleBinding created
29+
reason: Ready
30+
status: "True"
31+
type: RoleBindingReady
32+
- message: Role created
33+
reason: Ready
34+
status: "True"
35+
type: RoleReady
36+
- message: ServiceAccount created
37+
reason: Ready
38+
status: "True"
39+
type: ServiceAccountReady
40+
- message: Service config create completed
41+
reason: Ready
42+
status: "True"
43+
type: ServiceConfigReady
44+
- message: Input data complete
45+
reason: Ready
46+
status: "True"
47+
type: TLSInputReady
48+
---
49+
apiVersion: apps/v1
50+
kind: StatefulSet
51+
metadata:
52+
name: openstack-galera
53+
spec:
54+
replicas: ($replicas)
55+
selector:
56+
matchLabels:
57+
app: galera
58+
cr: galera-openstack
59+
galera/name: openstack
60+
serviceName: openstack-galera
61+
template:
62+
metadata:
63+
labels:
64+
app: galera
65+
cr: galera-openstack
66+
galera/name: openstack
67+
spec:
68+
containers:
69+
- command:
70+
- /usr/bin/dumb-init
71+
- --
72+
- /usr/local/bin/kolla_start
73+
name: galera
74+
ports:
75+
- containerPort: 3306
76+
name: mysql
77+
protocol: TCP
78+
- containerPort: 4567
79+
name: galera
80+
protocol: TCP
81+
serviceAccount: galera-openstack
82+
serviceAccountName: galera-openstack
83+
status:
84+
availableReplicas: ($replicas)
85+
readyReplicas: ($replicas)
86+
replicas: ($replicas)
87+
---
88+
apiVersion: v1
89+
kind: Service
90+
metadata:
91+
name: openstack-galera
92+
spec:
93+
ports:
94+
- name: mysql
95+
port: 3306
96+
protocol: TCP
97+
targetPort: 3306
98+
selector:
99+
app: galera
100+
cr: galera-openstack
101+
---
102+
apiVersion: v1
103+
kind: Service
104+
metadata:
105+
name: openstack
106+
spec:
107+
selector:
108+
statefulset.kubernetes.io/pod-name:
109+
(starts_with(@, 'openstack-galera-')): true
110+
---
111+
apiVersion: v1
112+
kind: Endpoints
113+
metadata:
114+
name: openstack-galera
115+
---
116+
apiVersion: v1
117+
kind: ConfigMap
118+
metadata:
119+
name: openstack-config-data
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: mariadb.openstack.org/v1beta1
2+
kind: Galera
3+
metadata:
4+
name: openstack
5+
spec:
6+
replicas: ($replicas)
7+
secret: osp-secret
8+
storageClass: local-storage
9+
storageRequest: 500M
10+
tls:
11+
caBundleSecretName: galera-cert
12+
secretName: galera-cert

tests/chainsaw/common/galera.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: mariadb.openstack.org/v1beta1
2+
kind: Galera
3+
metadata:
4+
name: openstack
5+
spec:
6+
replicas: ($replicas)
7+
secret: osp-secret
8+
storageClass: local-storage
9+
storageRequest: 500M
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# hardcode the secret generated by the certificate CR below,
2+
# to avoid chainsaw from depending on cert-manager at runtime
3+
# the ca.crt key has been renamed to tls-ca-bundle.pem
4+
# ---
5+
# apiVersion: cert-manager.io/v1
6+
# kind: Certificate
7+
# metadata:
8+
# name: galera-cert
9+
# spec:
10+
# secretName: galera-cert
11+
# duration: 12720h
12+
# renewBefore: 1h
13+
# subject:
14+
# organizations:
15+
# - cluster.local
16+
# commonName: openstack-galera
17+
# isCA: false
18+
# privateKey:
19+
# algorithm: RSA
20+
# encoding: PKCS8
21+
# size: 2048
22+
# usages:
23+
# - server auth
24+
# - client auth
25+
# dnsNames:
26+
# - "openstack.openstack.svc"
27+
# - "openstack.openstack.svc.cluster.local"
28+
# - "*.openstack-galera"
29+
# - "*.openstack-galera.openstack"
30+
# - "*.openstack-galera.openstack.svc"
31+
# - "*.openstack-galera.openstack.svc.cluster"
32+
# - "*.openstack-galera.openstack.svc.cluster.local"
33+
# issuerRef:
34+
# name: ca-issuer
35+
# group: cert-manager.io
36+
# kind: Issuer
37+
# ---
38+
apiVersion: v1
39+
kind: Secret
40+
metadata:
41+
name: galera-cert
42+
data:
43+
tls-ca-bundle.pem: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmRENDQVNLZ0F3SUJBZ0lRSlUrQTRBYUpDRFowRDYzbDF5UXNFVEFLQmdncWhrak9QUVFEQWpBZU1Sd3cKR2dZRFZRUURFeE5yZFhSMGJDMXpaV3htYzJsbmJtVmtMV05oTUI0WERUSTBNREV4T0RFek1UazBNbG9YRFRJMQpNRGN3TVRFek1UazBNbG93SGpFY01Cb0dBMVVFQXhNVGEzVjBkR3d0YzJWc1puTnBaMjVsWkMxallUQlpNQk1HCkJ5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSTJKUWdYME1oZUNHSjQ2OHFSNE9wMGJYWGFuTWZSMWRpd3EKR1VtcXlrM20vdHVNZ2hxZlJNNmdWYXFpekNLMjQyNjJUL2dIamdsaDNJTEQ4UnByQXFlalFqQkFNQTRHQTFVZApEd0VCL3dRRUF3SUNwREFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlFMbThjamY3dmc5ZjRxCjdsMzVmN1YxUXNsRDlqQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQUZkdEhUbkdiMWtQVlJlZmcvbmNHaThoR2UKVlh5UVZycFJjRStNSXZMeUpRSWhBS2VLZHNleE9LUElQSDVOT0VBUHNxOTQ5cWlFVHU4ZlJEVUdkanozSkZSKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
44+
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURhekNDQXhHZ0F3SUJBZ0lSQUoranowQ1p5aGV5Nk5tVWxTZnBoVUF3Q2dZSUtvWkl6ajBFQXdJd0hqRWMKTUJvR0ExVUVBeE1UYTNWMGRHd3RjMlZzWm5OcFoyNWxaQzFqWVRBZUZ3MHlOREF4TVRneE16STFNekJhRncweQpOVEEzTURFeE16STFNekJhTURNeEZqQVVCZ05WQkFvVERXTnNkWE4wWlhJdWJHOWpZV3d4R1RBWEJnTlZCQU1UCkVHOXdaVzV6ZEdGamF5MW5ZV3hsY21Fd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUIKQVFEUTBmeFVYZVFvRTVhOGNmb1hTYXBpbmM2dDhHaTI2UFNrQW5kSDVXWG5jQVVmWFU1dEVqdkpWTVlPSmc2Rwp0amtyaHBTbjljL0JNTFlGUldKN2YxYVE1WXlpUTFKMkNYYjN1VlJPNTV3a3VZbmtJQ2Z0QjdERDVWTWVNQ3VDCkhZV0JqZm1vci94L3FLcGcrZ1BBV3NsY25VS245bFBudGRSQXFrU0hFM2lWRzNoR3R2ZDR4YWZ6eGt5bnJheGMKaU9pLysyVVUyeXlnTG0wM1AxRno0RU5BaUhNaVk4RTgxcGUrSit1OC9WMXNxaVNBdkg2b2RlR1Q2S2hrS2kwbworVnlwcGx2dnM4RnFTdUswRk9HbmhnbFhTWDRwZWM4V2ZCdVJXY2djMU9MbGtLMWJPb25ERzlIeVFabi85VWJwCi9wSTdZem5nU3R4TWhEMW56TmRnUTJJVEFnTUJBQUdqZ2dGT01JSUJTakFkQmdOVkhTVUVGakFVQmdnckJnRUYKQlFjREFRWUlLd1lCQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCUUxtOGNqZjd2Zwo5ZjRxN2wzNWY3VjFRc2xEOWpDQitRWURWUjBSQklIeE1JSHVnaGR2Y0dWdWMzUmhZMnN1YjNCbGJuTjBZV05yCkxuTjJZNElsYjNCbGJuTjBZV05yTG05d1pXNXpkR0ZqYXk1emRtTXVZMngxYzNSbGNpNXNiMk5oYklJU0tpNXYKY0dWdWMzUmhZMnN0WjJGc1pYSmhnaHdxTG05d1pXNXpkR0ZqYXkxbllXeGxjbUV1YjNCbGJuTjBZV05yZ2lBcQpMbTl3Wlc1emRHRmpheTFuWVd4bGNtRXViM0JsYm5OMFlXTnJMbk4yWTRJb0tpNXZjR1Z1YzNSaFkyc3RaMkZzClpYSmhMbTl3Wlc1emRHRmpheTV6ZG1NdVkyeDFjM1JsY29JdUtpNXZjR1Z1YzNSaFkyc3RaMkZzWlhKaExtOXcKWlc1emRHRmpheTV6ZG1NdVkyeDFjM1JsY2k1c2IyTmhiREFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUJ6Q1RGbgoyc1BVRHNvTFdYNy9nMlZDbjBsVEtjWVRLdkg3OGtDbUhXK3R6d0loQUxMa1hENWUvZ1hwNVF2UlYvNlhIbk15CjJ2YU5UQStLQXZicnFaR3JLRCtzCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
45+
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFEwZnhVWGVRb0U1YTgKY2ZvWFNhcGluYzZ0OEdpMjZQU2tBbmRINVdYbmNBVWZYVTV0RWp2SlZNWU9KZzZHdGprcmhwU245Yy9CTUxZRgpSV0o3ZjFhUTVZeWlRMUoyQ1hiM3VWUk81NXdrdVlua0lDZnRCN0RENVZNZU1DdUNIWVdCamZtb3IveC9xS3BnCitnUEFXc2xjblVLbjlsUG50ZFJBcWtTSEUzaVZHM2hHdHZkNHhhZnp4a3lucmF4Y2lPaS8rMlVVMnl5Z0xtMDMKUDFGejRFTkFpSE1pWThFODFwZStKK3U4L1Yxc3FpU0F2SDZvZGVHVDZLaGtLaTBvK1Z5cHBsdnZzOEZxU3VLMApGT0duaGdsWFNYNHBlYzhXZkJ1UldjZ2MxT0xsa0sxYk9vbkRHOUh5UVpuLzlVYnAvcEk3WXpuZ1N0eE1oRDFuCnpOZGdRMklUQWdNQkFBRUNnZ0VBSVNxSTRqbDdhR1ljRmRnZ2VaeG9wSHNkL1lCbWtVNlV0SXZ6dUFhV1ZkanoKNTFSaGhXOVU4WmcyVUw3NHBhckJqOGt6U1M0QWpsV1hRMlVPekVDZ1Zpa3ZXZ0pKVVpnVlBpbEFXN3ZyaitXcwpJZ0I5ZHVjMnl4WmNTam9xWHVNamRqMC9mdXhjdFVYcnNiVmo3U1ErUVNoMUVzcEw3MHh3NXNoa1UvUGl2Z095Ck4rbHh5UFhCK0RxVGdYSDRpVmQxbHNsaXpCbjB6d0VDb2d5V0RoVEg2d1pVYTBLWDNSVk1CcEhZTEZpdXBGZmgKWU9nbExIa2JDTmtzRXg3Zlg3Rks5eUVmQUxEeGZXSkVpQXRheGpEeng2NmVucFoyVWQzNU91MkNwYVdZbHNjNQpoOUNZRkRjeTVnYmZrL0xKdHFmZ2E0OVg4OUtBeXJrcDlUMS9McTNkU1FLQmdRRFU3dGRMUzVMeDJvUUx2Qi9vCk43ZFlWVGxXZW1BUWpqMFk0RHhVZmNOVE1oUmV6N01FM1dTcFlHYS9CWjNwQjROVGdhcG1qeEdqL2MveGZ3MHUKSG5pd2dFQU5vby9jNHNGVHJlWFBqNnYwbUdvbTZFcHd5UC9GL1NWNnFMVWNGS3piUFVtRTRnd3FtRWRiUjVZZwpsVCtzdHdOZ2czS3gwQW5sR1VucEcvODVIUUtCZ1FEN0RqSzFyejBFbW5aNU1OOXhrdUNYdzcxMzJxMTB1NWpsCjR1WEVqUG92cjZsamM4c3lMOEROUGNMSGxLWkpOUTZyL011T1ovekpDVGRvNWw1dDB0UnNnSFhyZktIN2NXN20KbUpocFk0amZQT0g5VlYveHFaVllGd2JXcVFVaXFtM290OHlTdmhzcE0rbFZmNnhiNHRYOUVVZWl5TWJXTEE1bwp4bGpwNG5SUTd3S0JnUUMrRUJyNFNKTDNjbmNmQ21Mb29xTHpJODgwVTdOZjA3YlJkNFlpWE1kMmdXTVJaZytECkxpTGwxUGloVldBb1d0NXNNWGRxYUJYMDdWOHBUcUR6STV2UzRBZE1wR2dKWUJYMG5XcGVKUDMySy8zRWtOK3gKWUpoOW40Sk94RHcwdm5lMGtqWUhlTVluVnhtS2JwR2dyOWZRVU9PZ3lIUWVKM1pObW84UWxqN3dPUUtCZ1FEQgpXbHYveGFqdTVLK2VBdC8wTHJTKzdjZjhpUFRTVkxFYlREYTl1LzNyd0JSclBnRWU4OXcvdGZOUGx0TEN5eFF6CnJZeHdidkluT3V2cjVKQ1JjTENkcUFvcGhXR1RyL2REcmY2a0hENkwvKzNsR0YyK1YyZG40c1FuaXlFalk3TW0KYW5ncUJEUVM5YUlkY1NrajAzNFBXOEdhUTV1djAxcDlvMVZUUEU5dERRS0JnSGlsbDhpMXIydFdrQUsxTERRbwpYWlRJUnNrb0dUaGFLbVNkNnNLMkxQK0xOMFZ0R3NZem5salhSYldWOE9ubHdUMThTWWhCbFRaNnVrN29GMTFKCmdJYzIwZEs1UUkzcVJoa3JoT21FaGlqTHI3ZkJIei9XRTVvbFppR1locHZJcDZ4QWlpN3BHNlIxYzJZUmtZUnkKY0lvanpYNm5zVmpDeUYrNTNabjJNdExKCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K # notsecret

tests/chainsaw/config.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: chainsaw.kyverno.io/v1alpha2
2+
kind: Configuration
3+
metadata:
4+
name: config
5+
spec:
6+
timeouts:
7+
assert: 180s
8+
delete: 180s
9+
cleanup: 180s
10+
exec: 60s
11+
execution:
12+
failFast: true
13+
parallel: 1
14+
deletion:
15+
propagation: Foreground

tests/chainsaw/scripts/connect.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
PID=
3+
connect() {
4+
exec 6>&- 7<&-
5+
stdbuf -oL mysql --verbose -uroot -p$DB_ROOT_PASSWORD -h openstack -sN --raw --batch </tmp/cmd >/tmp/out &
6+
exec 6> /tmp/cmd 7< /tmp/out
7+
PID=$!
8+
}
9+
last=""
10+
mkfifo /tmp/cmd /tmp/out
11+
while true; do
12+
kill -0 $PID 2>/dev/null || connect
13+
echo "show variables like 'wsrep_node_name';" >&6
14+
# read 4 status line before the mysql answer
15+
for i in `seq 5`; do
16+
read -r out <&7;
17+
done
18+
out=$(echo "$out" | sed -ne 's/^wsrep_.*\t//p')
19+
if [ -n "$out" -a "$out" != "$last" ]; then
20+
last=$out
21+
echo $last
22+
fi
23+
sleep 0.5
24+
done
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash
2+
set -u
3+
ARGS=$1
4+
SQL=$2
5+
CMD="mysql -uroot -p\$DB_ROOT_PASSWORD $ARGS \"$SQL\""
6+
oc exec -n ${NAMESPACE} -c galera openstack-galera-0 -- /bin/sh -c "$CMD"
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
apiVersion: mariadb.openstack.org/v1beta1
3+
kind: MariaDBAccount
4+
metadata:
5+
labels:
6+
mariaDBDatabaseName: testdb-accounttest
7+
name: testdb-some-db-account
8+
status:
9+
conditions:
10+
- message: Setup complete
11+
reason: Ready
12+
status: "True"
13+
type: Ready
14+
- message: MariaDBAccount creation complete
15+
reason: Ready
16+
status: "True"
17+
type: MariaDBAccountReady
18+
- message: MariaDBDatabase ready
19+
reason: Ready
20+
status: "True"
21+
type: MariaDBDatabaseReady
22+
- message: MariaDB / Galera server ready
23+
reason: Ready
24+
status: "True"
25+
type: MariaDBServerReady
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
apiVersion: mariadb.openstack.org/v1beta1
3+
kind: MariaDBAccount
4+
metadata:
5+
labels:
6+
mariaDBDatabaseName: testdb-accounttest
7+
name: testdb-some-db-account
8+
status:
9+
conditions:
10+
# message: 'MariaDBAccount secret is missing or incomplete: Secret $NAMESPACE/some-db-secret not found'
11+
- reason: SecretMissing
12+
severity: Info
13+
status: "False"
14+
type: Ready
15+
# message: 'MariaDBAccount secret is missing or incomplete: Secret $NAMESPACE/some-db-secret not found'
16+
- reason: SecretMissing
17+
severity: Info
18+
status: "False"
19+
type: MariaDBAccountReady
20+
- message: MariaDBDatabase ready
21+
reason: Ready
22+
status: "True"
23+
type: MariaDBDatabaseReady
24+
- message: MariaDB / Galera server ready
25+
reason: Ready
26+
status: "True"
27+
type: MariaDBServerReady
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
data:
3+
DatabasePassword: ZGJzZWNyZXQx
4+
kind: Secret
5+
metadata:
6+
name: some-db-secret
7+
type: Opaque

0 commit comments

Comments
 (0)