npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

devnet-js

v2.2.1

Published

Automation and DevOps scripting templates for network devices.

Downloads

81

Readme


title: Devnet-JS APIs layout: template filename: devnet-js-API.md

Description

devnet-js modules written in JavaScript for node.js.

devnet-js simplifies network device interaction using JavaScript functions and templates.

devnet-js is using ssh2 package to establish SSH connectivity.

Table of Contents

Requirements

  • node.js -- v5.2.0 or newer
    • node v12.0.0 or newer for Ed25519 key support

Installation

npm i devnet-js
or
npm install devnet-js --save

SSH Examples

Sample SSH Stream

var devnet = require('devnet-js');
let ciscodev1 = new devnet.CiscoRouter({id:"sample-id-1"});
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>'
    }
  }
ciscodev1.openSshShell(loginparam,function(stream){  // interactive shell
  if(stream){   // stream instance
    console.log('Session Ready');
    stream.on('close', function() {
      console.log('Stream :: close');
      ciscodev1.sshconn.end();
    }).on('data', function(data) {
      console.log('OUTPUT: ' + data);
    });
    stream.end('dir\nexit\n');
  }
});

Execute show commands in a Cisco Device

var devnet = require('devnet-js');
let ciscodev1 = new devnet.CiscoRouter({id:"sample-id-1"});
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>',
      algorithms: {
        cipher: [
          '3des-cbc'
        ]
      }
    }
  }
console.log("show ip int br");
var param = {
  command:"show ip int br",
  endActiveStream:true,
  credential:loginparam.credential,
  setEncoding:"utf-8"
}
ciscodev1.execute(param,function(data){   //non interactive
    console.log('data arry',data);
});
/*
param = {
  command:"show arp",
  endActiveStream:true,
  credential:loginparam.credential,
  setEncoding:"utf-8"
}
ciscodev1.execute(param,function(data){
    console.log('data arry',data);
},function(data2){
    console.log(data2);
});
*/

Interactive SSH

var devnet = require('devnet-js');
let ciscodev1 = new devnet.Defaultclass({id:"any string here"});
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>'
    }
  }
ciscodev1.openSshShell(loginparam);

setTimeout(function(){ //Writing stream in a simple way some delay is required none common method; moments after openSshShell function.
  ciscodev1.streamSendkeys("show ip int br",{autoenter:true,emit:true}).on('data',function(data) {  //other style
    process.stdout.write(data);
  });
}, 3000);
/*
setTimeout(testfn, 2000);
function testfn(){  //-simple stright forward style
    ciscodev1.sshconn.simplify = false;
    ciscodev1.streamSendkeys("show ip int br"); // or ciscodev1.streamSendkeys("show version",{autoenter:true});
    ciscodev1.sshconn.stream.on('data', function(data) {
      process.stdout.write(data);
    });
    ciscodev1.sshconn.stream.on('close', function() {
      console.log('\n--- stream closed');
      ciscodev1.sshconn.end();
    });

    setTimeout(function(){
      process.stdout.write("   - Enter Key!");
      ciscodev1.streamSendkeys("\n")
    }, 3000);
}//-testfn
*/
setTimeout(function(){  //terminate ssh session after 12 seconds
  ciscodev1.end();
}, 12000);

Stream CLI

var devnet = require('devnet-js');
let sampledev1 = new devnet.Defaultclass({id:"any string here"});   //Defaultclass intended for generic devices.
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>',
      algorithms: {
        cipher: [ '3des-cbc' ],
        kex: [ "diffie-hellman-group1-sha1" ]
      }
    }
  }
