Rebase using latest devel branch in order to fix conflicts (#23199)

This commit is contained in:
Luis Rueda 2017-04-09 17:06:06 -05:00 committed by ansibot
parent 83a6d90899
commit 753d30b64d

View file

@ -67,6 +67,14 @@ options:
default: true default: true
required: false required: false
version_added: "2.4" version_added: "2.4"
datastore:
description:
- auto, uses candidate and fallback to running
- candidate, edit <candidate/> datastore and then commit
- running, edit <running/> datastore directly
default: auto
required: false
version_added: "2.4"
username: username:
description: description:
- the username to authenticate with - the username to authenticate with
@ -144,20 +152,16 @@ except ImportError:
import logging import logging
def netconf_edit_config(m, xml, commit, retkwargs): def netconf_edit_config(m, xml, commit, retkwargs, datastore):
if ":candidate" in m.server_capabilities:
datastore = 'candidate'
else:
datastore = 'running'
m.lock(target=datastore) m.lock(target=datastore)
try: try:
if ":candidate" in m.server_capabilities: if datastore == "candidate":
m.discard_changes() m.discard_changes()
config_before = m.get_config(source=datastore) config_before = m.get_config(source=datastore)
m.edit_config(target=datastore, config=xml) m.edit_config(target=datastore, config=xml)
config_after = m.get_config(source=datastore) config_after = m.get_config(source=datastore)
changed = config_before.data_xml != config_after.data_xml changed = config_before.data_xml != config_after.data_xml
if changed and commit and ":candidate" in m.server_capabilities: if changed and commit and datastore == "candidate":
if ":confirmed-commit" in m.server_capabilities: if ":confirmed-commit" in m.server_capabilities:
m.commit(confirmed=True) m.commit(confirmed=True)
m.commit() m.commit()
@ -181,6 +185,7 @@ def main():
hostkey_verify=dict(type='bool', default=True), hostkey_verify=dict(type='bool', default=True),
allow_agent=dict(type='bool', default=True), allow_agent=dict(type='bool', default=True),
look_for_keys=dict(type='bool', default=True), look_for_keys=dict(type='bool', default=True),
datastore=dict(type='str', default='auto'),
username=dict(type='str', required=True, no_log=True), username=dict(type='str', required=True, no_log=True),
password=dict(type='str', required=True, no_log=True), password=dict(type='str', required=True, no_log=True),
xml=dict(type='str', required=True), xml=dict(type='str', required=True),
@ -226,13 +231,48 @@ def main():
) )
return return
retkwargs['server_capabilities'] = list(m.server_capabilities) retkwargs['server_capabilities'] = list(m.server_capabilities)
if module.params['datastore'] == 'candidate':
if ':candidate' in m.server_capabilities:
datastore = 'candidate'
else:
m.close_session()
module.fail_json(
msg=':candidate is not supported by this netconf server'
)
elif module.params['datastore'] == 'running':
if ':writable-running' in m.server_capabilities:
datastore = 'running'
else:
m.close_session()
module.fail_json(
msg=':writable-running is not supported by this netconf server'
)
elif module.params['datastore'] == 'auto':
if ':candidate' in m.server_capabilities:
datastore = 'candidate'
elif ':writable-running' in m.server_capabilities:
datastore = 'running'
else:
m.close_session()
module.fail_json(
msg='neither :candidate nor :writable-running are supported by this netconf server')
else:
m.close_session()
module.fail_json(
msg=module.params['datastore'] +
' datastore is not supported by this ansible module')
try: try:
changed = netconf_edit_config( changed = netconf_edit_config(
m=m, m=m,
xml=module.params['xml'], xml=module.params['xml'],
commit=True, commit=True,
retkwargs=retkwargs, retkwargs=retkwargs,
datastore=datastore,
) )
except:
e = get_exception()
module.fail_json(msg='error editing configuration: ' + str(e))
finally: finally:
m.close_session() m.close_session()
module.exit_json(changed=changed, **retkwargs) module.exit_json(changed=changed, **retkwargs)