Present Location: News >> Blog >> Junos and SLAX Stupidity

Blog

> Junos and SLAX Stupidity
Posted by prox, from Charlotte, on July 31, 2013 at 21:28 local (server) time

Well, it's official.  I suck at SLAX.  I managed to find myself in a small situation at work where I needed to create an op script that's called by some conditions under event-options.  Anyway, I always get stuck on the most simplest of things with SLAX and today was no different.

I couldn't figure out how to activate and deactivate portions of the Junos configuration, of all things.  I'm talking about stuff like this:

{master:0}[edit]
prox@enterprise# show protocols 
bgp {
    group foobar {
        peer-as 64512;
        neighbor 10.0.0.2;
    }
}

{master:0}[edit]
prox@enterprise# deactivate protocols bgp group foobar 

{master:0}[edit]
prox@enterprise# show protocols                           
bgp {
    inactive: group foobar {
        peer-as 64512;
        neighbor 10.0.0.2;
    }
}

{master:0}[edit]
prox@enterprise# activate protocols bgp group foobar      

{master:0}[edit]
prox@enterprise# show protocols                         
bgp {
    group foobar {
        peer-as 64512;
        neighbor 10.0.0.2;
    }
}

For some reason, this was not easily searchable on Google or Bing.  I did manage to figure it out, though.  To deactivate a piece of the configuration, do the following:

var $config-change = <configuration> {
     <protocols> {
          <bgp> {
               <group inactive="inactive"> {
                    <name> foobar;
               }
          }
     }
}
var $connection = jcs:open();
var $results := { call jcs:load-configuration( $connection, $configuration = $config-change ); }
if( $results//xnm:error ) {
     for-each( $results//xnm:error ) {
          <output> message;
     }
}
var $close-results = jcs:close($connection);

The above was easily found by just doing something like "show configuration protocols bgp | display xml" on the CLI.  However, what I wasn't able to find was how to activate the section, again:

var $config-change = <configuration> {
     <protocols> {
          <bgp> {
               <group active="active"> {
                    <name> foobar;
               }
          }
     }
}
var $connection = jcs:open();
var $results := { call jcs:load-configuration( $connection, $configuration = $config-change ); }
if( $results//xnm:error ) {
     for-each( $results//xnm:error ) {
          <output> message;
     }
}
var $close-results = jcs:close($connection);

The active="active" piece was all that was needed.

I really would prefer to code op scripts in Perl or Python but I don't think I have much of an option when calling them from event-options.  Oh well.

Comment by Bev [Website] on July 31, 2013 at 23:13 local (server) time

Clearly, the SLAX language fits the bill in ways that aren't utterly useful to the programer. But it fits a purpose.  Funny, when I look at this it reminds me of the now defunct Cisco KLEM ATE language I learned years ago.

Comment by Mark Kamichoff [Website] on August 01, 2013 at 08:13 local (server) time

Speaking of Cisco.. I was going to mention here that I would rather code in TCL!


> Add Comment

New comments are currently disabled for this entry.