Junos Automation (Scripting)
Highlighted
Junos Automation (Scripting)

Help about Python script for fxp0 ip recovery.

a week ago

Hi all,

I wrote a script that saves the configuration of an mx960 on a remote server when an operator gives the command "op copyconf.py".

I would like the script to automatically take the ip of the master fxp0 from the local configuration and then be able to use it as the scp source.

I can't understand which method to use ... in all the documentation I read about Pyez, but I can't get it to work on the local configuration. I suppose it works only  for remote connections or am I wrong?

simone@LAB-RE0> show configuration groups re0 interfaces fxp0 unit 0 family inet | display xml 
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/19.1R0/junos">
    <configuration junos:commit-seconds="1593435526" junos:commit-localtime="2020-06-29 14:58:46 CEST" junos:commit-user="simone">
            <groups>
                <name>re0</name>
                <interfaces>
                    <interface>
                        <name>fxp0</name>
                        <unit>
                            <name>0</name>
                            <family>
                                <inet>
                                    <address>
                                        <name>192.168.23.23/28</name>
                                    </address>
                                    <address>
                                        <name>192.168.23.25/28</name>
                                        <master-only/>
                                    </address>
                                </inet>
                            </family>
                        </unit>
                    </interface>
                </interfaces>
            </groups>
    </configuration>
    <cli>
        <banner>{master}</banner>
    </cli>
</rpc-reply>

I'm interested in taking the IP 192.168.23.25 and putting it in a variable.

Thanks for help.

5 REPLIES 5
Highlighted
Junos Automation (Scripting)

Re: Help about Python script for fxp0 ip recovery.

a week ago

Hi simonev, 

 

Greetings, 

To answer your first part, how to fetch the fxp IP you could use something like below : 

from jnpr.junos import Device
from lxml import etree

with Device(host='router.example.com', use_filter=True) as dev:
    sax_input = '<interface-information><physical-interface><name/></physical-interface></interface-information>' >>Use relevant xml tag, address in our case.
    result = dev.rpc.get_interface_information(filter_xml=sax_input) 
    print (etree.tostring(reply, encoding='unicode'))

Link: https://www.juniper.net/documentation/en_US/junos-pyez/topics/task/program/junos-pyez-xml-parser-spe...

 

Hope this helps. Smiley Happy
Mark "Accept as solution" if this answers your query.  Kudos are appreciated too! 

 

Regards, 

Sharat Ainapur

Highlighted
Junos Automation (Scripting)

Re: Help about Python script for fxp0 ip recovery.

a week ago

HI Sharat,

I had to adapt and change my target. Now in my script I have: 

 

root@LAB-RE0:/var/db/scripts/op # more copyconf.py
from jnpr.junos import Device
from lxml import etree
import jxmlease
import json
from junos import Junos_Configuration
import jcs

def main():
   dev = Device()
    dev.open()

    filter = '<system><ntp><source-address></source-address></ntp></system>'            
    data = dev.rpc.get_config(filter_xml=filter, options={'format':'set'}) 
    print (etree.tostring(data, encoding='unicode', pretty_print=True))  
    dev.close()


if __name__ == "__main__":
    main()
	

when I run it I have this result:

root@LAB-RE0> op copyconf.py    
<configuration-set>
set system ntp source-address 192.168.23.25
</configuration-set>

OK, now How can I extrapolate only the ip '192.168.23.25' and insert it in a variable?

 

Thanks

Highlighted
Junos Automation (Scripting)

Re: Help about Python script for fxp0 ip recovery.

a week ago

Hi

 

You can use the following to only get the IP address from the set command output:

 

from jnpr.junos import Device
from lxml import etree
import jxmlease
import json
from junos import Junos_Configuration
import jcs

def main():
dev = Device()
dev.open()

filter = '<system><ntp><source-address></source-address></ntp></system>'
data = dev.rpc.get_config(filter_xml=filter, options={'format':'set'})


#print (etree.tostring(data, encoding='unicode', pretty_print=True))
dev.close()
data=data.text
data=data.split(" ")
data=data[4]
print data

if __name__ == "__main__":
main()

 

Hope this helps

Highlighted
Junos Automation (Scripting)
Solution
Accepted by topic author simonev
Monday

Re: Help about Python script for fxp0 ip recovery.

[ Edited ]
Saturday

Instead of parsing large get_config you can try following script:

 

rsp = dev.rpc.get_interface_information(interface_name='fxp0', terse=True)
I = rsp.xpath("//ifa-local")[0].text                               #Variable with FXP0 IPaddress with mask
i = I.split("/")[0]                                                            #Spliting and capturing only IP address

_____________________________________________________________________

If this solves your problem, please mark this post as "Accepted Solution".
If you think that my answer was helpful, please spend some Kudos.



Regards,
Nupur Kanoi
Juniper Ambassador
JNCIE-ENT#520, JNCIE-SP#2824 & JNCIP-DC
Highlighted
Junos Automation (Scripting)

Re: Help about Python script for fxp0 ip recovery.

Monday

Thank you,
this is also a working solution! I thought I'd use it in case I wasn't able to get the master fxp0's ip.