Source code for saltext.vcf.clients.sddc_personalities

"""SDDC Manager cluster personalities (/v1/personalities).

A *personality* is a captured vSphere Lifecycle Manager cluster image
(base image + add-ons + components + firmware) that SDDC Manager can
reuse as a standard baseline when creating or upgrading clusters. The
Async Patch Tool workflow can produce a personality from a patched
cluster and register it here so subsequent clusters get the same image.
"""

import requests

from saltext.vcf.utils import sddc

PATH = "/v1/personalities"


[docs] def list_(opts, personality_name=None, cluster_id=None, profile=None): """List personalities, optionally filtered by name or seed cluster id.""" params = {} if personality_name is not None: params["personalityName"] = personality_name if cluster_id is not None: params["clusterId"] = cluster_id return sddc.api_get(opts, PATH, params=params or None, profile=profile)
def get(opts, personality_id, profile=None): return sddc.api_get(opts, f"{PATH}/{personality_id}", profile=profile) def get_or_none(opts, personality_id, profile=None): try: return get(opts, personality_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, personality_spec, profile=None): """Import a new personality. *personality_spec* per SDDC Manager API.""" return sddc.api_post(opts, PATH, body=personality_spec, profile=profile)
[docs] def delete(opts, personality_id, profile=None): """Delete a personality by id.""" return sddc.api_delete(opts, f"{PATH}/{personality_id}", profile=profile)
[docs] def rename(opts, personality_id, personality_name, profile=None): """Rename a personality.""" return sddc.api_patch( opts, f"{PATH}/{personality_id}", body={"personalityName": personality_name}, profile=profile, )
[docs] def upload_files(opts, upload_spec, profile=None): """Upload the raw ZIP/JSON files that back a personality. *upload_spec* is the ``PersonalityUploadSpec`` body per SDDC Manager API (e.g. ``{"filePath": "/nfs/.../personality.zip", "personalityName": "cluster-image-8.0u3"}``). The two-step flow is: upload files first, then call :func:`create` referencing the uploaded file id. """ return sddc.api_put(opts, f"{PATH}/files", body=upload_spec, profile=profile)