Esempio n. 1
0
    def _create_datadog_container(self, app_spec, besteffort_qos_is_required):
        if besteffort_qos_is_required:
            resource_requirements = ResourceRequirements()
        else:
            resource_requirements = ResourceRequirements(limits={
                "cpu": "400m",
                "memory": "2Gi"
            },
                                                         requests={
                                                             "cpu": "200m",
                                                             "memory": "2Gi"
                                                         })

        tags = app_spec.datadog.tags
        tags["app"] = app_spec.name
        tags["k8s_namespace"] = app_spec.namespace
        # Use an alphabetical order based on keys to ensure that the
        # output is predictable
        dd_tags = ",".join("{}:{}".format(k, tags[k]) for k in sorted(tags))

        return Container(
            name=self.DATADOG_CONTAINER_NAME,
            image=self._datadog_container_image,
            imagePullPolicy="IfNotPresent",
            env=[
                EnvVar(name="DD_TAGS", value=dd_tags),
                EnvVar(name="DD_API_KEY",
                       valueFrom=EnvVarSource(secretKeyRef=SecretKeySelector(
                           name="datadog", key="apikey"))),
                EnvVar(name="NON_LOCAL_TRAFFIC", value="false"),
                EnvVar(name="DD_LOGS_STDOUT", value="yes"),
                EnvVar(name="DD_EXPVAR_PORT", value="42622"),
                EnvVar(name="DD_CMD_PORT", value="42623"),
            ],
            resources=resource_requirements)
Esempio n. 2
0
    def _make_env(self, app_spec):
        constants = self._fiaas_env.copy()
        constants["ARTIFACT_NAME"] = app_spec.name
        constants["IMAGE"] = app_spec.image
        constants["VERSION"] = app_spec.version
        env = [
            EnvVar(name=name, value=value)
            for name, value in constants.iteritems()
        ]

        # For backward compatibility. https://github.schibsted.io/finn/fiaas-deploy-daemon/pull/34
        global_env = []
        for name, value in self._global_env.iteritems():
            if "FIAAS_{}".format(
                    name) not in constants and name not in constants:
                global_env.extend([
                    EnvVar(name=name, value=value),
                    EnvVar(name="FIAAS_{}".format(name), value=value)
                ])
            else:
                LOG.warn(
                    "Reserved environment-variable: {} declared as global. Ignoring and continuing"
                    .format(name))
        env.extend(global_env)

        env.extend([
            EnvVar(
                name="FIAAS_REQUESTS_CPU",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="requests.cpu",
                    divisor=1))),
            EnvVar(
                name="FIAAS_REQUESTS_MEMORY",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="requests.memory",
                    divisor=1))),
            EnvVar(
                name="FIAAS_LIMITS_CPU",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="limits.cpu",
                    divisor=1))),
            EnvVar(
                name="FIAAS_LIMITS_MEMORY",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="limits.memory",
                    divisor=1))),
            EnvVar(name="FIAAS_NAMESPACE",
                   valueFrom=EnvVarSource(fieldRef=ObjectFieldSelector(
                       fieldPath="metadata.namespace"))),
            EnvVar(name="FIAAS_POD_NAME",
                   valueFrom=EnvVarSource(fieldRef=ObjectFieldSelector(
                       fieldPath="metadata.name"))),
        ])
        env.sort(key=lambda x: x.name)
        return env
Esempio n. 3
0
    def _make_env(self, app_spec):
        fiaas_managed_env = {
            'FIAAS_ARTIFACT_NAME': app_spec.name,
            'FIAAS_IMAGE': app_spec.image,
            'FIAAS_VERSION': app_spec.version,
        }
        if not self._disable_deprecated_managed_env_vars:
            fiaas_managed_env.update({
                'ARTIFACT_NAME': app_spec.name,
                'IMAGE': app_spec.image,
                'VERSION': app_spec.version,
            })

        # fiaas_managed_env overrides global_env overrides legacy_fiaas_env
        static_env = merge_dicts(self._legacy_fiaas_env, self._global_env,
                                 fiaas_managed_env)

        env = [
            EnvVar(name=name, value=value)
            for name, value in static_env.items()
        ]

        # FIAAS managed environment variables using the downward API
        env.extend([
            EnvVar(
                name="FIAAS_REQUESTS_CPU",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="requests.cpu",
                    divisor=1))),
            EnvVar(
                name="FIAAS_REQUESTS_MEMORY",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="requests.memory",
                    divisor=1))),
            EnvVar(
                name="FIAAS_LIMITS_CPU",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="limits.cpu",
                    divisor=1))),
            EnvVar(
                name="FIAAS_LIMITS_MEMORY",
                valueFrom=EnvVarSource(resourceFieldRef=ResourceFieldSelector(
                    containerName=app_spec.name,
                    resource="limits.memory",
                    divisor=1))),
            EnvVar(name="FIAAS_NAMESPACE",
                   valueFrom=EnvVarSource(fieldRef=ObjectFieldSelector(
                       fieldPath="metadata.namespace"))),
            EnvVar(name="FIAAS_POD_NAME",
                   valueFrom=EnvVarSource(fieldRef=ObjectFieldSelector(
                       fieldPath="metadata.name"))),
        ])

        env.sort(key=lambda x: x.name)

        return env
Esempio n. 4
0
 def _create_datadog_container(self, app_spec, besteffort_qos_is_required):
     if besteffort_qos_is_required:
         resource_requirements = ResourceRequirements()
     else:
         resource_requirements = ResourceRequirements(limits={"cpu": "400m", "memory": "2Gi"},
                                                      requests={"cpu": "200m", "memory": "2Gi"})
     return Container(
         name=self.DATADOG_CONTAINER_NAME,
         image=self._datadog_container_image,
         imagePullPolicy="IfNotPresent",
         env=[
             EnvVar(name="DD_TAGS", value="app:{},k8s_namespace:{}".format(app_spec.name, app_spec.namespace)),
             EnvVar(name="API_KEY",
                    valueFrom=EnvVarSource(secretKeyRef=SecretKeySelector(name="datadog", key="apikey"))),
             EnvVar(name="NON_LOCAL_TRAFFIC", value="false"),
             EnvVar(name="DD_LOGS_STDOUT", value="yes"),
             EnvVar(name="DD_EXPVAR_PORT", value="42622"),
             EnvVar(name="DD_CMD_PORT", value="42623"),
         ],
         resources=resource_requirements
     )