Command Line Tool ================= NAPALM ships with a very simple cli tool so you can use napalm straight from the CLI. It's use is quite simple and you can see the help with ``--help``:: $ napalm --help usage: napalm [-h] [--user USER] [--password PASSWORD] --vendor VENDOR [--optional_args OPTIONAL_ARGS] [--debug] hostname {configure,call,validate} ... Command line tool to handle configuration on devices using NAPALM.The script will print the diff on the screen positional arguments: hostname Host where you want to deploy the configuration. optional arguments: -h, --help show this help message and exit --user USER, -u USER User for authenticating to the host. Default: user running the script. --password PASSWORD, -p PASSWORD Password for authenticating to the host.If you do not provide a password in the CLI you will be prompted. --vendor VENDOR, -v VENDOR Host Operating System. --optional_args OPTIONAL_ARGS, -o OPTIONAL_ARGS String with comma separated key=value pairs passed via optional_args to the driver. --debug Enables debug mode; more verbosity. actions: {configure,call,validate} configure Perform a configuration operation call Call a napalm method validate Validate configuration/state Automate all the things!!! You can mostly do three things: 1. Configure the device (dry-run with diff supported) 2. Call any method (like ``get_interfaces`` or ``ping``) 3. Validate configuration/state Let's see a few examples:: # napalm --user vagrant --password vagrant --vendor eos --optional_args "port=12443" localhost configure new_config.txt --strategy merge --dry-run @@ -8,7 +8,7 @@ ! transceiver qsfp default-mode 4x10G ! -hostname myhost +hostname a-new-hostname ! spanning-tree mode mstp ! @@ -20,6 +20,7 @@ username vagrant privilege 15 role network-admin secret 5 $1$gxUZF/4Q$FoUvji7hq0HpJGxc67PJM0 ! interface Ethernet1 + description "TBD" ! interface Ethernet2 ! $ napalm --user vagrant --password vagrant --vendor eos --optional_args "port=12443" localhost call get_interfaces { "Ethernet2": { "is_enabled": true, "description": "", "last_flapped": 1502731278.4344141, "is_up": true, "mac_address": "08:00:27:3D:83:34", "speed": 0 }, "Management1": { "is_enabled": true, "description": "", "last_flapped": 1502731294.598835, "is_up": true, "mac_address": "08:00:27:7D:44:C1", "speed": 1000 }, "Ethernet1": { "is_enabled": true, "description": "", "last_flapped": 1502731278.4342606, "is_up": true, "mac_address": "08:00:27:E6:4C:E9", "speed": 0 } } $ napalm --user vagrant --password vagrant --vendor eos --optional_args "port=12443" localhost call ping --method-kwargs "destination='127.0.0.1'" { "success": { "packet_loss": 0, "rtt_stddev": 0.011, "rtt_min": 0.005, "results": [ { "rtt": 0.035, "ip_address": "127.0.0.1" }, { "rtt": 0.008, "ip_address": "127.0.0.1" }, { "rtt": 0.006, "ip_address": "127.0.0.1" }, { "rtt": 0.005, "ip_address": "127.0.0.1" }, { "rtt": 0.007, "ip_address": "127.0.0.1" } ], "rtt_avg": 0.012, "rtt_max": 0.035, "probes_sent": 5 } } $ napalm --user vagrant --password vagrant --vendor eos --optional_args "port=12443" localhost call cli --method-kwargs "commands=['show version']" { "show version": "Arista vEOS\nHardware version: \nSerial number: \nSystem MAC address: 0800.2761.b6ba\n\nSoftware image version: 4.15.2.1F\nArchitecture: i386\nInternal build version: 4.15.2.1F-2759627.41521F\nInternal build ID: 8404cfa4-04c4-4008-838b-faf3f77ef6b8\n\nUptime: 19 hours and 46 minutes\nTotal memory: 1897596 kB\nFree memory: 117196 kB\n\n" } Debug Mode ---------- The debugging mode is also quite useful and it's recommended you use it to report and issue.:: $ napalm --debug --user vagrant --password vagrant --vendor eos --optional_args "port=12443" localhost configure new_config.txt --strategy merge --dry-run 2017-08-15 15:14:23,527 - napalm - DEBUG - Starting napalm's debugging tool 2017-08-15 15:14:23,527 - napalm - DEBUG - Gathering napalm packages 2017-08-15 15:14:23,541 - napalm - DEBUG - napalm-ansible==0.7.0 2017-08-15 15:14:23,542 - napalm - DEBUG - napalm==2.0.0 2017-08-15 15:14:23,542 - napalm - DEBUG - get_network_driver - Calling with args: ('eos',), {} 2017-08-15 15:14:23,551 - napalm - DEBUG - get_network_driver - Successful 2017-08-15 15:14:23,551 - napalm - DEBUG - __init__ - Calling with args: (, 'localhost', 'vagrant'), {'password': u'*******', 'optional_args': {u'port': 12443}, 'timeout': 60} 2017-08-15 15:14:23,551 - napalm - DEBUG - __init__ - Successful 2017-08-15 15:14:23,551 - napalm - DEBUG - pre_connection_tests - Calling with args: (,), {} 2017-08-15 15:14:23,551 - napalm - DEBUG - open - Calling with args: (,), {} 2017-08-15 15:14:23,586 - napalm - DEBUG - open - Successful 2017-08-15 15:14:23,586 - napalm - DEBUG - connection_tests - Calling with args: (,), {} 2017-08-15 15:14:23,587 - napalm - DEBUG - get_facts - Calling with args: (,), {} 2017-08-15 15:14:23,622 - napalm - DEBUG - Gathered facts: { "os_version": "4.15.2.1F-2759627.41521F", "uptime": 71636, "interface_list": [ "Ethernet1", "Ethernet2", "Management1" ], "vendor": "Arista", "serial_number": "", "model": "vEOS", "hostname": "myhost", "fqdn": "myhost" } { "os_version": "4.15.2.1F-2759627.41521F", "uptime": 71636, "interface_list": [ "Ethernet1", "Ethernet2", "Management1" ], "vendor": "Arista", "serial_number": "", "model": "vEOS", "hostname": "myhost", "fqdn": "myhost" } 2017-08-15 15:14:23,622 - napalm - DEBUG - get_facts - Successful 2017-08-15 15:14:23,622 - napalm - DEBUG - load_merge_candidate - Calling with args: (,), {'filename': 'new_config.txt'} 2017-08-15 15:14:23,894 - napalm - ERROR - load_merge_candidate - Failed: Error [1000]: CLI command 3 of 5 'hostname a_new-hostname' failed: could not run command [ Host name is invalid. Host name must contain only alphanumeric characters, '.' and '-'. It must begin and end with an alphanumeric character.] ================= Traceback ================= Traceback (most recent call last): File "/Users/dbarroso/.virtualenvs/napalm/bin/napalm", line 11, in load_entry_point('napalm', 'console_scripts', 'napalm')() File "/Users/dbarroso/workspace/napalm/napalm/napalm.base/clitools/cl_napalm.py", line 285, in main run_tests(args) File "/Users/dbarroso/workspace/napalm/napalm/napalm.base/clitools/cl_napalm.py", line 270, in run_tests configuration_change(device, args.config_file, args.strategy, args.dry_run) File "/Users/dbarroso/workspace/napalm/napalm/napalm.base/clitools/cl_napalm.py", line 224, in configuration_change strategy_method(device, filename=config_file) File "/Users/dbarroso/workspace/napalm/napalm/napalm.base/clitools/cl_napalm.py", line 27, in wrapper r = func(*args, **kwargs) File "/Users/dbarroso/workspace/napalm/napalm/napalm.base/clitools/cl_napalm.py", line 202, in call_load_merge_candidate return device.load_merge_candidate(*args, **kwargs) File "/Users/dbarroso/workspace/napalm/napalm-eos/napalm.eos/eos.py", line 176, in load_merge_candidate self._load_config(filename, config, False) File "/Users/dbarroso/workspace/napalm/napalm-eos/napalm.eos/eos.py", line 168, in _load_config raise MergeConfigException(e.message) napalm.base.exceptions.MergeConfigException: Error [1000]: CLI command 3 of 5 'hostname a_new-hostname' failed: could not run command [ Host name is invalid. Host name must contain only alphanumeric characters, '.' and '-'. It must begin and end with an alphanumeric character.]