Generate a Persistent or Transient Configuration Change in Python Commit Scripts
Junos OS commit scripts enforce custom configuration rules and can automatically change the configuration when it does not comply with your custom configuration rules. To generate a persistent change or transient change using Python commit scripts:
The resulting script searches for SONET/SDH interfaces that
do not have the MPLS protocol family enabled, adds the family
mpls statement at the [edit interfaces so-fpc/pic/port unit logical-unit-number] hierarchy level as a persistent
change, and emits a warning message stating that the configuration
has been changed.
from junos import Junos_Configuration
import jcs
def main():
# Get configuration root object
root = Junos_Configuration
for element in root.xpath("./interfaces/ \
interface[starts-with(name,'so-')]"):
if element.find('unit/family/mpls') is None:
if_name = element.find('name').text
unit_name = element.find('unit/name').text
change_xml = """
<interfaces>
<interface>
<name>{0}</name>
<unit>
<name>{1}</name>
<family>
<mpls>
</mpls>
</family>
</unit>
</interface>
</interfaces>
""".format(if_name, unit_name).strip()
jcs.emit_change(change_xml, "change", "xml")
jcs.emit_warning("Adding 'family mpls' to SONET interface: " + if_name)
if __name__ == '__main__':
main()
If all enabled commit scripts run without errors, any persistent changes are loaded into the candidate configuration. Any transient changes are loaded into the checkout configuration, but not to the candidate configuration. The commit process then continues by validating the configuration and propagating changes to the affected processes on the device.
To display the configuration with both persistent and
transient changes applied, issue the show | display commit-scripts configuration mode command.
[edit] user@host# show | display commit-scripts
To display the configuration with only persistent changes
applied, issue the show | display commit-scripts no-transients configuration mode command.
[edit] user@host# show | display commit-scripts no-transients
Persistent and transient changes are loaded into the configuration
in the same manner that the load replace configuration
mode command loads an incoming configuration. When generating a persistent
or transient change, adding the replace="replace" attribute to a configuration element produces the same behavior
as a replace: tag in a load replace operation. Both persistent and transient changes are loaded into
the configuration with the load replace behavior. However,
persistent changes are loaded into the candidate configuration, and
transient changes are loaded into the checkout configuration.