Jump to: navigation, search

UnifiedCLI/Mapping

< UnifiedCLI
Revision as of 19:46, 11 May 2012 by Doug (talk)

OSCLI

Part of the UnifiedCLI proposal

Command Mapping Summary

This is an example mapping of the existing commands from Keystone, Nova and Glance to the <verb> <object> form for the new cli tool. It reduces both the number of verbs and objects by handling some of the smaller differences with command line options.

Further consolidation could be achieved by additional options or by introduction secondary objects to the syntax. For example, the credentials and x509-cert (and x509-root-cert) objects could be combined:


#!csv ,
,
nova x509-create-cert [<pk-file>] [<x509-cert>],os create credentials --x509 [<pk-file>] [<x509-cert>]
nova credentials,os show credentials
nova x509-get-root-cert,os show credentials --x509 --root


Keystone

  • Verbs:
    • keystone: create, delete, get, list, update
    • os: create, delete, list, set, show
  • Objects:
    • keystone: catalog, ec2-credentials, endpoint, role, service, tenant, user, user-password, user-role
    • os: catalog, ec2-credentials, endpoint, role, service, tenant, user, user-role

keystone

#!csv ,
Command-line Option,Environment Variable
  --os_username <auth-user-name>,                     OS_USERNAME
  --os_password <auth-password>,                      OS_PASSWORD
  --os_tenant_name <auth-tenant-name>,                OS_TENANT_NAME
  --os_tenant_id <tenant-id>,                         OS_TENANT_ID
  --os_auth_url <auth-url>,                           OS_AUTH_URL
  --os_region_name <region-name>,                     OS_REGION_NAME
  --os_identity_api_version <identity-api-version>,   OS_IDENTITY_API_VERSION
  --token <service-token>,                            SERVICE_TOKEN
  --endpoint <service-endpoint>,                      SERVICE_ENDPOINT


catalog

#!bash
keystone catalog [--service <service-type>]

