def create_deployment_object(data): # Configureate Pod template container ports = [] for port in data["ports"].split(','): portDefinition = client.V1ContainerPort(container_port=int(port)) ports.append(portDefinition) envs = [] if "environments" in data: envs_array = data["environments"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: envs.append(client.V1EnvVar(name=key, value=tmp_envs[key])) if "environments_secrets" in data: envs_array = data["environments_secrets"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: if (":" in tmp_envs[key]): # passing secret env value = tmp_envs[key] secrets = value.split(':') secrect_key = secrets[1] secrect_name = secrets[0] envs.append( client.V1EnvVar( name=key, value="", value_from=client.V1EnvVarSource( secret_key_ref=client.V1SecretKeySelector( key=secrect_key, name=secrect_name)))) container = client.V1Container(name=data["container_name"], image=data["image"], ports=ports, env=envs) if "volume_mounts" in data: volume_mounts = [] vm_array = data["volume_mounts"].split(",") tmp_vm = dict(s.split('=', 1) for s in vm_array) for key in tmp_vm: volume_mounts.append( client.V1VolumeMount(name=key, mount_path=tmp_vm[key])) container.volume_mounts = volume_mounts if "liveness_probe" in data: container.liveness_probe = common.load_liveness_readiness_probe( data["liveness_probe"]) if "readiness_probe" in data: container.readiness_probe = common.load_liveness_readiness_probe( data["readiness_probe"]) if "container_command" in data: container.command = data["container_command"].split(' ') if "container_args" in data: args_array = data["container_args"].splitlines() container.args = args_array if "resources_requests" in data: resources_array = data["resources_requests"].split(",") tmp_resources = dict(s.split('=', 1) for s in resources_array) container.resources = client.V1ResourceRequirements( requests=tmp_resources) labels_array = data["labels"].split(',') labels = dict(s.split('=') for s in labels_array) template_spec = client.V1PodSpec(containers=[container]) if "volumes" in data: volumes_data = yaml.load(data["volumes"]) volumes = [] if (isinstance(volumes_data, list)): for volume_data in volumes_data: volume = common.create_volume(volume_data) if volume: volumes.append(volume) else: volume = common.create_volume(volumes_data) if volume: volumes.append(volume) template_spec.volumes = volumes # Create and configurate a spec section template = client.V1PodTemplateSpec( metadata=client.V1ObjectMeta(labels=labels), spec=template_spec) # Create the specification of deployment spec = client.ExtensionsV1beta1DeploymentSpec(replicas=int( data["replicas"]), template=template) # Instantiate the deployment object deployment = client.ExtensionsV1beta1Deployment( api_version=data["api_version"], kind="Deployment", metadata=client.V1ObjectMeta(labels=labels, namespace=data["namespace"], name=data["name"]), spec=spec) return deployment
def create_job_object(data): meta = client.V1ObjectMeta(name=data["name"], namespace=data["namespace"]) labels = None if "labels" in data: labels_array = data["labels"].split(',') labels = dict(s.split('=') for s in labels_array) meta.labels = labels annotations = None if "annotations" in data: annotations_array = data["annotations"].split(',') annotations = dict(s.split('=') for s in annotations_array) meta.annotations = annotations envs = [] if "environments" in data: envs_array = data["environments"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: envs.append(client.V1EnvVar(name=key, value=tmp_envs[key])) if "environments_secrets" in data: envs_array = data["environments_secrets"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: if (":" in tmp_envs[key]): # passing secret env value = tmp_envs[key] secrets = value.split(':') secrect_key = secrets[1] secrect_name = secrets[0] envs.append( client.V1EnvVar( name=key, value="", value_from=client.V1EnvVarSource( secret_key_ref=client.V1SecretKeySelector( key=secrect_key, name=secrect_name)))) container = client.V1Container(name=data["container_name"], image=data["container_image"], image_pull_policy=data["image_pull_policy"]) if "container_command" in data: container.command = data["container_command"].split(' ') if "container_args" in data: args_array = data["container_args"].splitlines() container.args = args_array if "resources_requests" in data: resources_array = data["resources_requests"].split(",") tmp = dict(s.split('=', 1) for s in resources_array) container.resources = client.V1ResourceRequirements(requests=tmp) if "volume_mounts" in data: mounts = common.create_volume_mount_yaml(data) container.volume_mounts = mounts container.env = envs if "env_from" in data: env_froms_data = yaml.full_load(data["env_from"]) env_from = [] for env_from_data in env_froms_data: if 'configMapRef' in env_from_data: env_from.append( client.V1EnvFromSource( config_map_ref=client.V1ConfigMapEnvSource( env_from_data['configMapRef']['name']))) elif 'secretRef' in env_from_data: env_from.append( client.V1EnvFromSource(secret_ref=client.V1SecretEnvSource( env_from_data['secretRef']['name']))) container.env_from = env_from template_spec = client.V1PodSpec(containers=[container], restart_policy=data["job_restart_policy"]) if "volumes" in data: volumes_data = yaml.safe_load(data["volumes"]) volumes = [] if (isinstance(volumes_data, list)): for volume_data in volumes_data: volume = common.create_volume(volume_data) if volume: volumes.append(volume) else: volume = common.create_volume(volumes_data) if volume: volumes.append(volume) template_spec.volumes = volumes if "image_pull_secrets" in data: images_array = data["image_pull_secrets"].split(",") images = [] for image in images_array: images.append(client.V1LocalObjectReference(name=image)) template_spec.image_pull_secrets = images if "tolerations" in data: tolerations_data = yaml.safe_load(data["tolerations"]) tolerations = [] for toleration_data in tolerations_data: toleration = common.create_toleration(toleration_data) if toleration: tolerations.append(toleration) template_spec.tolerations = tolerations template = client.V1PodTemplateSpec(metadata=client.V1ObjectMeta( name=data["name"], labels=labels, annotations=annotations, ), spec=template_spec) spec = client.V1JobSpec(template=template) if "completions" in data: spec.completions = int(data["completions"]) if "selectors" in data: selectors_array = data["selectors"].split(',') selectors = dict(s.split('=') for s in selectors_array) spec.selector = selectors if "node_selector" in data: node_selectors_array = data["node_selector"].split(',') node_selectors = dict(s.split('=') for s in node_selectors_array) spec.nodeSelector = node_selectors if "parallelism" in data: spec.parallelism = int(data["parallelism"]) if "active_deadline_seconds" in data: spec.active_deadline_seconds = int(data["active_deadline_seconds"]) if "backoff_limit" in data: spec.backoff_limit = int(data["backoff_limit"]) job = client.V1Job(api_version=data["api_version"], kind='Job', metadata=meta, spec=spec) return job
def create_job_object(data): meta = client.V1ObjectMeta(name=data["name"], namespace=data["namespace"]) labels = None if "labels" in data: labels_array = data["labels"].split(',') labels = dict(s.split('=') for s in labels_array) meta.labels = labels annotations = None if "annotations" in data: annotations_array = data["annotations"].split(',') annotations = dict(s.split('=') for s in annotations_array) meta.annotations = annotations envs = [] if "environments" in data: envs_array = data["environments"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: envs.append(client.V1EnvVar(name=key, value=tmp_envs[key])) if "environments_secrets" in data: envs_array = data["environments_secrets"].splitlines() tmp_envs = dict(s.split('=', 1) for s in envs_array) for key in tmp_envs: if (":" in tmp_envs[key]): # passing secret env value = tmp_envs[key] secrets = value.split(':') secrect_key = secrets[1] secrect_name = secrets[0] envs.append( client.V1EnvVar( name=key, value="", value_from=client.V1EnvVarSource( secret_key_ref=client.V1SecretKeySelector( key=secrect_key, name=secrect_name)))) container = client.V1Container(name=data["container_name"], image=data["container_image"], image_pull_policy=data["image_pull_policy"]) if "container_command" in data: container.command = data["container_command"].split(' ') if "container_args" in data: args_array = data["container_args"].splitlines() container.args = args_array if "resources_requests" in data: resources_array = data["resources_requests"].split(",") tmp = dict(s.split('=', 1) for s in resources_array) container.resources = client.V1ResourceRequirements(requests=tmp) if "volume_mounts" in data: volumes_array = data["volume_mounts"].splitlines() tmp = dict(s.split('=', 1) for s in volumes_array) mounts = [] for key in tmp: mounts.append(client.V1VolumeMount(name=key, mount_path=tmp[key])) container.volume_mounts = mounts container.env = envs template_spec = client.V1PodSpec(containers=[container], restart_policy=data["job_restart_policy"]) if "volumes" in data: volumes_data = yaml.load(data["volumes"]) volumes = [] if (isinstance(volumes_data, list)): for volume_data in volumes_data: volume = common.create_volume(volume_data) if volume: volumes.append(volume) else: volume = common.create_volume(volumes_data) if volume: volumes.append(volume) template_spec.volumes = volumes template = client.V1PodTemplateSpec(metadata=client.V1ObjectMeta( name=data["name"], labels=labels, annotations=annotations, ), spec=template_spec) spec = client.V1JobSpec(template=template) if "completions" in data: spec.completions = int(data["completions"]) if "selectors" in data: selectors_array = data["selectors"].split(',') selectors = dict(s.split('=') for s in selectors_array) spec.selector = selectors if "parallelism" in data: spec.parallelism = int(data["parallelism"]) if "active_deadline_seconds" in data: spec.active_deadline_seconds = int(data["active_deadline_seconds"]) if "backoff_limit" in data: spec.backoff_limit = int(data["backoff_limit"]) job = client.V1Job(api_version=data["api_version"], kind='Job', metadata=meta, spec=spec) return job