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)
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)