def _create_cluster(self, cluster_name, node_count, pks_plan, pks_ext_host, compute_profile=None, **kwargs): """Create cluster in PKS environment. :param str cluster_name: Name of the cluster :param str plan: PKS plan. It should be one of the three plans that PKS supports. :param str external_host_name: User-preferred external hostname of the K8 cluster :param str compute_profile: Name of the compute profile :return: Details of the cluster :rtype: dict """ # TODO(ClusterSpec) Create an inner class "ClusterSpec" # in abstract_broker.py and have subclasses define and use it # as instance variable. # Method 'Create_cluster' in VcdBroker and PksBroker should take # ClusterSpec either as a param (or) # read from instance variable (if needed only). compute_profile = compute_profile \ if compute_profile else self.compute_profile cluster_api = ClusterApi(api_client=self.pks_client) cluster_params = \ ClusterParameters(kubernetes_master_host=pks_ext_host, kubernetes_worker_instances=node_count) cluster_request = ClusterRequest(name=cluster_name, plan_name=pks_plan, parameters=cluster_params, compute_profile_name=compute_profile) LOGGER.debug(f"Sending request to PKS: {self.pks_host_uri} to create " f"cluster of name: {cluster_name}") try: cluster = cluster_api.add_cluster(cluster_request) except ApiException as err: LOGGER.debug(f"Creating cluster {cluster_name} in PKS failed with " f"error:\n {err}") raise PksServerError(err.status, err.body) cluster_dict = cluster.to_dict() # Flattening the dictionary cluster_params_dict = cluster_dict.pop('parameters') cluster_dict.update(cluster_params_dict) LOGGER.debug(f"PKS: {self.pks_host_uri} accepted the request to create" f" cluster: {cluster_name}") # TODO() access self.pks_ctx to get hold of nsxt_info and create dfw # rules return cluster_dict
def _create_cluster(self, *args, cluster_name, num_workers, pks_plan_name, pks_ext_host): """Create cluster in PKS environment. Creates Distributed Firewall rules in NSX-T to isolate the cluster network from other clusters. :param str cluster_name: Name of the cluster :param str plan: PKS plan. It should be one of the three plans that PKS supports. :param str external_host_name: User-preferred external hostname of the K8 cluster :return: Details of the cluster :rtype: dict """ cluster_api = ClusterApi(api_client=self.client) cluster_params = \ ClusterParameters(kubernetes_master_host=pks_ext_host, kubernetes_worker_instances=num_workers) cluster_request = \ ClusterRequest(name=cluster_name, plan_name=pks_plan_name, parameters=cluster_params, compute_profile_name=self.compute_profile) try: LOGGER.debug( f"Sending request to PKS: {self.pks_host_uri} to create " f"cluster of name: {cluster_name}") cluster = cluster_api.add_cluster(cluster_request) LOGGER.debug( f"PKS: {self.pks_host_uri} accepted the request to create" f" cluster: {cluster_name}") except ApiException as err: LOGGER.debug(f"Creating cluster {cluster_name} in PKS failed with " f"error:\n {err}") raise PksServerError(err.status, err.body) cluster_info = cluster.to_dict() # Flattening the dictionary cluster_params_dict = cluster_info.pop('parameters') cluster_info.update(cluster_params_dict) return cluster_info
def create_cluster(self, name, plan, external_host_name='cluster.pks.local', network_profile=None, compute_profile=None): """Create cluster in PKS environment. :param str name: Name of the cluster :param str plan: PKS plan. It should be one of {Plan 1, Plan 2, Plan 3} that PKS supports. :param str external_host_name: User-preferred external hostname of the K8 cluster :param str network_profile: Name of the network profile :param str compute_profile: Name of the compute profile :return: Details of the cluster. :rtype: dict """ # TODO() Invalidate cluster names containing '-' character. result = {} result['body'] = [] cluster_api = ClusterApi(api_client=self.pks_client) cluster_params = ClusterParameters( kubernetes_master_host=external_host_name, nsxt_network_profile=network_profile, compute_profile=compute_profile) cluster_request = ClusterRequest(name=name, plan_name=plan, parameters=cluster_params) LOGGER.debug(f'Sending request to PKS: {self.host} to create cluster' f' of name: {name}') cluster = cluster_api.add_cluster(cluster_request) cluster_dict = cluster.to_dict() cluster_params_dict = cluster_dict.pop('parameters') cluster_dict.update(cluster_params_dict) LOGGER.debug(f'PKS: {self.host} accepted the request to create' f' cluster: {name}') result['body'] = cluster_dict result['status_code'] = ACCEPTED return result