Source code for saltext.vcf.clients.vcenter_resource_pool

"""vCenter resource pool."""

import requests

from saltext.vcf.utils import vcenter

PATH = "/api/vcenter/resource-pool"


def list_(opts, profile=None):
    return vcenter.api_get(opts, PATH, profile=profile)


def get(opts, rp_id, profile=None):
    return vcenter.api_get(opts, f"{PATH}/{rp_id}", profile=profile)


def get_or_none(opts, rp_id, profile=None):
    try:
        return get(opts, rp_id, profile=profile)
    except requests.HTTPError as exc:
        if exc.response is not None and exc.response.status_code == 404:
            return None
        raise


[docs] def create(opts, name, parent, **spec): """Create a resource pool under *parent* resource pool id.""" body = {"name": name, "parent": parent} body.update(spec) return vcenter.api_post(opts, PATH, body=body)
def delete(opts, rp_id, profile=None): return vcenter.api_delete(opts, f"{PATH}/{rp_id}", profile=profile)
[docs] def tree(opts, profile=None): """Return ``{root_rp_id: {pool: {name, children: [...]}}}``. REST ``list_()`` returns only ``{resource_pool, name}``, so this walks each pool's detail (``get()``) to find its parent and composes the tree in Python. Pools whose parent is not in the result (cluster-root pools) become top-level keys. """ pools = list_(opts, profile=profile) nodes = {} for p in pools: rp_id = p["resource_pool"] detail = get(opts, rp_id, profile=profile) nodes[rp_id] = { "resource_pool": rp_id, "name": p.get("name") or detail.get("name"), "parent": detail.get("parent"), "children": [], } roots = {} for rp_id, node in nodes.items(): parent = node.get("parent") if parent and parent in nodes: nodes[parent]["children"].append(node) else: roots[rp_id] = node return roots