sampledev1.openSshShell(loginparam);
setTimeout(testfn, 2000); //Writing stream in a simple way some delay is required none common method; moments after openSshShell function.
function testfn(){
    sampledev1.streamcli();    //sample CLI interaction //-hit Esc 2 times to exit process
}
/*
sampledev1.openSshShell(loginparam,function(stream){  // interactive shell ideal method
  if(stream){   // stream instance
    console.log('Session Ready');
    //sampledev1.streamcli({live:true});
    sampledev1.streamcli({psobj:{stopctr:4,stoptoken:3}});    //sampl.e CLI interaction //-hit 'Ctrl+c' four times to exit process
  }
});
*/
/*
sampledev1.openSshShell(loginparam,function(stream){  // interactive shell
  if(stream){   // stream instance
    console.log('Session Ready');
    sampledev1.streamcli({psobj:{stopctr:1,stoptoken:"3"}});    //sampl.e CLI interaction //-hit character '3' 1 time to exit process //single character
  }
});
*/
/*
var tmpkeys = "";
sampledev1.openSshShell(loginparam,function(stream){
  if(stream){   // stream instance
    console.log('Session Ready');
    sampledev1.streamcli({live:true},function(cbval){
      if(cbval.charCodeAt(0)==13){
        console.log("\n last command : ", tmpkeys);
        tmpkeys = "";
        return false;// exclude ascii 13.
      }else{
        tmpkeys+=cbval;
        return true; //send keys
      }
    });
  }
});
*/

Functions Example

See example below:

Cisco Router

parse version

Returns the summary information of cli show version command.

option{
  fileref:'path or json', // default is in dir 'src', filename 'ciscotemplate.js' for Cisco devices if not specified.  
  json:true,  //[true || false ] default is true, formats the output into json.
  nextmarker:'--More--', // [ word string ] default is '--More--', string indicator in a session emulator/terminal
  nextmarkerflg:true, // [true || false ] default is true, continue marker enable flag in a session emulator/terminal, will loop through until the end of the command buffer output  e.g. '--More--' in Cisco CLI.
  hide:true   // [true || false ] default is true, hides background console logging
}
sampledev1.parseVersion(option) //returns a promise

list interface

Returns an array object of interfaces.

var option={ json:true }
sampledev1.listif(option).then(res=>{     //example function
  console.log("output:\n",res);
});

Example:

var devnet = require('devnet-js');
let sampledev1 = new devnet.CiscoRouter({id:"any string here"});
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>',
      algorithms: {
        cipher: [ '3des-cbc' ],
        kex: [ "diffie-hellman-group1-sha1" ]
      }
    }
  }
new Promise(_res=>{
  sampledev1.openSshShell(loginparam,function(stream){    //ctrl+c to end process
    if(stream){   // stream instance
      stream.setEncoding("utf-8");
      console.log('Session Ready.');
      _res(true);
    }
  });
}).then(res=>{
  if(res){
    var option={
      json:true        //Select between Array or JSON
      //fileref:__dirname+'/ciscotemplate-cust' //Absolute path
    }
    sampledev1.parseVersion(option).then(res=>{     //example function
      console.log("output:\n",res);
    });
  }
});

Cisco Switch

Parse MAC address

Returns a summary of MAC address entry.

var option={ json:true,format:'XXXX-xx:xx-XX.XX' }
sampledev1.parseMAC(option).then(res=>{     //example function
  console.log("output:\n",res);
});

Parse vlan

HP Switch

Parse poe

Returns a summary of interface poe status.

var option={ json:true }       //Select between Array or JSON
sampledev1.parsePOE(option).then(res=>{     //example function
  console.log("output:\n",res);
});

Parse Mac Addr

Returns a summary of MAC address entry.

option{
  json:true,  //[true || false ] default is true, formats the output into json.
  format:'XXXX-xxxx-XXXX' // 'X' for uppercase and 'x' for lower case, other symbols are supported e.g. 'XXXX:xx-xx.XXXX'
}
sampledev1 = new devnet.HpSwitch({id:"any string here"});   //HPE SWITCH EXAMPLE
sampledev1.parseMAC(option) //returns a promise
var devnet = require('devnet-js');
let sampledev1 = new devnet.HpSwitch({id:"any string here"});   //HPE SWITCH EXAMPLE
var loginparam = {
    credential:{  //see ssh2 documentation for other option
      host: '<hostname or IP>',
      port: 22,
      username: '<your-username-here>',
      password: '<pwd>',
      algorithms: {
        cipher: [ '3des-cbc' ],
        kex: [ "diffie-hellman-group1-sha1","diffie-hellman-group-exchange-sha256","diffie-hellman-group14-sha1" ]
      }
    }
  }
