Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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)