Source code for saltext.vmware.modules.tag

# Copyright 2021 VMware, Inc.
# SPDX-License: Apache-2.0
import logging

import salt.exceptions
import saltext.vmware.utils.common as utils_common
import saltext.vmware.utils.connect as connect

log = logging.getLogger(__name__)

try:
    from pyVmomi import vim

    HAS_PYVMOMI = True
except ImportError:
    HAS_PYVMOMI = False


__virtualname__ = "vmware_tag"
__func_alias__ = {"list_": "list"}


def __virtual__():
    if not HAS_PYVMOMI:
        return False, "Unable to import pyVmomi module."
    return __virtualname__


[docs]def create(tag_name, category_id, description=""): """ Create a new tag. tag_name Name of tag. category_id (string) Category ID of type: com.vmware.cis.tagging.Tag. description (optional) Description for the tag being created. """ data = { "create_spec": {"category_id": category_id, "description": description, "name": tag_name} } response = connect.request( "/rest/com/vmware/cis/tagging/tag", "POST", body=data, opts=__opts__, pillar=__pillar__ ) response = response["response"].json() return response["value"]
[docs]def get(tag_id): """ Returns info on given tag. tag_id (string) Tag ID of type: com.vmware.cis.tagging.Tag. """ url = f"/rest/com/vmware/cis/tagging/tag/id:{tag_id}" response = connect.request(url, "GET", opts=__opts__, pillar=__pillar__) response = response["response"].json() return response["value"]
[docs]def update(tag_id, tag_name=None, description=None): """ Updates give tag. tag_id (string) Tag ID of type: com.vmware.cis.tagging.Tag. tag_name Name of tag. description (optional) Description for the tag being created. """ spec = {"update_spec": {}} if tag_name: spec["update_spec"]["name"] = tag_name if description: spec["update_spec"]["description"] = description url = f"/rest/com/vmware/cis/tagging/tag/id:{tag_id}" response = connect.request(url, "PATCH", body=spec, opts=__opts__, pillar=__pillar__) if response["response"].status_code == 200: return "updated" return { "tag": "failed to update", "status_code": response["response"].status_code, "reason": response["response"].reason, }
[docs]def delete(tag_id): """ Delete given tag. tag_id (string) Tag ID of type: com.vmware.cis.tagging.Tag. """ url = f"/rest/com/vmware/cis/tagging/tag/id:{tag_id}" response = connect.request(url, "DELETE", opts=__opts__, pillar=__pillar__) if response["response"].status_code == 200: return "deleted" return { "tag": "failed to update", "status_code": response.status_code, "reason": response.reason, }
[docs]def list_(): """ Lists IDs for all the tags on a given vCenter. """ response = connect.request( "/rest/com/vmware/cis/tagging/tag", "GET", opts=__opts__, pillar=__pillar__ ) response = response["response"].json() return response["value"]
[docs]def list_category(): """ Lists IDs for all the categories on a given vCenter. """ response = connect.request( "/rest/com/vmware/cis/tagging/category", "GET", opts=__opts__, pillar=__pillar__ ) response = response["response"].json() return response["value"]
[docs]def get_category(category_id): """ Returns info on given category. category_id (string) Category ID of type: com.vmware.cis.tagging.Category. """ url = f"/rest/com/vmware/cis/tagging/category/id:{category_id}" response = connect.request(url, "GET", opts=__opts__, pillar=__pillar__) response = response["response"].json() return response["value"]
[docs]def create_category(category_name, associable_types, cardinality, description=""): """ Create a new category. category_name The display name of the category. associable_types (list) Object types to which this category’s tags can be attached. cardinality The CategoryModel.Cardinality enumerated type defines the number of tags in a category that can be assigned to an object. SINGLE, MULTIPLE description (optional) The description of the category. """ data = { "create_spec": { "associable_types": associable_types, "cardinality": cardinality, "description": description, "name": category_name, } } response = connect.request( "/rest/com/vmware/cis/tagging/category", "POST", body=data, opts=__opts__, pillar=__pillar__ ) response = response["response"].json() return response["value"]
[docs]def update_category( category_id, category_name=None, associable_types=None, cardinality=None, description="" ): """ Update a new category. category_id The identifier of the category to be updated. The parameter must be an identifier for the resource type: com.vmware.cis.tagging.Category. category_name The display name of the category. associable_types (list) Object types to which this categorys tags can be attached. cardinality The CategoryModel.Cardinality enumerated type defines the number of tags in a category that can be assigned to an object. SINGLE, MULTIPLE description (optional) The description of the category. """ spec = {"update_spec": {}} if category_name: spec["update_spec"]["name"] = category_name if associable_types: spec["update_spec"]["associable_types"] = associable_types if cardinality: spec["update_spec"]["cardinality"] = cardinality if description: spec["update_spec"]["description"] = description url = f"/rest/com/vmware/cis/tagging/category/id:{category_id}" response = connect.request(url, "PATCH", body=spec, opts=__opts__, pillar=__pillar__) if response["response"].status_code == 200: return "updated" return { "category": "failed to update", "status_code": response["response"].status_code, "reason": response["response"].reason, }
[docs]def delete_category(category_id): """ Delete given category. category_id The identifier of category to be deleted. The parameter must be an identifier for the resource type: com.vmware.cis.tagging.Category. """ url = f"/rest/com/vmware/cis/tagging/category/id:{category_id}" response = connect.request(url, "DELETE", opts=__opts__, pillar=__pillar__) if response["response"].status_code == 200: return "deleted" return { "category": "failed to update", "status_code": response.status_code, "reason": response.reason, }