def space_check(self, context_src, local_dump_file): """ Method to read the local file size and checking if the remote pod has enough free space available :param context_src: :param local_dump_file: :return: """ context_dest = self.arguments.val("tcontext") namespace_src = self.arguments.val("snamespace") namespace_dest = self.arguments.val("tnamespace") pod_src = self.arguments.val("spod") pod_dest = self.arguments.val("tpod") file_size_kb = (os.path.getsize(local_dump_file) // 1024) file_size_mb = (file_size_kb // 1024) + 1 if file_size_kb < 10000: print("file size:", file_size_kb, "KB") else: print("file size:", file_size_mb, "MB") # switch kube-ctl context load_kube(context_dest) has_enough_space = EnoughSpaceCheck(context_src, namespace_src, pod_src, file_size_mb).run() if not has_enough_space: raise SystemExit( "Not enough space on target pod " + pod_dest + " in namespace " + namespace_dest + " and context " + context_dest)
def confirm_cluster_role(context): if context is None: raise SystemExit("invalid empty context for ClusterRole given") load_kube(context) api = client.RbacAuthorizationV1Api() return general_confirm("ClusterRole", lambda: api.list_cluster_role(), lambda i: i.metadata.name)
def run_command_in_pod(context, namespace, pod, command): """ returns string or None on failure :param context: :param namespace: :param pod: :param command: :return: """ if context is None: raise SystemExit("Null context given") load_kube(context) api = core_v1_api.CoreV1Api() try: command_ = init_exec_command + ["-c", command] resp = stream.stream(api.connect_get_namespaced_pod_exec, name=pod, namespace=namespace, command=command_, stderr=True, stdin=False, stdout=True, tty=False) return resp except ApiException as err: print("Something went wrong while connecting to pod", pod, "in namespace", namespace) print(err) return None
def confirm_storage_class(context): if context is None: raise SystemExit("invalid empty context for StorageClass given") load_kube(context) api = client.StorageV1Api() return general_confirm("StorageClass", lambda: api.list_storage_class(), lambda i: i.metadata.name)
def confirm_node(context): if context is None: raise SystemExit("invalid empty context for Node given") load_kube(context) api = client.CoreV1Api() return general_confirm("Node", lambda: api.list_node(), lambda i: i.metadata.name)
def confirm_priority_class(context): if context is None: raise SystemExit("invalid empty context for PriorityClass given") load_kube(context) api = client.SchedulingV1beta1Api() return general_confirm("PriorityClass", lambda: api.list_priority_class(), lambda i: i.metadata.name)
def confirm_pod_security_policy(context): if context is None: raise SystemExit("invalid empty context for PodSecurityPolicy given") load_kube(context) api = client.PolicyV1beta1Api() return general_confirm("PodSecurityPolicy", lambda: api.list_pod_security_policy(), lambda i: i.metadata.name)
def confirm_persistent_volume(context): if context is None: raise SystemExit("invalid empty context for PersistentVolume given") load_kube(context) api = client.CoreV1Api() return general_confirm("PersistentVolume", lambda: api.list_persistent_volume(), lambda i: i.metadata.name)
def confirm_volume_attachment(context): if context is None: raise SystemExit("invalid empty context for VolumeAttachment given") load_kube(context) api = client.StorageV1Api() return general_confirm("VolumeAttachment", lambda: api.list_volume_attachment(), lambda i: i.metadata.name)
def apply_kube_yaml(context, abs_file_location): if context is None: raise SystemExit('Null context given') load_kube(context) apply_cmd = "kubectl apply -f {0} --context {1}".format( abs_file_location, context) print('Executing cmd: %s' % apply_cmd) output = subprocess.check_output(apply_cmd, shell=True) print(str(bytes(output), 'utf-8'))
def confirm_certificate_signing_request(context): if context is None: raise SystemExit( "invalid empty context for CertificateSigningRequest given") load_kube(context) api = client.CertificatesV1beta1Api() return general_confirm("CertificateSigningRequest", lambda: api.list_certificate_signing_request(), lambda i: i.metadata.name)
def run(self): load_kube(self.context) cmd = "kubectl cp {0} {1}/{2}:{3}".format(self.local_source_file, self.namespace, self.pod, self.dest_file_in_pod) print("executing:", cmd) process = subprocess.run(cmd, shell=True) print(process)
def confirm_custom_resource_definition(context): if context is None: raise SystemExit( "invalid empty context for CustomResourceDefinition given") load_kube(context) api = client.ApiextensionsV1beta1Api() return general_confirm("CustomResourceDefinition", lambda: api.list_custom_resource_definition(), lambda i: i.metadata.name)
def confirm_role(context, namespace): if context is None: raise SystemExit("invalid empty context for Role given") if namespace is None: raise SystemExit("invalid empty namespace for Role given") load_kube(context) api = client.RbacAuthorizationV1Api() return general_confirm("Role", lambda: api.list_namespaced_role(namespace), lambda i: i.metadata.name)
def remove_cluster_role_binding(context, name): if context is None: raise SystemExit("invalid empty context for ClusterRoleBinding given") if name is None: raise SystemExit("invalid empty name for ClusterRoleBinding given") load_kube(context) api = client.RbacAuthorizationV1Api() ret, status, _ = api.delete_cluster_role_binding_with_http_info(name) handle_status(ret, status, "ClusterRoleBinding", None, name)
def remove_pod_security_policy(context, name): if context is None: raise SystemExit("invalid empty context for PodSecurityPolicy given") if name is None: raise SystemExit("invalid empty name for PodSecurityPolicy given") load_kube(context) api = client.PolicyV1beta1Api() ret, status, _ = api.delete_pod_security_policy_with_http_info(name) handle_status(ret, status, "PodSecurityPolicy", None, name)
def remove_volume_attachment(context, name): if context is None: raise SystemExit("invalid empty context for VolumeAttachment given") if name is None: raise SystemExit("invalid empty name for VolumeAttachment given") load_kube(context) api = client.StorageV1Api() ret, status, _ = api.delete_volume_attachment_with_http_info(name) handle_status(ret, status, "VolumeAttachment", None, name)
def remove_storage_class(context, name): if context is None: raise SystemExit("invalid empty context for StorageClass given") if name is None: raise SystemExit("invalid empty name for StorageClass given") load_kube(context) api = client.StorageV1Api() ret, status, _ = api.delete_storage_class_with_http_info(name) handle_status(ret, status, "StorageClass", None, name)
def remove_priority_class(context, name): if context is None: raise SystemExit("invalid empty context for PriorityClass given") if name is None: raise SystemExit("invalid empty name for PriorityClass given") load_kube(context) api = client.SchedulingV1beta1Api() ret, status, _ = api.delete_priority_class_with_http_info(name) handle_status(ret, status, "PriorityClass", None, name)
def confirm_lease(context, namespace): if context is None: raise SystemExit("invalid empty context for Lease given") if namespace is None: raise SystemExit("invalid empty namespace for Lease given") load_kube(context) api = client.CoordinationV1beta1Api() return general_confirm("Lease", lambda: api.list_namespaced_lease(namespace), lambda i: i.metadata.name)
def confirm_endpoints(context, namespace): if context is None: raise SystemExit("invalid empty context for Endpoints given") if namespace is None: raise SystemExit("invalid empty namespace for Endpoints given") load_kube(context) api = client.CoreV1Api() return general_confirm("Endpoints", lambda: api.list_namespaced_endpoints(namespace), lambda i: i.metadata.name)
def remove_node(context, name): if context is None: raise SystemExit("invalid empty context for Node given") if name is None: raise SystemExit("invalid empty name for Node given") load_kube(context) api = client.CoreV1Api() ret, status, _ = api.delete_node_with_http_info(name) handle_status(ret, status, "Node", None, name)
def confirm_cron_job(context, namespace): if context is None: raise SystemExit("invalid empty context for CronJob given") if namespace is None: raise SystemExit("invalid empty namespace for CronJob given") load_kube(context) api = client.BatchV1beta1Api() return general_confirm( "CronJob", lambda: api.list_namespaced_cron_job(namespace=namespace), lambda i: i.metadata.name)
def wait_for_node_is_away(context, name): if name is None: raise SystemExit("invalid empty name for Node given") if context is None: raise SystemExit("invalid empty name context given") load_kube(context) print("check removal of", "Node", name) api = client.CoreV1Api() return general_away_check(None, "Node", name, lambda: api.read_node_with_http_info(name))
def wait_for_cluster_role_is_up(context, name): if name is None: raise SystemExit("invalid empty name for ClusterRole given") if context is None: raise SystemExit("invalid empty name context given") load_kube(context) print("check availability of", "ClusterRole", name) api = client.RbacAuthorizationV1Api() return general_up_check(None, "ClusterRole", name, lambda: api.read_cluster_role_with_http_info(name))
def confirm_ingress(context, namespace): if context is None: raise SystemExit("invalid empty context for Ingress given") if namespace is None: raise SystemExit("invalid empty namespace for Ingress given") load_kube(context) api = client.ExtensionsV1beta1Api() return general_confirm( "Ingress", lambda: api.list_namespaced_ingress(namespace=namespace), lambda i: i.metadata.name)
def confirm_resource_quota(context, namespace): if context is None: raise SystemExit("invalid empty context for ResourceQuota given") if namespace is None: raise SystemExit("invalid empty namespace for ResourceQuota given") load_kube(context) api = client.CoreV1Api() return general_confirm( "ResourceQuota", lambda: api.list_namespaced_resource_quota(namespace), lambda i: i.metadata.name)
def confirm_service(context, namespace): if context is None: raise SystemExit("invalid empty context for Service given") if namespace is None: raise SystemExit("invalid empty namespace for Service given") load_kube(context) api = client.CoreV1Api() return general_confirm( "Service", lambda: api.list_namespaced_service(namespace=namespace), lambda i: i.metadata.name)
def wait_for_volume_attachment_is_up(context, name): if name is None: raise SystemExit("invalid empty name for VolumeAttachment given") if context is None: raise SystemExit("invalid empty name context given") load_kube(context) print("check availability of", "VolumeAttachment", name) api = client.StorageV1Api() return general_up_check( None, "VolumeAttachment", name, lambda: api.read_volume_attachment_with_http_info(name))
def confirm_network_policy(context, namespace): if context is None: raise SystemExit("invalid empty context for NetworkPolicy given") if namespace is None: raise SystemExit("invalid empty namespace for NetworkPolicy given") load_kube(context) api = client.ExtensionsV1beta1Api() return general_confirm( "NetworkPolicy", lambda: api.list_namespaced_network_policy(namespace=namespace), lambda i: i.metadata.name)