From 728eae1872a827977b35f453eb624075954987f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 18 May 2022 18:01:03 +0200 Subject: [PATCH 1/6] Adapt operator to behave in accordance with ADR18. This contains a breaking change, since the version that is specified for NiFi now has to include a stackable image version. --- CHANGELOG.md | 2 ++ docs/modules/ROOT/pages/config_properties.adoc | 2 +- docs/modules/ROOT/pages/usage.adoc | 9 +++++++-- examples/simple-nifi-cluster.yaml | 4 ++-- rust/operator-binary/src/controller.rs | 5 +---- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78ac2a5c..b96724e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. ### Changed - `operator-rs` `0.10.0` -> `0.15.0` ([#218], [#223], [#230]). +- [BREAKING] Specifying the product version has been changed to adhere to [ADR018](https://docs.stackable.tech/home/contributor/adr/ADR018-product_image_versioning.html) instead of just specifying the product version you will now have to add the Stackable image version as well, so `version: 3.5.8` becomes (for example) `version: 3.5.8-stackable0.1.0` ([#270]) ### Removed @@ -23,6 +24,7 @@ All notable changes to this project will be documented in this file. [#218]: https://github.com/stackabletech/nifi-operator/pull/218 [#223]: https://github.com/stackabletech/nifi-operator/pull/223 [#230]: https://github.com/stackabletech/nifi-operator/pull/230 +[#270]: https://github.com/stackabletech/nifi-operator/pull/270 ## [0.5.0] - 2022-02-14 diff --git a/docs/modules/ROOT/pages/config_properties.adoc b/docs/modules/ROOT/pages/config_properties.adoc index d075a709..ced51591 100644 --- a/docs/modules/ROOT/pages/config_properties.adoc +++ b/docs/modules/ROOT/pages/config_properties.adoc @@ -9,7 +9,7 @@ kind: NifiCluster metadata: name: simple-nifi spec: - version: "1.15.0" + version: "1.15.0-stackable0.4.0" zookeeperConfigMapName: simple-nifi-znode authenticationConfig: method: diff --git a/docs/modules/ROOT/pages/usage.adoc b/docs/modules/ROOT/pages/usage.adoc index 4ab62a61..0b44c162 100644 --- a/docs/modules/ROOT/pages/usage.adoc +++ b/docs/modules/ROOT/pages/usage.adoc @@ -4,7 +4,12 @@ If you are not installing the operator using Helm then after installation the CR kubectl apply -f deploy/nificluster.yaml -To create a three-node Apache NiFi (v1.15.0) cluster with SingleUser authentication enabled apply the following to your Kubernetes cluster. +To create a three-node Apache NiFi cluster with SingleUser authentication enabled apply the following to your Kubernetes cluster. + +Please note that the version you need to specify is not only the version of NiFi which you want to roll out, but has to be amended with a Stackable version as shown. +This Stackable version is the version of the underlying container image which is used to execute the processes. +For a list of available versions please check our https://repo.stackable.tech/#browse/browse:docker:v2%2Fstackable%2Fnifi%2Ftags[image registry]. +It should generally be safe to simply use the latest image version that is available. The admin credentials that you can then log in with are: `admin:supersecretpassword` @@ -22,7 +27,7 @@ kind: NifiCluster metadata: name: simple-nifi spec: - version: "1.15.0" + version: "1.15.0-stackable0.4.0" zookeeperConfigMapName: simple-nifi-znode authenticationConfig: method: diff --git a/examples/simple-nifi-cluster.yaml b/examples/simple-nifi-cluster.yaml index e0e3c5b9..24319e18 100644 --- a/examples/simple-nifi-cluster.yaml +++ b/examples/simple-nifi-cluster.yaml @@ -6,7 +6,7 @@ kind: ZookeeperCluster metadata: name: simple-zk spec: - version: 3.5.8 + version: 3.5.8-stackable0.7.0 servers: roleGroups: default: @@ -37,7 +37,7 @@ kind: NifiCluster metadata: name: simple-nifi spec: - version: "1.15.0" + version: "1.15.0-stackable0.4.0" zookeeperConfigMapName: simple-nifi-znode authenticationConfig: method: diff --git a/rust/operator-binary/src/controller.rs b/rust/operator-binary/src/controller.rs index be2cbc06..a95fcde3 100644 --- a/rust/operator-binary/src/controller.rs +++ b/rust/operator-binary/src/controller.rs @@ -527,10 +527,7 @@ fn build_node_rolegroup_statefulset( .get(&rolegroup_ref.role_group); let nifi_version = nifi_version(nifi)?; - let image = format!( - "docker.stackable.tech/stackable/nifi:{}-stackable0", - nifi_version - ); + let image = format!("docker.stackable.tech/stackable/nifi:{}", nifi_version); let node_address = format!( "$POD_NAME.{}-node-{}.{}.svc.cluster.local", From e2f5cb4e10830fe7e09a679e0053c93b7985811f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 25 May 2022 22:40:26 +0200 Subject: [PATCH 2/6] Moved integration tests back into this repository and templated them to run with the following versions: - zookeeper - 3.5.8-stackable0.7.0 - 3.6.3-stackable0.7.0 - 3.7.0-stackable0.7.0 - 3.8.0-stackable0.7.0 - nifi - 1.15.0-stackable0.4.0 --- tests/templates/.gitkeep | 0 tests/templates/kuttl/smoke/00-assert.yaml | 8 +++ .../kuttl/smoke/00-install-zk.yaml.j2 | 22 +++++++ tests/templates/kuttl/smoke/01-assert.yaml | 14 +++++ .../kuttl/smoke/01-install-nifi.yaml.j2 | 41 +++++++++++++ tests/templates/kuttl/smoke/02-assert.yaml | 8 +++ .../kuttl/smoke/02-scale-up-nifi.yaml.j2 | 25 ++++++++ tests/templates/kuttl/smoke/03-assert.yaml | 14 +++++ .../kuttl/smoke/03-install-test-nifi.yaml | 22 +++++++ tests/templates/kuttl/smoke/04-assert.yaml | 8 +++ .../kuttl/smoke/04-prepare-test-nifi.yaml | 8 +++ tests/templates/kuttl/smoke/05-assert.yaml | 38 ++++++++++++ .../kuttl/smoke/05-enable-anonymous.yaml.j2 | 30 +++++++++ tests/templates/kuttl/smoke/cacert.pem | 20 ++++++ tests/templates/kuttl/smoke/requirements.txt | 1 + tests/templates/kuttl/smoke/test_nifi.py | 61 +++++++++++++++++++ .../kuttl/smoke/test_nifi_metrics.py | 44 +++++++++++++ tests/test-definition.yaml | 17 ++++++ 18 files changed, 381 insertions(+) delete mode 100644 tests/templates/.gitkeep create mode 100644 tests/templates/kuttl/smoke/00-assert.yaml create mode 100644 tests/templates/kuttl/smoke/00-install-zk.yaml.j2 create mode 100644 tests/templates/kuttl/smoke/01-assert.yaml create mode 100644 tests/templates/kuttl/smoke/01-install-nifi.yaml.j2 create mode 100644 tests/templates/kuttl/smoke/02-assert.yaml create mode 100644 tests/templates/kuttl/smoke/02-scale-up-nifi.yaml.j2 create mode 100644 tests/templates/kuttl/smoke/03-assert.yaml create mode 100644 tests/templates/kuttl/smoke/03-install-test-nifi.yaml create mode 100644 tests/templates/kuttl/smoke/04-assert.yaml create mode 100644 tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml create mode 100644 tests/templates/kuttl/smoke/05-assert.yaml create mode 100644 tests/templates/kuttl/smoke/05-enable-anonymous.yaml.j2 create mode 100644 tests/templates/kuttl/smoke/cacert.pem create mode 100644 tests/templates/kuttl/smoke/requirements.txt create mode 100755 tests/templates/kuttl/smoke/test_nifi.py create mode 100755 tests/templates/kuttl/smoke/test_nifi_metrics.py create mode 100644 tests/test-definition.yaml diff --git a/tests/templates/.gitkeep b/tests/templates/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/templates/kuttl/smoke/00-assert.yaml b/tests/templates/kuttl/smoke/00-assert.yaml new file mode 100644 index 00000000..22642c22 --- /dev/null +++ b/tests/templates/kuttl/smoke/00-assert.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-zk-server-default +status: + readyReplicas: 1 + replicas: 1 diff --git a/tests/templates/kuttl/smoke/00-install-zk.yaml.j2 b/tests/templates/kuttl/smoke/00-install-zk.yaml.j2 new file mode 100644 index 00000000..0c75b592 --- /dev/null +++ b/tests/templates/kuttl/smoke/00-install-zk.yaml.j2 @@ -0,0 +1,22 @@ +--- +apiVersion: zookeeper.stackable.tech/v1alpha1 +kind: ZookeeperCluster +metadata: + name: test-zk +spec: + servers: + roleGroups: + default: + replicas: 1 + config: + myidOffset: 10 + version: {{ test_scenario['values']['zookeeper'] }} + stopped: false +--- +apiVersion: zookeeper.stackable.tech/v1alpha1 +kind: ZookeeperZnode +metadata: + name: test-nifi-znode +spec: + clusterRef: + name: test-zk \ No newline at end of file diff --git a/tests/templates/kuttl/smoke/01-assert.yaml b/tests/templates/kuttl/smoke/01-assert.yaml new file mode 100644 index 00000000..c2ea8487 --- /dev/null +++ b/tests/templates/kuttl/smoke/01-assert.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: install-nifi +timeout: 1200 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi-node-default +status: + readyReplicas: 2 + replicas: 2 diff --git a/tests/templates/kuttl/smoke/01-install-nifi.yaml.j2 b/tests/templates/kuttl/smoke/01-install-nifi.yaml.j2 new file mode 100644 index 00000000..37e58921 --- /dev/null +++ b/tests/templates/kuttl/smoke/01-install-nifi.yaml.j2 @@ -0,0 +1,41 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: nifi-admin-credentials-simple +stringData: + username: admin + password: supersecretpassword +--- +apiVersion: v1 +kind: Secret +metadata: + name: nifi-sensitive-property-key +stringData: + nifiSensitivePropsKey: mYsUp3rS3cr3tk3y +--- +apiVersion: nifi.stackable.tech/v1alpha1 +kind: NifiCluster +metadata: + name: test-nifi +spec: + version: {{ test_scenario['values']['nifi'] }} + zookeeperConfigMapName: test-nifi-znode + authenticationConfig: + method: + SingleUser: + adminCredentialsSecret: + name: nifi-admin-credentials-simple + sensitivePropertiesConfig: + keySecret: nifi-sensitive-property-key + nodes: + roleGroups: + default: + selector: + matchLabels: + kubernetes.io/os: linux + config: + log: + rootLogLevel: INFO + replicas: 2 + diff --git a/tests/templates/kuttl/smoke/02-assert.yaml b/tests/templates/kuttl/smoke/02-assert.yaml new file mode 100644 index 00000000..3fb72f54 --- /dev/null +++ b/tests/templates/kuttl/smoke/02-assert.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi-node-default +status: + readyReplicas: 3 + replicas: 3 diff --git a/tests/templates/kuttl/smoke/02-scale-up-nifi.yaml.j2 b/tests/templates/kuttl/smoke/02-scale-up-nifi.yaml.j2 new file mode 100644 index 00000000..be8afadd --- /dev/null +++ b/tests/templates/kuttl/smoke/02-scale-up-nifi.yaml.j2 @@ -0,0 +1,25 @@ +--- +apiVersion: nifi.stackable.tech/v1alpha1 +kind: NifiCluster +metadata: + name: test-nifi +spec: + version: {{ test_scenario['values']['nifi'] }} + zookeeperConfigMapName: test-nifi-znode + authenticationConfig: + method: + SingleUser: + adminCredentialsSecret: + name: nifi-admin-credentials-simple + sensitivePropertiesConfig: + keySecret: nifi-sensitive-property-key + nodes: + roleGroups: + default: + selector: + matchLabels: + kubernetes.io/os: linux + config: + log: + rootLogLevel: INFO + replicas: 3 diff --git a/tests/templates/kuttl/smoke/03-assert.yaml b/tests/templates/kuttl/smoke/03-assert.yaml new file mode 100644 index 00000000..e9a9ca5c --- /dev/null +++ b/tests/templates/kuttl/smoke/03-assert.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: install-test-nifi +timeout: 300 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi +status: + readyReplicas: 1 + replicas: 1 diff --git a/tests/templates/kuttl/smoke/03-install-test-nifi.yaml b/tests/templates/kuttl/smoke/03-install-test-nifi.yaml new file mode 100644 index 00000000..34b79461 --- /dev/null +++ b/tests/templates/kuttl/smoke/03-install-test-nifi.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi + labels: + app: test-nifi +spec: + replicas: 1 + selector: + matchLabels: + app: test-nifi + template: + metadata: + labels: + app: test-nifi + spec: + containers: + - name: test-nifi + image: python:3.10-slim + stdin: true + tty: true diff --git a/tests/templates/kuttl/smoke/04-assert.yaml b/tests/templates/kuttl/smoke/04-assert.yaml new file mode 100644 index 00000000..62ebacc2 --- /dev/null +++ b/tests/templates/kuttl/smoke/04-assert.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: test-nifi +commands: + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi.py -u admin -p supersecretpassword -n $NAMESPACE + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE diff --git a/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml b/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml new file mode 100644 index 00000000..82396fa2 --- /dev/null +++ b/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml @@ -0,0 +1,8 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - script: kubectl cp -n $NAMESPACE ./test_nifi_metrics.py test-nifi-0:/tmp + - script: kubectl cp -n $NAMESPACE ./test_nifi.py test-nifi-0:/tmp + - script: kubectl cp -n $NAMESPACE ./cacert.pem test-nifi-0:/tmp + - script: kubectl cp -n $NAMESPACE ./requirements.txt test-nifi-0:/tmp + - script: kubectl exec -n $NAMESPACE test-nifi-0 -- pip install --user -r /tmp/requirements.txt diff --git a/tests/templates/kuttl/smoke/05-assert.yaml b/tests/templates/kuttl/smoke/05-assert.yaml new file mode 100644 index 00000000..3a857787 --- /dev/null +++ b/tests/templates/kuttl/smoke/05-assert.yaml @@ -0,0 +1,38 @@ +--- +apiVersion: v1 +kind: Event +reason: Started +source: + component: kubelet +involvedObject: + apiVersion: v1 + kind: Pod + name: test-nifi-node-default-0 +--- +apiVersion: v1 +kind: Event +reason: Started +source: + component: kubelet +involvedObject: + apiVersion: v1 + kind: Pod + name: test-nifi-node-default-1 +--- +apiVersion: v1 +kind: Event +reason: Started +source: + component: kubelet +involvedObject: + apiVersion: v1 + kind: Pod + name: test-nifi-node-default-2 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi-node-default +status: + readyReplicas: 3 + replicas: 3 diff --git a/tests/templates/kuttl/smoke/05-enable-anonymous.yaml.j2 b/tests/templates/kuttl/smoke/05-enable-anonymous.yaml.j2 new file mode 100644 index 00000000..f61680bd --- /dev/null +++ b/tests/templates/kuttl/smoke/05-enable-anonymous.yaml.j2 @@ -0,0 +1,30 @@ +--- +apiVersion: nifi.stackable.tech/v1alpha1 +kind: NifiCluster +metadata: + name: test-nifi +spec: + version: {{ test_scenario['values']['nifi'] }} + zookeeperConfigMapName: test-nifi-znode + authenticationConfig: + method: + SingleUser: + adminCredentialsSecret: + name: nifi-admin-credentials-simple + allowAnonymousAccess: true + nodes: + roleGroups: + default: + selector: + matchLabels: + kubernetes.io/os: linux + config: + sensitivePropertyKeySecret: nifi-sensitive-property-key + log: + rootLogLevel: INFO + replicas: 2 +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: + - command: kubectl rollout restart statefulset test-nifi-node-default --namespace $NAMESPACE diff --git a/tests/templates/kuttl/smoke/cacert.pem b/tests/templates/kuttl/smoke/cacert.pem new file mode 100644 index 00000000..ebe73910 --- /dev/null +++ b/tests/templates/kuttl/smoke/cacert.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIJAJ8/0entaUgnMA0GCSqGSIb3DQEBCwUAMCYxJDAiBgNV +BAMMG3NlY3JldC1vcGVyYXRvciBzZWxmLXNpZ25lZDAeFw0yMjAxMTIxNDU3NDVa +Fw0yNDAxMTIxNTAyNDVaMCYxJDAiBgNVBAMMG3NlY3JldC1vcGVyYXRvciBzZWxm +LXNpZ25lZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLKNGhq5gE+ +mL9zFCLqtc22CLk8BSbjesjUEhBK3kxDvFDa2ou5atH0eUFjtOSszay2oBrCTVWK +wZBsdUkL0HkW/wq9A8EUkQ8EownXnsxpI61CLNGLPpBZc+CRHhyWDD6BqwGvEHEv +W546mh6k49//7zCiYfTK9/LCKBCFdDV6Sb7mNJ8HbNUj54uwC6iOgH25OCRDh4Bt +zXoSrV9GLAm6AM25ZFo+ONOUBMtv7pavaR0CFMnAixl2NKV2wyLBYAYnJgdJFzGD +8mP6HwuR7e2g7PkcyC01EnX4iOIuuKHT/Xl9ynut4nHI7g6popotgashrQ5Jf8MS +Kf98O12LzSMCAwEAAaOBhTCBgjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRf +U9OxCBwCqYiUjWqY05sz3a6cmjBABgNVHSMEOTA3oSqkKDAmMSQwIgYDVQQDDBtz +ZWNyZXQtb3BlcmF0b3Igc2VsZi1zaWduZWSCCQCfP9Hp7WlIJzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQELBQADggEBAA8Flk1XOb1pH33Mbie5ronP2xw/xf6t +Ox3PBEZ+5/jSPdIwoSaRp9JoP0L9Rg68jzcl5QMa4pOYWe+C1q8aZP0tjfq1eJfO +UD5ik2DQgEuoF1ELgW1xoM38vkd8wgE711swDHK2zAsOudSzO4XZ4rQ6kaXXtoej +2kFhxDYcC+na90LdkJM0kAqrjxlFaP7WgUK+HA2iN00CFSOI9FVdppLtootbcb+y ++WfXxM7gA9Exg4f2vKGVx7UxB/k4AbPvogBQZvK8VoAQocAhWrw7o2rqAesAw6JD +WwQjM69TlEfbHYXtTfMbi01Wi5TtVhFCjyXK6KDsqSgU+9McExIy70k= +-----END CERTIFICATE----- diff --git a/tests/templates/kuttl/smoke/requirements.txt b/tests/templates/kuttl/smoke/requirements.txt new file mode 100644 index 00000000..9cdfca0c --- /dev/null +++ b/tests/templates/kuttl/smoke/requirements.txt @@ -0,0 +1 @@ +requests==2.27.1 \ No newline at end of file diff --git a/tests/templates/kuttl/smoke/test_nifi.py b/tests/templates/kuttl/smoke/test_nifi.py new file mode 100755 index 00000000..658810aa --- /dev/null +++ b/tests/templates/kuttl/smoke/test_nifi.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +import requests +import json +import argparse + + +def get_token(username, password, namespace): + headers = { + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + } + + data = {'username': username, 'password': password} + + # TODO: handle actual errors when connecting properly + url = 'https://test-nifi-node-default-1.test-nifi-node-default.' + namespace + '.svc.cluster.local:8443/nifi-api/access/token' + response = requests.post(url, headers=headers, data=data, verify=False)#, cert='./tmp/cacert.pem') + + if response.ok: + token = response.content.decode('utf-8') + return "Bearer " + token + else: + print("Failed to get token: ", response.status_code, " - ", response.content) + exit(-1) + + +if __name__ == '__main__': + # Construct an argument parser + all_args = argparse.ArgumentParser() + + # Add arguments to the parser + all_args.add_argument("-u", "--user", required=True, + help="Username to connect as") + all_args.add_argument("-p", "--password", required=True, + help="Password for the user") + all_args.add_argument("-n", "--namespace", required=True, + help="Namespace the test is running in") + args = vars(all_args.parse_args()) + + token = get_token(args['user'], args['password'], args['namespace']) + + headers = {'Authorization': token} + url = 'https://test-nifi-node-default-1.test-nifi-node-default.' + args['namespace'] + '.svc.cluster.local:8443/nifi-api/controller/cluster' + cluster = requests.get(url, headers=headers, verify=False)#, cert='/tmp/cacert.pem') + + if cluster.ok: + cluster_data = json.loads(cluster.content.decode('utf-8')) + else: + print("Failed to get cluster data: ", cluster.status_code, " - ", cluster.content) + + nodes = cluster_data['cluster']['nodes'] + + if len(nodes) != 3: + print("Cluster should have 2 nodes at this stage, but has: ", len(nodes)) + exit(-1) + + for node in nodes: + if node['status'] != "CONNECTED": + print('Node ', node['nodeId'], ' is in state ', node['status'], ' but should have been CONNECTED') + exit(-1) + + print("Test succeeded!") diff --git a/tests/templates/kuttl/smoke/test_nifi_metrics.py b/tests/templates/kuttl/smoke/test_nifi_metrics.py new file mode 100755 index 00000000..510b146f --- /dev/null +++ b/tests/templates/kuttl/smoke/test_nifi_metrics.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +import argparse +import requests +import time + + +if __name__ == '__main__': + # Construct an argument parser + all_args = argparse.ArgumentParser() + # Add arguments to the parser + all_args.add_argument("-m", "--metric", required=False, default="nifi_amount_bytes_read", + help="The name of a certain metric to check") + all_args.add_argument("-n", "--namespace", required=True, + help="The namespace the test is running in") + all_args.add_argument("-p", "--port", required=False, default="8081", + help="The port where metrics are exposed") + all_args.add_argument("-t", "--timeout", required=False, default="60", + help="The timeout in seconds to wait for the metrics port to be opened") + + args = vars(all_args.parse_args()) + metric_name = args["metric"] + namespace = args["namespace"] + port = args["port"] + timeout = int(args["timeout"]) + + url = "http://test-nifi-node-default-0.test-nifi-node-default." + namespace + ".svc.cluster.local:" + port + "/metrics" + + # wait for 'timeout' seconds + t_end = time.time() + timeout + while time.time() < t_end: + try: + response = requests.post(url) + response.raise_for_status() + if metric_name in response.text: + print("Test metrics succeeded!") + exit(0) + else: + print(f"Could not find metric [{metric_name}] in response:\n {response.text}") + time.sleep(timeout) + except Exception as ex: + print(f"Failed to connect to [{url}]:\n {str(ex)}") + time.sleep(timeout) + + exit(-1) diff --git a/tests/test-definition.yaml b/tests/test-definition.yaml new file mode 100644 index 00000000..caf8331f --- /dev/null +++ b/tests/test-definition.yaml @@ -0,0 +1,17 @@ +--- +dimensions: + - name: zookeeper + values: + - 3.5.8-stackable0.7.0 + - 3.6.3-stackable0.7.0 + - 3.7.0-stackable0.7.0 + - 3.8.0-stackable0.7.0 + - name: nifi + values: + - 1.15.0-stackable0.4.0 + +tests: + - name: smoke + dimensions: + - nifi + - zookeeper From 61a5d6e33540b6fa18402a30bb526f9c192ace14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 25 May 2022 22:42:04 +0200 Subject: [PATCH 3/6] linter --- tests/templates/kuttl/smoke/test_nifi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/templates/kuttl/smoke/test_nifi.py b/tests/templates/kuttl/smoke/test_nifi.py index 658810aa..c3f10aeb 100755 --- a/tests/templates/kuttl/smoke/test_nifi.py +++ b/tests/templates/kuttl/smoke/test_nifi.py @@ -13,7 +13,7 @@ def get_token(username, password, namespace): # TODO: handle actual errors when connecting properly url = 'https://test-nifi-node-default-1.test-nifi-node-default.' + namespace + '.svc.cluster.local:8443/nifi-api/access/token' - response = requests.post(url, headers=headers, data=data, verify=False)#, cert='./tmp/cacert.pem') + response = requests.post(url, headers=headers, data=data, verify=False) # , cert='./tmp/cacert.pem') if response.ok: token = response.content.decode('utf-8') @@ -40,7 +40,7 @@ def get_token(username, password, namespace): headers = {'Authorization': token} url = 'https://test-nifi-node-default-1.test-nifi-node-default.' + args['namespace'] + '.svc.cluster.local:8443/nifi-api/controller/cluster' - cluster = requests.get(url, headers=headers, verify=False)#, cert='/tmp/cacert.pem') + cluster = requests.get(url, headers=headers, verify=False) # , cert='/tmp/cacert.pem') if cluster.ok: cluster_data = json.loads(cluster.content.decode('utf-8')) From 6c55a7b34059702fdb8bcd1f93e457cddb172308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 25 May 2022 23:07:34 +0200 Subject: [PATCH 4/6] more linter --- tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml b/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml index 82396fa2..36dc4deb 100644 --- a/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml +++ b/tests/templates/kuttl/smoke/04-prepare-test-nifi.yaml @@ -1,3 +1,4 @@ +--- apiVersion: kuttl.dev/v1beta1 kind: TestStep commands: From 697ab6c83008d67f0ada54d8e7c746345a0b722a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 1 Jun 2022 15:15:06 +0200 Subject: [PATCH 5/6] Rolled https://github.com/stackabletech/integration-tests/pull/242 into this PR --- .../templates/kuttl/resources/00-assert.yaml | 19 +++++++ .../kuttl/resources/00-install-zk.yaml | 22 ++++++++ .../templates/kuttl/resources/01-assert.yaml | 34 ++++++++++++ .../kuttl/resources/01-install-nifi.yaml | 55 +++++++++++++++++++ tests/test-definition.yaml | 4 ++ 5 files changed, 134 insertions(+) create mode 100644 tests/templates/kuttl/resources/00-assert.yaml create mode 100644 tests/templates/kuttl/resources/00-install-zk.yaml create mode 100644 tests/templates/kuttl/resources/01-assert.yaml create mode 100644 tests/templates/kuttl/resources/01-install-nifi.yaml diff --git a/tests/templates/kuttl/resources/00-assert.yaml b/tests/templates/kuttl/resources/00-assert.yaml new file mode 100644 index 00000000..2aa70087 --- /dev/null +++ b/tests/templates/kuttl/resources/00-assert.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: install-zookeeper +timeout: 300 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-zk-server-default +status: + readyReplicas: 1 + replicas: 1 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: test-nifi-znode diff --git a/tests/templates/kuttl/resources/00-install-zk.yaml b/tests/templates/kuttl/resources/00-install-zk.yaml new file mode 100644 index 00000000..4d6a2a81 --- /dev/null +++ b/tests/templates/kuttl/resources/00-install-zk.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: zookeeper.stackable.tech/v1alpha1 +kind: ZookeeperCluster +metadata: + name: test-zk +spec: + servers: + roleGroups: + default: + replicas: 1 + config: + myidOffset: 10 + version: {{ test_scenario['values']['zookeeper'] }} + stopped: false +--- +apiVersion: zookeeper.stackable.tech/v1alpha1 +kind: ZookeeperZnode +metadata: + name: test-nifi-znode +spec: + clusterRef: + name: test-zk diff --git a/tests/templates/kuttl/resources/01-assert.yaml b/tests/templates/kuttl/resources/01-assert.yaml new file mode 100644 index 00000000..32ea28e1 --- /dev/null +++ b/tests/templates/kuttl/resources/01-assert.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: install-nifi +timeout: 600 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: test-nifi-node-default +status: + readyReplicas: 1 + replicas: 1 +--- +apiVersion: v1 +kind: Pod +metadata: + name: test-nifi-node-default-0 +spec: + containers: + - name: nifi + resources: + limits: + memory: 2Gi + requests: + memory: 2Gi +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +metadata: + name: check-jvm-heap-args +commands: + - script: kubectl get cm -n $NAMESPACE test-nifi-node-default -o yaml | grep -E 'java.arg..=-Xmx1638m' | xargs test ! -z diff --git a/tests/templates/kuttl/resources/01-install-nifi.yaml b/tests/templates/kuttl/resources/01-install-nifi.yaml new file mode 100644 index 00000000..41223e09 --- /dev/null +++ b/tests/templates/kuttl/resources/01-install-nifi.yaml @@ -0,0 +1,55 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: nifi-admin-credentials-simple +stringData: + username: admin + password: supersecretpassword +--- +apiVersion: v1 +kind: Secret +metadata: + name: nifi-sensitive-property-key +stringData: + nifiSensitivePropsKey: mYsUp3rS3cr3tk3y +--- +apiVersion: nifi.stackable.tech/v1alpha1 +kind: NifiCluster +metadata: + name: test-nifi +spec: + version: {{ test_scenario['values']['nifi'] }} + zookeeperConfigMapName: test-nifi-znode + authenticationConfig: + method: + SingleUser: + adminCredentialsSecret: + name: nifi-admin-credentials-simple + sensitivePropertiesConfig: + keySecret: nifi-sensitive-property-key + nodes: + config: + resources: + memory: + limit: "2Gi" + storage: + flowfile_repo: + capacity: 2Gi + provenance_repo: + capacity: 2Gi + database_repo: + capacity: 2Gi + content_repo: + capacity: 2Gi + state_repo: + capacity: 2Gi + roleGroups: + default: + selector: + matchLabels: + kubernetes.io/os: linux + config: + log: + rootLogLevel: INFO + replicas: 1 diff --git a/tests/test-definition.yaml b/tests/test-definition.yaml index caf8331f..93d24d22 100644 --- a/tests/test-definition.yaml +++ b/tests/test-definition.yaml @@ -15,3 +15,7 @@ tests: dimensions: - nifi - zookeeper + - name: resources + dimensions: + - nifi + - zookeeper From bdbad3c9bada5204d9b341db057093ff61f5f15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Liebau?= Date: Wed, 1 Jun 2022 15:47:03 +0200 Subject: [PATCH 6/6] Revert "Rolled https://github.com/stackabletech/integration-tests/pull/242 into this PR" This reverts commit 697ab6c83008d67f0ada54d8e7c746345a0b722a. --- .../templates/kuttl/resources/00-assert.yaml | 19 ------- .../kuttl/resources/00-install-zk.yaml | 22 -------- .../templates/kuttl/resources/01-assert.yaml | 34 ------------ .../kuttl/resources/01-install-nifi.yaml | 55 ------------------- tests/test-definition.yaml | 4 -- 5 files changed, 134 deletions(-) delete mode 100644 tests/templates/kuttl/resources/00-assert.yaml delete mode 100644 tests/templates/kuttl/resources/00-install-zk.yaml delete mode 100644 tests/templates/kuttl/resources/01-assert.yaml delete mode 100644 tests/templates/kuttl/resources/01-install-nifi.yaml diff --git a/tests/templates/kuttl/resources/00-assert.yaml b/tests/templates/kuttl/resources/00-assert.yaml deleted file mode 100644 index 2aa70087..00000000 --- a/tests/templates/kuttl/resources/00-assert.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -metadata: - name: install-zookeeper -timeout: 300 ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: test-zk-server-default -status: - readyReplicas: 1 - replicas: 1 ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: test-nifi-znode diff --git a/tests/templates/kuttl/resources/00-install-zk.yaml b/tests/templates/kuttl/resources/00-install-zk.yaml deleted file mode 100644 index 4d6a2a81..00000000 --- a/tests/templates/kuttl/resources/00-install-zk.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -apiVersion: zookeeper.stackable.tech/v1alpha1 -kind: ZookeeperCluster -metadata: - name: test-zk -spec: - servers: - roleGroups: - default: - replicas: 1 - config: - myidOffset: 10 - version: {{ test_scenario['values']['zookeeper'] }} - stopped: false ---- -apiVersion: zookeeper.stackable.tech/v1alpha1 -kind: ZookeeperZnode -metadata: - name: test-nifi-znode -spec: - clusterRef: - name: test-zk diff --git a/tests/templates/kuttl/resources/01-assert.yaml b/tests/templates/kuttl/resources/01-assert.yaml deleted file mode 100644 index 32ea28e1..00000000 --- a/tests/templates/kuttl/resources/01-assert.yaml +++ /dev/null @@ -1,34 +0,0 @@ ---- -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -metadata: - name: install-nifi -timeout: 600 ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: test-nifi-node-default -status: - readyReplicas: 1 - replicas: 1 ---- -apiVersion: v1 -kind: Pod -metadata: - name: test-nifi-node-default-0 -spec: - containers: - - name: nifi - resources: - limits: - memory: 2Gi - requests: - memory: 2Gi ---- -apiVersion: kuttl.dev/v1beta1 -kind: TestAssert -metadata: - name: check-jvm-heap-args -commands: - - script: kubectl get cm -n $NAMESPACE test-nifi-node-default -o yaml | grep -E 'java.arg..=-Xmx1638m' | xargs test ! -z diff --git a/tests/templates/kuttl/resources/01-install-nifi.yaml b/tests/templates/kuttl/resources/01-install-nifi.yaml deleted file mode 100644 index 41223e09..00000000 --- a/tests/templates/kuttl/resources/01-install-nifi.yaml +++ /dev/null @@ -1,55 +0,0 @@ ---- -apiVersion: v1 -kind: Secret -metadata: - name: nifi-admin-credentials-simple -stringData: - username: admin - password: supersecretpassword ---- -apiVersion: v1 -kind: Secret -metadata: - name: nifi-sensitive-property-key -stringData: - nifiSensitivePropsKey: mYsUp3rS3cr3tk3y ---- -apiVersion: nifi.stackable.tech/v1alpha1 -kind: NifiCluster -metadata: - name: test-nifi -spec: - version: {{ test_scenario['values']['nifi'] }} - zookeeperConfigMapName: test-nifi-znode - authenticationConfig: - method: - SingleUser: - adminCredentialsSecret: - name: nifi-admin-credentials-simple - sensitivePropertiesConfig: - keySecret: nifi-sensitive-property-key - nodes: - config: - resources: - memory: - limit: "2Gi" - storage: - flowfile_repo: - capacity: 2Gi - provenance_repo: - capacity: 2Gi - database_repo: - capacity: 2Gi - content_repo: - capacity: 2Gi - state_repo: - capacity: 2Gi - roleGroups: - default: - selector: - matchLabels: - kubernetes.io/os: linux - config: - log: - rootLogLevel: INFO - replicas: 1 diff --git a/tests/test-definition.yaml b/tests/test-definition.yaml index 93d24d22..caf8331f 100644 --- a/tests/test-definition.yaml +++ b/tests/test-definition.yaml @@ -15,7 +15,3 @@ tests: dimensions: - nifi - zookeeper - - name: resources - dimensions: - - nifi - - zookeeper