def test_redis_by_chart_password_secret_name(self, executor): expected_broker_url_secret_name = "test-redis-broker-url-secret-name" k8s_objects = render_chart( RELEASE_NAME_REDIS, { "executor": executor, "networkPolicies": {"enabled": True}, "data": {"brokerUrlSecretName": expected_broker_url_secret_name}, "redis": { "enabled": True, "passwordSecretName": "test-redis-password-secret-name", }, }, ) k8s_obj_by_key = prepare_k8s_lookup_dict(k8s_objects) created_redis_objects = SET_POSSIBLE_REDIS_OBJECT_KEYS & set(k8s_obj_by_key.keys()) assert created_redis_objects == SET_POSSIBLE_REDIS_OBJECT_KEYS - { REDIS_OBJECTS["SECRET_PASSWORD"], REDIS_OBJECTS["SECRET_BROKER_URL"], } self.assert_password_and_broker_url_secrets( k8s_obj_by_key, expected_password_match=None, expected_broker_url_match=None ) self.assert_broker_url_env(k8s_obj_by_key, expected_broker_url_secret_name)
def test_external_redis_broker_url(self, executor): k8s_objects = render_chart( RELEASE_NAME_REDIS, { "executor": executor, "networkPolicies": { "enabled": True }, "data": { "brokerUrl": "redis://*****:*****@redis-host:6379/0", }, "redis": { "enabled": False }, }, ) k8s_obj_by_key = prepare_k8s_lookup_dict(k8s_objects) created_redis_objects = SET_POSSIBLE_REDIS_OBJECT_KEYS & set( k8s_obj_by_key.keys()) assert created_redis_objects == {REDIS_OBJECTS["SECRET_BROKER_URL"]} self.assert_password_and_broker_url_secrets( k8s_obj_by_key, expected_password_match=None, expected_broker_url_match= "redis://*****:*****@redis-host:6379/0", ) self.assert_broker_url_env(k8s_obj_by_key)
def test_external_redis_broker_url_secret_name(self, executor): expected_broker_url_secret_name = "redis-broker-url-secret-name" k8s_objects = render_chart( RELEASE_NAME_REDIS, { "executor": executor, "networkPolicies": { "enabled": True }, "data": { "brokerUrlSecretName": expected_broker_url_secret_name }, "redis": { "enabled": False }, }, ) k8s_obj_by_key = prepare_k8s_lookup_dict(k8s_objects) created_redis_objects = SET_POSSIBLE_REDIS_OBJECT_KEYS & set( k8s_obj_by_key.keys()) assert created_redis_objects == set() self.assert_password_and_broker_url_secrets( k8s_obj_by_key, expected_password_match=None, expected_broker_url_match=None) self.assert_broker_url_env(k8s_obj_by_key, expected_broker_url_secret_name)
def test_redis_by_chart_password(self, executor): k8s_objects = render_chart( RELEASE_NAME_REDIS, { "executor": executor, "networkPolicies": { "enabled": True }, "redis": { "enabled": True, "password": "******" }, }, ) k8s_obj_by_key = prepare_k8s_lookup_dict(k8s_objects) created_redis_objects = SET_POSSIBLE_REDIS_OBJECT_KEYS & set( k8s_obj_by_key.keys()) assert created_redis_objects == SET_POSSIBLE_REDIS_OBJECT_KEYS self.assert_password_and_broker_url_secrets( k8s_obj_by_key, expected_password_match="test-redis-password", expected_broker_url_match=re.escape( "redis://:test-redis-password%21%40%23$%25%5E&%2A%28%29_+@TEST-REDIS-redis:6379/0" ), ) self.assert_broker_url_env(k8s_obj_by_key)
def test_redis_by_chart_default(self, executor): k8s_objects = render_chart( RELEASE_NAME_REDIS, { "executor": executor, "networkPolicies": { "enabled": True }, "redis": { "enabled": True }, }, ) k8s_obj_by_key = prepare_k8s_lookup_dict(k8s_objects) created_redis_objects = SET_POSSIBLE_REDIS_OBJECT_KEYS & set( k8s_obj_by_key.keys()) assert created_redis_objects == SET_POSSIBLE_REDIS_OBJECT_KEYS self.assert_password_and_broker_url_secrets( k8s_obj_by_key, expected_password_match=r"\w+", expected_broker_url_match= fr"redis://:.+@{RELEASE_NAME_REDIS}-redis:6379/0", ) self.assert_broker_url_env(k8s_obj_by_key)
def test_extra_secrets(self): values_str = textwrap.dedent(""" extraSecrets: "{{ .Release.Name }}-airflow-connections": data: | AIRFLOW_CON_AWS: {{ printf "aws_connection_string" | b64enc }} stringData: | AIRFLOW_CON_GCP: "gcp_connection_string" "{{ .Release.Name }}-other-secrets": data: | MY_SECRET_1: {{ printf "MY_SECRET_1" | b64enc }} MY_SECRET_2: {{ printf "MY_SECRET_2" | b64enc }} stringData: | MY_SECRET_3: "MY_SECRET_3" MY_SECRET_4: "MY_SECRET_4" """) values = yaml.safe_load(values_str) k8s_objects = render_chart( RELEASE_NAME, values=values, show_only=["templates/secrets/extra-secrets.yaml"]) k8s_objects_by_key = prepare_k8s_lookup_dict(k8s_objects) all_expected_keys = [ ("Secret", f"{RELEASE_NAME}-airflow-connections"), ("Secret", f"{RELEASE_NAME}-other-secrets"), ] self.assertEqual(set(k8s_objects_by_key.keys()), set(all_expected_keys)) all_expected_data = [ { "AIRFLOW_CON_AWS": b64encode(b"aws_connection_string").decode("utf-8") }, { "MY_SECRET_1": b64encode(b"MY_SECRET_1").decode("utf-8"), "MY_SECRET_2": b64encode(b"MY_SECRET_2").decode("utf-8"), }, ] all_expected_string_data = [ { "AIRFLOW_CON_GCP": "gcp_connection_string" }, { "MY_SECRET_3": "MY_SECRET_3", "MY_SECRET_4": "MY_SECRET_4" }, ] for expected_key, expected_data, expected_string_data in zip( all_expected_keys, all_expected_data, all_expected_string_data): configmap_obj = k8s_objects_by_key[expected_key] self.assertEqual(configmap_obj["data"], expected_data) self.assertEqual(configmap_obj["stringData"], expected_string_data)
def setUpClass(cls) -> None: values_str = textwrap.dedent(""" executor: "CeleryExecutor" extraEnvFrom: | - secretRef: name: '{{ .Release.Name }}-airflow-connections' - configMapRef: name: '{{ .Release.Name }}-airflow-variables' extraEnv: | - name: PLATFORM value: FR - name: TEST valueFrom: secretKeyRef: name: '{{ .Release.Name }}-some-secret' key: connection """) values = yaml.safe_load(values_str) cls.k8s_objects = render_chart(RELEASE_NAME, values=values) cls.k8s_objects_by_key = prepare_k8s_lookup_dict(cls.k8s_objects)
def test_extra_configmaps(self): values_str = textwrap.dedent(""" extraConfigMaps: "{{ .Release.Name }}-airflow-variables": data: | AIRFLOW_VAR_HELLO_MESSAGE: "Hi!" AIRFLOW_VAR_KUBERNETES_NAMESPACE: "{{ .Release.Namespace }}" "{{ .Release.Name }}-other-variables": data: | HELLO_WORLD: "Hi again!" """) values = yaml.safe_load(values_str) k8s_objects = render_chart( RELEASE_NAME, values=values, show_only=["templates/configmaps/extra-configmaps.yaml"]) k8s_objects_by_key = prepare_k8s_lookup_dict(k8s_objects) all_expected_keys = [ ("ConfigMap", f"{RELEASE_NAME}-airflow-variables"), ("ConfigMap", f"{RELEASE_NAME}-other-variables"), ] self.assertEqual(set(k8s_objects_by_key.keys()), set(all_expected_keys)) all_expected_data = [ { "AIRFLOW_VAR_HELLO_MESSAGE": "Hi!", "AIRFLOW_VAR_KUBERNETES_NAMESPACE": "default" }, { "HELLO_WORLD": "Hi again!" }, ] for expected_key, expected_data in zip(all_expected_keys, all_expected_data): configmap_obj = k8s_objects_by_key[expected_key] self.assertEqual(configmap_obj["data"], expected_data)