DELL EMC OS9 Collections ()

* adding OS9 ansible collections

* adding OS9 collections

* adding licensing, documentation changes

* fix for bugs reported by ansible sanity test

* fix for bugs reported by ansible sanity test

* adding documentation review changes and sanity folder

* removed unwanted folder

* fixes for bugs reported by sanity tests

* ignore.txt for ansible devel sanity

Co-authored-by: Patil <Komal_uttamrao_Patil@Dell.com>
This commit is contained in:
Komal Uttamrao Patil 2020-07-27 23:48:43 -07:00 committed by GitHub
parent 04c4baad7f
commit 0a7347bf80
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 5 additions and 2089 deletions

View file

@ -0,0 +1,3 @@
plugins/action/os9.py action-plugin-docs
plugins/modules/os9_config.py validate-modules:parameter-list-no-elements
plugins/modules/os9_facts.py validate-modules:parameter-list-no-elements

View file

@ -57,7 +57,7 @@ class TestDellos9Facts(TestDellos9Module):
command = item
if '|' in command:
command = str(command).replace('|', '')
filename = str(command).replace(' ', '_')
filename = str(command).replace(' ', '_')
filename = filename.replace('/', '7')
output.append(load_fixture(filename))
return output
@ -91,7 +91,7 @@ class TestDellos9Facts(TestDellos9Module):
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('hardware', ansible_facts['ansible_net_gather_subset'])
self.assertEquals(['flash','fcmfs','nfsmount','ftp','tftp','scp','http','https'], ansible_facts['ansible_net_filesystems'])
self.assertEquals(['flash', 'fcmfs', 'nfsmount', 'ftp', 'tftp', 'scp', 'http', 'https'], ansible_facts['ansible_net_filesystems'])
self.assertEquals(3128820, ansible_facts['ansible_net_memtotal_mb'])
self.assertEquals(3125722, ansible_facts['ansible_net_memfree_mb'])
@ -104,4 +104,3 @@ class TestDellos9Facts(TestDellos9Module):
self.assertIn('fortyGigE 0/24', ansible_facts['ansible_net_interfaces'].keys())
self.assertEquals(['Ma 0/0'], ansible_facts['ansible_net_neighbors'].keys())
self.assertIn('ansible_net_interfaces', ansible_facts)

View file

@ -1,13 +0,0 @@
!
hostname router
!
interface fortyGigE 1/6
ip address 1.2.3.4/24
description test string
!
interface fortyGigE 1/7
ip address 6.7.8.9/24
description test string
shutdown
!

View file

@ -1,12 +0,0 @@
!
hostname foo
!
interface fortyGigE 1/6
no ip address
!
interface fortyGigE 1/7
ip address 6.7.8.9/24
description test string
shutdown
!

View file

@ -1,10 +0,0 @@
Size(b) Free(b) Feature Type Flags Prefixes
6429872128 5582319616 FAT32 USERFLASH rw flash:
- - unformatted USERFLASH rw fcmfs:
241172480 91893760 Unknown NFSMOUNT rw nfsmount:
- - - network rw ftp:
- - - network rw tftp:
- - - network rw scp:
- - - network rw http:
- - - network rw https:

File diff suppressed because it is too large Load diff

View file

@ -1,19 +0,0 @@
System Type : S6000
System Mode : 1.0
Software Version : 9.12(0.0)
Unit Type Serial Number Part Number Rev Piece Part ID Rev Svc Tag Exprs Svc Code
--------------------------------------------------------------------------------------------------------------
* 0 S6000-01-FE-32T NA 08YWFG A00 CN-08YWFG-28298-3AG-0031 A00 6BJ8VS1 137 581 490 89
0 S6000-PWR-AC NA 0T9FNW A00 CN-0T9FNW-28298-3AG-0119 A00 NA NA
0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0094 A00 NA NA
0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0096 A00 NA NA
0 S6000-FAN NA 0MGDH8 A00 CN-0MGDH8-28298-3AG-0095 A00 NA NA
* - Management Unit
Software Protocol Configured
--------------------------------------------------------------
LLDP

