Connecting to the API server

Basic auth on localhost:8095

$ contrail-api-cli --os-auth-plugin http \\
                   --os-username admin \\
                   --os-password paswword \\
                   --port 8095 \\
                   shell
from contrail_api_cli.client import SessionLoader
from contrail_api_cli.resource import Collection
from contrail_api_cli.context import Context
from contrail_api_cli.schema import DummySchema

session = SessionLoader().make(host="localhost",
                               port=8095,
                               os_username="admin",
                               os_password="password",
                               os_cacert=None,
                               os_cert=None,
                               insecure=False,
                               timeout=1)

Context().session = session
Context().schema = DummySchema()

print(len(Collection('virtual-network')))

Keystone auth on API_SERVER:8082

$ contrail-api-cli --os-auth-plugin v2password \\
                   --os-username admin \\
                   --os-password paswword \\
                   --os-tenant-name tenant_name \\
                   --os-auth-url https://keystone:5000/v2.0/ \\
                   shell

Note

All parameters can be set in enviroment variables. For example, –os-auth-plugin looks for $OS_AUTH_PLUGIN.

–port and –host correspond to $CONTRAIL_API_(HOST|PORT)

Base commands

All commands provides a –help option.

help

List all available commands.

man

class contrail_api_cli.commands.man.Man(name)[source]

Bases: contrail_api_cli.command.Command

Show command documentation.

To improve the output you can install the rst2ansi package.

ls

class contrail_api_cli.commands.ls.Ls(name)[source]

Bases: contrail_api_cli.command.Command

List resources and collections.

# list API collections
admin@localhost:/> ls
domain
global-vrouter-config
instance-ip
network-policy
virtual-DNS-record
route-target
loadbalancer-listener
floating-ip
floating-ip-pool
physical-router
[...]

# list collection
admin@localhost:/> ls global-system-config
global-system-config/d6820999-c8fe-45ae-acb2-48aebddb3b7d

# long format
admin@localhost:/> ls -l virtual-network
virtual-network/49d00de8-4351-446f-b6ee-d16dec3de413  default-domain:admin:net2
virtual-network/5a9fbd42-a730-42f7-9947-be8a5d808b70  default-domain:admin:net1
virtual-network/e3148147-164e-4194-8507-a58eefe072bd  default-domain:default-project:default-virtual-network
virtual-network/ba2170ce-741c-4361-ad88-f2d97162faf2  default-domain:default-project:ip-fabric
virtual-network/e82ae164-f78a-4766-8ba2-7cb68dacaecb  default-domain:default-project:__link_local__

# parametrized output format
admin@localhost:/> ls -l -c instance_ip_address instance-ip
instance-ip/f9d25887-2765-4ba0-bf45-54b9dbc5874a  192.168.20.1
instance-ip/deb82100-00bb-4b5c-8495-4bbe34b5fab8  192.168.21.1
instance-ip/2f5c047d-0a9c-4709-bcfa-d710ac68cc22  192.168.10.3
instance-ip/04cb356a-fb1f-44fa-bb2f-d0f0dd4eedfd  192.168.20.3

# filter by parent_uuid
admin@localhost:/> ls -l -p d0afbb0b-dd83-4a33-a673-9cb2b244e804 virtual-network
virtual-network/5a9fbd42-a730-42f7-9947-be8a5d808b70  default-domain:admin:net1
virtual-network/49d00de8-4351-446f-b6ee-d16dec3de413  default-domain:admin:net2

# filter by attribute
admin@localhost:/> ls -l -f instance_ip_address=192.168.20.1 instance-ip
instance-ip/f9d25887-2765-4ba0-bf45-54b9dbc5874a  f9d25887-2765-4ba0-bf45-54b9dbc5874a

du

class contrail_api_cli.commands.du.Du(name)[source]

Bases: contrail_api_cli.command.Command

Count resources of a collection.

admin@localhost:/> du virtual-network
6

cd

class contrail_api_cli.commands.shell.Cd(name)[source]

Bases: contrail_api_cli.command.Command

Change current context.

admin@localhost:/> cd virtual-network
admin@localhost:/virtual-network> ls
1095e416-b7cd-4c65-b0a3-631e8263a4dd
49d00de8-4351-446f-b6ee-d16dec3de413
[...]
admin@localhost:/virtual-network> ls instance-ip
No resource found
admin@localhost:/virtual-network> ls /instance-ip
/instance-ip/f9d25887-2765-4ba0-bf45-54b9dbc5874a
/instance-ip/deb82100-00bb-4b5c-8495-4bbe34b5fab8
/instance-ip/2f5c047d-0a9c-4709-bcfa-d710ac68cc22
/instance-ip/04cb356a-fb1f-44fa-bb2f-d0f0dd4eedfd

cat

class contrail_api_cli.commands.cat.Cat(name)[source]

Bases: contrail_api_cli.command.Command

Print resource details in json format.

