diff options
Diffstat (limited to 'plugins/modules/vyos_user.py.preview')
| -rw-r--r-- | plugins/modules/vyos_user.py.preview | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/plugins/modules/vyos_user.py.preview b/plugins/modules/vyos_user.py.preview deleted file mode 100644 index 41e014d..0000000 --- a/plugins/modules/vyos_user.py.preview +++ /dev/null @@ -1,282 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# GNU General Public License v3.0+ - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -DOCUMENTATION = r""" ---- -module: vyos_user -short_description: Manage local users on VyOS via the REST API. -description: - - Manages local user accounts on VyOS devices using the HTTPS REST API. - - Mirrors C(vyos.vyos.vyos_user) but uses the HTTP API. -version_added: "1.0.0" -author: - - VyOS Community (@vyos) -options: - aggregate: - description: List of user definitions. Mutually exclusive with I(name). - type: list - elements: dict - aliases: [users, collection] - suboptions: - name: - description: Username. - type: str - required: true - full_name: - description: Full name. - type: str - configured_password: - description: Plaintext password (will be hashed on device). - type: str - no_log: true - encrypted_password: - description: Pre-hashed password string. - type: str - no_log: true - update_password: - description: When to update the password. - type: str - choices: [always, on_create] - level: - description: User privilege level. - type: str - choices: [admin, operator] - public_keys: - description: SSH public keys for authentication. - type: list - elements: dict - suboptions: - name: - description: Key identifier (e.g. user@host). - type: str - required: true - key: - description: Base64-encoded public key. - type: str - required: true - type: - description: Key type. - type: str - required: true - choices: [ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, - ecdsa-sha2-nistp384, ssh-ed25519, ecdsa-sha2-nistp521] - state: - description: Present or absent. - type: str - choices: [present, absent] - name: - description: Single username. Mutually exclusive with I(aggregate). - type: str - full_name: - description: Full name for the single user. - type: str - configured_password: - description: Plaintext password. - type: str - no_log: true - encrypted_password: - description: Pre-hashed password. - type: str - no_log: true - update_password: - type: str - choices: [always, on_create] - level: - type: str - choices: [admin, operator] - public_keys: - type: list - elements: dict - suboptions: - name: - type: str - required: true - key: - type: str - required: true - type: - type: str - required: true - state: - description: Whether to create (present) or remove (absent) the user. - type: str - choices: [present, absent] - default: present - hostname: - type: str - required: true - port: - type: int - default: 443 - api_key: - type: str - required: true - no_log: true - timeout: - type: int - default: 30 - verify_ssl: - type: bool - default: false -""" - -RETURN = r""" -commands: - description: set/delete commands issued. - returned: always - type: list -""" - -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.vyos.rest.plugins.module_utils.vyos_rest import ( - VYOS_REST_CONNECTION_ARGSPEC, - VyOSRestClient, - VyOSRestError, -) - - -_KEY_TYPES = [ - "ssh-dss", - "ssh-rsa", - "ecdsa-sha2-nistp256", - "ecdsa-sha2-nistp384", - "ssh-ed25519", - "ecdsa-sha2-nistp521", -] - - -def _apply_user(client, user_def, commands, update_password="always"): - name = user_def["name"] - base = ["system", "login", "user", name] - client.configure_set(base) - commands.append("set system login user {n}".format(n=name)) - - if user_def.get("full_name"): - client.configure_set(base + ["full-name"], user_def["full_name"]) - if user_def.get("level"): - client.configure_set(base + ["level"], user_def["level"]) - if user_def.get("configured_password") and update_password in ("always",): - client.configure_set( - base + ["authentication", "plaintext-password"], - user_def["configured_password"], - ) - commands.append( - "set system login user {n} authentication plaintext-password".format(n=name), - ) - if user_def.get("encrypted_password"): - client.configure_set( - base + ["authentication", "encrypted-password"], - user_def["encrypted_password"], - ) - for pk in user_def.get("public_keys") or []: - kb = base + ["authentication", "public-keys", pk["name"]] - client.configure_set(kb + ["key"], pk["key"]) - client.configure_set(kb + ["type"], pk["type"]) - commands.append( - "set system login user {n} authentication public-keys {k}".format( - n=name, - k=pk["name"], - ), - ) - - -def _delete_user(client, name, commands): - try: - client.configure_delete(["system", "login", "user", name]) - commands.append("delete system login user {n}".format(n=name)) - except VyOSRestError: - pass - - -def main(): - pk_spec = dict( - type="list", - elements="dict", - options=dict( - name=dict(type="str", required=True), - key=dict(type="str", required=True), - type=dict(type="str", required=True, choices=_KEY_TYPES), - ), - ) - user_spec = dict( - name=dict(type="str", required=True), - full_name=dict(type="str"), - configured_password=dict(type="str", no_log=True), - encrypted_password=dict(type="str", no_log=True), - update_password=dict(type="str", choices=["always", "on_create"]), - level=dict(type="str", choices=["admin", "operator"]), - public_keys=pk_spec, - state=dict(type="str", choices=["present", "absent"]), - ) - argument_spec = dict( - aggregate=dict( - type="list", - elements="dict", - aliases=["users", "collection"], - options=user_spec, - ), - name=dict(type="str"), - full_name=dict(type="str"), - configured_password=dict(type="str", no_log=True), - encrypted_password=dict(type="str", no_log=True), - update_password=dict(type="str", choices=["always", "on_create"]), - level=dict(type="str", choices=["admin", "operator"]), - public_keys=pk_spec, - state=dict(type="str", default="present", choices=["present", "absent"]), - ) - argument_spec.update(VYOS_REST_CONNECTION_ARGSPEC) - module = AnsibleModule( - argument_spec=argument_spec, - mutually_exclusive=[["aggregate", "name"]], - supports_check_mode=True, - ) - if module.check_mode: - module.exit_json(changed=True, commands=["(check mode)"]) - - client = VyOSRestClient(module) - commands = [] - changed = False - - # Build unified user list - users = module.params.get("aggregate") or [] - if module.params.get("name"): - users = [ - { - "name": module.params["name"], - "full_name": module.params.get("full_name"), - "configured_password": module.params.get("configured_password"), - "encrypted_password": module.params.get("encrypted_password"), - "update_password": module.params.get("update_password", "always"), - "level": module.params.get("level"), - "public_keys": module.params.get("public_keys"), - "state": module.params.get("state", "present"), - }, - ] - - try: - for u in users: - u_state = u.get("state") or module.params.get("state", "present") - if u_state == "absent": - _delete_user(client, u["name"], commands) - else: - _apply_user( - client, - u, - commands, - update_password=u.get("update_password") or "always", - ) - changed = True - except VyOSRestError as exc: - module.fail_json(msg=str(exc)) - - module.exit_json(changed=changed, commands=commands) - - -if __name__ == "__main__": - main() |