new Promise(_res=>{
  sampledev1.openSshShell(loginparam,function(stream){
    if(stream){   // stream instance
      stream.setEncoding("utf-8");
      console.log('Session Ready.');
      _res(true);
    }
  });
}).then(res=>{
  if(res){
    var option={ json:true,format:'XXXX-xx:xx-XX.XX' }
    sampledev1.parseMAC(option).then(res=>{     //example function
      console.log("output:\n",res);
    });
  }
});

Get LLDP neighbor info

var option={
      json:true,
      stoptokens:false,
      incending:false,
      startinglines :'LLDP neighbor-info',
      refarry:['Update time','Chassis type','Port ID','System name','Management address']
    }
    sampledev1.lldpneighbor(option).then(res=>{     //example function
      console.log("output:\n",res);
    });

Devnet-js Default Class options and parameter details

Default class Constructor

openSshShell function

streamSendkeys function

execute function

streamcli function

end function

Devnet Tools

Functions you might be interested.

var devnet = require('devnet-js');
const devtools = devnet.tools;

devtools.str2Arry(String,Token)  // returns array of string, sanitize unwanted '\n', '\r' and '\b' split string with token
devtools.extractstr(rawstring,reference_arrays) //parse or format string using reference array(s) then converts into json
devtools.keyval(key,value) // returns JSON object of key and value pair.
devtools.arry2json(arry)//convert multiple array of json into single json formal
devtools.raw2arry(string,option) // convert string separated by space or tabs into arrays.
devtools.formatMAC(mac_string,format)  //format MAC Address, ex. xxxx-XXXX-XXxx.
devtools.quickipcheck(String) // Check String if there is an IPADDR pattern then  convert string into JSON
devtools.arrym2s(Arrays,level) // Iterate over the input multi dimension array then returns a single dimension array. ex. console.log(devtools.arrym2s([[1,2,3],['a',1,2,'h',[{as:'as'},['1k','2k']]]]))
devtools.jsonmerge(json1 | [json_array],json2) //concat 2 or more json ex. console.log(devnet.tools.jsonmerge({a:"a1",b:"b1",c:"c1",x:1},{a:"a 2",b2:"b 2",c_1:"c 2",d:"d1"})); //console.log(devnet.tools.jsonmerge([{a:"a1",b:"b1",c:"c1",x:1},{a:"a 2",b2:"b 2",c_1:"c 2",d:"d1"},{q:'q123'}]));
devtools.getroute(string) // returns possible route in JSON format both destination and mask.
devtools.getSubnetInfo(string) // returns details of network host or ssubnet in JSON format
devtools.getNetmaskDetails(string,string) // returns details of network netmask in JSON format
devtools.cli2Object(string,[string],[string],boolean) // returns details of network netmask in JSON format

str2Arry function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let strvar = "a b c d \n a1 b1\tc1 d1 \n a2 b2 c2 d2"

console.log("result: ",devtools.str2Arry(strvar));
// result:  [ 'a b c d', 'a1 b1 c1 d1', 'a2 b2 c2 d2' ]
console.log("result: ",devtools.str2Arry(strvar,'\t'));
//result:  [ 'a b c d \n a1 b1', 'c1 d1 \n a2 b2 c2 d2' ]

