Pluribus Networks network cli terminal and cliconf plugins (#53735)

* Pluribus Networks network cli terminal and cliconf plugins

* Changes in Unit tests and modules according to network_cli connection

* Changes in Unit tests and modules according to network_cli connection
This commit is contained in:
rajaspachipulusu17 2019-03-15 13:51:50 +05:30 committed by Ganesh Nalawade
parent 4594aee25a
commit e2d92e82c4
53 changed files with 345 additions and 155 deletions

View file

@ -0,0 +1,59 @@
# Copyright: (c) 2018, Pluribus Networks
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
#
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import json
from ansible.module_utils._text import to_text
from ansible.module_utils.network.common.utils import to_list, ComplexList
from ansible.module_utils.connection import Connection, ConnectionError
from ansible.module_utils.connection import exec_command
def get_connection(module):
if hasattr(module, '_nvos_connection'):
return module._nvos_connection
capabilities = get_capabilities(module)
network_api = capabilities.get('network_api')
if network_api == 'cliconf':
module._nvos_connection = Connection(module._socket_path)
else:
module.fail_json(msg='Invalid connection type %s' % network_api)
return module._nvos_connection
def get_capabilities(module):
if hasattr(module, '_nvos_capabilities'):
return module._nvos_capabilities
try:
capabilities = Connection(module._socket_path).get_capabilities()
except ConnectionError as exc:
module.fail_json(msg=to_text(exc, errors='surrogate_then_replace'))
module._nvos_capabilities = json.loads(capabilities)
return module._nvos_capabilities
def to_commands(module, commands):
spec = {
'command': dict(key=True),
'prompt': dict(),
'answer': dict()
}
transform = ComplexList(spec, module)
return transform(commands)
def run_commands(module, commands, check_rc=True):
commands = to_commands(module, to_list(commands))
for cmd in commands:
cmd = module.jsonify(cmd)
rc, out, err = exec_command(module, cmd)
if check_rc and rc != 0:
module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), rc=rc)
responses = (to_text(out, errors='surrogate_or_strict'))
return rc, out, err

View file

@ -6,7 +6,7 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
import shlex from ansible.module_utils.network.netvisor.netvisor import run_commands
def pn_cli(module, switch=None, username=None, password=None, switch_local=None): def pn_cli(module, switch=None, username=None, password=None, switch_local=None):
@ -16,7 +16,7 @@ def pn_cli(module, switch=None, username=None, password=None, switch_local=None)
:return: The cli string for further processing. :return: The cli string for further processing.
""" """
cli = '/usr/bin/cli --quiet -e --no-login-prompt ' cli = ''
if username and password: if username and password:
cli += '--user "%s":"%s" ' % (username, password) cli += '--user "%s":"%s" ' % (username, password)
@ -48,25 +48,19 @@ def run_cli(module, cli, state_map):
state = module.params['state'] state = module.params['state']
command = state_map[state] command = state_map[state]
cmd = shlex.split(cli) result, out, err = run_commands(module, cli)
result, out, err = module.run_command(cmd)
remove_cmd = '/usr/bin/cli --quiet -e --no-login-prompt'
results = dict( results = dict(
command=' '.join(cmd).replace(remove_cmd, ''), command=cli,
msg="%s operation completed" % command, msg="%s operation completed" % cli,
changed=True changed=True
) )
# Response in JSON format # Response in JSON format
if result != 0: if result != 0:
module.exit_json( module.exit_json(
command=' '.join(cmd).replace(remove_cmd, ''), command=cli,
stderr=err.strip(), msg="%s operation failed" % cli,
msg="%s operation failed" % command,
changed=False changed=False
) )
if out:
results['stdout'] = out.strip()
module.exit_json(**results) module.exit_json(**results)

View file