View file

@ -1,26 +0,0 @@
fortyGigE 0/16 is down, line protocol is down
IPV6 is enabled
Link Local address: fe80::92b1:1cff:fef4:a28f
Global Unicast address(es):
2001:4898:5808:ffa2::5, subnet is 2001:4898:5808:ffa2::4/126 (MANUAL)
Remaining lifetime: infinite
Global Anycast address(es):
Joined Group address(es):
ff02::1
ff02::2
ff02::1:ff00:5
ff02::1:fff4:a28f
IP MTU is 1500 bytes
ND MTU is 0
ICMP redirects are not sent
DAD is enabled, number of DAD attempts: 3
ND reachable time is 35780 milliseconds
ND base reachable time is 30000 milliseconds
ND advertised reachable time is 0 milliseconds
ND advertised retransmit interval is 0 milliseconds
ND router advertisements are sent every 198 to 600 seconds
ND router advertisements live for 1800 seconds
ND advertised hop limit is 64
IPv6 hop limit for originated packets is 64
IPv6 unicast RPF check is not supported

View file

@ -1,35 +0,0 @@
========================================================================
Local Interface Ma 0/0 has 1 neighbor
Total Frames Out: 1747
Total Frames In: 10333
Total Neighbor information Age outs: 0
Total Multiple Neighbors Detected: 0
Total Frames Discarded: 0
Total In Error Frames: 0
Total Unrecognized TLVs: 0
Total TLVs Discarded: 0
Next packet will be sent after 17 seconds
The neighbors are given below:
-----------------------------------------------------------------------
Remote Chassis ID Subtype: Mac address (4)
Remote Chassis ID: 90:b1:1c:f4:2f:6d
Remote Port Subtype: Interface name (5)
Remote Port ID: TenGigabitEthernet 0/33
Remote Port Description: TenGigabitEthernet 0/33
Local Port ID: ManagementEthernet 0/0
Locally assigned remote Neighbor Index: 1
Remote TTL: 20
Information valid for next 17 seconds
Time since last information change of this neighbor: 14:54:48
Remote System Name: swlab1-maa-tor-A2
Remote System Desc: Dell Real Time Operating System Software. Dell
Operating System Version: 2.0. Dell Application Software Version:
9.11(2.0) Copyright (c) 1999-2017Dell Inc. All Rights Reserved.Build
Time: Tue Apr 25 21:22:59 2017
Existing System Capabilities: Repeater Bridge Router
Enabled System Capabilities: Repeater Bridge Router
Remote Port Vlan ID: 148
Port and Protocol Vlan ID: 148, Capability: Supported, Status: Enabled
---------------------------------------------------------------------------

View file

@ -1,4 +0,0 @@
===========================
Total(b) Used(b) Free(b) Lowest(b) Largest(b)
3203911680 3172120 3200739560 3200673304 3200739560

View file