extractstr function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let strvar = "a b c d \n a1 b1 c1 d1 \n a2 b2 c2 d2"
let arry = [strvar,'the quick brown fox','jumps over the','lazy dog']
console.log("result1: ",devtools.extractstr(arry,['lazy','quick']));
console.log("\nresult2: ",devtools.extractstr(arry,['c2','brown','fox','over','a1','dog']));
//result1:  [ [ { quick: 'the quick brown fox' } ], [ { lazy: 'lazy dog' } ] ]
//result2:  [
//  [ { a1: 'a1 b1 c1 d1' } ],
//  [ { c2: 'a2 b2 c2 d2' } ],
//  [ { brown: 'the quick brown fox' },
//    { fox: 'the quick brown fox' } ],
//  [ { over: 'jumps over the' } ],
//  [ { dog: 'lazy dog' } ]
//]

keyval function

var devnet = require('devnet-js');
const devtools = devnet.tools;
console.log("result1: ",devtools.keyval('abc','123'));
console.log("result2: ",devtools.keyval('123','{a:1,b:2,c:3}'));
//result1:  { abc: '123' }
//result2:  { '123': '{a:1,b:2,c:3}' }

arry2json function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let arry = [
  [ { Version: 'GPL code under the terms of GPL Version 2.0.  For more details, see the' } ],
  [ { 'ROM:': 'ROM: IOS-XE ROMMON' } ],
  [ { uptime: 'rtr1 uptime is 1 week, 5 days, 20 hours, 56 minutes' } ],
  [ { System_image_file: 'System image file is `bootflash:isr4300-universalk9.16.03.08.SPA.bin`' } ],
  [ { reload_reason: 'Last reload reason: PowerOn' } ],
  [ { image: 'System image file is `bootflash:isr4300-universalk9.16.03.08.SPA.bin`' },{ image: 'test string' } ]
]
console.log("result: ",devtools.arry2json(arry));
/*
result:  { Version: 'GPL code under the terms of GPL Version 2.0.  For more details, see the',
  'ROM:': 'ROM: IOS-XE ROMMON',
  uptime: 'rtr1 uptime is 1 week, 5 days, 20 hours, 56 minutes',
  System_image_file: 'System image file is `bootflash:isr4300-universalk9.16.03.08.SPA.bin`',
  reload_reason: 'Last reload reason: PowerOn',
  image: 'System image file is `bootflash:isr4300-universalk9.16.03.08.SPA.bin`',
  image6: 'test string' }
*/

raw2arry function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let strvar = "a b c d \n a1 b1 c1 d1 \n a2 b2 c2 d2"
let arry = [strvar,'the quick brown fox','jumps over the','lazy dog']
console.log("result: ",devtools.raw2arry(arry));
/*
result:  [
  [ [ 'a', 'b', 'c', 'd' ],
    [ 'a1', 'b1', 'c1', 'd1' ],
    [ 'a2', 'b2', 'c2', 'd2' ]
  ],
  [ 'the', 'quick', 'brown', 'fox' ],
  [ 'jumps', 'over', 'the' ],
  [ 'lazy', 'dog' ]
]
*/

formatMAC function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let strvar = "abcd-12ff-9ae6"
console.log("result: ",devtools.formatMAC(strvar,'Xxxx:xxXX-XXXX')); //result:  Abcd:12FF-9AE6
console.log("result: ",devtools.formatMAC("11aa:bb22:cc33",'xx:Xx:xx:XX:XX:XX')); // result:  11:Aa:bb:22:CC:33

quickipcheck function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let strvar = "the quick brown 1.2.3.x  jumps over 7.7.7.7 \n the lazy dog 4.x.x.2"
console.log("result: ",devtools.quickipcheck(strvar));
/*
result:  [
  { a: [ 'the', 'quick', 'brown', '1.2.3.x', 'jumps', 'over', '7.7.7.7' ],
    b: [ '1.2.3.x', '7.7.7.7' ],
    c: 2 },
  { a: [ 'the', 'lazy', 'dog', '4.x.x.2' ],
    b: [ '4.x.x.2' ],
    c: 1 }
  ]
*/

arrym2s function

