def connect(server, port, user, password): conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", "--dump-session=tmp/nc-session-") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) return conn
def connect(server, port, user, password): conn = yangrpc.connect( server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", "--dump-session=tmp/nc-session- --keep-session-model-copies-after-compilation=true" ) if (conn == None): print("Error: yangrpc failed to connect!") return conn
def network_connect_yangrpc(network): yconns = {} if (yangcli_supported != True): return network_connect(network) network_id = network.xpath('nd:network-id', namespaces=namespaces) print("Connecting to YANG network: " + network_id[0].text) nodes = network.xpath('nd:node', namespaces=namespaces) for node in nodes: node_id = node.xpath('nd:node-id', namespaces=namespaces)[0].text server = node.xpath( 'netconf-node:netconf-connect-params/netconf-node:server', namespaces=namespaces)[0].text user = node.xpath( 'netconf-node:netconf-connect-params/netconf-node:user', namespaces=namespaces)[0].text if (1 == len( node.xpath( 'netconf-node:netconf-connect-params/netconf-node:password', namespaces=namespaces))): password = node.xpath( 'netconf-node:netconf-connect-params/netconf-node:password', namespaces=namespaces)[0].text else: password = None ncport = node.xpath( 'netconf-node:netconf-connect-params/netconf-node:ncport', namespaces=namespaces)[0].text print "Connect to YANG device " + node_id + " (server=%(server)s user=%(user)s) password=%(password)s ncport=%(ncport)s:" % { 'server': server, 'user': user, 'password': password, 'ncport': ncport } yconns[node_id] = yangrpc.connect( server, int(ncport), user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", "--dump-session=nc-session-") if yconns[node_id] == None: print "FAILED connect" return (None) else: print "OK" return yconns
def main(): print(""" #Description: Configure the H100 with example configuration from the userguide. #Procedure: #1 - Create the configuration described in the user guide. #2 - Commit. """) parser = argparse.ArgumentParser() parser.add_argument("--server", help="server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)") parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument("--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if(args.server==None or args.server==""): server="127.0.0.1" else: server=args.server if(args.port==None or args.port==""): port=830 else: port=int(args.port) if(args.user==None or args.user==""): user=os.getenv('USER') else: user=args.user if(args.password==None or args.password==""): password=None else: password=args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME')+"/.ssh/id_rsa.pub", os.getenv('HOME')+"/.ssh/id_rsa", "--dump-session=nc-session-") if(conn==None): print("Error: yangrpc failed to connect!") return(-1) time.sleep(1) #cleanup yangcli(conn, '''delete /fusion-streams''') ok = yangcli(conn, '''commit''').xpath('./ok') assert(len(ok)==1) yangcli_script=''' create /fusion-streams/drop-and-forward[in-port='n0'][filter-rule='matched-tpid'] -- priority=gst filter/tpid=88F7 push-vlan-tag/vlanid=100 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 forward/pop-vlan-tag=false drop[out-port='e0']/pop-vlan-tag=true drop[out-port='e1']/pop-vlan-tag=true drop[out-port='e2']/pop-vlan-tag=true drop[out-port='e3']/pop-vlan-tag=true drop[out-port='e4']/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n0'][filter-rule='unmatched'] -- priority=sm push-vlan-tag/vlanid=200 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 forward/pop-vlan-tag=false create /fusion-streams/aggregation[in-port='e0']/sm -- out-port=n1 push-vlan-tag/vlanid=10 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 create /fusion-streams/aggregation[in-port='e1']/sm -- out-port=n1 push-vlan-tag/vlanid=11 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 create /fusion-streams/aggregation[in-port='e2']/sm -- out-port=n1 push-vlan-tag/vlanid=12 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 create /fusion-streams/aggregation[in-port='e3']/sm -- out-port=n1 push-vlan-tag/vlanid=13 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 create /fusion-streams/aggregation[in-port='e4']/sm -- out-port=n1 push-vlan-tag/vlanid=14 push-vlan-tag/pcp=0 push-vlan-tag/tpid=9100 push-vlan-tag/cfi=1 create /fusion-streams/aggregation[in-port='e0']/gst -- out-port=n0 filter/ether-type=88F7 filter/tpid=88F7 filter/vlanid=1 create /fusion-streams/aggregation[in-port='e1']/gst -- out-port=n0 filter/ether-type=88F7 filter/tpid=88F7 filter/vlanid=1 create /fusion-streams/aggregation[in-port='e2']/gst -- out-port=n0 filter/ether-type=88F7 filter/tpid=88F7 filter/vlanid=1 create /fusion-streams/aggregation[in-port='e3']/gst -- out-port=n0 filter/ether-type=88F7 filter/tpid=88F7 filter/vlanid=1 create /fusion-streams/aggregation[in-port='e4']/gst -- out-port=n0 filter/ether-type=88F7 filter/tpid=88F7 filter/vlanid=1 create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='100'] -- priority=gst filter/tpid=9100 forward/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='200'] -- priority=sm filter/tpid=9100 forward/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='10'] -- priority=sm filter/tpid=9100 drop[out-port='e0']/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='11'] -- priority=sm filter/tpid=9100 drop[out-port='e1']/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='12'] -- priority=sm filter/tpid=9100 drop[out-port='e2']/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='13'] -- priority=sm filter/tpid=9100 drop[out-port='e3']/pop-vlan-tag=true create /fusion-streams/drop-and-forward[in-port='n1'][filter-rule='14'] -- priority=sm filter/tpid=9100 drop[out-port='e4']/pop-vlan-tag=true commit ''' yangcli_ok_script(conn, yangcli_script) return(0)
def main(): print(""" #Description: Connects and updates the display according to the configuration. #Procedure: #1 - Open session. #2 - Loop reading configuration and displaying text. """) parser = argparse.ArgumentParser() parser.add_argument("--server", help="server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)") parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument("--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if(args.server==None or args.server==""): server="127.0.0.1" else: server=args.server if(args.port==None or args.port==""): port=830 else: port=int(args.port) if(args.user==None or args.user==""): user=os.getenv('USER') else: user=args.user if(args.password==None or args.password==""): password=None else: password=args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME')+"/.ssh/id_rsa.pub", os.getenv('HOME')+"/.ssh/id_rsa") if(conn==None): print("Error: yangrpc failed to connect!") return(-1) time.sleep(1) mylcd = I2C_LCD_driver.lcd() #zeroseg_led = led.sevensegment(cascaded=2) while(1): result = yangcli(conn, "xget /line-display") text = result.xpath('./data/line-display/text') if(len(text)!=1): instance_id = result.xpath('./data/line-display/instance-id') if(len(instance_id)==1): print instance_id[0].text update_interval = result.xpath('./data/line-display/update-interval') result2 = yangcli(conn, "xget %s"%(instance_id[0].text)) text = result2.xpath('./data/%s'%(instance_id[0].text)) mylcd.lcd_clear() mylcd.lcd_display_string(instance_id[0].text[-16:], 1) mylcd.lcd_display_string(text[0].text, 2) else: print text[0].text #zeroseg_led.write_text(1,text[0].text) mylcd.lcd_clear() mylcd.lcd_display_string(text[0].text, 1) time.sleep(1) return(0)
from yangcli import yangcli from lxml import etree import yangrpc import sys import os conn = yangrpc.connect("127.0.0.1", 830, os.getenv('USER'), "dummypass", os.getenv('HOME')+".ssh/id_rsa",os.getenv('HOME')+".ssh/id_rsa.pub") if(conn==None): print("Error: yangrpc failed to connect!") sys.exit(1) yangcli(conn, "create /interfaces/interface[name='blah']/type value='ethernetCsmacd'") result=yangcli(conn, "commit") assert(result.xpath('./ok')) result=yangcli(conn, "xget /interfaces") a=result.xpath('./data/interfaces/interface[name=\'blah\']/a') b=result.xpath('./data/interfaces/interface[name=\'blah\']/b') print(a[0].text) assert(a[0].text=="Hello from a!") print(b[0].text) assert(b[0].text=="Hello from b!") print("Done.")
import yuma import yangrpc import sys conn = yangrpc.connect("127.0.0.1", 830, "root", "mysecretpass","/root/.ssh/id_rsa","/root/.ssh/id_rsa.pub") if(conn==None): print("Error: yangrpc failed to connect!") sys.exit(1) (res, rpc_val) = yangrpc.parse_cli(conn, "xget /interfaces-state") if(res!=0): print("Error: yangrpc failed to parse cli command!") sys.exit(1) yuma.val_dump_value(rpc_val,1) (res, reply_val) = yangrpc.rpc(conn, rpc_val) if(res!=0): print("Error: yangrpc failed to execute rpc!") sys.exit(1) yuma.val_dump_value(reply_val,1) print("Done.")
from yangcli import yangcli from lxml import etree import yangrpc import sys import os conn = yangrpc.connect( "127.0.0.1", 830, os.getenv("USER"), "dummypass", os.getenv("HOME") + ".ssh/id_rsa", os.getenv("HOME") + ".ssh/id_rsa.pub", ) if conn == None: print("Error: yangrpc failed to connect!") sys.exit(1) yangcli(conn, "replace /system/hostname value='ok3'") yangcli(conn, "replace /system/location value='ok4'") result = yangcli(conn, "commit") assert result.xpath("./ok") yangcli(conn, "replace /system/hostname value='error1'") yangcli(conn, "replace /system/location value='ok5'") result = yangcli(conn, "commit") assert result.xpath("./rpc-error") yangcli(conn, "discard-changes")
def main(): print(""" #Description: Usecase fo ietf-routing module. #Procedure: #1 - Create interface "eth0" of type=ethernetCsmacd with static ip=10.0.0.2/24 and static default route for destination-prefix=0.0.0.0/0 and next-hop=10.0.0.1. #2 - Validate <get-data> returns identical result as the example in RFC8022 Appendix D. """) parser = argparse.ArgumentParser() parser.add_argument("--server", help="server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)") parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument("--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if(args.server==None or args.server==""): server="127.0.0.1" else: server=args.server if(args.port==None or args.port==""): port=830 else: port=int(args.port) if(args.user==None or args.user==""): user=os.getenv('USER') else: user=args.user if(args.password==None or args.password==""): password=None else: password=args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME')+"/.ssh/id_rsa.pub", os.getenv('HOME')+"/.ssh/id_rsa", "--dump-session=tmp/nc-session-") if(conn==None): print("Error: yangrpc failed to connect!") return(-1) time.sleep(1) result = yangcli(conn, "delete /interfaces") result = yangcli(conn, "commit") ok = result.xpath('./ok') assert(len(ok)==1) yangcli_script=''' create /interfaces/interface -- name=eth0 type=ethernetCsmacd description="Uplink to ISP." create /interfaces/interface[name='eth0']/ipv4/address -- ip=192.0.2.1 prefix-length=24 commit ''' #create /interfaces/interface[name='eth0']/ipv4/forwarding value=true #create /routes/control-plane-protocols/control-plane-protocol -- name=st0 type=static #create /routes/control-plane-protocols/control-plane-protocol[name='st0']/static-routes/ipv4/route -- destination-prefix=0.0.0.0/0 next-hop/next-hop-address=192.0.2.2 #commit #''' yangcli_ok_script(conn, yangcli_script) result = yangcli(conn, "get-data with-origin datastore=operational xpath-filter="/" ) print lxml.etree.tostring(result) return(0)
def main(): print(""" #Description: Demonstrate that leaf values can be replaced. #Procedure: #1 - Create test-yang-library container. Verify commit succeeds. """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) time.sleep(1) result = yangcli( conn, '''xget /modules-state/module[name='test-yang-library'] ''') name = result.xpath('./data/modules-state/module/name') assert (len(name) == 1) conformance_type = result.xpath( './data/modules-state/module/conformance-type') assert (len(conformance_type) == 1) assert (conformance_type[0].text == "implement") result = yangcli( conn, '''xget /modules-state/module[name='test-yang-library-import'] ''') name = result.xpath('./data/modules-state/module/name') assert (len(name) == 1) conformance_type = result.xpath( './data/modules-state/module/conformance-type') assert (len(conformance_type) == 1) #assert(conformance_type[0].text=="import") ok = yangcli(conn, '''delete /foo''').xpath('./ok') ok = yangcli(conn, '''commit''').xpath('./ok') #assert(len(ok)==1) ok = yangcli(conn, '''create /foo''').xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) return (0)
import yuma import yangrpc import sys conn = yangrpc.connect("127.0.0.1", 830, "root", "mysecretpass", "/root/.ssh/id_rsa", "/root/.ssh/id_rsa.pub") if (conn == None): print("Error: yangrpc failed to connect!") sys.exit(1) (res, rpc_val) = yangrpc.parse_cli(conn, "xget /interfaces-state") if (res != 0): print("Error: yangrpc failed to parse cli command!") sys.exit(1) yuma.val_dump_value(rpc_val, 1) (res, reply_val) = yangrpc.rpc(conn, rpc_val) if (res != 0): print("Error: yangrpc failed to execute rpc!") sys.exit(1) yuma.val_dump_value(reply_val, 1) print("Done.")
def main(): print(""" #Description: Demonstrate that leaf values can be replaced. #Procedure: #1 - Create interface "foo" of type=ethernetCsmacd. Verify commit succeeds. #2 - Replace type for interface "foo" with type=other. Read back the type after commit. """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) time.sleep(1) ok = yangcli(conn, '''delete /interfaces''').xpath('./ok') ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) ok = yangcli( conn, '''create /interfaces/interface -- name='foo' type='ethernetCsmacd' ''' ).xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "xget /interfaces") names = result.xpath('./data/interfaces/interface/name') for name in names: print name.text types = result.xpath('./data/interfaces/interface/type') for type in types: print type.text assert (len(types) == 1) assert (types[0].text == 'ianaift:ethernetCsmacd') ok = yangcli( conn, '''replace /interfaces/interface[name='foo']/type value='other' ''' ).xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "xget /interfaces") names = result.xpath('./data/interfaces/interface/name') for name in names: print name.text types = result.xpath('./data/interfaces/interface/type') for type in types: print type.text assert (len(types) == 1) assert (types[0].text == 'ianaift:other') result = yangcli(conn, "delete /interfaces").xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "commit").xpath('./ok') assert (len(ok) == 1) return (0)
def main(): print(""" #Description: Validate leafs with failing when statements are removed from candidate #Procedure: #1 - Create /top/type = bar. #2 - Create '/top/foo'. #3 - Validate '/top/foo' is not present """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) time.sleep(1) print("hello") ok = yangcli(conn, '''create /top/child -- type=bar foo=1''').xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "xget-config source=candidate /top") foo = result.xpath('./data/top/child/foo') assert (len(foo) == 0) ok = yangcli(conn, '''create /top/child/bar value=1''').xpath('./ok') assert (len(ok) == 1) print("done") return (0)
def main(): print(""" #Description: Testcase for OpenDaylight interoperability. #Procedure: #1 - Create topology. """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password print("Connecting #1 ...") conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", "--dump-session=tmp/nc-session-") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) result = yangcli( conn, "delete /modules/module[name='right'][type='sal-netconf-connector']") result = yangcli(conn, "commit") ok = result.xpath('./ok') print(lxml.etree.tostring(result)) assert (len(ok) == 1) result = yangcli( conn, "merge /modules/module[name='right'][type='sal-netconf-connector'] -- address=127.0.0.1 sal-netconf:port=4830 tcp-only=false username=demo password=demo sal-netconf:event-executor/type=netty-event-executor sal-netconf:event-executor/name=global-event-executor sal-netconf:binding-registry/type=binding-broker-osgi-registry sal-netconf:binding-registry/name=binding-osgi-broker sal-netconf:dom-registry/type=dom-broker-osgi-registry sal-netconf:dom-registry/name=dom-broker sal-netconf:client-dispatcher/type=netconf-client-dispatcher sal-netconf:client-dispatcher/name=global-netconf-dispatcher sal-netconf:processing-executor/type=threadpool sal-netconf:processing-executor/name=global-netconf-processing-executor sal-netconf:keepalive-executor/type=scheduled-threadpool sal-netconf:keepalive-executor/name=global-netconf-ssh-scheduled-executor" ) ok = result.xpath('./ok') print(lxml.etree.tostring(result)) assert (len(ok) == 1) result = yangcli(conn, "commit") ok = result.xpath('./ok') print(lxml.etree.tostring(result)) assert (len(ok) == 1) return (0)
from yangcli import yangcli from lxml import etree import yangrpc import sys import os conn = yangrpc.connect( "127.0.0.1", 830, os.getenv('USER'), None, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", ) if (conn == None): print("Error: yangrpc failed to connect!") sys.exit(1) result = yangcli(conn, "commit") assert (result.xpath('./ok')) yangcli(conn, "replace /system/hostname value='ok3'") yangcli(conn, "replace /system/location value='ok4'") result = yangcli(conn, "commit") assert (result.xpath('./ok')) yangcli(conn, "replace /system/hostname value='error1'") yangcli(conn, "replace /system/location value='ok5'") result = yangcli(conn, "commit") assert (result.xpath('./rpc-error')) yangcli(conn, "discard-changes")
def main(): parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") parser.add_argument("--operation", help="One of {configure-nacm, create, replace, read}") parser.add_argument("--option", help="One of {foo, bar, baz}") args = parser.parse_args() print( """ #Description: Validate nacm --operation=%(operation)s --option=%(option)s #Procedure: #1 - Do %(operation)s. """ % { 'operation': args.operation, 'option': args.option }) if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) if (args.operation == 'configure-nacm'): ok = yangcli( conn, '''create /nacm/groups/group[name='my-operators-group']/user-name value=%s''' % (user)).xpath('./ok') assert (len(ok) == 1) ok = yangcli( conn, '''create /nacm/rule-list[name='my-operators-rules'] -- group=my-operators-group''' ).xpath('./ok') assert (len(ok) == 1) ok = yangcli( conn, '''create /nacm/rule-list[name='my-operators-rules']/rule[name='my-foo-all-permit'] -- module-name=m1 path=/top/foo access-operations=* action=permit comment='With this rule the user can create /top/foo' ''' ).xpath('./ok') assert (len(ok) == 1) ok = yangcli( conn, '''create /nacm/rule-list[name='my-operators-rules']/rule[name='my-baz-read-deny'] -- module-name=m1 path=/top/baz access-operations=read action=deny comment='With this rule the user can not read /top/baz' ''' ).xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) elif (args.operation == 'get'): result = yangcli(conn, '''sget /top/%s''' % (args.option)) value = result.xpath('./data/top/%s' % (args.option)) print etree.tostring(result, pretty_print=True, inclusive_ns_prefixes=True) assert (len(value) == 1) assert (value[0].text == args.option) else: ok = yangcli( conn, '''%s /top/%s value=%s''' % (args.operation, args.option, args.option)).xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) print("done") return (0)
def main(): print(""" #Description: Using sub-interfaces configure vlan bridge. #Procedure: #1 - Create interface "xe0", "ge0", "ge1" of type=ethernetCsmacd. #2 - Create sub-interface "xe0-green" - s-vlan-id=1000, "ge1-green" - c-vlan-id=10 of type=ethSubInterface. #3 - Create VLAN bridge with "ge0", "ge1-green" and "xe0-green". #4 - Commit. """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa", "--dump-session=tmp/nc-session-") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) time.sleep(1) ok = yangcli(conn, '''delete /vlans''').xpath('./ok') ok = yangcli(conn, '''delete /interfaces''').xpath('./ok') ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) yangcli_script = ''' create /interfaces/interface -- name='xe0' type='ethernetCsmacd' create /interfaces/interface -- name='ge0' type='ethernetCsmacd' create /interfaces/interface -- name='ge1' type='ethernetCsmacd' create /interfaces/interface -- name='ge1-green' type=ethSubInterface parent-interface=ge0 create /interfaces/interface[name='ge1-green']/forwarding-mode value=layer-2-forwarding create /interfaces/interface[name='ge1-green']/encapsulation/flexible/match/dot1q-vlan-tagged/outer-tag/dot1q-tag -- tag-type=c-vlan vlan-id=10 create /interfaces/interface -- name='xe0-green' type=ethSubInterface parent-interface=xe0 create /interfaces/interface[name='xe0-green']/forwarding-mode value=layer-2-forwarding create /interfaces/interface[name='xe0-green']/encapsulation/flexible/match/dot1q-vlan-tagged/outer-tag/dot1q-tag -- tag-type=s-vlan vlan-id=1000 create /interfaces/interface[name='xe0-green']/encapsulation/flexible/match/dot1q-vlan-tagged/second-tag/dot1q-tag -- tag-type=c-vlan vlan-id=10 create /vlans/vlan -- name=green create /vlans/vlan[name='green']/interface value=ge0 create /vlans/vlan[name='green']/interface value=ge1-green create /vlans/vlan[name='green']/interface value=xe0-green commit ''' yangcli_ok_script(conn, yangcli_script) result = yangcli(conn, "xget /interfaces") names = result.xpath('./data/interfaces/interface/name') for name in names: print name.text types = result.xpath('./data/interfaces/interface/type') for type in types: print type.text #cleanup # ok = yangcli(conn, '''delete /vlans''').xpath('./ok') # assert(len(ok)==1) # ok = yangcli(conn, '''delete /interfaces''').xpath('./ok') # assert(len(ok)==1) # ok = yangcli(conn, '''commit''').xpath('./ok') # assert(len(ok)==1) return (0)
def main(): print(""" #Description: Demonstrate that leaf-list values can be replaced. Although the operation result is identical to either create or none. #Procedure: #1 - Create /system/dns-resolver/search entry with value 'foo'. Verify commit succeeds. #2 - Create entry 'foo'. #3 - Replace entry 'bar'. Read back the value after commit. Validate both 'foo' and 'bar' are present, """) parser = argparse.ArgumentParser() parser.add_argument( "--server", help= "server name e.g. 127.0.0.1 or server.com (127.0.0.1 if not specified)" ) parser.add_argument("--user", help="username e.g. admin ($USER if not specified)") parser.add_argument("--port", help="port e.g. 830 (830 if not specified)") parser.add_argument( "--password", help="password e.g. mypass123 (passwordless if not specified)") args = parser.parse_args() if (args.server == None or args.server == ""): server = "127.0.0.1" else: server = args.server if (args.port == None or args.port == ""): port = 830 else: port = int(args.port) if (args.user == None or args.user == ""): user = os.getenv('USER') else: user = args.user if (args.password == None or args.password == ""): password = None else: password = args.password conn = yangrpc.connect(server, port, user, password, os.getenv('HOME') + "/.ssh/id_rsa.pub", os.getenv('HOME') + "/.ssh/id_rsa") if (conn == None): print("Error: yangrpc failed to connect!") return (-1) time.sleep(1) ok = yangcli(conn, '''delete /system''').xpath('./ok') ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) ok = yangcli( conn, '''create /system/dns-resolver/search value='foo' ''').xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "xget /system") searches = result.xpath('./data/system/dns-resolver/search') for search in searches: print search.text assert (len(searches) == 1) assert (searches[0].text == 'foo') ok = yangcli( conn, '''replace /system/dns-resolver/search value='bar' ''').xpath('./ok') assert (len(ok) == 1) ok = yangcli(conn, '''commit''').xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "xget /system") searches = result.xpath('./data/system/dns-resolver/search') for search in searches: print search.text assert (len(searches) == 2) result = yangcli(conn, "delete /system").xpath('./ok') assert (len(ok) == 1) result = yangcli(conn, "commit").xpath('./ok') assert (len(ok) == 1) return (0)