Example #1
0
    def translate_marathon(self, key: str, value: str, full_path: str) -> None:
        if self.object is None:
            raise Exception("self.object is not set; this is a bug")

        labels = self.object.get('labels', {})
        dcos_package_framework_name = labels.get("DCOS_PACKAGE_FRAMEWORK_NAME")
        if dcos_package_framework_name:
            logging.warning('Not translating app %s: it runs Mesos framework %s', value, dcos_package_framework_name)
            return

        settings = Settings(
            container_defaults=ContainerDefaults("alpine:latest", "/"),
            app_secret_mapping=self._secret_mapping,
        )

        self.manifest = Manifest(pluginName="marathon", manifestName=self.dnsify(value))

        assert self.object is not None

        translated = translate_app(self.object, settings)

        kc = ApiClient()
        if translated.deployment['kind'] == "StatefulSet":
            sleeper_stateful_set = make_sleeper_stateful_set(translated.deployment)
            dapp = kc._ApiClient__deserialize(sleeper_stateful_set, V1StatefulSetWithComment)
            try:
                configure_stateful_migrate(original_marathon_app=self.object,
                                           k8s_translate_result=translated.deployment)
            except:
                print("Unexpected error while preparing Marathon stateful migration:", sys.exc_info()[0])
                raise
        else:
            dapp = kc._ApiClient__deserialize(translated.deployment, V1DeploymentWithComment)

        dapp.set_comment(translated.warnings)

        self.manifest.append(dapp)
        self._node_label_tracker.add_app_node_labels(self.object['id'], translated.required_node_labels)

        service, service_warnings = translate_service(dapp.metadata.labels['app'], self.object)
        if service:
            kc2 = ApiClient()
            dservice = kc2._ApiClient__deserialize(service, V1ServiceWithComment)
            dservice.set_comment(service_warnings)
            self.manifest.append(dservice)

        for remapping in self._secret_mapping.get_secrets_to_remap():
            secret = _create_remapped_secret(self.manifest_list, remapping, self.object['id'])
            if secret is not None:
                self.manifest.append(secret)
Example #2
0
    def deserialize(self, data: str) -> None:
        dload = self._deserializer(data)
        for dsi in dload:
            ds = dict(dsi)
            if ds is None:
                logging.warning(
                    "serialized object is none of data: {}".format(data))
                continue

            if 'apiVersion' in ds and 'kind' in ds:
                model = self.getModel(ds['kind'], ds['apiVersion'])
                if model:
                    kc = ApiClient()
                    di = kc._ApiClient__deserialize(ds, model)
                    self.append(di)
                continue
            else:
                logging.warning(
                    "Missing apiVersion and/or kind in data: {}".format(ds))

            self.append(ds)