var devnet = require('devnet-js');
const devtools = devnet.tools;
let arry = [
  ['a1',2,3],
  [0,100,200,300],
  [['a2','b2','c2',['yes','no']],'d']
]
console.log("result: ",devtools.arrym2s(arry)); //result:  [ 'a1', 2, 3, 0, 100, 200, 300, 'a2', 'b2', 'c2', 'yes', 'no', 'd' ]
console.log("result: ",devtools.arrym2s(arry,1));
/*
result:
[ 'a1', 2, 3, 0, 100, 200, 300,
 [ 'a2', 'b2', 'c2', [ 'yes', 'no' ] ],
 'd'
]
*/

jsonmerge function

var devnet = require('devnet-js');
const devtools = devnet.tools
let arryobj = [{a:1,b:2},{c:3},{d:4}]
console.log("result: ",devtools.jsonmerge(arryobj)); //result:  { a: 1, b: 2, c: 3, d: 4 }
console.log("result: ",devtools.jsonmerge({obj1:'hi'},{obj2:' hello'})); //result:  { obj1: 'hi', obj2: ' hello' }

getNetmaskDetails function

var devnet = require('devnet-js');
const devtools = devnet.tools
let netmask_sample = '255.255.0.0'
console.log(devtools.c(netmask_sample));
/*
result:
{ '0': [ '255', '255', '0', '0' ],
  raw: '11111111.11111111.00000000.00000000',
  arry: [ 255, 255, 0, 0 ],                     // array format
  i: 2,                                         // array index [i] octet
  nm: '255.255.0.0',                            // netmask
  h: '1111111111111111',                        // host count in binary
  u: 65535,                                     // upper host IP count
  ii: 8,                                        // octet host size
  nn: 16 }                                      // nn format
*/
netmask_sample = '/25'                          // string or integer
console.log(devtools.getNetmaskDetails(netmask_sample));
/*
result:
{ '0': [ '255', '255', '255', '128' ],
  raw: '11111111.11111111.11111111.10000000',   
  arry: [ 255, 255, 255, 128 ],                 // array format
  i: 3,                                         // array index [i] octet
  nm: '255.255.255.128',                        // netmask
  h: '1111111',                                 // host count in binary
  u: 127,                                       // upper host IP count
  ii: 7,                                        // octet host size
  nn: 25 }                                      // nn format
  */
  netmask_sample = 13                           // string or integer
  console.log(devtools.getNetmaskDetails(netmask_sample));
/*
result:
{ '0': [ '255', '248', '0', '0' ],
  raw: '11111111.11111000.00000000.00000000',
  arry: [ 255, 248, 0, 0 ],
  i: 1,
  nm: '255.248.0.0',
  h: '1111111111111111111',
  u: 524287,
  ii: 3,
  nn: 13 }
  */

getSubnetInfo function

var devnet = require('devnet-js');
const devtools = devnet.tools
let subnet_sample = '192.168.1.0/24'
console.log(devtools.getSubnetInfo(subnet_sample));
/*
result:
{ nm: '255.255.255.0',                  //netmask
  ip: '192.168.1.0',                    //input
  maxh: 255,                            //maximum host
  i: 3,                                 // array index [i] octet
  nn: 24,                               //nn format
  arry: [ 255, 255, 255, 0 ],           //netmask array format
  lrange: 0,                            //octet lower IP
  urange: 255 }                         //octet upper IP
*/
subnet_sample = '192.168.1.77/30'
console.log(devtools.getSubnetInfo(subnet_sample));     //(IP/nn) format    
/*
result:
{ nm: '255.255.255.252',                //netmask
  ip: '192.168.1.77',                   //input
  maxh: 3,                              //maximum host
  i: 3,                                 // array index [i] octet
  nn: 30,                               //nn format
  arry: [ 255, 255, 255, 252 ],         //netmask array format
  lrange: 76,                           //octet lower IP
  urange: 79 }                          //octet upper IP
  */
  subnet_sample = '192.168.1.77/255.255.255.240'        //(IP/netmask) format    
  console.log(devtools.getSubnetInfo(subnet_sample));   
  /*
  result:
  { nm: '255.255.255.240',
  ip: '192.168.1.77',
  maxh: 15,
  i: 3,
  nn: 28,
  arry: [ 255, 255, 255, 240 ],
  lrange: 64,
  urange: 79 }
    */
  subnet_sample = '192.168.1.77' 
  console.log(devtools.getSubnetInfo(subnet_sample,'21'));      //(subnet_IP, netmask in nn CIDR format)
  /*
  { nm: '255.255.248.0',
  ip: '192.168.1.77',
  maxh: 2047,
  i: 2,
  nn: 21,
  arry: [ 255, 255, 248, 0 ],
  lrange: 0,
  urange: 7 }
  */
  subnet_sample = '4.2.2.2' 
  console.log(devtools.getSubnetInfo(subnet_sample));      //(IP host set to default netmask to /32)
  /*
 { nm: '255.255.255.255',
  ip: '4.2.2.2',
  maxh: NaN,
  i: 3,
  nn: 32,
  arry: [ 255, 255, 255, 255 ],
  lrange: NaN,
  urange: NaN }
  */