@ -1,238 +0,0 @@
Current Configuration ...
! Version 9.12(0.0)
! Last configuration change at Thu Jan 11 06:53:29 2018 by admin
!
!
logging coredump stack-unit 0
logging coredump stack-unit 1
logging coredump stack-unit 2
logging coredump stack-unit 3
logging coredump stack-unit 4
logging coredump stack-unit 5
!
hostname Dell
!
protocol lldp
!
redundancy auto-synchronize full
!
enable password 7 b125455cf679b208e79b910e85789edf
!
username admin password 7 1d28e9f33f99cf5c
!
stack-unit 0 quad-port-profile 0,8,16,24,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,100,108,116,124
!
stack-unit 0 provision S6000
!
stack-unit 0 port 0 portmode quad
!
interface TenGigabitEthernet 0/0
no ip address
shutdown
!
interface TenGigabitEthernet 0/1
no ip address
shutdown
!
interface TenGigabitEthernet 0/2
no ip address
shutdown
!
interface TenGigabitEthernet 0/3
no ip address
shutdown
!
interface fortyGigE 0/4
no ip address
shutdown
!
interface fortyGigE 0/8
no ip address
shutdown
!
interface fortyGigE 0/12
no ip address
shutdown
!
interface fortyGigE 0/16
no ip address
ipv6 address 2001:4898:5808:ffa2::5/126
shutdown
!
interface fortyGigE 0/20
no ip address
switchport
ip access-group ipv6-ssh-only in
shutdown
!
interface fortyGigE 0/24
no ip address
switchport
mac access-group ssh-only-mac in
mac access-group ssh-only-mac out
shutdown
!
interface fortyGigE 0/28
no ip address
switchport
mac access-group ssh-only-mac in
mac access-group ssh-only-mac out
shutdown
!
interface fortyGigE 0/32
no ip address
switchport
ip access-group ipv6-ssh-only out
shutdown
!
interface fortyGigE 0/36
no ip address
shutdown
!
interface fortyGigE 0/40
no ip address
shutdown
!
interface fortyGigE 0/44
no ip address
shutdown
!
interface fortyGigE 0/48
no ip address
shutdown
!
interface fortyGigE 0/52
no ip address
shutdown
!
interface fortyGigE 0/56
no ip address
shutdown
!
interface fortyGigE 0/60
no ip address
shutdown
!
interface fortyGigE 0/64
no ip address
shutdown
!
interface fortyGigE 0/68
no ip address
shutdown
!
interface fortyGigE 0/72
no ip address
shutdown
!
interface fortyGigE 0/76
no ip address
shutdown
!
interface fortyGigE 0/80
no ip address
shutdown
!
interface fortyGigE 0/84
no ip address
shutdown
!
interface fortyGigE 0/88
no ip address
shutdown
!
interface fortyGigE 0/92
no ip address
shutdown
!
interface fortyGigE 0/96
no ip address
shutdown
!
interface fortyGigE 0/100
no ip address
shutdown
!
interface fortyGigE 0/104
no ip address
shutdown
!
interface fortyGigE 0/108
no ip address
shutdown
!
interface fortyGigE 0/112
no ip address
shutdown
!
interface fortyGigE 0/116
no ip address
shutdown
!
interface fortyGigE 0/120
no ip address
shutdown
!
interface fortyGigE 0/124
no ip address
shutdown
!
interface ManagementEthernet 0/0
ip address 10.16.148.71/16
no shutdown
!
interface ManagementEthernet 1/0
no shutdown
!
interface ManagementEthernet 2/0
no shutdown
!
interface ManagementEthernet 3/0
no shutdown
!
interface ManagementEthernet 4/0
no shutdown
!
interface ManagementEthernet 5/0
no shutdown
!
interface Vlan 1
!untagged fortyGigE 0/20-32
!
ipv6 access-list ipv6-ssh-only
description ipv6acl
remark 1 ipv6
seq 10 permit ipv6 2001:4898::/32 any
seq 20 permit tcp any eq 2 2404:f801::/32
seq 30 permit tcp any 2a01:110::/31 ack
seq 40 permit tcp any any
!
mac access-list extended ssh-only-mac
description macacl
remark 1 mac
seq 5 permit any any count
seq 6 deny any any
!
ip ssh server enable
!
line console 0
line vty 0
line vty 1
access-class ipv6-ssh-only ipv6
line vty 2
access-class ipv6-ssh-only ipv6
line vty 3
access-class ipv6-ssh-only ipv6
line vty 4
line vty 5
line vty 6
line vty 7
line vty 8
line vty 9
!
reload-type
boot-type normal-reload
config-scr-download enable
!
end

View file

