mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
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:
parent
ec9582fd83
commit
fd6429fbd1
2 changed files with 17 additions and 7 deletions
|
@ -27,7 +27,7 @@
|
||||||
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# 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.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
|
from ansible.module_utils.connection import exec_command
|
||||||
|
|
||||||
_DEVICE_CONFIGS = {}
|
_DEVICE_CONFIGS = {}
|
||||||
|
@ -64,9 +64,20 @@ def get_config(module, flags=[]):
|
||||||
_DEVICE_CONFIGS[cmd] = cfg
|
_DEVICE_CONFIGS[cmd] = cfg
|
||||||
return 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):
|
def run_commands(module, commands, check_rc=True):
|
||||||
responses = list()
|
responses = list()
|
||||||
|
commands = to_commands(module, to_list(commands))
|
||||||
for cmd in to_list(commands):
|
for cmd in to_list(commands):
|
||||||
rc, out, err = exec_command(module, cmd)
|
rc, out, err = exec_command(module, cmd)
|
||||||
if check_rc and rc != 0:
|
if check_rc and rc != 0:
|
||||||
|
@ -75,6 +86,7 @@ def run_commands(module, commands, check_rc=True):
|
||||||
return responses
|
return responses
|
||||||
|
|
||||||
def load_config(module, commands, commit=False, replace=False, comment=None):
|
def load_config(module, commands, commit=False, replace=False, comment=None):
|
||||||
|
|
||||||
rc, out, err = exec_command(module, 'configure terminal')
|
rc, out, err = exec_command(module, 'configure terminal')
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg='unable to enter configuration mode', err=err)
|
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
|
failed = False
|
||||||
for command in to_list(commands):
|
for command in to_list(commands):
|
||||||
if command == 'end':
|
if command == 'end':
|
||||||
pass
|
continue
|
||||||
|
|
||||||
rc, out, err = exec_command(module, command)
|
rc, out, err = exec_command(module, command)
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
|
|
|
@ -258,10 +258,8 @@ def main():
|
||||||
result['commands'] = commands
|
result['commands'] = commands
|
||||||
|
|
||||||
if commands:
|
if commands:
|
||||||
commit = not module.check_mode
|
if not module.check_mode:
|
||||||
response = load_config(module, commands, commit=commit)
|
load_config(module, commands, commit=True)
|
||||||
if response.get('diff') and module._diff:
|
|
||||||
result['diff'] = {'prepared': response.get('diff')}
|
|
||||||
result['changed'] = True
|
result['changed'] = True
|
||||||
|
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
|
|
Loading…
Add table
Reference in a new issue