Fix ios_user issues (#44904)

* Fix ios_user issues

* Modify regex and fix unittests
This commit is contained in:
Nilashish Chakraborty 2018-08-31 11:08:46 +05:30 committed by GitHub
parent 7d81de2516
commit 0f268e70a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 27 deletions

View file

@ -178,7 +178,6 @@ commands:
from copy import deepcopy
import re
import json
import base64
import hashlib
@ -234,20 +233,22 @@ def map_obj_to_commands(updates, module):
def add_ssh(command, want, x=None):
command.append('ip ssh pubkey-chain')
command.append(' no username %s' % want['name'])
if x:
command.append(' username %s' % want['name'])
command.append(' key-hash %s' % x)
command.append(' exit')
command.append(' exit')
command.append('username %s' % want['name'])
command.append('key-hash %s' % x)
command.append('exit')
else:
command.append('no username %s' % want['name'])
command.append('exit')
for update in updates:
want, have = update
if want['state'] == 'absent':
commands.append(user_del_cmd(want['name']))
add_ssh(commands, want)
continue
if have['sshkey']:
add_ssh(commands, want)
else:
commands.append(user_del_cmd(want['name']))
if needs_update(want, have, 'view'):
add(commands, want, 'view %s' % want['view'])
@ -292,7 +293,7 @@ def parse_privilege(data):
def map_config_to_obj(module):
data = get_config(module, flags=['| section username'])
match = re.findall(r'^username (\S+)', data, re.M)
match = re.findall(r'(?:^(?:u|\s{2}u))sername (\S+)', data, re.M)
if not match:
return list()
@ -450,12 +451,6 @@ def main():
result['commands'] = commands
# the ios cli prevents this by rule so capture it and display
# a nice failure message
for cmd in commands:
if 'no username admin' in cmd:
module.fail_json(msg='cannot delete the `admin` account')
if commands:
if not module.check_mode:
load_config(module, commands)

View file

@ -80,5 +80,5 @@
that:
- 'result.changed == true'
- '"no username ansibletest1" in result.commands[0]["command"]'
- '"no username ansibletest2" in result.commands[4]["command"]'
- '"no username ansibletest3" in result.commands[8]["command"]'
- '"no username ansibletest2" in result.commands[1]["command"]'
- '"no username ansibletest3" in result.commands[2]["command"]'

View file

@ -61,10 +61,7 @@ class TestIosUserModule(TestIosModule):
{
"command": "no username ansible", "answer": "y", "newline": False,
"prompt": "This operation will remove all username related configurations with same name",
},
'ip ssh pubkey-chain',
' no username ansible',
' exit'
}
]
result_cmd = []
@ -124,11 +121,10 @@ class TestIosUserModule(TestIosModule):
set_module_args(dict(name='ansible', sshkey='dGVzdA=='))
commands = [
'ip ssh pubkey-chain',
' no username ansible',
' username ansible',
' key-hash ssh-rsa 098F6BCD4621D373CADE4E832627B4F6',
' exit',
' exit'
'username ansible',
'key-hash ssh-rsa 098F6BCD4621D373CADE4E832627B4F6',
'exit',
'exit'
]
result = self.execute_module(changed=True, commands=commands)
self.assertEqual(result['commands'], commands)