admin@localhost:/> cat instance-ip/2f5c047d-0a9c-4709-bcfa-d710ac68cc22
{
  "display_name": "2f5c047d-0a9c-4709-bcfa-d710ac68cc22",
  "fq_name": [
    "2f5c047d-0a9c-4709-bcfa-d710ac68cc22"
  ],
  "href": "http://localhost:8082/instance-ip/2f5c047d-0a9c-4709-bcfa-d710ac68cc22",
  "instance_ip_address": "192.168.10.3",
  "instance_ip_family": "v4",
  "name": "2f5c047d-0a9c-4709-bcfa-d710ac68cc22",
  "subnet_uuid": "96b51c74-090b-4c3e-9f73-ecd8efac294d",
  "uuid": "2f5c047d-0a9c-4709-bcfa-d710ac68cc22",
  [...]
}

tree

class contrail_api_cli.commands.tree.Tree(name)[source]

Bases: contrail_api_cli.command.Command

Show tree of references of a resource.

# tree of back / childs references
localhost:/> tree service-instance/f8e191c5-83fa-47f1-a242-e8ad7cab46c0
service-instance/f8e191c5-83fa-47f1-a242-e8ad7cab46c0                     default-domain:project:a2fb6399-18ce-44ec-839d-d373221a6a8f
├── loadbalancer/a2fb6399-18ce-44ec-839d-d373221a6a8f                     default-domain:project:lbv2
│   └── loadbalancer-listener/434b7b92-b68a-41f6-8321-8e7e2519d483        default-domain:project:lbv2_listener
│       └── loadbalancer-pool/82cce54d-b13a-427c-bac6-fb7e976bcf5f        default-domain:project:lbv2_pool
│           ├── loadbalancer-member/cc6e4c32-92c1-4668-879d-d6802f8ad3de  default-domain:project:lbv2_pool:cc6e4c32-92c1-4668-879d-d6802f8ad3de
│           └── loadbalancer-member/fb30633f-407b-461d-bf20-3ac9f0cbe504  default-domain:project:lbv2_pool:fb30633f-407b-461d-bf20-3ac9f0cbe504
├── virtual-machine/68243a56-298d-4354-a077-b41b6bb55b7c                  default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f__1
│   └── virtual-machine-interface/4a0bf808-19d7-48e9-b076-54064bebaf2e    default-domain:project:default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f__1__right__1
│       └── instance-ip/44a9dc2a-446f-4d34-9148-4a2cc1f9a6f7              default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f-right
└── virtual-machine/114be9ed-ac45-4dc8-9f45-559470037cfd                  default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f__2
    └── virtual-machine-interface/43afc4fe-8a84-47ba-96d9-73a8dd1d6b63    default-domain:project:default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f__2__right__1
        └── instance-ip/44a9dc2a-446f-4d34-9148-4a2cc1f9a6f7              default-domain__project__a2fb6399-18ce-44ec-839d-d373221a6a8f-right

# tree of parents / references
admin@localhost:/> tree -r routing-instance/f792b52d-ff69-487e-b2a5-c13060e3ce77
routing-instance/f792b52d-ff69-487e-b2a5-c13060e3ce77        default-domain:project:test1:test1
├── route-target/7454c39a-b3c7-4d42-b766-bd276710d0b1        target:64518:8000133
└── virtual-network/ce88182e-4e6e-4c61-9df1-7ffb24543578     default-domain:project:test1
    ├── network-ipam/d6bdafea-58d2-4240-8c65-2acf837d6750    default-domain:default-project:default-network-ipam
    │   └── project/acb58362-0272-4d27-97a1-da4ac1e2c5e3     default-domain:default-project
    │       └── domain/ff62f8f7-cccd-4a30-ba32-2ee3764fac79  default-domain
    └── project/0ed483e0-83ef-4f70-8250-1fcfa5d98c0e         default-domain:project
        └── domain/ff62f8f7-cccd-4a30-ba32-2ee3764fac79      default-domain

rm

class contrail_api_cli.commands.rm.Rm(name)[source]

Bases: contrail_api_cli.command.Command

Delete a resource from the API.

Warning

-r option can be used to delete recursively back_refs of the resource.

edit

class contrail_api_cli.commands.edit.Edit(name)[source]

Bases: contrail_api_cli.command.Command

Edit a resource.

The resource JSON will be opened in an editor. If modifications have been made and the file is saved the resource will be sent to the API server.

The –template option can be used to create a new resource based on an existing resource.

schema

class contrail_api_cli.commands.schema.Schema(name)[source]

Bases: contrail_api_cli.command.Command

View resources links using contrail schema definition.

admin@localhost:/> schema -v 2.21 virtual-network
virtual-network
├── parent
│   └── project
├── children
│   ├── access-control-list
│   ├── routing-instance
│   ├── alias-ip-pool
│   └── floating-ip-pool
├── refs
│   ├── route-table
│   ├── network-policy
│   ├── qos-config
│   └── network-ipam
├── back_refs
│   ├── instance-ip
│   ├── physical-router
│   ├── logical-router
│   └── virtual-machine-interface
└── properties
    ├── import-route-target-list
    ├── export-route-target-list
    ├── provider-properties
    ├── multi-policy-service-chains-enabled
    ├── flood-unknown-unicast
    ├── virtual-network-network-id
    ├── router-external
    ├── virtual-network-properties
    ├── route-target-list
    ├── is-shared
    ├── external-ipam
    ├── id-perms
    ├── perms2
    └── display-name