os show service [--catalog] [<service-type>


ec2-credentials

#!bash
keystone ec2-credentials-create [--user <user-id>] 
                       [--tenant_id <tenant-id>]

os create ec2-credentials --tenant_id <tenant-id> --user <user-id>

## are both args really optional?


#!bash
keystone ec2-credentials-delete [--user <user-id>] 
                       --access <access-key>

os delete ec2-credentials --access <access-key>

## what changes if --user is not provided?


#!bash
keystone ec2-credentials-get [--user <user-id>] 
                             --access <access-key>

os show ec2-credentials --access <access-key>

## what changes if --user is not provided?


#!bash
keystone ec2-credentials-list [--user <user-id>]

os list ec2-credentials [--user <user-id>]


endpoint

#!bash
keystone endpoint-create [--region <endpoint-region>]
                         [--service_id <service-id>]
                         [--publicurl <public-url>]
                         [--adminurl <admin-url>]
                         [--internalurl <internal-url>]

os create endpoint [--service <service-id-or-name>]
                ...


#!bash
keystone endpoint-delete <endpoint-id>

os delete endpoint <endpoint>


#!bash
keystone endpoint-get --service <service-type>
                      [--endpoint_type <endpoint-type>]
                      [--attr <service-attribute>] 
                      [--value <value>]

os show endpoint <service>


role

#!bash
keystone role-create --name <role-name>

os create role <role-name>


#!bash
keystone role-delete <role-id>

os delete role <role-name-or-id>


#!bash
keystone role-get <role-id>

os show role <role-name-or-id>


#!bash
keystone role-list [--user <user-id>] 
                   [--tenant_id <tenant-id>]

os list role ...


service

#!bash
keystone service-create --name <name> 
                        --type <type>
                        [--description <service-description>]

os create service <name> <type> [--description <description>]


#!bash
keystone service-get <service-id>

os show service <service-name-or-id>


#!bash
keystone service-list

os list service


tenant

#!bash
keystone tenant-create --name <tenant-name>
                       [--description <tenant-description>]
                       [--enabled <true|false>]

os create tenant
        [--description <tenant-description>]
        --enable|--disable
        <tenant-name>


#!bash
keystone tenant-delete <tenant-id>

os delete tenant <tenant>


#!bash
keystone tenant-get <tenant-id>

os show tenant <tenant>


#!bash
keystone tenant-list

os list [--long] tenant


user

#!bash
keystone user-create --name <user-name> 
                     [--tenant_id <tenant-id>]
                     [--pass <pass>] 
                     [--email <email>]
                     [--enabled <true|false>]

os create user <name>
               [--tenant <tenant-name-or-id>]
               ...


#!bash
keystone user-delete <user-id>

os delete user <user-name-or-id>


#!bash
keystone user-get <user-id>

os show user <user-name-or-id>


#!bash
keystone user-list [<tenant-id>]

os list user [<tenant-name-or-id>]


#!bash
keystone user-password-update --pass <password> <user-id>

os set user <user-name-or-id> 
            [--password <password>]
            [--enable|--disable]


user-role

#!bash
keystone user-role-add --user <user-id> 
                       --role <role-id>
                       [--tenant_id <tenant-id>]

os add user-role ...


#!bash
keystone user-role-remove --user <user-id> 
                          --role <role-id>
                          [--tenant_id <tenant-id>]

os remove user-role ...


<other>

#!bash
keystone discover

##TBD


Nova

  • Verbs:
    • nova: add, attach, boot, create, delete, describe, detach, get, list, lock, migrate, pause, reboot, rebuild, remove, rename, rescue, resize, resume, set, show, ssh, suspend, unlock, unpause, unrescue, update
    • os: add, attach, create, delete, detach, list, lock, pause, reboot, rebuild, remove, rename, rescue, resume, set, show, suspend, unlock, unpause, unrescue
  • Objects:
    • nova: absolute-limits, actions, aggregate, bash-completion, cloudpipe, console-log, credentials, diagnostics, dns, dns-domain, endpoints, fixed-ip, flavor, floating-ip, floating-ip-pool, host, image, keypair, meta(data), quota, quota-class, rate-limits, resource, root-password, secgroup, secgroup-group, secgroup-rule, usage, vnc-console, volume, volume-snapshot, volume-type, x509-cert, x509-root-cert
    • os: aggregate, aggregate-host, bash-completion, cloudpipe, console, credentials, diagnostics, dns, dns-domain, endpoints, fixed-ip, flavor, floating-ip, floating-ip-pool, host, image, keypair, limits, quota, quota-class, rate-limits, resource, secgroup, secgroup-group, secgroup-rule, server, usage, volume, volume-snapshot, volume-type, x509-cert, x509-root-cert
  • Implied objects: instance/server

nova

#!csv ,
Command-line Option,Environment Variable
  --os_username <auth-user-name>,                     OS_USERNAME
  --os_password <auth-password>,                      OS_PASSWORD
  --os_tenant_name <auth-tenant-name>,                OS_TENANT_NAME
  --os_auth_url <auth-url>,                           OS_AUTH_URL
  --os_region_name <region-name>,                     OS_REGION_NAME
  --service_type SERVICE_TYPE,
  --service_name SERVICE_NAME,                        NOVA_SERVICE_NAME
  --endpoint_type ENDPOINT_TYPE,
  --version VERSION,                                   NOVA_VERSION


#!bash
nova actions <server>

##TBD


aggregate

#!bash
nova aggregate-create <name> <availability_zone>

os create aggregate ...


#!bash
nova aggregate-delete <id>

os delete aggregate ...


#!bash
nova aggregate-details <id>

os show aggregate ...


#!bash
nova aggregate-list

os list aggregate


#!bash
nova aggregate-update <id> <name> [<availability_zone>]

os set aggregate ...


#!bash
nova aggregate-set-metadata <id> <key=value> [<key=value> ...]

os set aggregate --metadata ...


aggregate-host

#!bash
nova aggregate-add-host <id> <host>

os add aggregate-host ...


#!bash
nova aggregate-remove-host <id> <host>

os remove aggregate-host ...


bash-completion

#!bash
nova bash-completion

os show bash-completion


cloudpipe

#!bash
nova cloudpipe-create <project>

os create cloudpipe ...


#!bash
nova cloudpipe-list

os list cloudpipe


console

#!bash
nova console-log [--length <length>] <server>

os show console ...


#!bash
nova get-vnc-console <server> <console_type>

os show console [--vnc] ...


credentials

#!bash
nova credentials

os show credentials


diagnostics

#!bash
nova diagnostics <server>

os show diagnostics ...


dns

#!bash
nova dns-create [--type <type>] <ip> <name> <domain>

os create dns ...


#!bash
nova dns-delete <domain> <name>

os delete dns ...


#!bash
nova dns-list [--ip <ip>] [--name <name>] <domain>

os list dns ...


dns-domain

#!bash
nova dns-create-private-domain [--availability_zone <availability_zone>]
                               <domain>

os create dns-domain [--private] ...


dns-public-domain

#!bash
nova dns-create-public-domain [--project <project>] <domain>

os create dns-domain [--public] ...


#!bash
nova dns-delete-domain <domain>

os delete dns-domain ...


#!bash
nova dns-domains

os list dns-domains


endpoints

#!bash
nova endpoints

os list endpoints

# does this overlap with keystone?


fixed-ip

#!bash
nova add-fixed-ip <server> <network_id>

os add fixed-ip ...


#!bash
nova remove-fixed-ip <server> <address>

os remove fixed-ip ...


flavor

#!bash
nova flavor-create [--ephemeral <ephemeral>] 
                   [--swap <swap>]
                   [--rxtx-factor <factor>]
                   <name> <id> <ram> <disk> <vcpus>

os create flavor ...


#!bash
nova flavor-delete <id>

os delete flavor ...


#!bash
nova flavor-list

os list flavor


floating-ip

#!bash
nova add-floating-ip <server> <address>

os add floating-ip ...


#!bash
nova floating-ip-create [<floating_ip_pool>]

os create floating-ip ...


#!bash
nova floating-ip-delete <address>

os delete floating-ip


#!bash
nova floating-ip-list

os list floating-ip


#!bash
nova remove-floating-ip <server> <address>

os remove floating-ip ...


floating-ip-pool

#!bash
nova floating-ip-pool-list

os list floating-ip-pool


host

#!bash
nova host-action [--action <action>] <hostname>

os ?? host ...


#!bash
nova host-update [--status <status>] 
                 [--maintenance <maintenance_mode>]
                 <hostname>

os set host ...


image

#!bash
nova image-create [--poll] <server> <name>

os create image ...


#!bash
nova image-delete <image>

os delete image ...


#!bash
nova image-list

os list image


#!bash
nova image-meta <image> <action> <key=value> [<key=value> ...]

os set image ...


#!bash
nova image-show <image>

os show image ...


keypair

#!bash
nova keypair-add [--pub_key <pub_key>] <name>

os create keypair ...


#!bash
nova keypair-delete <name>

os delete keypair


#!bash
nova keypair-list

os list keypair


limits

#!bash
nova absolute-limits

os show limits --absolute
## is there any other kind?


quota

#!bash
nova quota-defaults <tenant_id>
nova quota-show <tenant_id>

os show quota <tenant> [--defaults]


#!bash
nova quota-update [--instances <instances>] 
                  [--cores <cores>]
                  [--ram <ram>] 
                  [--volumes <volumes>]
                  [--gigabytes <gigabytes>]
                  [--floating-ips <floating_ips>]
                  [--metadata-items <metadata_items>]
                  [--injected-files <injected_files>]
                  [--injected-file-content-bytes <injected_file_content_bytes>]
                  <tenant_id>

os set quota ...


quota-class

#!bash
nova quota-class-show <class>

os show quota-class ...


#!bash
nova quota-class-update [--instances <instances>] 
                        [--cores <cores>]
                        [--ram <ram>] 
                        [--volumes <volumes>]
                        [--gigabytes <gigabytes>]
                        [--floating-ips <floating_ips>]
                        [--metadata-items <metadata_items>]
                        [--injected-files <injected_files>]
                        [--injected-file-content-bytes <injected_file_content_bytes>]
                        <class>

os set quota-class ...


rate-limits

#!bash
nova rate-limits

os show rate-limits


resource

#!bash
nova describe-resource <hostname>

os show resource ...


secgroup

#!bash
nova secgroup-create <name> <description>

os create secgroup ...


#!bash
nova secgroup-delete <secgroup>

os delete secgroup ...


#!bash
nova secgroup-list

os list secgroup


secgroup-group-rule

#!bash
nova secgroup-add-group-rule [--ip_proto <ip_proto>]
                             [--from_port <from_port>]
                             [--to_port <to_port>]
                             <secgroup> <source_group>

os create secgroup-group-rule


#!bash
nova secgroup-delete-group-rule [--ip_proto <ip_proto>]
                                [--from_port <from_port>]
                                [--to_port <to_port>]
                                <secgroup> <source_group>

os delete secgroup-group-rule ...


secgroup-rule

#!bash
nova secgroup-add-rule <secgroup> <ip_proto> <from_port> <to_port> <cidr>

os create secgroup-rule


#!bash
nova secgroup-delete-rule <secgroup> <ip_proto> <from_port> <to_port> <cidr>

os delete secgroup-rule


#!bash
nova secgroup-list-rules <secgroup>

os list secgroup-rule ...


server

#!bash
nova boot [--flavor <flavor>] 
          [--image <image>] 
          [--meta <key=value>]
          [--file <dst-path=src-path>] 
          [--key_name <key_name>]
          [--user_data <user-data>]
          [--availability_zone <availability-zone>]
          [--security_groups <security_groups>]
          [--block_device_mapping <dev_name=mapping>]
          [--hint <key=value>]
          [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr>]
          [--config-drive <value>] 
          [--poll]
          <name>

os create server ...


#!bash
nova delete <server>

os delete server ...


#!bash
nova list [--reservation_id <reservation_id>] 
          [--ip <ip_regexp>]
          [--ip6 <ip6_regexp>] 
          [--name <name_regexp>]
          [--instance_name <name_regexp>] 
          [--status <status>]
          [--flavor <flavor>] [--image <image>] 
          [--host <hostname>]
          [--all_tenants [<0|1>]]

os list server ...


#!bash
nova lock <server>

os lock server ...


#!bash
nova live-migration [--block_migrate] 
                    [--disk_over_commit]
                    <server> <host>
nova migrate [--poll] <server>

os migrate server [--live] ...


#!bash
nova pause <server>

os pause server ...


#!bash
nova reboot [--hard] [--poll] <server>

os reboot server ...


#!bash
nova rebuild [--rebuild_password <rebuild_password>] 
             [--poll]
             <server> <image>

os rebuild server ...


#!bash
nova rename <server> <name>

os rename server ...


#!bash
nova rescue <server>

os rescue server ...


#!bash
nova resize [--poll] <server> <flavor>

os resize server ...


#!bash
nova resize-confirm <server>

os resize server ... [--confirm]


#!bash
nova resume <server>

os resume server ...


#!bash
nova resize-revert <server>

os resize server ... [--revert]


#!bash
nova meta <server> <action> <key=value> [<key=value> ...]

os set server ...


#!bash
nova root-password <server>

os set server --root-password <server>


#!bash
nova show <server>

os show server ...


#!bash
nova ssh [--port PORT] [--private] [--ipv6] [--login <login>] <server>

os ssh server ...


#!bash
nova suspend <server>

os suspend server ...


#!bash
nova unlock <server>

os unlock server ...


#!bash
nova unpause <server>

os unpause server ...


#!bash
nova unrescue <server>

os unrescue server ...


usage

#!bash
nova usage-list [--start <start>] [--end <end>]

os list usage ...


volume

#!bash
nova volume-attach <server> <volume> <device>

os attach volume ...


#!bash
nova volume-create [--snapshot_id <snapshot_id>]
                   [--display_name <display_name>]
                   [--display_description <display_description>]
                   [--volume_type <volume_type>]
                   <size>

os create volume ...


#!bash
nova volume-delete <volume>

os delete volume ...


#!bash
nova volume-detach <server> <volume>

os detach volume ...


#!bash
nova nova volume-list

os list volume


#!bash
nova volume-show <volume>

os show volume ...


volume-snapshot

#!bash
nova volume-snapshot-create [--force <True|False>]
                            [--display_name <display_name>]
                            [--display_description <display_description>]
                            <volume_id>

os create volume-snapshot ...


#!bash
nova volume-snapshot-delete <snapshot_id>

os delete volume-snapshot ...


#!bash
nova volume-snapshot-list

os list volume-snapshot


#!bash
nova volume-snapshot-show <snapshot>

os show volume-snapshot


volume-type

#!bash
nova volume-type-create <name>

os create volume-type ...


#!bash
nova volume-type-delete <id>

os delete volume-type ...


#!bash
nova volume-type-list

os list volume-type


x509-cert

#!bash
nova x509-create-cert [<private_key_file>] [<x509_cert>]

os create x509-cert ...


x509-root-cert

#!bash
nova x509-get-root-cert [<filename>]

os show x509-root-cert ...


Glance (new)

  • Verbs:
    • glance: create, delete, list, show
    • os: create, delete, list, show
  • Objects:
    • glance: image, member, members
    • os: image, member

glance

#!csv ,
Command-line Option,Environment Variable
  --os-username <auth-user-name>,                     OS_USERNAME
  --os-password <auth-password>,                      OS_PASSWORD
  --os-tenant-id <tenant-id>,                         OS_TENANT_ID
  --os-auth-url <auth-url>,                           OS_AUTH_URL
  --os-region-name <region-name>,                     OS_REGION_NAME
  --os-auth-token <auth-token>,                            OS_AUTH_TOKEN
  --os-image-url <image-service-endpoint>,                      OS_IMAGE_URL

  --os-tenant-name <tenant-name>,                         OS_TENANT_NAME
  --os-image-api-version <image-api-version>,   OS_IMAGE_API_VERSION


image

#!bash
glance image-create [--id <IMAGE_ID>] [--name <NAME>]
                                  [--disk-format <CONTAINER_FORMAT>]
                                  [--container-format <DISK_FORMAT>]
                                  [--owner <TENANT_ID>] [--size <SIZE>]
                                  [--min-disk <DISK_GB>] [--min-ram <DISK_RAM>]
                                  [--location <IMAGE_URL>] [--checksum <CHECKSUM>]
                                  [--copy-from <IMAGE_URL>] [--public] [--protected]
                                  [--property <key=value>]

os create image ...


#!bash
glance image-delete <IMAGE_ID>

os delete image ...


#!bash
glance image-list

os list image ...


#!bash
glance image-show <IMAGE_ID>

os show image ...


#!bash
glance member-images [options] <MEMBER>

os list image --member <member> [options]


#!bash
glance show [options] <ID>

os show image ...


#!bash
glance update [options] <ID> <field1=value1 field2=value2 ...>

os set image ...


image-member

#!bash
glance member-create [--can-share] <IMAGE_ID> <TENANT_ID>

os create image-member ...


#!bash
glance member-delete <IMAGE_ID> <TENANT_ID>

os list image-member <image> [options]


#!bash
glance member-delete [options] <ID> <MEMBER>

os delete image-member ...


#!bash
glance member-list [--image-id <IMAGE_ID>] [--tenant-id <TENANT_ID>]

os list image-member ...


Glance (old)

  • Verbs:
    • glance: add, clear, delete, details, index, replace, show, update
    • os: create, delete, list, set, show
  • Objects:
    • glance: image, member, members
    • os: image, image-member

glance (old)

#!bash
  --version
  --silent-upload
  -v, --verbose
  -d, --debug
  -H ADDRESS, --host=ADDRESS
  -p PORT, --port=PORT
  --ssl
  -U URL, --url=URL
  -k, --insecure
  -A TOKEN, --os_auth_token=TOKEN
  -I USER, --os_username=USER
  -K PASSWORD, --os_password=PASSWORD
  -R REGION, --os_region_name=REGION
  -T TENANT, --os_tenant_name=TENANT
  -N AUTH_URL, --os_auth_url=AUTH_URL
  -S STRATEGY, --os_auth_strategy=STRATEGY
  --limit=LIMIT
  --marker=MARKER
  --sort_key=KEY
  --sort_dir=[desc|asc]
  -f, --force
  --dry-run
  --can-share


image

#!bash
glance add [options] <field1=value1 field2=value2 ...> [ < /path/to/image ]

os create image ...


#!bash
glance clear [options]

os delete image ... [--all]


#!bash
glance delete [options] <ID>

os delete image ...


#!bash
glance index [options] <field1=value1 field2=value2 ...>

os list image ...


#!bash
glance details [options]

os list image --details


#!bash
glance member-images [options] <MEMBER>

os list image --member <member> [options]


#!bash
glance show [options] <ID>

os show image ...


#!bash
glance update [options] <ID> <field1=value1 field2=value2 ...>

os set image ...


image-member

#!bash
glance member-add [options] <ID> <MEMBER>

os create image-member ...


#!bash
glance members-replace [options] <ID> <MEMBER>

os create image-member ... [--clear]


#!bash
glance member-delete [options] <ID> <MEMBER>

os delete image-member ...


#!bash
glance image-members [options] <ID>

os list image-member <image> [options]


Quantum

  • Verbs:
    • quantum: create, delete, list, plug, show, update, unplug
    • os: add, create, delete, list, remove, set, show
  • Objects:
    • quantum: iface, net, port
    • os: interface, network, port

quantum

#!csv ,
Command-line Option,Environment Variable
-H HOST|--host=HOST
-p PORT|--port=PORT
-s|--ssl
-v|--verbose
-f LOGFILE|--logfile=LOGFILE
-t TOKEN|--token=TOKEN
--version=VERSION,QUANTUM_VERSION


iface

#!bash
plug_iface <tenant-id> <net-id> <port-id> <iface-id>

add interface <tenant> <network> <port> <interface>


#!bash
show_iface <tenant-id> <net-id> <port-id>

show interface <tenant> <network> <port>


#!bash
unplug_iface <tenant-id> <net-id> <port-id>

remove interface <tenant> <network> <port>


net

#!bash
create_net <tenant-id> <net-name>

create network <tenant> <network-name>


#!bash
delete_net <tenant-id> <net-id>

delete <tenant> <network>


#!bash
list_nets <tenant-id>

list network <tenant>


#!bash
list_nets_detail <tenant-id>

list network --detail <tenant>


#!bash
show_net <tenant-id> <net-id>

show network <tenant> <network>


#!bash
show_net_detail <tenant-id> <net-id>

show network --detail <tenant> <network>


#!bash
update_net <tenant-id> <net-id> <new-name>

set network <tenant> <network> --name <name>


port

#!bash
create_port <tenant-id> <net-id>

create port <tenant> <network>


#!bash
delete_port <tenant-id> <net-id> <port-id>

delete port <tenant> <network> <port>


#!bash
list_ports <tenant-id> <net-id>

list port <tenant> <network>


#!bash
list_ports_detail <tenant-id> <net-id>

list port --detail <tenant> <network>


#!bash
show_port <tenant-id> <net-id> <port-id>

show port <tenant> <network> <port>


#!bash
show_port_detail <tenant-id> <net-id> <port-id>

show port --detail <tenant> <network> <port>


#!bash
update_port <tenant-id> <net-id> <port-id> <params>

set port <tenant> <network> <port> <params>


Verbs

Describe the kinds of actions each verb performs. The opposite action is noted in parens if applicable.

  • add (remove) - add an object to a group of zero or more other objects
  • attach (detach) - connect two objects (is this different from add/remove?)
  • boot
  • clear
  • create (delete) - create a new occurrance of the specified object
  • delete (create) - delete a specific occurrance of the specified object
  • detach (attach) - disconnect two objects (is this different from add/remove?)
  • get
  • index
  • list - display summary information about multiple objects
  • lock (unlock)
  • migrate - move a server to a different host; --live performs a live migration if possible
  • pause (unpause)
  • reboot - forcibly reboot a server
  • rebuild - rebuild a server using (most of) the same arguments as in the original create
  • remove (add) - remove an object from a group of objects
  • rename - change the name of the specified object
  • replace
  • rescue (unrescue) - reboot a server in a special rescue mode allowing access to the original disks
  • resize - change a server's flavor
  • resume (suspend)
  • set - set an attribute of the object, often called metadata
  • show - display detailed information about the specifiec object
  • ssh
  • suspend (resume)
  • update
  • unlock (lock)
  • unpause (pause)
  • unrescue (rescue) - return a server to normal boot mode
  • update - not sure how this is different from set?

Options

In general, options will be transformed into more UNIX-like usage

  • --enable true|false becomes --enable|--disable

(dhellmann) Not all boolean options have natural antonyms like enable/disable. It may be more consistent to use a --flag --no-flag style naming convention to indicate the opposites of flags.