Idempotency fix for iosxr_config (#22365)

Multiple fixes to address idempotency issues, along with refactor of
module_utils iosxr to look like ios, for code consistency.

Fixes #22315
This commit is contained in:
Ricardo Carrillo Cruz 2017-03-07 16:57:19 +01:00 committed by John R Barker
parent ec9582fd83
commit fd6429fbd1
2 changed files with 17 additions and 7 deletions

View file

@ -27,7 +27,7 @@
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
from ansible.module_utils.basic import env_fallback
from ansible.module_utils.network_common import to_list
from ansible.module_utils.network_common import to_list, ComplexList
from ansible.module_utils.connection import exec_command
_DEVICE_CONFIGS = {}
@ -64,9 +64,20 @@ def get_config(module, flags=[]):
_DEVICE_CONFIGS[cmd] = cfg
return cfg
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):
responses = list()
commands = to_commands(module, to_list(commands))
for cmd in to_list(commands):
rc, out, err = exec_command(module, cmd)
if check_rc and rc != 0:
@ -75,6 +86,7 @@ def run_commands(module, commands, check_rc=True):
return responses
def load_config(module, commands, commit=False, replace=False, comment=None):
rc, out, err = exec_command(module, 'configure terminal')
if rc != 0:
module.fail_json(msg='unable to enter configuration mode', err=err)
@ -82,7 +94,7 @@ def load_config(module, commands, commit=False, replace=False, comment=None):
failed = False
for command in to_list(commands):
if command == 'end':
pass
continue
rc, out, err = exec_command(module, command)
if rc != 0:

View file

@ -258,10 +258,8 @@ def main():
result['commands'] = commands
if commands:
commit = not module.check_mode
response = load_config(module, commands, commit=commit)
if response.get('diff') and module._diff:
result['diff'] = {'prepared': response.get('diff')}
if not module.check_mode:
load_config(module, commands, commit=True)
result['changed'] = True
module.exit_json(**result)