# pyroute2-cli

## Synopsis

> cat script_file | pyroute2-cli [options]

> pyroute2-cli [options] script_file

## Description

pyroute2-cli is an interface towards pyroute2 NDB – network database. It can provide both CLI and HTTP interfaces.

## Status

pyroute2-cli is a proof-of-concept for now, it has some auth framework, but no support for SSL. Don’t hesitate to file feature requests and bugs on the project page.

## Options

-m <C|S>

  Mode to use: C (cli, by default) or S (server)

CLI mode options

-c <cmd>

  Command line to run

-r <file>

  An rc file to load before the session

-s <file>

  Load sources spec from a JSON file

-l <spec>

  Log spec

Server mode options

-a <ipaddr>

  IP address to listen on

-p <port>

  TCP port to listen on

-s <file>

  Load sources spec from a JSON file

-l <spec>

  Log spec

## Examples

Running CLI:

    # bring eth0 up and add an IP address
    pyroute2-cli -l debug -c "interfaces eth0 set { state up } => add_ip { 10.0.0.2/24 } => commit"

    # same via stdin + pipe:
    cat <<EOF | pyroute2-cli
    > interfaces eth0
    >     set { state up }
    >     add_ip { 10.0.0.2/24 }
    >     commit
    > EOF

    # run a script from a file script.pr2:
    interfaces eth0
          set { state up }
          add_ip { 10.0.0.2/24 }
          commit

    pyroute2-cli -l debug script.pr2

The server mode:

    # start the server
    pyroute2-cli -l debug -m S -a 127.0.0.1 -p 8080

    # run a request
    # text/plain: send a text script to the server
    curl \
        -H "Content-Type: text/plain" \
        -d "neighbours summary | format json" \
        http://localhost:8080/v1/

    # application/json: send a script as a JSON data
    curl \
        -H "Content-Type: application/json" \
        -d '{"commands": ["neighbours summary | format json"]}'
        http://localhost:8080/v1/

    curl \
        -H "Content-Type: application/json" \
        -d '{"commands": ["interfaces eth0", "set state down", "commit"]}'
        http://localhost:8080/v1/