Exemplo n.º 1
0
    def get_cluster_info(self,
                         cluster_name,
                         cluster_id=None,
                         org=None,
                         vdc=None,
                         **kwargs):
        """Get cluster information using DEF API.

        :param str cluster_name: name of the cluster
        :param str vdc: name of vdc
        :param str org: name of org
        :param kwargs: *filter (dict): keys,values for DEF API query filter

        :return: cluster information
        :rtype: dict
        """
        if cluster_id:
            return self.get_cluster_info_by_id(cluster_id)
        filters = client_utils.construct_filters(org=org, vdc=vdc)
        entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
        def_entity = \
            entity_svc.get_native_rde_by_name_and_rde_version(
                cluster_name, self._server_rde_version, filters=filters)  # noqa: E501
        logger.CLIENT_LOGGER.debug(
            f"Defined entity info from server:{def_entity}")  # noqa: E501
        if not def_entity:
            logger.CLIENT_LOGGER.error(
                f"Cannot find native cluster with name {cluster_name}"
            )  # noqa: E501
            raise cse_exceptions.ClusterNotFoundError(
                f"Cluster '{cluster_name}' not found.")  # noqa: E501
        # TODO() relevant output
        if def_entity:
            return yaml.dump(asdict(def_entity.entity))
 def get_tkg_s_clusters_by_name(self, name, vdc=None, org=None):
     self.set_tenant_org_context(org_name=org)
     filters = {cli_constants.TKGEntityFilterKey.CLUSTER_NAME.value: name}
     if vdc:
         filters[cli_constants.TKGEntityFilterKey.VDC_NAME.value] = vdc
     filter_string = utils.construct_filter_string(filters)
     response = \
         self._tkg_s_client_api.list_tkg_clusters(
             f"{Vendor.VMWARE}/{Nss.TKG}/1.0.0",
             object_filter=filter_string)
     tkg_entities = []
     tkg_def_entities = []
     if response:
         tkg_entities = response[0]
         tkg_def_entities = response[3]['entityDetails']
     if len(tkg_entities) == 0:
         raise cse_exceptions.ClusterNotFoundError(
             f"TKG-S cluster with name '{name}' not found.")
     if len(tkg_entities) > 1:
         if not org:
             raise cse_exceptions.CseDuplicateClusterError(
                 f"Multiple clusters with the name '{name}' found."
                 " Please specify the org using --org flag.")
         raise cse_exceptions.CseDuplicateClusterError(
             f"Multiple clusters with the name '{name}' present in the"
             "same Organization. Please contact the administrator.")
     return tkg_entities, tkg_def_entities
Exemplo n.º 3
0
    def upgrade_cluster(self,
                        cluster_name,
                        template_name,
                        template_revision,
                        org_name=None,
                        ovdc_name=None):
        """Get the upgrade plan for given cluster.

        :param str cluster_name: name of the cluster
        :param str template_name: Name of the template the cluster should be
        upgraded to.
        :param str template_revision: Revision of the template the cluster
        should be upgraded to.
        :param org_name: name of the org
        :param ovdc_name: name of the vdc
        :return: string containing upgrade cluster task href
        :rtype: str
        """
        filters = client_utils.construct_filters(org=org_name, vdc=ovdc_name)
        entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
        current_entity = entity_svc.get_native_rde_by_name_and_rde_version(
            cluster_name, self._server_rde_version, filters=filters)
        if current_entity:
            current_entity.entity.spec.k8_distribution.template_name = template_name  # noqa: E501
            current_entity.entity.spec.k8_distribution.template_revision = template_revision  # noqa: E501
            return self.upgrade_cluster_by_cluster_id(
                current_entity.id,
                cluster_def_entity=asdict(current_entity))  # noqa: E501
        raise cse_exceptions.ClusterNotFoundError(
            f"Cluster '{cluster_name}' not found.")  # noqa: E501
Exemplo n.º 4
0
 def get_cluster_id_by_name(self, cluster_name, org=None, vdc=None):
     filters = client_utils.construct_filters(org=org, vdc=vdc)
     entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
     def_entity = entity_svc.get_native_rde_by_name_and_rde_version(
         cluster_name, self._server_rde_version, filters=filters)
     if not def_entity:
         raise cse_exceptions.ClusterNotFoundError(
             f"Cluster '{cluster_name}' not found.")  # noqa: E501
     return def_entity.id
