adds more intelligent save logic and diff to network config modules (#26565)

* adds more intelligent save logic and diff to network config modules

* adds sha1 property to NetworkConfig
* adds new argument save_when to argument_spec
* adds new argument diff_against to argument_spec
* adds new argument intended_config to argument_spec
* renames config argument to running_config with alias to config
* deprecates the use of the save argument
* before and after now work with src argument
* misc module clean

Modules updated
* nxos_config
* ios_config
* eos_config

Most notably this makes the save mechanism more intelligent for config
modules for devices that need to copy the ephemeral config to
non-volatile storage.

The diff_against argument allows the playbook task to control what the
device's running-config is diff'ed against. By default it will return
the diff of the startup-config.

* removes ios_config from pep8/legacy_files.txt

* extends the ignore lines argument to the module

* clean up CI errors

* add missing list brackets

* fixes typo

* fixes unit test cases

* remove last line break when returning config contents

* encode config string to bytes before hashing

* fix typo

* addresses feedback in PR

* update unit test cases
This commit is contained in:
Peter Sprygada 2017-07-11 20:34:20 -04:00 committed by GitHub
parent dc4037e5a7
commit 0b6f0e6c0d
6 changed files with 628 additions and 233 deletions

View file

@ -68,15 +68,15 @@ class TestIosConfigModule(TestIosModule):
result = self.execute_module()
self.assertIn('__backup__', result)
def test_ios_config_save(self):
def test_ios_config_save_always(self):
self.run_commands.return_value = "Hostname foo"
set_module_args(dict(save=True))
set_module_args(dict(save_when='always'))
self.execute_module(changed=True)
self.assertEqual(self.run_commands.call_count, 2)
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.assertIn('copy running-config startup-config\r', args)
self.assertIn('copy running-config startup-config', args)
def test_ios_config_lines_wo_parents(self):
set_module_args(dict(lines=['hostname foo']))
@ -117,9 +117,9 @@ class TestIosConfigModule(TestIosModule):
commands = parents + lines
self.execute_module(changed=True, commands=commands)
def test_ios_config_force(self):
def test_ios_config_match_none(self):
lines = ['hostname router']
set_module_args(dict(lines=lines, force=True))
set_module_args(dict(lines=lines, match='none'))
self.execute_module(changed=True, commands=lines)
def test_ios_config_match_none(self):