def create_kube_config(config_file: str) -> None: """Replicates the local kubeconfig file (pointed at by KUBECONFIG), as a ConfigMap.""" corev1 = client.CoreV1Api() print("Creating kube-config ConfigMap") dev_config = load_config(config_file) svc = corev1.read_namespaced_service("kubernetes", "default") kube_config_path = os.getenv("KUBECONFIG") if kube_config_path is None: raise ValueError("kube_config_path must not be None") with open(kube_config_path) as fd: kube_config = yaml.safe_load(fd.read()) if kube_config is None: raise ValueError("kube_config_path must not be None") kube_config["clusters"][0]["cluster"][ "server"] = "https://" + svc.spec.cluster_ip kube_config = yaml.safe_dump(kube_config) data = {"kubeconfig": kube_config} config_map = client.V1ConfigMap( metadata=client.V1ObjectMeta(name="kube-config"), data=data) k8s_conditions.ignore_if_already_exists( lambda: corev1.create_namespaced_config_map(dev_config.namespace, config_map))
def _prepare_testrunner_environment(): """ _prepare_testrunner_environment ensures the ServiceAccount, Role and ClusterRole and bindings are created for the test runner. """ rbacv1 = client.RbacAuthorizationV1Api() corev1 = client.CoreV1Api() dev_config = load_config() _delete_testrunner_pod() print("Creating Role") k8s_conditions.ignore_if_already_exists( lambda: rbacv1.create_namespaced_role(dev_config.namespace, _load_testrunner_role())) print("Creating Role Binding") k8s_conditions.ignore_if_already_exists( lambda: rbacv1.create_namespaced_role_binding( dev_config.namespace, _load_testrunner_role_binding())) print("Creating Cluster Role Binding") k8s_conditions.ignore_if_already_exists( lambda: rbacv1.create_cluster_role_binding( _load_testrunner_cluster_role_binding())) print("Creating ServiceAccount") k8s_conditions.ignore_if_already_exists( lambda: corev1.create_namespaced_service_account( dev_config.namespace, _load_testrunner_service_account()))
def deploy_operator() -> None: """ deploy_operator ensures the CRDs are created, and als creates all the required ServiceAccounts, Roles and RoleBindings for the operator, and then creates the operator deployment. """ appsv1 = client.AppsV1Api() corev1 = client.CoreV1Api() rbacv1 = client.RbacAuthorizationV1Api() dev_config = load_config() _ensure_crds() k8s_conditions.ignore_if_already_exists( lambda: rbacv1.create_namespaced_role(dev_config.namespace, _load_operator_role())) k8s_conditions.ignore_if_already_exists( lambda: rbacv1.create_namespaced_role_binding( dev_config.namespace, _load_operator_role_binding())) k8s_conditions.ignore_if_already_exists( lambda: corev1.create_namespaced_service_account( dev_config.namespace, _load_operator_service_account())) k8s_conditions.ignore_if_already_exists( lambda: appsv1.create_namespaced_deployment( dev_config.namespace, _load_operator_deployment( f"{dev_config.repo_url}/mongodb-kubernetes-operator"), ))