예제 #1
0
    def _render_and_write_kubernetes_config(
        self,
        kubernetes_config_path: str,
        application_name: str,
        secrets: List[Secret],
        custom_values: Dict[str, str],
    ) -> str:
        """
        Render the jinja-templated kubernetes configuration adn write it out to a temporary file.
        Args:
            kubernetes_config_path: The raw, jinja-templated kubernetes configuration path.
            application_name: Current application name

        Returns:
            The path to the temporary file where the rendered kubernetes configuration is stored.
        """
        vault_values = {_.jinja_safe_key: ensure_base64(_.val) for _ in secrets}

        context_values = {
            **{
                _.jinja_safe_key: ensure_base64(_.val)
                for _ in Context().get_or_else(ContextKey.EVENTHUB_PRODUCER_POLICY_SECRETS, {})
            },
            **{
                _.jinja_safe_key: ensure_base64(_.val)
                for _ in Context().get_or_else(ContextKey.EVENTHUB_CONSUMER_GROUP_SECRETS, {})
            },
        }

        kubernetes_config = self._render_kubernetes_config(
            kubernetes_config_path, application_name, {**vault_values, **context_values}, custom_values
        )
        return self._write_kubernetes_config(kubernetes_config)
    def test_create_eventhub_producer_policies_secrets(self, victim):
        policies = [EventHubProducerPolicy('entity1', False), EventHubProducerPolicy('entity2', False)]

        victim.create_eventhub_producer_policies(policies)

        assert Context().get(ContextKey.EVENTHUB_PRODUCER_POLICY_SECRETS) == [Secret('entity1-connection-string', 'potato-connection'),
                                                                              Secret('entity2-connection-string', 'potato-connection')]
예제 #3
0
    def create_eventhub_consumer_groups(
            self, consumer_groups: List[EventHubConsumerGroup]):
        """Creates a new EventHub consumer group if one does not exist.

        Args:
            consumer_groups: A list of EventHubConsumerGroup containing the name of the consumer
            group to create.
        """
        secrets = [
            self._create_consumer_group(group=group)
            for group in consumer_groups
        ]
        Context().create_or_update(ContextKey.EVENTHUB_CONSUMER_GROUP_SECRETS,
                                   secrets)
    def test_create_docker_registry_secret(self, _, victim):
        Context().clear()
        with mock.patch("takeoff.azure.deploy_to_kubernetes.DeployToKubernetes._write_kubernetes_config") as m_write:
            victim._create_image_pull_secret("myapp")

        expected_result = """kind: Namespace
apiVersion: v1
metadata:
  name: default
---
kind: Secret
apiVersion: v1
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: bm9uYmFzZTY0ZW5jb2RlZHN0cmluZw==
metadata:
  name: registry-auth
  namespace: default"""
        m_write.assert_called_once_with(expected_result)
예제 #5
0
    def create_eventhub_producer_policies(
            self, producer_policies: List[EventHubProducerPolicy]):
        """Constructs producer policies for all EventHub entities requested.

        Args:
            producer_policies: List of producer policies to create
        """
        eventhub_namespace = get_eventhub_name(self.config, self.env)
        resource_group = get_resource_group_name(self.config, self.env)

        logger.info(f"Using Azure resource group: {resource_group}")
        logger.info(f"Using Azure EventHub namespace: {eventhub_namespace}")

        secrets = [
            self._create_producer_policy(policy, resource_group,
                                         eventhub_namespace,
                                         self.application_name)
            for policy in producer_policies
        ]
        Context().create_or_update(ContextKey.EVENTHUB_PRODUCER_POLICY_SECRETS,
                                   secrets)