@ -1,18 +0,0 @@
Dell Real Time Operating System Software
Dell Operating System Version: 2.0
Dell Application Software Version: 9.10(0.1P13)
Copyright (c) 1999-2016 by Dell Inc. All Rights Reserved.
Build Time: Wed Sep 7 23:48:35 2016
Build Path: /sites/eqx/work/swbuild01_1/build01/E9-10-0/SW/SRC
Dell Networking OS uptime is 12 week(s), 6 day(s), 9 hour(s), 20 minute(s)
System image file is "system://A"
System Type: S6000-ON
Control Processor: Intel Centerton with 3 Gbytes (3203911680 bytes) of memory, core(s) 2.
16G bytes of boot flash memory.
1 32-port TE/FG (SI-ON)
32 Forty GigabitEthernet/IEEE 802.3 interface(s)

View file

@ -1,88 +0,0 @@
# (c) 2020 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/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import json
from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase
fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
fixture_data = {}
def load_fixture(name):
path = os.path.join(fixture_path, name)
if path in fixture_data:
return fixture_data[path]
with open(path) as f:
data = f.read()
try:
data = json.loads(data)
except:
pass
fixture_data[path] = data
return data
class TestDellos9Module(ModuleTestCase):
def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False):
self.load_fixtures(commands)
if failed:
result = self.failed()
self.assertTrue(result['failed'], result)
else:
result = self.changed(changed)
self.assertEqual(result['changed'], changed, result)
if commands is not None:
if sort:
self.assertEqual(sorted(commands), sorted(result['updates']), result['updates'])
else:
self.assertEqual(commands, result['updates'], result['updates'])
return result
def failed(self):
with self.assertRaises(AnsibleFailJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertTrue(result['failed'], result)
return result
def changed(self, changed=False):
with self.assertRaises(AnsibleExitJson) as exc:
self.module.main()
result = exc.exception.args[0]
self.assertEqual(result['changed'], changed, result)
return result
def load_fixtures(self, commands=None):
pass

View file

@ -1,108 +0,0 @@
# (c) 2020 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/>.
# 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_collections.dellemc.os9.plugins.modules import os9_command
from units.modules.utils import set_module_args
from .os9_module import TestDellos9Module, load_fixture
class TestDellos9CommandModule(TestDellos9Module):
module = os9_command
def setUp(self):
super(TestDellos9CommandModule, self).setUp()
self.mock_run_commands = patch('ansible.modules.network.os9.os9_command.run_commands')
self.run_commands = self.mock_run_commands.start()
def tearDown(self):
super(TestDellos9CommandModule, self).tearDown()
self.mock_run_commands.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(' ', '_')
output.append(load_fixture(filename))
return output
self.run_commands.side_effect = load_from_file
def test_os9_command_simple(self):
set_module_args(dict(commands=['show version']))
result = self.execute_module()
self.assertEqual(len(result['stdout']), 1)
self.assertTrue(result['stdout'][0].startswith('Dell Real Time'))
def test_os9_command_multiple(self):
set_module_args(dict(commands=['show version', 'show version']))
result = self.execute_module()
self.assertEqual(len(result['stdout']), 2)
self.assertTrue(result['stdout'][0].startswith('Dell Real Time'))
def test_os9_command_wait_for(self):
wait_for = 'result[0] contains "Dell Real"'
set_module_args(dict(commands=['show version'], wait_for=wait_for))
self.execute_module()
def test_os9_command_wait_for_fails(self):
wait_for = 'result[0] contains "test string"'
set_module_args(dict(commands=['show version'], wait_for=wait_for))
self.execute_module(failed=True)
self.assertEqual(self.run_commands.call_count, 10)
def test_os9_command_retries(self):
wait_for = 'result[0] contains "test string"'
set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2))
self.execute_module(failed=True)
self.assertEqual(self.run_commands.call_count, 2)
def test_os9_command_match_any(self):
wait_for = ['result[0] contains "Dell Real"',
'result[0] contains "test string"']
set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any'))
self.execute_module()
def test_os9_command_match_all(self):
wait_for = ['result[0] contains "Dell Real"',
'result[0] contains "Operating System"']
set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all'))
self.execute_module()
def test_os9_command_match_all_failure(self):
wait_for = ['result[0] contains "Dell Real"',
'result[0] contains "test string"']
commands = ['show version', 'show version']
set_module_args(dict(commands=commands, wait_for=wait_for, match='all'))
self.execute_module(failed=True)