CLI to Object function

let str = `
router eigrp 102
 distribute-list acllist2 out Tunnel1
 network 10.10.20.0 0.0.0.255
 network 10.10.21.0 0.0.0.255
 network 10.10.22.0 0.0.0.255
osfp 1 router-id 1.1.1.1
 import-route static cost 10
 area 0.0.0.0
  network 10.10.20.0 0.0.0.255
  network 10.10.21.0 0.0.0.255
  network 10.10.22.0 0.0.0.255
 area 0.0.0.1
  network 10.2.20.0 0.0.0.255
  network 10.2.21.0 0.0.0.255
  network 10.2.22.0 0.0.0.255

ntp access-group peer 80
ntp server 1.1.1.1
ntp server 1.1.1.2
ntp server 1.1.1.3 prefer
#
`
const devnet = require('devnet-js');
let devtools = devnet.tools;
console.log('---\n',devtools.cli2Object(str));
//console.log('---\n',devtools.cli2Object(str,'network')); // uncomment see other result
//console.log('---\n',devtools.cli2Object(str,['network','ntp server']));   // defaut value of whitelistArry is ['description','encapsulation'].

let strv2 = `
   oodsk advalss
     asdf dvad
interface GigabitEthernet0/0/1
 description Internet Ethernet BW100MB
 bandwidth 500000
 ip flow monitor FLOW-MONITOR-1 input
 ip flow monitor FLOW-MONITOR-1 output
 ip address 1.1.1.1 255.255.255.252
 ip nat outside
 speed 1000
 no negotiation auto
!
interface GigabitEthernet0/0/2
 ip address 2.2.2.2 255.255.255.248
 negotiation auto
 no cdp enable
!
line vty 0 4
 access-class ssh-vty in vrf-also
 exec-timeout 5 15
 privilege level 15
 password 7 testv2
 transport preferred none
 transport input ssh
line vty 5 15
 access-class ssh-vty in vrf-also
 exec-timeout 5 15
 privilege level 15
 password 7 testv3
 transport input ssh
!
router eigrp 101
 distribute-list acllist1 out Tunnel0
 network 10.10.10.0 0.0.0.255
 network 10.10.20.0 0.0.0.255
 redistribute ospf 1 metric 1000000 10 255 10 1500 route-map ospf-to-eigrp-rm
 distance 20 10.10.10.0 0.0.0.0
 passive-interface default
 no passive-interface Tunnel0
!
ntp access-group peer 80
ntp server 1.1.1.1
ntp server 1.1.1.2
ntp server 1.1.1.3 prefer
`
console.log('--\n',devtools.cli2Object(strv2,'network',['access-class','exec-timeout','transport']));
//console.log('--\n',devtools.cli2Object(strv2,'network',['access-class']));
//console.log('---\n',toolsd.cli2Object(strv2,['network','ntp server'],['access-class'],true)); // if headOnlyFlg = true,  it will only get the parent/main config.

Devnet-API

Go to devnet-js API page

Donate

alt text