mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fallback to show-run on ios_banner for devices where show banner does not work (#22793)
On switches 'show banner' command doesn't work, fallback to show run|begin banner and extract the banner text in case that fails.
This commit is contained in:
parent
02f66b9369
commit
98c98125f0
2 changed files with 16 additions and 6 deletions
|
@ -82,8 +82,10 @@ commands:
|
||||||
- string
|
- string
|
||||||
"""
|
"""
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
from ansible.module_utils.connection import exec_command
|
||||||
from ansible.module_utils.ios import load_config, run_commands
|
from ansible.module_utils.ios import load_config, run_commands
|
||||||
from ansible.module_utils.ios import ios_argument_spec, check_args
|
from ansible.module_utils.ios import ios_argument_spec, check_args
|
||||||
|
import re
|
||||||
|
|
||||||
def map_obj_to_commands(updates, module):
|
def map_obj_to_commands(updates, module):
|
||||||
commands = list()
|
commands = list()
|
||||||
|
@ -104,10 +106,17 @@ def map_obj_to_commands(updates, module):
|
||||||
return commands
|
return commands
|
||||||
|
|
||||||
def map_config_to_obj(module):
|
def map_config_to_obj(module):
|
||||||
output = run_commands(module, ['show banner %s' % module.params['banner']])
|
rc, out, err = exec_command(module, 'show banner %s' % module.params['banner'])
|
||||||
|
if rc == 0:
|
||||||
|
output = out
|
||||||
|
else:
|
||||||
|
rc, out, err = exec_command(module,
|
||||||
|
'show running-config | begin banner %s'
|
||||||
|
% module.params['banner'])
|
||||||
|
output = re.search('\^C(.*)\^C', out, re.S).group(1).strip()
|
||||||
obj = {'banner': module.params['banner'], 'state': 'absent'}
|
obj = {'banner': module.params['banner'], 'state': 'absent'}
|
||||||
if output:
|
if output:
|
||||||
obj['text'] = output[0]
|
obj['text'] = output
|
||||||
obj['state'] = 'present'
|
obj['state'] = 'present'
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,19 @@ class TestIosBannerModule(TestIosModule):
|
||||||
module = ios_banner
|
module = ios_banner
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.mock_run_commands = patch('ansible.modules.network.ios.ios_banner.run_commands')
|
self.mock_exec_command = patch('ansible.modules.network.ios.ios_banner.exec_command')
|
||||||
self.run_commands = self.mock_run_commands.start()
|
self.exec_command = self.mock_exec_command.start()
|
||||||
|
|
||||||
self.mock_load_config = patch('ansible.modules.network.ios.ios_banner.load_config')
|
self.mock_load_config = patch('ansible.modules.network.ios.ios_banner.load_config')
|
||||||
self.load_config = self.mock_load_config.start()
|
self.load_config = self.mock_load_config.start()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.mock_run_commands.stop()
|
self.mock_exec_command.stop()
|
||||||
self.mock_load_config.stop()
|
self.mock_load_config.stop()
|
||||||
|
|
||||||
def load_fixtures(self, commands=None):
|
def load_fixtures(self, commands=None):
|
||||||
self.run_commands.return_value = [load_fixture('ios_banner_show_banner.txt').strip()]
|
self.exec_command.return_value = (0,
|
||||||
|
load_fixture('ios_banner_show_banner.txt').strip(), None)
|
||||||
self.load_config.return_value = dict(diff=None, session='session')
|
self.load_config.return_value = dict(diff=None, session='session')
|
||||||
|
|
||||||
def test_ios_banner_create(self):
|
def test_ios_banner_create(self):
|
||||||
|
|
Loading…
Reference in a new issue