View file

@ -1,148 +0,0 @@
#
# (c) 2020 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/>.
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.compat.tests.mock import patch
from ansible_collections.dellemc.os9.plugins.modules import os9_config
from units.modules.utils import set_module_args
from .os9_module import TestDellos9Module, load_fixture
class TestDellos9ConfigModule(TestDellos9Module):
module = os9_config
def setUp(self):
super(TestDellos9ConfigModule, self).setUp()
self.mock_get_config = patch('ansible.modules.network.os9.os9_config.get_config')
self.get_config = self.mock_get_config.start()
self.mock_load_config = patch('ansible.modules.network.os9.os9_config.load_config')
self.load_config = self.mock_load_config.start()
self.mock_run_commands = patch('ansible.modules.network.os9.os9_config.run_commands')
self.run_commands = self.mock_run_commands.start()
def tearDown(self):
super(TestDellos9ConfigModule, self).tearDown()
self.mock_get_config.stop()
self.mock_load_config.stop()
self.mock_run_commands.stop()
def load_fixtures(self, commands=None):
config_file = 'os9_config_config.cfg'
self.get_config.return_value = load_fixture(config_file)
self.load_config.return_value = None
def test_os9_config_unchanged(self):
src = load_fixture('os9_config_config.cfg')
set_module_args(dict(src=src))
self.execute_module()
def test_os9_config_src(self):
src = load_fixture('os9_config_src.cfg')
set_module_args(dict(src=src))
commands = ['hostname foo', 'interface fortyGigE 1/6',
'no ip address']
self.execute_module(changed=True, commands=commands)
def test_os9_config_backup(self):
set_module_args(dict(backup=True))
result = self.execute_module()
self.assertIn('__backup__', result)
def test_os9_config_save(self):
set_module_args(dict(save=True))
self.execute_module(changed=True)
self.assertEqual(self.run_commands.call_count, 1)
self.assertEqual(self.get_config.call_count, 0)
self.assertEqual(self.load_config.call_count, 0)
args = self.run_commands.call_args[0][1]
self.assertDictContainsSubset({'command': 'copy running-config startup-config'}, args[0])
# self.assertIn('copy running-config startup-config\r', args)
def test_os9_config_lines_wo_parents(self):
set_module_args(dict(lines=['hostname foo']))
commands = ['hostname foo']
self.execute_module(changed=True, commands=commands)
def test_os9_config_lines_w_parents(self):
set_module_args(dict(lines=['shutdown'], parents=['interface fortyGigE 1/6']))
commands = ['interface fortyGigE 1/6', 'shutdown']
self.execute_module(changed=True, commands=commands)
def test_os9_config_before(self):
set_module_args(dict(lines=['hostname foo'], before=['snmp-server contact bar']))
commands = ['snmp-server contact bar', 'hostname foo']
self.execute_module(changed=True, commands=commands, sort=False)
def test_os9_config_after(self):
set_module_args(dict(lines=['hostname foo'], after=['snmp-server contact bar']))
commands = ['hostname foo', 'snmp-server contact bar']
self.execute_module(changed=True, commands=commands, sort=False)
def test_os9_config_before_after_no_change(self):
set_module_args(dict(lines=['hostname router'],
before=['snmp-server contact bar'],
after=['snmp-server location chennai']))
self.execute_module()
def test_os9_config_config(self):
config = 'hostname localhost'
set_module_args(dict(lines=['hostname router'], config=config))
commands = ['hostname router']
self.execute_module(changed=True, commands=commands)
def test_os9_config_replace_block(self):
lines = ['description test string', 'test string']
parents = ['interface fortyGigE 1/6']
set_module_args(dict(lines=lines, replace='block', parents=parents))
commands = parents + lines
self.execute_module(changed=True, commands=commands)
def test_os9_config_match_none(self):
lines = ['hostname router']
set_module_args(dict(lines=lines, match='none'))
self.execute_module(changed=True, commands=lines)
def test_os9_config_match_none(self):
lines = ['ip address 1.2.3.4/24', 'description test string']
parents = ['interface fortyGigE 1/6']
set_module_args(dict(lines=lines, parents=parents, match='none'))
commands = parents + lines
self.execute_module(changed=True, commands=commands, sort=False)
def test_os9_config_match_strict(self):
lines = ['ip address 1.2.3.4/24', 'description test string',
'shutdown']
parents = ['interface fortyGigE 1/6']
set_module_args(dict(lines=lines, parents=parents, match='strict'))
commands = parents + ['shutdown']
self.execute_module(changed=True, commands=commands, sort=False)
def test_os9_config_match_exact(self):
lines = ['ip address 1.2.3.4/24', 'description test string',
'shutdown']
parents = ['interface fortyGigE 1/6']
set_module_args(dict(lines=lines, parents=parents, match='exact'))
commands = parents + lines
self.execute_module(changed=True, commands=commands, sort=False)

