CLI Roadmap

Hello,

I have never used any CLI other than Cisco so i am curious what useful and
creative knobs and bolts are available for other network appliance Vendors.

I guess what makes *NIX CLI/Shell so superior is that you can advanced
stuff from the CLI using sed, awk and all the great tools there so maybe
this is also one thing missing.

Regards,
Kim

Hello,

I have never used any CLI other than Cisco so i am curious what useful and
creative knobs and bolts are available for other network appliance Vendors.

Eh??

I guess what makes *NIX CLI/Shell so superior is that you can advanced
stuff from the CLI using sed, awk and all the great tools there so maybe
this is also one thing missing.

Unix philosophy says a program should do only one thing and do it
well. The Unix shell/CLI allows one to solve problems by sewing
together a sequence of small, specialized programs by piping the
output of a simple shell command to another shell command to solve
problems.

this is correct. however, baring the utilities, the unix shells are so
far ahead of most appliances and windows cmd. my zsh does
autocompletion of program parameters, hosts in the hosts file,
directories over scp, etc. i know what type of repo i'm in and if
git/hg, i know what branch as it is put in my path with a zle script.
my autocomplete is case insensitive as well and i have a visual
representation of options i can tab through when i autocomplete.

if there is a hardware vendor that doesn't use *nux that is at this
level, i'd sure like to know. as it is, i think that good kernels
(along with the rest of the stack) are so hard to develop that i don't
hardware vendors are likely to want to put much money into developing
their own anymore when nice choices are available for free. ie, vyatta
(though i disagree with them using linux over bsd because of the
network stack)

I have never used any CLI other than Cisco so i am curious what useful and
creative knobs and bolts are available for other network appliance Vendors.

Junos OS has:

- Multi-level hierarchical configuration with absolute or relative
  configuration editing, comments (annotations), and XML support.

Hierarchical configuration:

[edit]
user@device# show | find interfaces
interfaces {
    ge-0/0/0 {
        description "foo";
        flexible-vlan-tagging;
        encapsulation flexible-ethernet-services;
        unit 10 {
            description "bar";
            vlan-id 10;
            family inet {
                address 10.1.2.3/24;
            }
        }
    }
}

Absolute (from the root of the configuration tree) editing:

[edit]
user@device# set interfaces ge-0/0/0 description "foo"

[edit]
user@device# set interfaces ge-0/0/0 flexible-vlan-tagging

[edit]
user@device# set interfaces ge-0/0/0 encapsulation flexible-ethernet-services

[edit]
user@device# set interfaces ge-0/0/0 unit 10 description "bar"

[edit]
user@device# set interfaces ge-0/0/0 unit 10 vlan-id 10

[edit]
user@device# set interfaces ge-0/0/0 unit 10 family inet address 10.1.2.3/24

Relative (from any level in the configuration tree) editing:

[edit]
user@device# edit interfaces

[edit interfaces]
user@device# edit ge-0/0/0 unit 10

[edit interfaces ge-0/0/0 unit 10]
user@device# show
description "foo";
vlan-id 10;
family inet {
    address 10.1.2.3/24;
}

[edit interfaces ge-0/0/0 unit 10]
user@device# set vlan-id 20

[edit interfaces ge-0/0/0 unit 10]
user@device# show | match vlan-id
vlan-id 20;

- Non-immediate configuration editing with commit/rollback
  functionality.

- The ability to pre-configure hardware that isn't installed yet.

- Configuration diff (compare), patch, merge, replace, etc.

[edit interfaces ge-0/0/0 unit 10]
user@device# set family inet mtu 9000

[edit interfaces ge-0/0/0 unit 10]
user@device# show | compare
[edit interfaces ge-0/0/0 unit 10 family inet]
- mtu 1500;
+ mtu 9000;

- Template & derived configurations (configuration groups,
  apply-groups, apply-path, interface-ranges which support
  GLOBs/regular expressions, etc.)

- Scripting with Op Scripts (create CLI command extensions), Event
  Scripts (react to device events), and Configuration Scripts (modify
  the to-be-committed configuration in various ways).

- Piping ala UNIX:

user@device> show configuration | ?
Possible completions:
  compare Compare configuration changes with prior version
  count Count occurrences
  display Show additional kinds of information
  except Show only text that does not match a pattern
  find Search for first occurrence of pattern
  hold Hold text without exiting the --More-- prompt
  last Display end of output only
  match Show only text that matches a pattern
  no-more Don't paginate output
  request Make system-level requests
  resolve Resolve IP addresses
  save Save output text to file
  trim Trim specified number of columns from start of line

user@device> show configuration | display ?
Possible completions:
  changed Tag changes with junos:changed attribute (XML only)
  commit-scripts Show data after commit scripts have been applied
  detail Show configuration data detail
  inheritance Show inherited configuration data and source group
  omit Emit configuration statements with the 'omit' option
  set Show 'set' commands that create configuration
  xml Show output as XML tags

I guess what makes *NIX CLI/Shell so superior is that you can advanced
stuff from the CLI using sed, awk and all the great tools there so maybe
this is also one thing missing.

and if you really need the UNIX shell, Junos OS has that too with sed,
awk, etc.:

user@device> start shell
%