Fix junos_config confirm commit issue (#41527)
* Fix junos_config confirm commit issue Fixes #40626 * Due to issue in ncclient commit() method for Juniper device (ncclient/ncclient#238) add a workaround in junos netconf plugin to generate proper commit-configuration xml and execute it using ncclient generic `rpc()` method. * Update junos_config doc
This commit is contained in:
parent
e41d427d1b
commit
88b966e23b
2 changed files with 37 additions and 3 deletions
|
@ -63,8 +63,8 @@ options:
|
||||||
statements on the remote device.
|
statements on the remote device.
|
||||||
confirm:
|
confirm:
|
||||||
description:
|
description:
|
||||||
- The C(confirm) argument will configure a time out value for
|
- The C(confirm) argument will configure a time out value in minutes
|
||||||
the commit to be confirmed before it is automatically
|
for the commit to be confirmed before it is automatically
|
||||||
rolled back. If the C(confirm) argument is set to False, this
|
rolled back. If the C(confirm) argument is set to False, this
|
||||||
argument is silently ignored. If the value for this argument
|
argument is silently ignored. If the value for this argument
|
||||||
is set to 0, the commit is confirmed immediately.
|
is set to 0, the commit is confirmed immediately.
|
||||||
|
|
|
@ -32,7 +32,7 @@ try:
|
||||||
from ncclient import manager
|
from ncclient import manager
|
||||||
from ncclient.operations import RPCError
|
from ncclient.operations import RPCError
|
||||||
from ncclient.transport.errors import SSHUnknownHostError
|
from ncclient.transport.errors import SSHUnknownHostError
|
||||||
from ncclient.xml_ import to_ele, to_xml, new_ele
|
from ncclient.xml_ import to_ele, to_xml, new_ele, sub_ele
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise AnsibleError("ncclient is not installed")
|
raise AnsibleError("ncclient is not installed")
|
||||||
|
|
||||||
|
@ -143,3 +143,37 @@ class Netconf(NetconfBase):
|
||||||
def reboot(self):
|
def reboot(self):
|
||||||
"""reboot the device"""
|
"""reboot the device"""
|
||||||
return self.m.reboot().data_xml
|
return self.m.reboot().data_xml
|
||||||
|
|
||||||
|
# Due to issue in ncclient commit() method for Juniper (https://github.com/ncclient/ncclient/issues/238)
|
||||||
|
# below commit() is a workaround which build's raw `commit-configuration` xml with required tags and uses
|
||||||
|
# ncclient generic rpc() method to execute rpc on remote host.
|
||||||
|
# Remove below method after the issue in ncclient is fixed.
|
||||||
|
@ensure_connected
|
||||||
|
def commit(self, confirmed=False, check=False, timeout=None, comment=None, synchronize=False, at_time=None):
|
||||||
|
"""Commit the candidate configuration as the device's new current configuration.
|
||||||
|
Depends on the `:candidate` capability.
|
||||||
|
A confirmed commit (i.e. if *confirmed* is `True`) is reverted if there is no
|
||||||
|
followup commit within the *timeout* interval. If no timeout is specified the
|
||||||
|
confirm timeout defaults to 600 seconds (10 minutes).
|
||||||
|
A confirming commit may have the *confirmed* parameter but this is not required.
|
||||||
|
Depends on the `:confirmed-commit` capability.
|
||||||
|
:confirmed: whether this is a confirmed commit
|
||||||
|
:timeout: specifies the confirm timeout in seconds
|
||||||
|
"""
|
||||||
|
obj = new_ele('commit-configuration')
|
||||||
|
if confirmed:
|
||||||
|
sub_ele(obj, 'confirmed')
|
||||||
|
if check:
|
||||||
|
sub_ele(obj, 'check')
|
||||||
|
if synchronize:
|
||||||
|
sub_ele(obj, 'synchronize')
|
||||||
|
if at_time:
|
||||||
|
subele = sub_ele(obj, 'at-time')
|
||||||
|
subele.text = str(at_time)
|
||||||
|
if comment:
|
||||||
|
subele = sub_ele(obj, 'log')
|
||||||
|
subele.text = str(comment)
|
||||||
|
if timeout:
|
||||||
|
subele = sub_ele(obj, 'confirm-timeout')
|
||||||
|
subele.text = str(timeout)
|
||||||
|
return self.rpc(obj)
|
||||||
|
|
Loading…
Reference in a new issue