View file

@ -1,107 +0,0 @@
# (c) 2020 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/>.
# 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 units.modules.utils import set_module_args
from .os9_module import TestDellos9Module, load_fixture
from ansible_collections.dellemc.os9.plugins.modules import os9_facts
class TestDellos9Facts(TestDellos9Module):
module = os9_facts
def setUp(self):
super(TestDellos9Facts, self).setUp()
self.mock_run_command = patch(
'ansible.modules.network.os9.os9_facts.run_commands')
self.run_command = self.mock_run_command.start()
def tearDown(self):
super(TestDellos9Facts, self).tearDown()
self.mock_run_command.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 = obj['command']
except ValueError:
command = item
if '|' in command:
command = str(command).replace('|', '')
filename = str(command).replace(' ', '_')
filename = filename.replace('/', '7')
output.append(load_fixture(filename))
return output
self.run_command.side_effect = load_from_file
def test_os9_facts_gather_subset_default(self):
set_module_args(dict())
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('hardware', ansible_facts['ansible_net_gather_subset'])
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset'])
self.assertEquals('os9_sw1', ansible_facts['ansible_net_hostname'])
self.assertIn('fortyGigE 0/24', ansible_facts['ansible_net_interfaces'].keys())
self.assertEquals(3128820, ansible_facts['ansible_net_memtotal_mb'])
self.assertEquals(3125722, ansible_facts['ansible_net_memfree_mb'])
def test_os9_facts_gather_subset_config(self):
set_module_args({'gather_subset': 'config'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('config', ansible_facts['ansible_net_gather_subset'])
self.assertEquals('os9_sw1', ansible_facts['ansible_net_hostname'])
self.assertIn('ansible_net_config', ansible_facts)
def test_os9_facts_gather_subset_hardware(self):
set_module_args({'gather_subset': 'hardware'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('hardware', ansible_facts['ansible_net_gather_subset'])
self.assertEquals(['flash','fcmfs','nfsmount','ftp','tftp','scp','http','https'], ansible_facts['ansible_net_filesystems'])
self.assertEquals(3128820, ansible_facts['ansible_net_memtotal_mb'])
self.assertEquals(3125722, ansible_facts['ansible_net_memfree_mb'])
def test_os9_facts_gather_subset_interfaces(self):
set_module_args({'gather_subset': 'interfaces'})
result = self.execute_module()
ansible_facts = result['ansible_facts']
self.assertIn('default', ansible_facts['ansible_net_gather_subset'])
self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset'])
self.assertIn('fortyGigE 0/24', ansible_facts['ansible_net_interfaces'].keys())
self.assertEquals(['Ma 0/0'], ansible_facts['ansible_net_neighbors'].keys())
self.assertIn('ansible_net_interfaces', ansible_facts)