Exemplo n.º 5
0
    def get_upgrade_plan(self, cluster_name, org=None, vdc=None):
        """Get the upgrade plan for given cluster.

        :param cluster_name: name of the cluster
        :param org: name of the org
        :param vdc: name of the vdc
        :return: upgrade plan info
        :rtype: dict
        """
        filters = client_utils.construct_filters(org=org, vdc=vdc)
        entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
        def_entity = entity_svc.get_native_rde_by_name_and_rde_version(
            cluster_name, self._server_rde_version, filters=filters)
        if def_entity:
            return self.get_upgrade_plan_by_cluster_id(def_entity.id)
        raise cse_exceptions.ClusterNotFoundError(
            f"Cluster '{cluster_name}' not found.")  # noqa: E501
Exemplo n.º 6
0
    def delete_nfs_node(self, cluster_name, node_name, org=None, vdc=None):
        """Delete nfs node given the cluster name and node name.

        :param str cluster_name: native cluster name
        :param str node_name: nfs-node name
        :param str org: name of the org
        :param str vdc: name of the vdc
        :return: string containing delete operation task href
        :rtype: str
        :raises ClusterNotFoundError
        """
        filters = client_utils.construct_filters(org=org, vdc=vdc)
        entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
        def_entity = entity_svc.get_native_rde_by_name_and_rde_version(
            cluster_name, self._server_rde_version, filters=filters)
        if def_entity:
            return self.delete_nfs_by_cluster_id(def_entity.id, node_name)
        raise cse_exceptions.ClusterNotFoundError(
            f"Cluster '{cluster_name}' not found.")  # noqa: E501
Exemplo n.º 7
0
    def _get_tkg_native_clusters_by_name(self,
                                         cluster_name: str,
                                         org=None,
                                         vdc=None):
        """Get native and TKG clusters by name.

        Assumption: Native clusters cannot have name collision among them.
        But there can be multiple TKG clusters with the same name and 2 or
        more TKG clusters can also have the same name.

        :param str cluster_name: Cluster name to search for
        :param str org: Org to filter by
        :param str vdc: VDC to filter by
        :returns: tkg entity or native def entity with entity properties and
            boolean indicating cluster type
        :rtype: (cluster, dict,  bool)
        """
        filters = client_utils.construct_filters(self._server_rde_version,
                                                 org=org,
                                                 vdc=vdc)
        entity_svc = def_entity_svc.DefEntityService(self._cloudapi_client)
        has_native_rights = True
        has_tkg_rights = True
        native_def_entity = None
        additional_entity_properties = None
        # NOTE: The following can throw error if invoked by users who
        # doesn't have the necessary rights.
        try:
            native_def_entity = \
                entity_svc.get_native_rde_by_name_and_rde_version(
                    cluster_name, self._server_rde_version,
                    filters=filters)
        except cse_exceptions.DefSchemaServiceError:
            # NOTE: 500 status code is returned which is not ideal
            # when user doesn't have native rights
            has_native_rights = False

        tkg_entity = []
        tkg_def_entity = []
        # NOTE: The following can throw error if invoked by users who
        # doesn't have the necessary rights.
        try:
            tkg_entity, tkg_def_entity = \
                self._tkgCluster.get_tkg_clusters_by_name(cluster_name,
                                                          vdc=vdc, org=org)
        except tkg_rest.ApiException as e:
            if e.status not in [
                    requests.codes.FORBIDDEN, requests.codes.UNAUTHORIZED
            ]:  # noqa: E501
                raise
            has_tkg_rights = False
        except cse_exceptions.ClusterNotFoundError:
            logger.CLIENT_LOGGER.debug(
                f"No TKG cluster with name {cluster_name}")  # noqa: E501
        if not (has_native_rights or has_tkg_rights):
            raise Exception("User cannot access native or TKG clusters."
                            " Please contact administrator")
        msg = "Multiple clusters with the same name found."
        if len(tkg_entity) > 0 and native_def_entity:
            # If org filter is not provided, ask the user to provide org
            # filter
            if not org:
                # handles the case where there is are TKG clusters and native
                # clusters with the same name in different organizations
                raise Exception(f"{msg} Please specify the org to use "
                                "using --org flag.")
            # handles the case where there is a TKG cluster and a native
            # native cluster with the same name in the same organization
            raise Exception(f"{msg} Please specify the k8-runtime to use using"
                            " --k8-runtime flag.")
        if not native_def_entity and len(tkg_entity) == 0:
            # handles the case where no clusters are found
            msg = f"Cluster '{cluster_name}' not found."
            logger.CLIENT_LOGGER.error(msg)
            raise cse_exceptions.ClusterNotFoundError(msg)
        if native_def_entity:
            cluster = native_def_entity
            is_native_cluster = True
        else:
            additional_entity_properties = tkg_def_entity[0]
            cluster = tkg_entity[0]
            is_native_cluster = False

        return cluster, additional_entity_properties, is_native_cluster