summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/network/cloudengine/ce_snmp_user.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/network/cloudengine/ce_snmp_user.py')
-rw-r--r--lib/ansible/modules/network/cloudengine/ce_snmp_user.py1049
1 files changed, 0 insertions, 1049 deletions
diff --git a/lib/ansible/modules/network/cloudengine/ce_snmp_user.py b/lib/ansible/modules/network/cloudengine/ce_snmp_user.py
deleted file mode 100644
index f2b0b3b18d..0000000000
--- a/lib/ansible/modules/network/cloudengine/ce_snmp_user.py
+++ /dev/null
@@ -1,1049 +0,0 @@
-#!/usr/bin/python
-#
-# This file is part of Ansible
-#
-# Ansible is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Ansible is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
-#
-
-from __future__ import (absolute_import, division, print_function)
-__metaclass__ = type
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
-DOCUMENTATION = '''
----
-module: ce_snmp_user
-version_added: "2.4"
-short_description: Manages SNMP user configuration on HUAWEI CloudEngine switches.
-description:
- - Manages SNMP user configurations on CloudEngine switches.
-author:
- - wangdezhuang (@QijunPan)
-notes:
- - This module requires the netconf system service be enabled on the remote device being managed.
- - Recommended connection is C(netconf).
- - This module also works with C(local) connections for legacy playbooks.
-options:
- acl_number:
- description:
- - Access control list number.
- usm_user_name:
- description:
- - Unique name to identify the USM user.
- aaa_local_user:
- description:
- - Unique name to identify the local user.
- remote_engine_id:
- description:
- - Remote engine id of the USM user.
- user_group:
- description:
- - Name of the group where user belongs to.
- auth_protocol:
- description:
- - Authentication protocol.
- choices: ['noAuth', 'md5', 'sha']
- auth_key:
- description:
- - The authentication password. Password length, 8-255 characters.
- priv_protocol:
- description:
- - Encryption protocol.
- choices: ['noPriv', 'des56', '3des168', 'aes128', 'aes192', 'aes256']
- priv_key:
- description:
- - The encryption password. Password length 8-255 characters.
-'''
-
-EXAMPLES = '''
-
-- name: CloudEngine snmp user test
- hosts: cloudengine
- connection: local
- gather_facts: no
- vars:
- cli:
- host: "{{ inventory_hostname }}"
- port: "{{ ansible_ssh_port }}"
- username: "{{ username }}"
- password: "{{ password }}"
- transport: cli
-
- tasks:
-
- - name: "Config SNMP usm user"
- ce_snmp_user:
- state: present
- usm_user_name: wdz_snmp
- remote_engine_id: 800007DB03389222111200
- acl_number: 2000
- user_group: wdz_group
- provider: "{{ cli }}"
-
- - name: "Undo SNMP usm user"
- ce_snmp_user:
- state: absent
- usm_user_name: wdz_snmp
- remote_engine_id: 800007DB03389222111200
- acl_number: 2000
- user_group: wdz_group
- provider: "{{ cli }}"
-
- - name: "Config SNMP local user"
- ce_snmp_user:
- state: present
- aaa_local_user: wdz_user
- auth_protocol: md5
- auth_key: huawei123
- priv_protocol: des56
- priv_key: huawei123
- provider: "{{ cli }}"
-
- - name: "Config SNMP local user"
- ce_snmp_user:
- state: absent
- aaa_local_user: wdz_user
- auth_protocol: md5
- auth_key: huawei123
- priv_protocol: des56
- priv_key: huawei123
- provider: "{{ cli }}"
-'''
-
-RETURN = '''
-changed:
- description: check to see if a change was made on the device
- returned: always
- type: bool
- sample: true
-proposed:
- description: k/v pairs of parameters passed into module
- returned: always
- type: dict
- sample: {"acl_number": "2000", "remote_engine_id": "800007DB03389222111200",
- "state": "present", "user_group": "wdz_group",
- "usm_user_name": "wdz_snmp"}
-existing:
- description: k/v pairs of existing aaa server
- returned: always
- type: dict
- sample: {"snmp local user": {"local_user_info": []},
- "snmp usm user": {"usm_user_info": []}}
-end_state:
- description: k/v pairs of aaa params after module execution
- returned: always
- type: dict
- sample: {"snmp local user": {"local_user_info": []},
- "snmp usm user": {"usm_user_info": [{"aclNumber": "2000", "engineID": "800007DB03389222111200",
- "groupName": "wdz_group", "userName": "wdz_snmp"}]}}
-updates:
- description: command sent to the device
- returned: always
- type: list
- sample: ["snmp-agent remote-engineid 800007DB03389222111200 usm-user v3 wdz_snmp wdz_group acl 2000"]
-'''
-
-from xml.etree import ElementTree
-from ansible.module_utils.basic import AnsibleModule
-from ansible.module_utils.network.cloudengine.ce import get_nc_config, set_nc_config
-from ansible.module_utils.network.cloudengine.ce import ce_argument_spec
-
-# get snmp v3 USM user
-CE_GET_SNMP_V3_USM_USER_HEADER = """
- <filter type="subtree">
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <usmUsers>
- <usmUser>
- <userName></userName>
- <remoteEngineID></remoteEngineID>
- <engineID></engineID>
-"""
-CE_GET_SNMP_V3_USM_USER_TAIL = """
- </usmUser>
- </usmUsers>
- </snmp>
- </filter>
-"""
-# merge snmp v3 USM user
-CE_MERGE_SNMP_V3_USM_USER_HEADER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <usmUsers>
- <usmUser operation="merge">
- <userName>%s</userName>
- <remoteEngineID>%s</remoteEngineID>
- <engineID>%s</engineID>
-"""
-CE_MERGE_SNMP_V3_USM_USER_TAIL = """
- </usmUser>
- </usmUsers>
- </snmp>
- </config>
-"""
-# create snmp v3 USM user
-CE_CREATE_SNMP_V3_USM_USER_HEADER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" format-version="1.0" content-version="1.0">
- <usmUsers>
- <usmUser operation="create">
- <userName>%s</userName>
- <remoteEngineID>%s</remoteEngineID>
- <engineID>%s</engineID>
-"""
-CE_CREATE_SNMP_V3_USM_USER_TAIL = """
- </usmUser>
- </usmUsers>
- </snmp>
- </config>
-"""
-# delete snmp v3 USM user
-CE_DELETE_SNMP_V3_USM_USER_HEADER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <usmUsers>
- <usmUser operation="delete">
- <userName>%s</userName>
- <remoteEngineID>%s</remoteEngineID>
- <engineID>%s</engineID>
-"""
-CE_DELETE_SNMP_V3_USM_USER_TAIL = """
- </usmUser>
- </usmUsers>
- </snmp>
- </config>
-"""
-
-# get snmp v3 aaa local user
-CE_GET_SNMP_V3_LOCAL_USER = """
- <filter type="subtree">
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <localUsers>
- <localUser>
- <userName></userName>
- <authProtocol></authProtocol>
- <authKey></authKey>
- <privProtocol></privProtocol>
- <privKey></privKey>
- </localUser>
- </localUsers>
- </snmp>
- </filter>
-"""
-# merge snmp v3 aaa local user
-CE_MERGE_SNMP_V3_LOCAL_USER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <localUsers>
- <localUser operation="merge">
- <userName>%s</userName>
- <authProtocol>%s</authProtocol>
- <authKey>%s</authKey>
- <privProtocol>%s</privProtocol>
- <privKey>%s</privKey>
- </localUser>
- </localUsers>
- </snmp>
- </config>
-"""
-# create snmp v3 aaa local user
-CE_CREATE_SNMP_V3_LOCAL_USER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <localUsers>
- <localUser operation="create">
- <userName>%s</userName>
- <authProtocol>%s</authProtocol>
- <authKey>%s</authKey>
- <privProtocol>%s</privProtocol>
- <privKey>%s</privKey>
- </localUser>
- </localUsers>
- </snmp>
- </config>
-"""
-# delete snmp v3 aaa local user
-CE_DELETE_SNMP_V3_LOCAL_USER = """
- <config>
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <localUsers>
- <localUser operation="delete">
- <userName>%s</userName>
- <authProtocol>%s</authProtocol>
- <authKey>%s</authKey>
- <privProtocol>%s</privProtocol>
- <privKey>%s</privKey>
- </localUser>
- </localUsers>
- </snmp>
- </config>
-"""
-# display info
-GET_SNMP_LOCAL_ENGINE = """
- <filter type="subtree">
- <snmp xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <engine>
- <engineID></engineID>
- </engine>
- </snmp>
- </filter>
-"""
-
-
-class SnmpUser(object):
- """ Manages SNMP user configuration """
-
- def netconf_get_config(self, **kwargs):
- """ Get configure by netconf """
-
- module = kwargs["module"]
- conf_str = kwargs["conf_str"]
-
- xml_str = get_nc_config(module, conf_str)
-
- return xml_str
-
- def netconf_set_config(self, **kwargs):
- """ Set configure by netconf """
-
- module = kwargs["module"]
- conf_str = kwargs["conf_str"]
-
- xml_str = set_nc_config(module, conf_str)
-
- return xml_str
-
- def check_snmp_v3_usm_user_args(self, **kwargs):
- """ Check snmp v3 usm user invalid args """
-
- module = kwargs["module"]
- result = dict()
- need_cfg = False
- state = module.params['state']
- usm_user_name = module.params['usm_user_name']
- remote_engine_id = module.params['remote_engine_id']
-
- acl_number = module.params['acl_number']
- user_group = module.params['user_group']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- local_user_name = module.params['aaa_local_user']
-
- if usm_user_name:
- if len(usm_user_name) > 32 or len(usm_user_name) == 0:
- module.fail_json(
- msg='Error: The length of usm_user_name %s is out of [1 - 32].' % usm_user_name)
- if remote_engine_id:
- if len(remote_engine_id) > 64 or len(remote_engine_id) < 10:
- module.fail_json(
- msg='Error: The length of remote_engine_id %s is out of [10 - 64].' % remote_engine_id)
-
- conf_str = CE_GET_SNMP_V3_USM_USER_HEADER
-
- if acl_number:
- if acl_number.isdigit():
- if int(acl_number) > 2999 or int(acl_number) < 2000:
- module.fail_json(
- msg='Error: The value of acl_number %s is out of [2000 - 2999].' % acl_number)
- else:
- if not acl_number[0].isalpha() or len(acl_number) > 32 or len(acl_number) < 1:
- module.fail_json(
- msg='Error: The length of acl_number %s is out of [1 - 32].' % acl_number)
-
- conf_str += "<aclNumber></aclNumber>"
-
- if user_group:
- if len(user_group) > 32 or len(user_group) == 0:
- module.fail_json(
- msg='Error: The length of user_group %s is out of [1 - 32].' % user_group)
-
- conf_str += "<groupName></groupName>"
-
- if auth_protocol:
- conf_str += "<authProtocol></authProtocol>"
-
- if auth_key:
- if len(auth_key) > 255 or len(auth_key) == 0:
- module.fail_json(
- msg='Error: The length of auth_key %s is out of [1 - 255].' % auth_key)
-
- conf_str += "<authKey></authKey>"
-
- if priv_protocol:
- if not auth_protocol:
- module.fail_json(
- msg='Error: Please input auth_protocol at the same time.')
-
- conf_str += "<privProtocol></privProtocol>"
-
- if priv_key:
- if len(priv_key) > 255 or len(priv_key) == 0:
- module.fail_json(
- msg='Error: The length of priv_key %s is out of [1 - 255].' % priv_key)
- conf_str += "<privKey></privKey>"
-
- result["usm_user_info"] = []
-
- conf_str += CE_GET_SNMP_V3_USM_USER_TAIL
- recv_xml = self.netconf_get_config(module=module, conf_str=conf_str)
-
- if "<data/>" in recv_xml:
- if state == "present":
- need_cfg = True
-
- else:
- xml_str = recv_xml.replace('\r', '').replace('\n', '').\
- replace('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
- replace('xmlns="http://www.huawei.com/netconf/vrp"', "")
-
- root = ElementTree.fromstring(xml_str)
- usm_user_info = root.findall("snmp/usmUsers/usmUser")
- if usm_user_info:
- for tmp in usm_user_info:
- tmp_dict = dict()
- tmp_dict["remoteEngineID"] = None
- for site in tmp:
- if site.tag in ["userName", "remoteEngineID", "engineID", "groupName", "authProtocol",
- "authKey", "privProtocol", "privKey", "aclNumber"]:
- tmp_dict[site.tag] = site.text
-
- result["usm_user_info"].append(tmp_dict)
-
- cur_cfg = dict()
- if usm_user_name:
- cur_cfg["userName"] = usm_user_name
- if user_group:
- cur_cfg["groupName"] = user_group
- if auth_protocol:
- cur_cfg["authProtocol"] = auth_protocol
- if auth_key:
- cur_cfg["authKey"] = auth_key
- if priv_protocol:
- cur_cfg["privProtocol"] = priv_protocol
- if priv_key:
- cur_cfg["privKey"] = priv_key
- if acl_number:
- cur_cfg["aclNumber"] = acl_number
-
- if remote_engine_id:
- cur_cfg["engineID"] = remote_engine_id
- cur_cfg["remoteEngineID"] = "true"
- else:
- cur_cfg["engineID"] = self.local_engine_id
- cur_cfg["remoteEngineID"] = "false"
-
- if result["usm_user_info"]:
- num = 0
- for tmp in result["usm_user_info"]:
- if cur_cfg == tmp:
- num += 1
-
- if num == 0:
- if state == "present":
- need_cfg = True
- else:
- need_cfg = False
- else:
- if state == "present":
- need_cfg = False
- else:
- need_cfg = True
-
- else:
- if state == "present":
- need_cfg = True
- else:
- need_cfg = False
-
- result["need_cfg"] = need_cfg
- return result
-
- def check_snmp_v3_local_user_args(self, **kwargs):
- """ Check snmp v3 local user invalid args """
-
- module = kwargs["module"]
- result = dict()
-
- need_cfg = False
- state = module.params['state']
- local_user_name = module.params['aaa_local_user']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- usm_user_name = module.params['usm_user_name']
-
- if local_user_name:
-
- if usm_user_name:
- module.fail_json(
- msg='Error: Please do not input usm_user_name and local_user_name at the same time.')
-
- if not auth_protocol or not auth_key or not priv_protocol or not priv_key:
- module.fail_json(
- msg='Error: Please input auth_protocol auth_key priv_protocol priv_key for local user.')
-
- if len(local_user_name) > 32 or len(local_user_name) == 0:
- module.fail_json(
- msg='Error: The length of local_user_name %s is out of [1 - 32].' % local_user_name)
-
- if len(auth_key) > 255 or len(auth_key) == 0:
- module.fail_json(
- msg='Error: The length of auth_key %s is out of [1 - 255].' % auth_key)
-
- if len(priv_key) > 255 or len(priv_key) == 0:
- module.fail_json(
- msg='Error: The length of priv_key %s is out of [1 - 255].' % priv_key)
-
- result["local_user_info"] = []
-
- conf_str = CE_GET_SNMP_V3_LOCAL_USER
- recv_xml = self.netconf_get_config(module=module, conf_str=conf_str)
-
- if "<data/>" in recv_xml:
- if state == "present":
- need_cfg = True
-
- else:
- xml_str = recv_xml.replace('\r', '').replace('\n', '').\
- replace('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
- replace('xmlns="http://www.huawei.com/netconf/vrp"', "")
-
- root = ElementTree.fromstring(xml_str)
- local_user_info = root.findall(
- "snmp/localUsers/localUser")
- if local_user_info:
- for tmp in local_user_info:
- tmp_dict = dict()
- for site in tmp:
- if site.tag in ["userName", "authProtocol", "authKey", "privProtocol", "privKey"]:
- tmp_dict[site.tag] = site.text
-
- result["local_user_info"].append(tmp_dict)
-
- if result["local_user_info"]:
- for tmp in result["local_user_info"]:
- if "userName" in tmp.keys():
- if state == "present":
- if tmp["userName"] != local_user_name:
- need_cfg = True
- else:
- if tmp["userName"] == local_user_name:
- need_cfg = True
- if auth_protocol:
- if "authProtocol" in tmp.keys():
- if state == "present":
- if tmp["authProtocol"] != auth_protocol:
- need_cfg = True
- else:
- if tmp["authProtocol"] == auth_protocol:
- need_cfg = True
- if auth_key:
- if "authKey" in tmp.keys():
- if state == "present":
- if tmp["authKey"] != auth_key:
- need_cfg = True
- else:
- if tmp["authKey"] == auth_key:
- need_cfg = True
- if priv_protocol:
- if "privProtocol" in tmp.keys():
- if state == "present":
- if tmp["privProtocol"] != priv_protocol:
- need_cfg = True
- else:
- if tmp["privProtocol"] == priv_protocol:
- need_cfg = True
- if priv_key:
- if "privKey" in tmp.keys():
- if state == "present":
- if tmp["privKey"] != priv_key:
- need_cfg = True
- else:
- if tmp["privKey"] == priv_key:
- need_cfg = True
-
- result["need_cfg"] = need_cfg
- return result
-
- def merge_snmp_v3_usm_user(self, **kwargs):
- """ Merge snmp v3 usm user operation """
-
- module = kwargs["module"]
- usm_user_name = module.params['usm_user_name']
- remote_engine_id = module.params['remote_engine_id']
- acl_number = module.params['acl_number']
- user_group = module.params['user_group']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- cmds = []
-
- if remote_engine_id:
- conf_str = CE_MERGE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "true", remote_engine_id)
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- if not self.local_engine_id:
- module.fail_json(
- msg='Error: The local engine id is null, please input remote_engine_id.')
-
- conf_str = CE_MERGE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "false", self.local_engine_id)
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if user_group:
- conf_str += "<groupName>%s</groupName>" % user_group
- cmd += " %s" % user_group
-
- if acl_number:
- conf_str += "<aclNumber>%s</aclNumber>" % acl_number
- cmd += " acl %s" % acl_number
-
- cmds.append(cmd)
-
- if remote_engine_id:
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if auth_protocol:
- conf_str += "<authProtocol>%s</authProtocol>" % auth_protocol
-
- if auth_protocol != "noAuth":
- cmd += " authentication-mode %s" % auth_protocol
-
- if auth_key:
- conf_str += "<authKey>%s</authKey>" % auth_key
-
- if auth_protocol != "noAuth":
- cmd += " cipher %s" % "******"
- if auth_protocol or auth_key:
- cmds.append(cmd)
-
- if remote_engine_id:
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if priv_protocol:
- conf_str += "<privProtocol>%s</privProtocol>" % priv_protocol
-
- if auth_protocol != "noAuth" and priv_protocol != "noPriv":
- cmd += " privacy-mode %s" % priv_protocol
-
- if priv_key:
- conf_str += "<privKey>%s</privKey>" % priv_key
-
- if auth_protocol != "noAuth" and priv_protocol != "noPriv":
- cmd += " cipher %s" % "******"
- if priv_key or priv_protocol:
- cmds.append(cmd)
-
- conf_str += CE_MERGE_SNMP_V3_USM_USER_TAIL
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Merge snmp v3 usm user failed.')
-
- return cmds
-
- def create_snmp_v3_usm_user(self, **kwargs):
- """ Create snmp v3 usm user operation """
-
- module = kwargs["module"]
- usm_user_name = module.params['usm_user_name']
- remote_engine_id = module.params['remote_engine_id']
- acl_number = module.params['acl_number']
- user_group = module.params['user_group']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- cmds = []
-
- if remote_engine_id:
- conf_str = CE_CREATE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "true", remote_engine_id)
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- if not self.local_engine_id:
- module.fail_json(
- msg='Error: The local engine id is null, please input remote_engine_id.')
-
- conf_str = CE_CREATE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "false", self.local_engine_id)
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if user_group:
- conf_str += "<groupName>%s</groupName>" % user_group
- cmd += " %s" % user_group
-
- if acl_number:
- conf_str += "<aclNumber>%s</aclNumber>" % acl_number
- cmd += " acl %s" % acl_number
- cmds.append(cmd)
-
- if remote_engine_id:
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if auth_protocol:
- conf_str += "<authProtocol>%s</authProtocol>" % auth_protocol
-
- if auth_protocol != "noAuth":
- cmd += " authentication-mode %s" % auth_protocol
-
- if auth_key:
- conf_str += "<authKey>%s</authKey>" % auth_key
-
- if auth_protocol != "noAuth":
- cmd += " cipher %s" % "******"
-
- if auth_key or auth_protocol:
- cmds.append(cmd)
-
- if remote_engine_id:
- cmd = "snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- cmd = "snmp-agent usm-user v3 %s" % usm_user_name
-
- if priv_protocol:
- conf_str += "<privProtocol>%s</privProtocol>" % priv_protocol
-
- if auth_protocol != "noAuth" and priv_protocol != "noPriv":
- cmd += " privacy-mode %s" % priv_protocol
-
- if priv_key:
- conf_str += "<privKey>%s</privKey>" % priv_key
-
- if auth_protocol != "noAuth" and priv_protocol != "noPriv":
- cmd += " cipher %s" % "******"
-
- if priv_protocol or priv_key:
- cmds.append(cmd)
-
- conf_str += CE_CREATE_SNMP_V3_USM_USER_TAIL
-
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Create snmp v3 usm user failed.')
-
- return cmds
-
- def delete_snmp_v3_usm_user(self, **kwargs):
- """ Delete snmp v3 usm user operation """
-
- module = kwargs["module"]
- usm_user_name = module.params['usm_user_name']
- remote_engine_id = module.params['remote_engine_id']
- acl_number = module.params['acl_number']
- user_group = module.params['user_group']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- if remote_engine_id:
- conf_str = CE_DELETE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "true", remote_engine_id)
- cmd = "undo snmp-agent remote-engineid %s usm-user v3 %s" % (
- remote_engine_id, usm_user_name)
- else:
- if not self.local_engine_id:
- module.fail_json(
- msg='Error: The local engine id is null, please input remote_engine_id.')
-
- conf_str = CE_DELETE_SNMP_V3_USM_USER_HEADER % (
- usm_user_name, "false", self.local_engine_id)
- cmd = "undo snmp-agent usm-user v3 %s" % usm_user_name
-
- if user_group:
- conf_str += "<groupName>%s</groupName>" % user_group
-
- if acl_number:
- conf_str += "<aclNumber>%s</aclNumber>" % acl_number
-
- if auth_protocol:
- conf_str += "<authProtocol>%s</authProtocol>" % auth_protocol
-
- if auth_key:
- conf_str += "<authKey>%s</authKey>" % auth_key
-
- if priv_protocol:
- conf_str += "<privProtocol>%s</privProtocol>" % priv_protocol
-
- if priv_key:
- conf_str += "<privKey>%s</privKey>" % priv_key
-
- conf_str += CE_DELETE_SNMP_V3_USM_USER_TAIL
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Delete snmp v3 usm user failed.')
-
- return cmd
-
- def merge_snmp_v3_local_user(self, **kwargs):
- """ Merge snmp v3 local user operation """
-
- module = kwargs["module"]
- local_user_name = module.params['aaa_local_user']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- conf_str = CE_MERGE_SNMP_V3_LOCAL_USER % (
- local_user_name, auth_protocol, auth_key, priv_protocol, priv_key)
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Merge snmp v3 local user failed.')
-
- cmd = "snmp-agent local-user v3 %s " % local_user_name + "authentication-mode %s " % auth_protocol + \
- "cipher ****** " + "privacy-mode %s " % priv_protocol + "cipher ******"
-
- return cmd
-
- def create_snmp_v3_local_user(self, **kwargs):
- """ Create snmp v3 local user operation """
-
- module = kwargs["module"]
- local_user_name = module.params['aaa_local_user']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- conf_str = CE_CREATE_SNMP_V3_LOCAL_USER % (
- local_user_name, auth_protocol, auth_key, priv_protocol, priv_key)
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Create snmp v3 local user failed.')
-
- cmd = "snmp-agent local-user v3 %s " % local_user_name + "authentication-mode %s " % auth_protocol + \
- "cipher ****** " + "privacy-mode %s " % priv_protocol + "cipher ******"
-
- return cmd
-
- def delete_snmp_v3_local_user(self, **kwargs):
- """ Delete snmp v3 local user operation """
-
- module = kwargs["module"]
- local_user_name = module.params['aaa_local_user']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
-
- conf_str = CE_DELETE_SNMP_V3_LOCAL_USER % (
- local_user_name, auth_protocol, auth_key, priv_protocol, priv_key)
- recv_xml = self.netconf_set_config(module=module, conf_str=conf_str)
-
- if "<ok/>" not in recv_xml:
- module.fail_json(msg='Error: Delete snmp v3 local user failed.')
-
- cmd = "undo snmp-agent local-user v3 %s" % local_user_name
-
- return cmd
-
- def get_snmp_local_engine(self, **kwargs):
- """ Get snmp local engine operation """
-
- module = kwargs["module"]
-
- conf_str = GET_SNMP_LOCAL_ENGINE
- recv_xml = self.netconf_get_config(module=module, conf_str=conf_str)
- if "</data>" in recv_xml:
- xml_str = recv_xml.replace('\r', '').replace('\n', '').\
- replace('xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"', "").\
- replace('xmlns="http://www.huawei.com/netconf/vrp"', "")
-
- root = ElementTree.fromstring(xml_str)
- local_engine_info = root.findall("snmp/engine/engineID")
- if local_engine_info:
- self.local_engine_id = local_engine_info[0].text
-
-
-def main():
- """ Module main function """
-
- argument_spec = dict(
- state=dict(choices=['present', 'absent'], default='present'),
- acl_number=dict(type='str'),
- usm_user_name=dict(type='str'),
- remote_engine_id=dict(type='str'),
- user_group=dict(type='str'),
- auth_protocol=dict(choices=['noAuth', 'md5', 'sha']),
- auth_key=dict(type='str', no_log=True),
- priv_protocol=dict(
- choices=['noPriv', 'des56', '3des168', 'aes128', 'aes192', 'aes256']),
- priv_key=dict(type='str', no_log=True),
- aaa_local_user=dict(type='str')
- )
-
- mutually_exclusive = [("usm_user_name", "local_user_name")]
- argument_spec.update(ce_argument_spec)
- module = AnsibleModule(
- argument_spec=argument_spec,
- mutually_exclusive=mutually_exclusive,
- supports_check_mode=True
- )
-
- changed = False
- proposed = dict()
- existing = dict()
- end_state = dict()
- updates = []
-
- state = module.params['state']
- acl_number = module.params['acl_number']
- usm_user_name = module.params['usm_user_name']
- remote_engine_id = module.params['remote_engine_id']
- user_group = module.params['user_group']
- auth_protocol = module.params['auth_protocol']
- auth_key = module.params['auth_key']
- priv_protocol = module.params['priv_protocol']
- priv_key = module.params['priv_key']
- aaa_local_user = module.params['aaa_local_user']
-
- snmp_user_obj = SnmpUser()
-
- if not snmp_user_obj:
- module.fail_json(msg='Error: Init module failed.')
-
- # get proposed
- proposed["state"] = state
- if acl_number:
- proposed["acl_number"] = acl_number
- if usm_user_name:
- proposed["usm_user_name"] = usm_user_name
- if remote_engine_id:
- proposed["remote_engine_id"] = remote_engine_id
- if user_group:
- proposed["user_group"] = user_group
- if auth_protocol:
- proposed["auth_protocol"] = auth_protocol
- if auth_key:
- proposed["auth_key"] = auth_key
- if priv_protocol:
- proposed["priv_protocol"] = priv_protocol
- if priv_key:
- proposed["priv_key"] = priv_key
- if aaa_local_user:
- proposed["aaa_local_user"] = aaa_local_user
-
- snmp_user_obj.get_snmp_local_engine(module=module)
- snmp_v3_usm_user_rst = snmp_user_obj.check_snmp_v3_usm_user_args(
- module=module)
- snmp_v3_local_user_rst = snmp_user_obj.check_snmp_v3_local_user_args(
- module=module)
-
- # state exist snmp v3 user config
- exist_tmp = dict()
- for item in snmp_v3_usm_user_rst:
- if item != "need_cfg":
- exist_tmp[item] = snmp_v3_usm_user_rst[item]
- if exist_tmp:
- existing["snmp usm user"] = exist_tmp
-
- exist_tmp = dict()
- for item in snmp_v3_local_user_rst:
- if item != "need_cfg":
- exist_tmp[item] = snmp_v3_local_user_rst[item]
- if exist_tmp:
- existing["snmp local user"] = exist_tmp
-
- if state == "present":
- if snmp_v3_usm_user_rst["need_cfg"]:
- if len(snmp_v3_usm_user_rst["usm_user_info"]) != 0:
- cmd = snmp_user_obj.merge_snmp_v3_usm_user(module=module)
- changed = True
- updates.append(cmd)
- else:
- cmd = snmp_user_obj.create_snmp_v3_usm_user(module=module)
- changed = True
- updates.append(cmd)
-
- if snmp_v3_local_user_rst["need_cfg"]:
- if len(snmp_v3_local_user_rst["local_user_info"]) != 0:
- cmd = snmp_user_obj.merge_snmp_v3_local_user(
- module=module)
- changed = True
- updates.append(cmd)
- else:
- cmd = snmp_user_obj.create_snmp_v3_local_user(
- module=module)
- changed = True
- updates.append(cmd)
-
- else:
- if snmp_v3_usm_user_rst["need_cfg"]:
- cmd = snmp_user_obj.delete_snmp_v3_usm_user(module=module)
- changed = True
- updates.append(cmd)
- if snmp_v3_local_user_rst["need_cfg"]:
- cmd = snmp_user_obj.delete_snmp_v3_local_user(module=module)
- changed = True
- updates.append(cmd)
-
- # state exist snmp v3 user config
- snmp_v3_usm_user_rst = snmp_user_obj.check_snmp_v3_usm_user_args(
- module=module)
- end_tmp = dict()
- for item in snmp_v3_usm_user_rst:
- if item != "need_cfg":
- end_tmp[item] = snmp_v3_usm_user_rst[item]
- if end_tmp:
- end_state["snmp usm user"] = end_tmp
-
- snmp_v3_local_user_rst = snmp_user_obj.check_snmp_v3_local_user_args(
- module=module)
- end_tmp = dict()
- for item in snmp_v3_local_user_rst:
- if item != "need_cfg":
- end_tmp[item] = snmp_v3_local_user_rst[item]
- if end_tmp:
- end_state["snmp local user"] = end_tmp
-
- results = dict()
- results['proposed'] = proposed
- results['existing'] = existing
- results['changed'] = changed
- results['end_state'] = end_state
- results['updates'] = updates
-
- module.exit_json(**results)
-
-
-if __name__ == '__main__':
- main()