ln

class contrail_api_cli.commands.ln.Ln(name)[source]

Bases: contrail_api_cli.command.Command

Add or remove a reference link between two resources.

admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7
virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7                default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2
├── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0  default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1
│   ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06            default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06
│   └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65            7d401b8c-b9d3-4be2-af0b-a0dfff500860
└── virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc             default-global-system-config:vrouter-1
admin@localhost:/> ln -r virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc
admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7
virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7                default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2
└── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0  default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1
    ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06            default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06
    └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65            7d401b8c-b9d3-4be2-af0b-a0dfff500860
admin@localhost:/> ln virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc
admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7
virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7                default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2
├── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0  default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1
│   ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06            default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06
│   └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65            7d401b8c-b9d3-4be2-af0b-a0dfff500860
└── virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc             default-global-system-config:vrouter-1

relative

class contrail_api_cli.commands.relative.Relative(name)[source]

Bases: contrail_api_cli.command.Command

Find linked resource using a resource-type path.

admin@localhost:/> relative virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-machine-interface/floating-ip
floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06
admin@localhost:/> relative -l virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-machine-interface/floating-ip
base      virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7
back_ref  virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0
back_ref  floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06

The resource path can contain selectors:

admin@localhost:/> relative logical-router/6f71ab62-d831-4a10-807c-975e23dcc3d8 service-instance/virtual-machine/virtual-machine-interface[virtual_machine_interface_properties.service_interface_type=right]/instance-ip
instance-ip/ea329dca-e30e-42eb-93a3-86325a34a525
admin@localhost:/> cat instance-ip/ea329dca-e30e-42eb-93a3-86325a34a525 | jq .instance_ip_address
"172.24.4.3"

This will get the SNAT public IP of a logical router.

kv

class contrail_api_cli.commands.kv.Kv(name)[source]

Bases: contrail_api_cli.command.Command

Command to interact with the key-value store.

admin@localhost:/> kv --add my-key my-value
admin@localhost:/> kv --get my-key
[
  {
    "key": "my-key",
    "value": "my-value"
  }
]

admin@localhost:/> kv --delete my-key
admin@localhost:/> kv --get my-key
Unknown User-Agent key my-key (HTTP 404)

Advanced usage

pipes

Any command can be piped to any program installed on the system inside the cli shell.

admin@localhost:/virtual-network> cat 1095e416-b7cd-4c65-b0a3-631e8263a4dd | grep dns
"dns_nameservers": [],
            "dns_server_address": "192.168.21.2",
admin@localhost:/virtual-network> cat 1095e416-b7cd-4c65-b0a3-631e8263a4dd | jq '.network_ipam_refs[].attr.ipam_subnets[].dns_server_address'
"192.168.21.2"

direct-call

You can call command directly from bash and pipe or redirect output as you wish.

$ contrail-api-cli ls /virtual-network
virtual-network/1095e416-b7cd-4c65-b0a3-631e8263a4dd
virtual-network/49d00de8-4351-446f-b6ee-d16dec3de413
virtual-network/5a9fbd42-a730-42f7-9947-be8a5d808b70
virtual-network/e3148147-164e-4194-8507-a58eefe072bd
virtual-network/ba2170ce-741c-4361-ad88-f2d97162faf2
virtual-network/e82ae164-f78a-4766-8ba2-7cb68dacaecb

wildcard resolution

The wildcards * and ? can be used in paths. All matching resources will be resolved.

Warning

Note that this does filtering on the cli side and not on the API side.

admin@localhost:/> ls -l virtual-network/default-domain:admin:*
virtual-network/49d00de8-4351-446f-b6ee-d16dec3de413  default-domain:admin:net2
virtual-network/5a9fbd42-a730-42f7-9947-be8a5d808b70  default-domain:admin:net1

loading commands from other namespaces

Say you have a collection of commands in the contrail_api_cli.mycommands entrypoint, run:

$ contrail_api_cli --ns contrail_api_cli.mycommands shell

The namespace contrail_api_cli.mycommands commands will be loaded as well as the commands of the default contrail_api_cli.command namespace.

python from the shell

You can directly use contrail-api-cli API in a python console that can be run with the python command. If ptpython [1] or IPython [2] are installed they will be used instead of the standard python repl.

admin@localhost:/> python
>>> c = Collection('virtual-network', fetch=True)

>>> for vn in c:
...     print(vn.uuid)
0287b4d1-3aea-4a82-b1be-be524995d1a8
73fc0e08-b542-483e-86e7-f4a5aad2750f
bf91b645-f7aa-4ab3-88cf-dc7a6358c08c
a3694461-c4e0-4f54-a6fa-a11ae0472e04
6afc9f77-607f-424c-8188-996c9513467a

python script execution

The exec command can be used to run a python script that is using the contrail_api_cli API. This avoids the need to setup the connection to the API server inside the script since the script will be run in the context of the cli.

$ contrail-api-cli exec my_script.py
[1]https://github.com/jonathanslenders/ptpython
[2]https://ipython.org/