diff --git a/lib/ansible/modules/network/nxos/nxos_feature.py b/lib/ansible/modules/network/nxos/nxos_feature.py
index 5c870d6ec32..2c0211afb7d 100644
--- a/lib/ansible/modules/network/nxos/nxos_feature.py
+++ b/lib/ansible/modules/network/nxos/nxos_feature.py
@@ -16,10 +16,11 @@
# along with Ansible. If not, see .
#
-ANSIBLE_METADATA = {'metadata_version': '1.0',
- 'status': ['preview'],
- 'supported_by': 'community'}
-
+ANSIBLE_METADATA = {
+ 'metadata_version': '1.0',
+ 'status': ['preview'],
+ 'supported_by': 'community'
+}
DOCUMENTATION = '''
---
@@ -28,21 +29,21 @@ extends_documentation_fragment: nxos
version_added: "2.1"
short_description: Manage features in NX-OS switches.
description:
- - Offers ability to enable and disable features in NX-OS.
+ - Offers ability to enable and disable features in NX-OS.
author:
- - Jason Edelman (@jedelman8)
- - Gabriele Gerbino (@GGabriele)
+ - Jason Edelman (@jedelman8)
+ - Gabriele Gerbino (@GGabriele)
options:
- feature:
- description:
- - Name of feature.
- required: true
- state:
- description:
- - Desired state of the feature.
- required: false
- default: 'enabled'
- choices: ['enabled','disabled']
+ feature:
+ description:
+ - Name of feature.
+ required: true
+ state:
+ description:
+ - Desired state of the feature.
+ required: false
+ default: 'enabled'
+ choices: ['enabled','disabled']
'''
EXAMPLES = '''
@@ -50,20 +51,16 @@ EXAMPLES = '''
nxos_feature:
feature: lacp
state: enabled
- host: "{{ inventory_hostname }}"
- name: Ensure ospf is disabled
nxos_feature:
feature: ospf
state: disabled
- host: "{{ inventory_hostname }}"
- name: Ensure vpc is enabled
nxos_feature:
feature: vpc
state: enabled
- host: "{{ inventory_hostname }}"
-
'''
RETURN = '''
@@ -73,6 +70,7 @@ commands:
type: list
sample: ['nv overlay evpn']
'''
+
import re
from ansible.module_utils.basic import AnsibleModule
@@ -80,6 +78,7 @@ from ansible.module_utils.nxos import load_config, run_commands
from ansible.module_utils.nxos import nxos_argument_spec
from ansible.module_utils.nxos import check_args as nxos_check_args
+
def check_args(module, warnings):
nxos_check_args(module, warnings)
@@ -91,12 +90,13 @@ def check_args(module, warnings):
def get_available_features(feature, module):
available_features = {}
feature_regex = '(?P\S+)\s+\d+\s+(?P.*)'
- command = 'show feature'
+ command = {'command': 'show feature', 'output': 'text'}
- command = {'command': command, 'output': 'text'}
-
- body = run_commands(module, [command])
- split_body = body[0].splitlines()
+ try:
+ body = run_commands(module, [command])[0]
+ split_body = body.splitlines()
+ except (KeyError, IndexError):
+ return {}
for line in split_body:
try:
@@ -115,14 +115,12 @@ def get_available_features(feature, module):
if feature not in available_features:
available_features[feature] = state
else:
- if (available_features[feature] == 'disabled' and
- state == 'enabled'):
+ if available_features[feature] == 'disabled' and state == 'enabled':
available_features[feature] = state
return available_features
-
def get_commands(proposed, existing, state, module):
feature = validate_feature(module, mode='config')
commands = []
@@ -159,7 +157,7 @@ def validate_feature(module, mode='show'):
'telnet': 'telnetServer',
'ethernet-link-oam': 'elo',
'port-security': 'eth_port_sec'
- },
+ },
'config': {
'nve': 'nv overlay',
'vnseg_vlan': 'vn-segment-vlan-based',
@@ -174,8 +172,8 @@ def validate_feature(module, mode='show'):
'telnetServer': 'telnet',
'elo': 'ethernet-link-oam',
'eth_port_sec': 'port-security'
- }
}
+ }
if feature in feature_to_be_mapped[mode]:
feature = feature_to_be_mapped[mode][feature]
@@ -196,11 +194,11 @@ def main():
argument_spec.update(nxos_argument_spec)
- module = AnsibleModule(argument_spec=argument_spec,
- supports_check_mode=True)
+ module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)
warnings = list()
check_args(module, warnings)
+ results = dict(changed=False, warnings=warnings)
feature = validate_feature(module)
state = module.params['state'].lower()
@@ -216,25 +214,18 @@ def main():
existing = dict(state=existstate)
proposed = dict(state=state)
- changed = False
- end_state = existing
+ results['changed'] = False
cmds = get_commands(proposed, existing, state, module)
if cmds:
if not module.check_mode:
load_config(module, cmds)
- changed = True
-
- results = {
- 'commands': cmds,
- 'changed': changed,
- 'warnings': warnings
- }
+ results['changed'] = True
+ results['commands'] = cmds
module.exit_json(**results)
if __name__ == '__main__':
main()
-
diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt
index 09c2b127eac..018ba9f2eb0 100644
--- a/test/sanity/pep8/legacy-files.txt
+++ b/test/sanity/pep8/legacy-files.txt
@@ -435,7 +435,6 @@ lib/ansible/modules/network/nxos/nxos_aaa_server_host.py
lib/ansible/modules/network/nxos/nxos_command.py
lib/ansible/modules/network/nxos/nxos_config.py
lib/ansible/modules/network/nxos/nxos_facts.py
-lib/ansible/modules/network/nxos/nxos_feature.py
lib/ansible/modules/network/nxos/nxos_gir.py
lib/ansible/modules/network/nxos/nxos_gir_profile_management.py
lib/ansible/modules/network/nxos/nxos_igmp.py
diff --git a/test/units/modules/network/nxos/fixtures/nxos_feature/show_feature.txt b/test/units/modules/network/nxos/fixtures/nxos_feature/show_feature.txt
new file mode 100644
index 00000000000..cf6dbdbde81
--- /dev/null
+++ b/test/units/modules/network/nxos/fixtures/nxos_feature/show_feature.txt
@@ -0,0 +1,4 @@
+Feature Name Instance State
+-------------------- -------- -----
+nve 1 disabled
+ospf 1 enabled
diff --git a/test/units/modules/network/nxos/test_nxos_feature.py b/test/units/modules/network/nxos/test_nxos_feature.py
new file mode 100644
index 00000000000..c39f1d9c071
--- /dev/null
+++ b/test/units/modules/network/nxos/test_nxos_feature.py
@@ -0,0 +1,71 @@
+# (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 .
+
+# Make coding more python3-ish
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import json
+
+from ansible.compat.tests.mock import patch
+from ansible.modules.network.nxos import nxos_feature
+from .nxos_module import TestNxosModule, load_fixture, set_module_args
+
+
+class TestNxosFeatureModule(TestNxosModule):
+
+ module = nxos_feature
+
+ def setUp(self):
+ self.mock_run_commands = patch('ansible.modules.network.nxos.nxos_feature.run_commands')
+ self.run_commands = self.mock_run_commands.start()
+
+ self.mock_load_config = patch('ansible.modules.network.nxos.nxos_feature.load_config')
+ self.load_config = self.mock_load_config.start()
+
+ def tearDown(self):
+ self.mock_run_commands.stop()
+ self.mock_load_config.stop()
+
+ def load_fixtures(self, commands=None):
+ def load_from_file(*args, **kwargs):
+ module, commands = args
+ output = list()
+
+ for item in commands:
+ try:
+ obj = json.loads(item['command'])
+ command = obj['command']
+ except ValueError:
+ command = item['command']
+ filename = str(command).replace(' ', '_')
+ filename = 'nxos_feature/%s.txt' % filename
+ output.append(load_fixture(filename))
+ return output
+
+ self.run_commands.side_effect = load_from_file
+ self.load_config.return_value = None
+
+ def test_nxos_feature_enable(self):
+ set_module_args(dict(feature='nve', state='enabled'))
+ result = self.execute_module(changed=True)
+ self.assertEqual(result['commands'], ['feature nv overlay'])
+
+ def test_nxos_feature_disable(self):
+ set_module_args(dict(feature='ospf', state='disabled'))
+ result = self.execute_module(changed=True)
+ self.assertEqual(result['commands'], ['no feature ospf'])