Source code for saltext.vcf.states.vcf_vcfops_user
"""State module for VCF Operations local users."""
from saltext.vcf.clients import vcfops_auth as c
__virtualname__ = "vcf_vcfops_user"
def __virtual__():
return __virtualname__
def _ret(name):
return {"name": name, "changes": {}, "result": True, "comment": ""}
def _find_by_username(username, profile=None):
body = c.users_list(__opts__, profile=profile)
users = body.get("users") if isinstance(body, dict) else None
if not users:
return None
for user in users:
if user.get("username") == username:
return user
return None
[docs]
def present(
name,
password=None,
first_name="",
last_name="",
email="",
role_names=None,
profile=None,
):
"""Ensure user *name* exists. Role assignment is by ``role_names`` list."""
ret = _ret(name)
existing = _find_by_username(name, profile=profile)
spec = {
"username": name,
"firstName": first_name,
"lastName": last_name,
"emailAddress": email,
}
if password:
spec["password"] = password
if role_names is not None:
spec["roleNames"] = list(role_names)
if existing is not None:
ret["comment"] = f"User {name} already present"
return ret
if __opts__["test"]:
ret["result"] = None
ret["comment"] = f"User {name} would be created"
return ret
c.users_create(__opts__, spec, profile=profile)
ret["changes"] = {"new": name}
ret["comment"] = f"User {name} created"
return ret
def absent(name, profile=None):
ret = _ret(name)
existing = _find_by_username(name, profile=profile)
if existing is None:
ret["comment"] = f"User {name} already absent"
return ret
if __opts__["test"]:
ret["result"] = None
ret["comment"] = f"User {name} would be deleted"
return ret
c.users_delete(__opts__, existing["id"], profile=profile)
ret["changes"] = {"deleted": name}
ret["comment"] = f"User {name} deleted"
return ret