@ -85,38 +85,29 @@ changed:
type: bool type: bool
""" """
import shlex
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
""" """
This method checks for idempotency using the access-list-show command. This method checks for idempotency using the access-list-show command.
If a list with given name exists, return ACC_LIST_EXISTS If a list with given name exists, return True else False.
as True else False.
:param module: The Ansible module to fetch input parameters :param module: The Ansible module to fetch input parameters
:param cli: The CLI string :param cli: The CLI string
:return Global Booleans: ACC_LIST_EXISTS
""" """
list_name = module.params['pn_name'] list_name = module.params['pn_name']
show = cli + \ cli += ' access-list-show format name no-show-headers'
' access-list-show format name no-show-headers' out = run_commands(module, cli)
show = shlex.split(show)
out = module.run_command(show)[1]
out = out.split() return True if list_name in out else False
# Global flags
global ACC_LIST_EXISTS
ACC_LIST_EXISTS = True if list_name in out else False
def main(): def main():
""" This section is for arguments parsing """ """ This section is for arguments parsing """
global state_map
state_map = dict( state_map = dict(
present='access-list-create', present='access-list-create',
absent='access-list-delete', absent='access-list-delete',
@ -148,7 +139,7 @@ def main():
# Building the CLI command string # Building the CLI command string
cli = pn_cli(module, cliswitch) cli = pn_cli(module, cliswitch)
check_cli(module, cli) ACC_LIST_EXISTS = check_cli(module, cli)
cli += ' %s name %s ' % (command, list_name) cli += ' %s name %s ' % (command, list_name)
if command == 'access-list-delete': if command == 'access-list-delete':

View file

@ -81,6 +81,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -92,19 +93,28 @@ def check_cli(module, cli):
""" """
name = module.params['pn_name'] name = module.params['pn_name']
ip = module.params['pn_ip'] ip = module.params['pn_ip']
clicopy = cli
cli += ' access-list-show name %s no-show-headers ' % name
out = run_commands(module, cli)[1]
if name not in out:
module.fail_json(
failed=True,
msg='access-list with name %s does not exist' % name
)
cli = clicopy
cli += ' access-list-ip-show name %s format ip no-show-headers' % name cli += ' access-list-ip-show name %s format ip no-show-headers' % name
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()
return True if ip in out else False return True if ip in out else False
def main(): def main():
""" This section is for arguments parsing """ """ This section is for arguments parsing """
global state_map
state_map = dict( state_map = dict(
present='access-list-ip-add', present='access-list-ip-add',
absent='access-list-ip-remove', absent='access-list-ip-remove',

View file

@ -135,7 +135,6 @@ from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, booleanArgs, r
def main(): def main():
""" This section is for arguments parsing """ """ This section is for arguments parsing """
global state_map
state_map = dict( state_map = dict(
update='admin-service-modify' update='admin-service-modify'
) )

View file

@ -73,7 +73,7 @@ options:
EXAMPLES = """ EXAMPLES = """
- name: admin-syslog functionality - name: admin-syslog functionality
pn_admin_syslog: pn_admin_syslog:
pn_cliswitch: sw01 pn_cliswitch: "sw01"
state: "absent" state: "absent"
pn_name: "foo" pn_name: "foo"
pn_scope: "local" pn_scope: "local"
@ -116,6 +116,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -129,7 +130,7 @@ def check_cli(module, cli):
name = module.params['pn_name'] name = module.params['pn_name']
cli += ' admin-syslog-show format name no-show-headers' cli += ' admin-syslog-show format name no-show-headers'
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -140,8 +140,7 @@ stdout:
returned: always returned: always
type: list type: list
stderr: stderr:
description: set of error responses from the connection-stats-settings description: set of error responses from the connection-stats-settings command.
command.
returned: on error returned: on error
type: list type: list
changed: changed:

View file

@ -100,6 +100,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -110,9 +111,21 @@ def check_cli(module, cli):
:param cli: The CLI string :param cli: The CLI string
""" """
name = module.params['pn_name'] name = module.params['pn_name']
clicopy = cli
cli += ' cpu-class-show format name no-show-headers' cli += ' system-settings-show format cpu-class-enable no-show-headers'
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split()
if 'on' not in out:
module.fail_json(
failed=True,
msg='Enable CPU class before creating or deleting'
)
cli = clicopy
cli += ' cpu-class-show name %s format name no-show-headers' % name
out = run_commands(module, cli)[1]
out = out.split() out = out.split()
return True if name in out else False return True if name in out else False
@ -121,7 +134,6 @@ def check_cli(module, cli):
def main(): def main():
""" This section is for arguments parsing """ """ This section is for arguments parsing """
global state_map
state_map = dict( state_map = dict(
present='cpu-class-create', present='cpu-class-create',
absent='cpu-class-delete', absent='cpu-class-delete',

View file

@ -88,6 +88,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -100,7 +101,7 @@ def check_cli(module, cli):
user_name = module.params['pn_name'] user_name = module.params['pn_name']
cli += ' dhcp-filter-show format name no-show-headers' cli += ' dhcp-filter-show format name no-show-headers'
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -80,6 +80,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -92,17 +93,16 @@ def check_cli(module, cli):
name = module.params['pn_name'] name = module.params['pn_name']
cli += ' dscp-map-show name %s format name no-show-headers' % name cli += ' dscp-map-show name %s format name no-show-headers' % name
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()
return True if name in out else False return True if name in out[-1] else False
def main(): def main():
""" This section is for arguments parsing """ """ This section is for arguments parsing """
global state_map
state_map = dict( state_map = dict(
present='dscp-map-create', present='dscp-map-create',
absent='dscp-map-delete' absent='dscp-map-delete'

View file

@ -52,7 +52,7 @@ options:
EXAMPLES = """ EXAMPLES = """
- name: dscp map pri map modify - name: dscp map pri map modify
pn_dscp_map_pri_map: pn_dscp_map_pri_map:
pn_cliswitch: "sw01" pn_cliswitch: 'sw01'
state: 'update' state: 'update'
pn_name: 'foo' pn_name: 'foo'
pn_pri: '0' pn_pri: '0'
@ -60,7 +60,7 @@ EXAMPLES = """
- name: dscp map pri map modify - name: dscp map pri map modify
pn_dscp_map_pri_map: pn_dscp_map_pri_map:
pn_cliswitch: "sw01" pn_cliswitch: 'sw01'
state: 'update' state: 'update'
pn_name: 'foo' pn_name: 'foo'
pn_pri: '1' pn_pri: '1'
@ -88,6 +88,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -100,11 +101,11 @@ def check_cli(module, cli):
name = module.params['pn_name'] name = module.params['pn_name']
cli += ' dscp-map-show name %s format name no-show-headers' % name cli += ' dscp-map-show name %s format name no-show-headers' % name
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()
return True if name in out else False return True if name in out[-1] else False
def main(): def main():

View file

@ -208,6 +208,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -220,11 +221,11 @@ def check_cli(module, cli):
name = module.params['pn_dscp_map'] name = module.params['pn_dscp_map']
cli += ' dscp-map-show name %s format name no-show-headers' % name cli += ' dscp-map-show name %s format name no-show-headers' % name
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()
return True if name in out else False return True if name in out[-1] else False
def main(): def main():

View file

@ -74,6 +74,7 @@ EXAMPLES = """
state: "update" state: "update"
pn_port: "all" pn_port: "all"
pn_cos: "0" pn_cos: "0"
pn_weight: "priority"
""" """
RETURN = """ RETURN = """

View file

@ -88,6 +88,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -101,10 +102,10 @@ def check_cli(module, cli):
network = module.params['pn_network'] network = module.params['pn_network']
show = cli show = cli
cli += ' prefix-list-show name %s format name no-show-headers' % name cli += ' prefix-list-show format name no-show-headers'
rc, out, err = module.run_command(cli, use_unsafe_shell=True) out = run_commands(module, cli)[1]
if not out: if name not in out.split()[-1]:
module.fail_json( module.fail_json(
failed=True, failed=True,
msg='Prefix list with name %s does not exists' % name msg='Prefix list with name %s does not exists' % name
@ -112,7 +113,7 @@ def check_cli(module, cli):
cli = show cli = show
cli += ' prefix-list-network-show name %s format network no-show-headers' % name cli += ' prefix-list-network-show name %s format network no-show-headers' % name
out = module.run_command(cli, use_unsafe_shell=True)[1] rc, out, err = run_commands(module, cli)
if out: if out:
out = out.split()[1] out = out.split()[1]

View file

@ -118,6 +118,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -130,7 +131,7 @@ def check_cli(module, cli):
role_name = module.params['pn_name'] role_name = module.params['pn_name']
cli += ' role-show format name no-show-headers' cli += ' role-show format name no-show-headers'
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -87,6 +87,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -99,7 +100,7 @@ def check_cli(module, cli):
comm_str = module.params['pn_community_string'] comm_str = module.params['pn_community_string']
cli += ' snmp-community-show format community-string no-show-headers' cli += ' snmp-community-show format community-string no-show-headers'
out = module.run_command(cli.split(), use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -93,6 +93,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -107,14 +108,14 @@ def check_cli(module, cli):
show = cli show = cli
cli += ' snmp-community-show format community-string no-show-headers' cli += ' snmp-community-show format community-string no-show-headers'
rc, out, err = module.run_command(cli, use_unsafe_shell=True) rc, out, err = run_commands(module, cli)
out = out.split() out = out.split()
if community in out: if community in out:
cli = show cli = show
cli += ' snmp-trap-sink-show community %s format type,dest-host no-show-headers' % community cli += ' snmp-trap-sink-show community %s format type,dest-host no-show-headers' % community
rc, out, err = module.run_command(cli, use_unsafe_shell=True) rc, out, err = run_commands(module, cli)
out = out.split() out = out.split()

View file

@ -57,20 +57,23 @@ options:
""" """
EXAMPLES = """ EXAMPLES = """
- name: snmp vacm functionality - name: create snmp vacm
pn_snmp_vacm: pn_snmp_vacm:
pn_cliswitch: "sw01"
state: "present" state: "present"
pn_user_name: "foo" pn_user_name: "foo"
pn_user_type: "rouser" pn_user_type: "rouser"
- name: snmp vacm functionality - name: update snmp vacm
pn_snmp_vacm: pn_snmp_vacm:
pn_cliswitch: "sw01"
state: "update" state: "update"
pn_user_name: "foo" pn_user_name: "foo"
pn_user_type: "rwuser" pn_user_type: "rwuser"
- name: snmp vacm functionality - name: delete snmp vacm
pn_snmp_vacm: pn_snmp_vacm:
pn_cliswitch: "sw01"
state: "absent" state: "absent"
pn_user_name: "foo" pn_user_name: "foo"
""" """
@ -97,6 +100,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli, booleanArgs
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -110,7 +114,7 @@ def check_cli(module, cli):
show = cli show = cli
cli += ' snmp-user-show user-name %s format user-name no-show-headers' % user_name cli += ' snmp-user-show user-name %s format user-name no-show-headers' % user_name
rc, out, err = module.run_command(cli, use_unsafe_shell=True) rc, out, err = run_commands(module, cli)
if out: if out:
pass pass
else: else:
@ -118,7 +122,7 @@ def check_cli(module, cli):
cli = show cli = show
cli += ' snmp-vacm-show format user-name no-show-headers' cli += ' snmp-vacm-show format user-name no-show-headers'
out = module.run_command(cli, use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -96,6 +96,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -108,7 +109,7 @@ def check_cli(module, cli):
name = module.params['pn_name'] name = module.params['pn_name']
cli += ' user-show format name no-show-headers' cli += ' user-show format name no-show-headers'
out = module.run_command(cli, use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split() out = out.split()

View file

@ -53,7 +53,7 @@ options:
EXAMPLES = """ EXAMPLES = """
- name: Add network to bgp - name: Add network to bgp
pn_vrouter_bgp_network: pn_vrouter_bgp_network:
pn_cliswitch: "{{ inventory_hostname }}" pn_cliswitch: "sw01"
state: "present" state: "present"
pn_vrouter_name: "foo-vrouter" pn_vrouter_name: "foo-vrouter"
pn_network: '10.10.10.10' pn_network: '10.10.10.10'
@ -61,7 +61,7 @@ EXAMPLES = """
- name: Remove network from bgp - name: Remove network from bgp
pn_vrouter_bgp_network: pn_vrouter_bgp_network:
pn_cliswitch: "{{ inventory_hostname }}" pn_cliswitch: "sw01"
state: "absent" state: "absent"
pn_vrouter_name: "foo-vrouter" pn_vrouter_name: "foo-vrouter"
pn_network: '10.10.10.10' pn_network: '10.10.10.10'
@ -89,6 +89,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -103,14 +104,14 @@ def check_cli(module, cli):
show = cli show = cli
cli += ' vrouter-show name %s format name no-show-headers' % name cli += ' vrouter-show name %s format name no-show-headers' % name
rc, out, err = module.run_command(cli, use_unsafe_shell=True) rc, out, err = run_commands(module, cli)
VROUTER_EXISTS = '' if out else None VROUTER_EXISTS = '' if out else None
cli = show cli = show
cli += ' vrouter-bgp-network-show vrouter-name %s network %s format network no-show-headers' % (name, network) cli += ' vrouter-bgp-network-show vrouter-name %s network %s format network no-show-headers' % (name, network)
out = module.run_command(cli, use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split()
NETWORK_EXISTS = True if network in out else False NETWORK_EXISTS = True if network in out[-1] else False
return NETWORK_EXISTS, VROUTER_EXISTS return NETWORK_EXISTS, VROUTER_EXISTS

View file

@ -105,6 +105,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -130,19 +131,19 @@ def check_cli(module, cli):
nic_str = module.params['pn_nic'] nic_str = module.params['pn_nic']
# Check for vRouter # Check for vRouter
check_vrouter = cli + ' vrouter-show format name no-show-headers ' check_vrouter = cli + ' vrouter-show name %s format name no-show-headers ' % vrouter_name
out = module.run_command(check_vrouter, use_unsafe_shell=True)[1] out = run_commands(module, check_vrouter)[1]
out = out.split() out = out.split()
VROUTER_EXISTS = True if vrouter_name in out else False VROUTER_EXISTS = True if vrouter_name in out[-1] else False
if interface_ip: if interface_ip:
# Check for interface and VRRP and fetch nic for VRRP # Check for interface and VRRP and fetch nic for VRRP
show = cli + ' vrouter-interface-show vrouter-name %s ' % vrouter_name show = cli + ' vrouter-interface-show vrouter-name %s ' % vrouter_name
show += 'ip2 %s format ip2,nic no-show-headers' % interface_ip show += 'ip2 %s format ip2,nic no-show-headers' % interface_ip
out = module.run_command(show, use_unsafe_shell=True)[1] out = run_commands(module, show)[1]
if out and interface_ip in out.split(' ')[1]: if out and interface_ip in out.split(' ')[-2]:
INTERFACE_EXISTS = True INTERFACE_EXISTS = True
else: else:
INTERFACE_EXISTS = False INTERFACE_EXISTS = False
@ -151,7 +152,8 @@ def check_cli(module, cli):
# Check for nic # Check for nic
show = cli + ' vrouter-interface-show vrouter-name %s ' % vrouter_name show = cli + ' vrouter-interface-show vrouter-name %s ' % vrouter_name
show += ' format nic no-show-headers' show += ' format nic no-show-headers'
out = module.run_command(show, use_unsafe_shell=True)[1] out = run_commands(module, show)[1]
out = out.split()
NIC_EXISTS = True if nic_str in out else False NIC_EXISTS = True if nic_str in out else False

View file

@ -88,6 +88,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -109,7 +110,7 @@ def check_cli(module, cli):
# Check for vRouter # Check for vRouter
check_vrouter = cli + ' vrouter-show format name no-show-headers ' check_vrouter = cli + ' vrouter-show format name no-show-headers '
out = module.run_command(check_vrouter, use_unsafe_shell=True)[1] out = run_commands(module, check_vrouter)[1]
out = out.split() out = out.split()
VROUTER_EXISTS = True if vrouter_name in out else False VROUTER_EXISTS = True if vrouter_name in out else False
@ -117,7 +118,7 @@ def check_cli(module, cli):
if nic_str: if nic_str:
# Check for nic # Check for nic
show = cli + ' vrouter-ospf6-show vrouter-name %s format nic no-show-headers' % vrouter_name show = cli + ' vrouter-ospf6-show vrouter-name %s format nic no-show-headers' % vrouter_name
out = module.run_command(show, use_unsafe_shell=True)[1] out = run_commands(module, show)[1]
NIC_EXISTS = True if nic_str in out else False NIC_EXISTS = True if nic_str in out else False

View file

@ -84,6 +84,7 @@ changed:
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli from ansible.module_utils.network.netvisor.pn_nvos import pn_cli, run_cli
from ansible.module_utils.network.netvisor.netvisor import run_commands
def check_cli(module, cli): def check_cli(module, cli):
@ -97,15 +98,17 @@ def check_cli(module, cli):
show = cli show = cli
cli += ' vrouter-show name %s format name no-show-headers ' % name cli += ' vrouter-show name %s format name no-show-headers ' % name
out = module.run_command(cli, use_unsafe_shell=True) out = run_commands(module, cli)[1]
if out: out = out.split()
if out[-1] == name:
pass pass
else: else:
return False return False
cli = show cli = show
cli += ' vrouter-show name %s format proto-multi no-show-headers' % name cli += ' vrouter-show name %s format proto-multi no-show-headers' % name
out = module.run_command(cli, use_unsafe_shell=True)[1] out = run_commands(module, cli)[1]
out = out.split()
return True if 'none' not in out else False return True if 'none' not in out else False

View file

@ -0,0 +1,66 @@
#
# (c) 2016 Red Hat Inc.
#
# 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
DOCUMENTATION = """
---
cliconf: netvisor
short_description: Use netvisor cliconf to run command on Pluribus netvisor platform
description:
- This netvisor plugin provides low level abstraction apis for
sending and receiving CLI commands from Pluribus netvisor devices.
version_added: 2.8
"""
import json
from ansible.plugins.cliconf import CliconfBase
class Cliconf(CliconfBase):
def get(self, command=None, prompt=None, answer=None, sendonly=False, output=None, check_all=False):
if not command:
raise ValueError('must provide value of command to execute')
if output:
raise ValueError("'output' value %s is not supported for get" % output)
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, check_all=check_all)
def get_option_values(self):
return {
'format': ['text'],
'diff_match': ['line', 'strict', 'exact', 'none'],
'diff_replace': ['line', 'block'],
'output': []
}
def get_capabilities(self):
result = dict()
result['rpc'] = self.get_base_rpc()
result['network_api'] = 'cliconf'
result['device_info'] = self.get_device_info()
result.update(self.get_option_values())
return json.dumps(result)
def get_device_info(self):
device_info = {}
device_info['network_os'] = 'netvisor'
return device_info

View file

@ -0,0 +1,39 @@
#
# (c) 2016 Red Hat Inc.
#
# 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
import json
import re
from ansible.errors import AnsibleConnectionFailure
from ansible.module_utils._text import to_text, to_bytes
from ansible.plugins.terminal import TerminalBase
class TerminalModule(TerminalBase):
terminal_stdout_re = [
re.compile(br">.*[\r\n]?(.*)")
]
terminal_stderr_re = [
re.compile(br"% ?Error: (?!\bdoes not exist\b)(?!\balready exists\b)")
]

View file

@ -50,12 +50,12 @@ class TestAccessListIpModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_ip': '172.16.3.1', 'state': 'present'}) 'pn_ip': '172.16.3.1', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 access-list-ip-add name foo ip 172.16.3.1' expected_cmd = ' switch sw01 access-list-ip-add name foo ip 172.16.3.1'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_access_list_ip_remove(self): def test_access_list_ip_remove(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_ip': '172.16.3.1', 'state': 'absent'}) 'pn_ip': '172.16.3.1', 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 access-list-ip-remove name foo ip 172.16.3.1' expected_cmd = ' switch sw01 access-list-ip-remove name foo ip 172.16.3.1'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,19 +38,19 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'mgmt', set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'mgmt',
'pn_web': 'False', 'state': 'update'}) 'pn_web': 'False', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-service-modify if mgmt no-web ' expected_cmd = ' switch sw01 admin-service-modify if mgmt no-web '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_admin_service_modify_t2(self): def test_admin_service_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'mgmt', set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'mgmt',
'pn_snmp': 'True', 'pn_net_api': 'True', 'pn_ssh': 'True', 'state': 'update'}) 'pn_snmp': 'True', 'pn_net_api': 'True', 'pn_ssh': 'True', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-service-modify if mgmt snmp ssh net-api ' expected_cmd = ' switch sw01 admin-service-modify if mgmt snmp ssh net-api '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_admin_service_modify_t3(self): def test_admin_service_modify_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'data', set_module_args({'pn_cliswitch': 'sw01', 'pn__if': 'data',
'pn_web_port': '8080', 'pn_net_api': 'True', 'pn_web_log': 'True', 'state': 'update'}) 'pn_web_port': '8080', 'pn_net_api': 'True', 'pn_web_log': 'True', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-service-modify if data web-port 8080 net-api web-log ' expected_cmd = ' switch sw01 admin-service-modify if data web-port 8080 net-api web-log '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,19 +38,19 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '61s', set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '61s',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-session-timeout-modify timeout 61s' expected_cmd = ' switch sw01 admin-session-timeout-modify timeout 61s'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_admin_session_timeout_modify_t2(self): def test_admin_session_timeout_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '1d', set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '1d',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-session-timeout-modify timeout 1d' expected_cmd = ' switch sw01 admin-session-timeout-modify timeout 1d'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_admin_session_timeout_modify_t3(self): def test_admin_session_timeout_modify_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '10d20m3h15s', set_module_args({'pn_cliswitch': 'sw01', 'pn_timeout': '10d20m3h15s',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-session-timeout-modify timeout 10d20m3h15s' expected_cmd = ' switch sw01 admin-session-timeout-modify timeout 10d20m3h15s'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -57,7 +57,7 @@ class TestAdminSyslogModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_scope': 'local', 'pn_host': '166.68.224.46', 'pn_message_format': 'structured', 'state': 'present'}) 'pn_scope': 'local', 'pn_host': '166.68.224.46', 'pn_message_format': 'structured', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-syslog-create name foo scope local host 166.68.224.46 ' expected_cmd = ' switch sw01 admin-syslog-create name foo scope local host 166.68.224.46 '
expected_cmd += 'transport udp message-format structured' expected_cmd += 'transport udp message-format structured'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -65,12 +65,12 @@ class TestAdminSyslogModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-syslog-delete name foo ' expected_cmd = ' switch sw01 admin-syslog-delete name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_admin_syslog_update(self): def test_admin_syslog_update(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 admin-syslog-modify name foo transport udp' expected_cmd = ' switch sw01 admin-syslog-modify name foo transport udp'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,21 +38,21 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_enable': False, set_module_args({'pn_cliswitch': 'sw01', 'pn_enable': False,
'pn_fabric_connection_max_memory': '1000', 'state': 'update'}) 'pn_fabric_connection_max_memory': '1000', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 connection-stats-settings-modify disable fabric-connection-max-memory 1000' expected_cmd = ' switch sw01 connection-stats-settings-modify disable fabric-connection-max-memory 1000'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_connection_stats_settings_modify_t2(self): def test_connection_stats_settings_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_enable': True, set_module_args({'pn_cliswitch': 'sw01', 'pn_enable': True,
'pn_connection_stats_log_enable': False, 'state': 'update'}) 'pn_connection_stats_log_enable': False, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 connection-stats-settings-modify enable connection-stats-log-disable ' expected_cmd = ' switch sw01 connection-stats-settings-modify enable connection-stats-log-disable '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_connection_stats_settings_modify_t3(self): def test_connection_stats_settings_modify_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_client_server_stats_max_memory': '60M', set_module_args({'pn_cliswitch': 'sw01', 'pn_client_server_stats_max_memory': '60M',
'pn_client_server_stats_log_disk_space': '40M', 'state': 'update'}) 'pn_client_server_stats_log_disk_space': '40M', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 connection-stats-settings-modify client-server-stats-max-memory ' expected_cmd = ' switch sw01 connection-stats-settings-modify client-server-stats-max-memory '
expected_cmd += '60M client-server-stats-log-disk-space 40M' expected_cmd += '60M client-server-stats-log-disk-space 40M'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -60,6 +60,6 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_connection_stats_max_memory': '45M', set_module_args({'pn_cliswitch': 'sw01', 'pn_connection_stats_max_memory': '45M',
'pn_fabric_connection_backup_enable': False, 'state': 'update'}) 'pn_fabric_connection_backup_enable': False, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 connection-stats-settings-modify ' expected_cmd = ' switch sw01 connection-stats-settings-modify '
expected_cmd += ' fabric-connection-backup-disable connection-stats-max-memory 45M' expected_cmd += ' fabric-connection-backup-disable connection-stats-max-memory 45M'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -52,19 +52,19 @@ class TestCpuClassModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp',
'pn_scope': 'local', 'pn_rate_limit': '1000', 'state': 'present'}) 'pn_scope': 'local', 'pn_rate_limit': '1000', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 cpu-class-create name icmp scope local rate-limit 1000 ' expected_cmd = ' switch sw01 cpu-class-create name icmp scope local rate-limit 1000 '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_cpu_class_delete(self): def test_cpu_class_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 cpu-class-delete name icmp ' expected_cmd = ' switch sw01 cpu-class-delete name icmp '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_cpu_class_update(self): def test_cpu_class_update(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp',
'pn_rate_limit': '2000', 'state': 'update'}) 'pn_rate_limit': '2000', 'state': 'update'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 cpu-class-modify name icmp rate-limit 2000 ' expected_cmd = ' switch sw01 cpu-class-modify name icmp rate-limit 2000 '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,12 +38,12 @@ class TestCpuMgmtClassModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'icmp',
'pn_rate_limit': '10000', 'pn_burst_size': '14000', 'state': 'update'}) 'pn_rate_limit': '10000', 'pn_burst_size': '14000', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 cpu-mgmt-class-modify name icmp burst-size 14000 rate-limit 10000' expected_cmd = ' switch sw01 cpu-mgmt-class-modify name icmp burst-size 14000 rate-limit 10000'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_cpu_mgmt_class_modify_t2(self): def test_cpu_mgmt_class_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'ssh', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'ssh',
'pn_rate_limit': '10000', 'pn_burst_size': '100000', 'state': 'update'}) 'pn_rate_limit': '10000', 'pn_burst_size': '100000', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 cpu-mgmt-class-modify name ssh burst-size 100000 rate-limit 10000' expected_cmd = ' switch sw01 cpu-mgmt-class-modify name ssh burst-size 100000 rate-limit 10000'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -57,19 +57,19 @@ class TestDhcpFilterModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_trusted_ports': '1', 'state': 'present'}) 'pn_trusted_ports': '1', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dhcp-filter-create name foo trusted-ports 1' expected_cmd = ' switch sw01 dhcp-filter-create name foo trusted-ports 1'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_dhcp_filter_delete(self): def test_dhcp_filter_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dhcp-filter-delete name foo ' expected_cmd = ' switch sw01 dhcp-filter-delete name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_dhcp_filter_update(self): def test_dhcp_filter_update(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_trusted_ports': '2', 'state': 'update'}) 'pn_trusted_ports': '2', 'state': 'update'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dhcp-filter-modify name foo trusted-ports 2' expected_cmd = ' switch sw01 dhcp-filter-modify name foo trusted-ports 2'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -50,12 +50,12 @@ class TestDscpMapModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_scope': 'local', 'state': 'present'}) 'pn_scope': 'local', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dscp-map-create name foo scope local' expected_cmd = ' switch sw01 dscp-map-create name foo scope local'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_dscp_map_delete(self): def test_dscp_map_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dscp-map-delete name foo ' expected_cmd = ' switch sw01 dscp-map-delete name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -44,19 +44,19 @@ class TestCpuClassModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_pri': '0', 'pn_dsmap': '40', 'state': 'update'}) 'pn_pri': '0', 'pn_dsmap': '40', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dscp-map-pri-map-modify pri 0 name foo dsmap 40' expected_cmd = ' switch sw01 dscp-map-pri-map-modify pri 0 name foo dsmap 40'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_dscp_map_pri_map_t2(self): def test_dscp_map_pri_map_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_pri': '1', 'pn_dsmap': '8,10,12,14', 'state': 'update'}) 'pn_pri': '1', 'pn_dsmap': '8,10,12,14', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dscp-map-pri-map-modify pri 1 name foo dsmap 8,10,12,14' expected_cmd = ' switch sw01 dscp-map-pri-map-modify pri 1 name foo dsmap 8,10,12,14'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_dscp_map_pri_map_t3(self): def test_dscp_map_pri_map_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_pri': '2', 'pn_dsmap': '25', 'state': 'update'}) 'pn_pri': '2', 'pn_dsmap': '25', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 dscp-map-pri-map-modify pri 2 name foo dsmap 25' expected_cmd = ' switch sw01 dscp-map-pri-map-modify pri 2 name foo dsmap 25'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,7 +38,7 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vxlan': True, set_module_args({'pn_cliswitch': 'sw01', 'pn_vxlan': True,
'pn_enable_vlans': '1-399,401-4092', 'pn_no_snoop_linklocal_vlans': 'none', 'state': 'update'}) 'pn_enable_vlans': '1-399,401-4092', 'pn_no_snoop_linklocal_vlans': 'none', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 igmp-snooping-modify vxlan enable-vlans ' expected_cmd = ' switch sw01 igmp-snooping-modify vxlan enable-vlans '
expected_cmd += '1-399,401-4092 no-snoop-linklocal-vlans none' expected_cmd += '1-399,401-4092 no-snoop-linklocal-vlans none'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -46,12 +46,12 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_scope': 'local', set_module_args({'pn_cliswitch': 'sw01', 'pn_scope': 'local',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 igmp-snooping-modify scope local' expected_cmd = ' switch sw01 igmp-snooping-modify scope local'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_igmp_snooping_modify_t3(self): def test_igmp_snooping_modify_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vxlan': False, set_module_args({'pn_cliswitch': 'sw01', 'pn_vxlan': False,
'pn_enable_vlans': '1-399', 'pn_igmpv3_vlans': '1-399', 'state': 'update'}) 'pn_enable_vlans': '1-399', 'pn_igmpv3_vlans': '1-399', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 igmp-snooping-modify no-vxlan igmpv3-vlans 1-399 enable-vlans 1-399' expected_cmd = ' switch sw01 igmp-snooping-modify no-vxlan igmpv3-vlans 1-399 enable-vlans 1-399'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,26 +38,26 @@ class TestPortConfigModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1,2', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1,2',
'pn_speed': '10g', 'pn_jumbo': True, 'state': 'update'}) 'pn_speed': '10g', 'pn_jumbo': True, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-config-modify speed 10g port 1,2 jumbo ' expected_cmd = ' switch sw01 port-config-modify speed 10g port 1,2 jumbo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_pn_port_config_modify_t2(self): def test_pn_port_config_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'all', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'all',
'pn_host_enable': True, 'state': 'update'}) 'pn_host_enable': True, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-config-modify port all host-enable ' expected_cmd = ' switch sw01 port-config-modify port all host-enable '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_pn_port_config_modify_t3(self): def test_pn_port_config_modify_t3(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '5', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '5',
'pn_crc_check_enable': True, 'pn_vxlan_termination': False, 'state': 'update'}) 'pn_crc_check_enable': True, 'pn_vxlan_termination': False, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-config-modify port 5 crc-check-enable no-vxlan-termination ' expected_cmd = ' switch sw01 port-config-modify port 5 crc-check-enable no-vxlan-termination '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_pn_port_config_modify_t4(self): def test_pn_port_config_modify_t4(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '10,11,12', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '10,11,12',
'pn_pause': False, 'pn_enable': True, 'state': 'update'}) 'pn_pause': False, 'pn_enable': True, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-config-modify port 10,11,12 no-pause enable ' expected_cmd = ' switch sw01 port-config-modify port 10,11,12 no-pause enable '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,12 +38,12 @@ class TestAdminServiceModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1',
'pn_cos': '0', 'pn_min_bw_guarantee': '60', 'state': 'update'}) 'pn_cos': '0', 'pn_min_bw_guarantee': '60', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-cos-bw-modify cos 0 port 1 min-bw-guarantee 60' expected_cmd = ' switch sw01 port-cos-bw-modify cos 0 port 1 min-bw-guarantee 60'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_pn_port_cos_bw_modify_t2(self): def test_pn_port_cos_bw_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'all', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'all',
'pn_cos': '1', 'pn_weight': 'priority', 'state': 'update'}) 'pn_cos': '1', 'pn_weight': 'priority', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-cos-bw-modify cos 1 port all weight priority' expected_cmd = ' switch sw01 port-cos-bw-modify cos 1 port all weight priority'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,7 +38,7 @@ class TestPortCosRateSettingModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'control-port', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'control-port',
'pn_cos1_rate': '4000', 'pn_cos2_rate': '4000', 'pn_cos3_rate': '4000', 'state': 'update'}) 'pn_cos1_rate': '4000', 'pn_cos2_rate': '4000', 'pn_cos3_rate': '4000', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-cos-rate-setting-modify cos1-rate 4000 cos2-rate 4000 ' expected_cmd = ' switch sw01 port-cos-rate-setting-modify cos1-rate 4000 cos2-rate 4000 '
expected_cmd += 'cos3-rate 4000 port control-port' expected_cmd += 'cos3-rate 4000 port control-port'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -46,6 +46,6 @@ class TestPortCosRateSettingModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'data-port', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': 'data-port',
'pn_cos1_rate': '2000', 'pn_cos5_rate': '3000', 'pn_cos2_rate': '4000', 'state': 'update'}) 'pn_cos1_rate': '2000', 'pn_cos5_rate': '3000', 'pn_cos2_rate': '4000', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 port-cos-rate-setting-modify cos1-rate 2000 cos5-rate 3000 ' expected_cmd = ' switch sw01 port-cos-rate-setting-modify cos1-rate 2000 cos5-rate 3000 '
expected_cmd += 'cos2-rate 4000 port data-port' expected_cmd += 'cos2-rate 4000 port data-port'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -51,12 +51,12 @@ class TestPrefixListNetworkModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_network': '172.16.3.1', 'pn_netmask': '24', 'state': 'present'}) 'pn_network': '172.16.3.1', 'pn_netmask': '24', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 prefix-list-network-add name foo network 172.16.3.1 netmask 24' expected_cmd = ' switch sw01 prefix-list-network-add name foo network 172.16.3.1 netmask 24'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_prefix_list_network_remove(self): def test_prefix_list_network_remove(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_network': '172.16.3.1', 'pn_netmask': '24', 'state': 'absent'}) 'pn_network': '172.16.3.1', 'pn_netmask': '24', 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 prefix-list-network-remove name foo network 172.16.3.1 netmask 24' expected_cmd = ' switch sw01 prefix-list-network-remove name foo network 172.16.3.1 netmask 24'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -58,19 +58,19 @@ class TestRoleModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_scope': 'local', 'pn_access': 'read-only', 'state': 'present'}) 'pn_scope': 'local', 'pn_access': 'read-only', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 role-create name foo scope local access read-only' expected_cmd = ' switch sw01 role-create name foo scope local access read-only'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_role_delete(self): def test_role_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 role-delete name foo ' expected_cmd = ' switch sw01 role-delete name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_role_update(self): def test_role_update(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_access': 'read-write', 'pn_sudo': True, 'pn_shell': True, 'state': 'update'}) 'pn_access': 'read-write', 'pn_sudo': True, 'pn_shell': True, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 role-modify name foo access read-write shell sudo ' expected_cmd = ' switch sw01 role-modify name foo access read-write shell sudo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -58,19 +58,19 @@ class TestSnmpCommunityModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo',
'pn_community_type': 'read-write', 'state': 'present'}) 'pn_community_type': 'read-write', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-community-create community-string foo community-type read-write' expected_cmd = ' switch sw01 snmp-community-create community-string foo community-type read-write'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_snmp_community_delete(self): def test_snmp_community_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-community-delete community-string foo ' expected_cmd = ' switch sw01 snmp-community-delete community-string foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_snmp_community_update(self): def test_snmp_community_update(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_community_string': 'foo',
'pn_community_type': 'read-only', 'state': 'update'}) 'pn_community_type': 'read-only', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-community-modify community-string foo community-type read-only' expected_cmd = ' switch sw01 snmp-community-modify community-string foo community-type read-only'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -51,7 +51,7 @@ class TestSnmpTrapSinkModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_community': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_community': 'foo',
'pn_dest_host': '192.168.67.8', 'pn_type': 'TRAP_TYPE_V2_INFORM', 'state': 'present'}) 'pn_dest_host': '192.168.67.8', 'pn_type': 'TRAP_TYPE_V2_INFORM', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-trap-sink-create type TRAP_TYPE_V2_INFORM dest-host 192.168.67.8 ' expected_cmd = ' switch sw01 snmp-trap-sink-create type TRAP_TYPE_V2_INFORM dest-host 192.168.67.8 '
expected_cmd += 'community foo dest-port 162' expected_cmd += 'community foo dest-port 162'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -59,5 +59,5 @@ class TestSnmpTrapSinkModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_community': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_community': 'foo',
'pn_dest_host': '192.168.67.8', 'pn_type': 'TRAP_TYPE_V2_INFORM', 'state': 'absent'}) 'pn_dest_host': '192.168.67.8', 'pn_type': 'TRAP_TYPE_V2_INFORM', 'state': 'absent'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-trap-sink-delete community foo dest-host 192.168.67.8 dest-port 162' expected_cmd = ' switch sw01 snmp-trap-sink-delete community foo dest-host 192.168.67.8 dest-port 162'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -58,19 +58,19 @@ class TestSnmpVacmModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo',
'pn_user_type': 'rouser', 'state': 'present'}) 'pn_user_type': 'rouser', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-vacm-create user-name foo user-type rouser' expected_cmd = ' switch sw01 snmp-vacm-create user-name foo user-type rouser'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_snmp_vacm_delete(self): def test_snmp_vacm_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-vacm-delete user-name foo ' expected_cmd = ' switch sw01 snmp-vacm-delete user-name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_snmp_vacm_modify(self): def test_snmp_vacm_modify(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_user_name': 'foo',
'pn_user_type': 'rwuser', 'state': 'absent'}) 'pn_user_type': 'rwuser', 'state': 'absent'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 snmp-vacm-delete user-name foo ' expected_cmd = ' switch sw01 snmp-vacm-delete user-name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,7 +38,7 @@ class TestStpModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_hello_time': '3', set_module_args({'pn_cliswitch': 'sw01', 'pn_hello_time': '3',
'pn_stp_mode': 'rstp', 'state': 'update'}) 'pn_stp_mode': 'rstp', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 stp-modify hello-time 3 root-guard-wait-time 20 mst-max-hops 20 max-age 20 ' expected_cmd = ' switch sw01 stp-modify hello-time 3 root-guard-wait-time 20 mst-max-hops 20 max-age 20 '
expected_cmd += 'stp-mode rstp forwarding-delay 15 bridge-priority 32768' expected_cmd += 'stp-mode rstp forwarding-delay 15 bridge-priority 32768'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -46,6 +46,6 @@ class TestStpModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_root_guard_wait_time': '50', set_module_args({'pn_cliswitch': 'sw01', 'pn_root_guard_wait_time': '50',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 stp-modify hello-time 2 root-guard-wait-time 50 mst-max-hops 20 ' expected_cmd = ' switch sw01 stp-modify hello-time 2 root-guard-wait-time 50 mst-max-hops 20 '
expected_cmd += 'max-age 20 forwarding-delay 15 bridge-priority 32768' expected_cmd += 'max-age 20 forwarding-delay 15 bridge-priority 32768'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,12 +38,12 @@ class TestStpPortModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1',
'pn_filter': True, 'pn_priority': '144', 'state': 'update'}) 'pn_filter': True, 'pn_priority': '144', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 stp-port-modify priority 144 cost 2000 port 1 filter ' expected_cmd = ' switch sw01 stp-port-modify priority 144 cost 2000 port 1 filter '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_stp_port_modify_t2(self): def test_stp_port_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1,2', set_module_args({'pn_cliswitch': 'sw01', 'pn_port': '1,2',
'pn_cost': '200', 'state': 'update'}) 'pn_cost': '200', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 stp-port-modify priority 128 cost 200 port 1,2' expected_cmd = ' switch sw01 stp-port-modify priority 128 cost 200 port 1,2'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,7 +38,7 @@ class TestSwitchSetupModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_timezone': 'America/New_York', set_module_args({'pn_cliswitch': 'sw01', 'pn_timezone': 'America/New_York',
'pn_in_band_ip': '20.20.1.1', 'pn_in_band_netmask': '24', 'state': 'update'}) 'pn_in_band_ip': '20.20.1.1', 'pn_in_band_netmask': '24', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 switch-setup-modify timezone America/New_York ' expected_cmd = ' switch sw01 switch-setup-modify timezone America/New_York '
expected_cmd += 'in-band-netmask 24 in-band-ip 20.20.1.1' expected_cmd += 'in-band-netmask 24 in-band-ip 20.20.1.1'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -46,7 +46,7 @@ class TestSwitchSetupModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_in_band_ip6': '2001:0db8:85a3::8a2e:0370:7334', set_module_args({'pn_cliswitch': 'sw01', 'pn_in_band_ip6': '2001:0db8:85a3::8a2e:0370:7334',
'pn_in_band_netmask_ip6': '127', 'state': 'update'}) 'pn_in_band_netmask_ip6': '127', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 switch-setup-modify in-band-ip6 2001:0db8:85a3::8a2e:0370:7334 ' expected_cmd = ' switch sw01 switch-setup-modify in-band-ip6 2001:0db8:85a3::8a2e:0370:7334 '
expected_cmd += 'in-band-netmask-ip6 127' expected_cmd += 'in-band-netmask-ip6 127'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -54,12 +54,12 @@ class TestSwitchSetupModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_date': '2019-01-11', set_module_args({'pn_cliswitch': 'sw01', 'pn_date': '2019-01-11',
'pn_loopback_ip': '10.10.10.1', 'state': 'update'}) 'pn_loopback_ip': '10.10.10.1', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 switch-setup-modify date 2019-01-11 loopback-ip 10.10.10.1' expected_cmd = ' switch sw01 switch-setup-modify date 2019-01-11 loopback-ip 10.10.10.1'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_pn_switch_setup_modify_t4(self): def test_pn_switch_setup_modify_t4(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_dns_ip': '172.16.5.5', set_module_args({'pn_cliswitch': 'sw01', 'pn_dns_ip': '172.16.5.5',
'state': 'update'}) 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 switch-setup-modify dns-ip 172.16.5.5' expected_cmd = ' switch sw01 switch-setup-modify dns-ip 172.16.5.5'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -58,19 +58,19 @@ class TestUserModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_scope': 'local', 'pn_password': 'test123', 'state': 'present'}) 'pn_scope': 'local', 'pn_password': 'test123', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 user-create name foo scope local password test123' expected_cmd = ' switch sw01 user-create name foo scope local password test123'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_user_delete(self): def test_user_delete(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'state': 'absent'}) 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 user-delete name foo ' expected_cmd = ' switch sw01 user-delete name foo '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_user_modify(self): def test_user_modify(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo', set_module_args({'pn_cliswitch': 'sw01', 'pn_name': 'foo',
'pn_password': 'test1234', 'state': 'update'}) 'pn_password': 'test1234', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 user-modify name foo password test1234' expected_cmd = ' switch sw01 user-modify name foo password test1234'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -38,12 +38,12 @@ class TestVflowTableProfileModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_profile': 'ipv6', set_module_args({'pn_cliswitch': 'sw01', 'pn_profile': 'ipv6',
'pn_hw_tbl': 'switch-main', 'pn_enable': True, 'state': 'update'}) 'pn_hw_tbl': 'switch-main', 'pn_enable': True, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vflow-table-profile-modify profile ipv6 hw-tbl switch-main enable ' expected_cmd = ' switch sw01 vflow-table-profile-modify profile ipv6 hw-tbl switch-main enable '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_vflow_table_profile_modify_t2(self): def test_vflow_table_profile_modify_t2(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_profile': 'qos', set_module_args({'pn_cliswitch': 'sw01', 'pn_profile': 'qos',
'pn_hw_tbl': 'switch-main', 'pn_enable': False, 'state': 'update'}) 'pn_hw_tbl': 'switch-main', 'pn_enable': False, 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vflow-table-profile-modify profile qos hw-tbl switch-main disable ' expected_cmd = ' switch sw01 vflow-table-profile-modify profile qos hw-tbl switch-main disable '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -51,7 +51,7 @@ class TestVrouterBGPNetworkModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_network': '10.10.10.10', 'pn_netmask': '31', 'state': 'present'}) 'pn_network': '10.10.10.10', 'pn_netmask': '31', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-bgp-network-add vrouter-name foo-vrouter netmask 31 ' expected_cmd = ' switch sw01 vrouter-bgp-network-add vrouter-name foo-vrouter netmask 31 '
expected_cmd += 'network 10.10.10.10' expected_cmd += 'network 10.10.10.10'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -59,5 +59,5 @@ class TestVrouterBGPNetworkModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_network': '10.10.10.10', 'state': 'absent'}) 'pn_network': '10.10.10.10', 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-bgp-network-remove vrouter-name foo-vrouter network 10.10.10.10' expected_cmd = ' switch sw01 vrouter-bgp-network-remove vrouter-name foo-vrouter network 10.10.10.10'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -51,7 +51,7 @@ class TestVrouterInterfaceIpModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_ip': '2620:0:1651:1::30', 'pn_netmask': '127', 'pn_nic': 'eth0.4092', 'state': 'present'}) 'pn_ip': '2620:0:1651:1::30', 'pn_netmask': '127', 'pn_nic': 'eth0.4092', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-interface-ip-add vrouter-name foo-vrouter nic eth0.4092 ' expected_cmd = ' switch sw01 vrouter-interface-ip-add vrouter-name foo-vrouter nic eth0.4092 '
expected_cmd += 'ip 2620:0:1651:1::30 netmask 127' expected_cmd += 'ip 2620:0:1651:1::30 netmask 127'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -59,6 +59,6 @@ class TestVrouterInterfaceIpModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_ip': '2620:0:1651:1::30', 'pn_nic': 'eth0.4092', 'state': 'absent'}) 'pn_ip': '2620:0:1651:1::30', 'pn_nic': 'eth0.4092', 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-interface-ip-remove vrouter-name foo-vrouter nic eth0.4092 ' expected_cmd = ' switch sw01 vrouter-interface-ip-remove vrouter-name foo-vrouter nic eth0.4092 '
expected_cmd += 'ip 2620:0:1651:1::30 ' expected_cmd += 'ip 2620:0:1651:1::30 '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -51,12 +51,12 @@ class TestVrouterOSPF6Module(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_nic': 'eth0.4092', 'pn_ospf6_area': '0.0.0.0', 'state': 'present'}) 'pn_nic': 'eth0.4092', 'pn_ospf6_area': '0.0.0.0', 'state': 'present'})
result = self.execute_module(changed=True, state='present') result = self.execute_module(changed=True, state='present')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-ospf6-add vrouter-name foo-vrouter nic eth0.4092 ospf6-area 0.0.0.0 ' expected_cmd = ' switch sw01 vrouter-ospf6-add vrouter-name foo-vrouter nic eth0.4092 ospf6-area 0.0.0.0 '
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
def test_vrouter_ospf6_remove(self): def test_vrouter_ospf6_remove(self):
set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter', set_module_args({'pn_cliswitch': 'sw01', 'pn_vrouter_name': 'foo-vrouter',
'pn_nic': 'eth0.4092', 'state': 'absent'}) 'pn_nic': 'eth0.4092', 'state': 'absent'})
result = self.execute_module(changed=True, state='absent') result = self.execute_module(changed=True, state='absent')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-ospf6-remove vrouter-name foo-vrouter nic eth0.4092' expected_cmd = ' switch sw01 vrouter-ospf6-remove vrouter-name foo-vrouter nic eth0.4092'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)

View file

@ -44,7 +44,7 @@ class TestVrouterPimConfigModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_query_interval': '10', set_module_args({'pn_cliswitch': 'sw01', 'pn_query_interval': '10',
'pn_querier_timeout': '30', 'pn_vrouter_name': 'foo-vrouter', 'state': 'update'}) 'pn_querier_timeout': '30', 'pn_vrouter_name': 'foo-vrouter', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-pim-config-modify vrouter-name foo-vrouter ' expected_cmd = ' switch sw01 vrouter-pim-config-modify vrouter-name foo-vrouter '
expected_cmd += 'querier-timeout 30 query-interval 10' expected_cmd += 'querier-timeout 30 query-interval 10'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)
@ -52,6 +52,6 @@ class TestVrouterPimConfigModule(TestNvosModule):
set_module_args({'pn_cliswitch': 'sw01', 'pn_query_interval': '30', set_module_args({'pn_cliswitch': 'sw01', 'pn_query_interval': '30',
'pn_hello_interval': '120', 'pn_vrouter_name': 'foo-vrouter', 'state': 'update'}) 'pn_hello_interval': '120', 'pn_vrouter_name': 'foo-vrouter', 'state': 'update'})
result = self.execute_module(changed=True, state='update') result = self.execute_module(changed=True, state='update')
expected_cmd = '/usr/bin/cli --quiet -e --no-login-prompt switch sw01 vrouter-pim-config-modify vrouter-name foo-vrouter ' expected_cmd = ' switch sw01 vrouter-pim-config-modify vrouter-name foo-vrouter '
expected_cmd += 'hello-interval 120 query-interval 30' expected_cmd += 'hello-interval 120 query-interval 30'
self.assertEqual(result['cli_cmd'], expected_cmd) self.assertEqual(result['cli_cmd'], expected_cmd)