diff options
-rw-r--r-- | README.rst | 62 | ||||
-rw-r--r-- | docs/shell.rst | 20 | ||||
-rw-r--r-- | novaclient/shell.py | 104 |
3 files changed, 109 insertions, 77 deletions
@@ -39,37 +39,39 @@ Command-line API Installing this package gets you a shell command, ``nova``, that you can use to interact with any Rackspace compatible API (including OpenStack). -You'll need to provide your OpenStack username and API key. You can do this -with the ``--username``, ``--password`` and ``--projectid`` params, but it's -easier to just set them as environment variables:: +You'll need to provide your OpenStack username and password. You can do this +with the ``--os_username``, ``--os_password`` and ``--os_tenant_name`` +params, but it's easier to just set them as environment variables:: - export NOVA_USERNAME=openstack - export NOVA_PASSWORD=yadayada - export NOVA_PROJECT_ID=myproject + export OS_USERNAME=openstack + export OS_PASSWORD=yadayada + export OS_TENANT_NAME=myproject -You will also need to define the authentication url with ``--url`` and the -version of the API with ``--version``. Or set them as an environment +You will also need to define the authentication url with ``--os_auth_url`` +and the version of the API with ``--version``. Or set them as an environment variables as well:: - export NOVA_URL=http://example.com:8774/v1.1/ + export OS_AUTH_URL=http://example.com:8774/v1.1/ export NOVA_VERSION=1.1 If you are using Keystone, you need to set the NOVA_URL to the keystone endpoint:: - export NOVA_URL=http://example.com:5000/v2.0/ + export OS_AUTH_URL=http://example.com:5000/v2.0/ Since Keystone can return multiple regions in the Service Catalog, you -can specify the one you want with ``--region_name`` (or -``export NOVA_REGION_NAME``). It defaults to the first in the list returned. +can specify the one you want with ``--os_region_name`` (or +``export OS_REGION_NAME``). It defaults to the first in the list returned. You'll find complete documentation on the shell by running ``nova help``:: - usage: nova [--username USERNAME] [--password PASSWORD] [--projectid PROJECTID] - [--url URL] [--version VERSION] [--region_name NAME] - [--endpoint_name NAME] - <subcommand> ... + usage: nova [--debug] [--os_username OS_USERNAME] [--os_password OS_PASSWORD] + [--os_tenant_name OS_TENANT_NAME] [--os_auth_url OS_AUTH_URL] + [--os_region_name OS_REGION_NAME] [--service_type SERVICE_TYPE] + [--service_name SERVICE_NAME] [--endpoint_type ENDPOINT_TYPE] + [--version VERSION] + <subcommand> ... Command-line interface to the OpenStack Nova API. @@ -171,18 +173,26 @@ You'll find complete documentation on the shell by running x509-create-cert Create x509 cert for a user in tenant x509-get-root-cert Fetches the x509 root cert. - Optional arguments: - --username USERNAME Defaults to env[NOVA_USERNAME]. - --password PASSWORD Defaults to env[NOVA_PASSWORD]. - --projectid PROJECTID Defaults to env[NOVA_PROJECT_ID]. - --url AUTH_URL Defaults to env[NOVA_URL] or - https://auth.api.rackspacecloud.com/v1.0 - if undefined. + --debug Print debugging output + --os_username OS_USERNAME + Defaults to env[OS_USERNAME]. + --os_password OS_PASSWORD + Defaults to env[OS_PASSWORD]. + --os_tenant_name OS_TENANT_NAME + Defaults to env[OS_TENANT_NAME]. + --os_auth_url OS_AUTH_URL + Defaults to env[OS_AUTH_URL]. + --os_region_name OS_REGION_NAME + Defaults to env[OS_REGION_NAME]. + --service_type SERVICE_TYPE + Defaults to compute for most actions + --service_name SERVICE_NAME + Defaults to env[NOVA_SERVICE_NAME] + --endpoint_type ENDPOINT_TYPE + Defaults to env[NOVA_ENDPOINT_TYPE] or publicURL. --version VERSION Accepts 1.1, defaults to env[NOVA_VERSION]. - --region_name NAME The region name in the Keystone Service Catalog - to use after authentication. Defaults to first - in the list returned. + See "nova help COMMAND" for help on a specific command. diff --git a/docs/shell.rst b/docs/shell.rst index 896f81db..54e9667b 100644 --- a/docs/shell.rst +++ b/docs/shell.rst @@ -11,23 +11,23 @@ First, you'll need an OpenStack Nova account and an API key. You get this by using the `nova-manage` command in OpenStack Nova. You'll need to provide :program:`nova` with your OpenStack username and -API key. You can do this with the :option:`--username`, :option:`--password` -and :option:`--projectid` options, but it's easier to just set them as +API key. You can do this with the :option:`--os_username`, :option:`--os_password` +and :option:`--os_tenant_id` options, but it's easier to just set them as environment variables by setting two environment variables: -.. envvar:: NOVA_USERNAME +.. envvar:: OS_USERNAME Your OpenStack Nova username. -.. envvar:: NOVA_PASSWORD +.. envvar:: OS_PASSWORD Your password. -.. envvar:: NOVA_PROJECT_ID +.. envvar:: OS_TENANT_NAME Project for work. -.. envvar:: NOVA_URL +.. envvar:: OS_AUTH_URL The OpenStack API server URL. @@ -37,10 +37,10 @@ environment variables by setting two environment variables: For example, in Bash you'd use:: - export NOVA_USERNAME=yourname - export NOVA_PASSWORD=yadayadayada - export NOVA_PROJECT_ID=myproject - export NOVA_URL=http://... + export OS_USERNAME=yourname + export OS_PASSWORD=yadayadayada + export OS_TENANT_NAME=myproject + export OS_AUTH_URL=http://... export NOVA_VERSION=1.1 From there, all shell commands take the form:: diff --git a/novaclient/shell.py b/novaclient/shell.py index 8a6b45a5..13e67c9b 100644 --- a/novaclient/shell.py +++ b/novaclient/shell.py @@ -83,23 +83,23 @@ class OpenStackComputeShell(object): action='store_true', help="Print debugging output") - parser.add_argument('--username', + parser.add_argument('--os_username', default=utils.env('OS_USERNAME', 'NOVA_USERNAME'), help='Defaults to env[OS_USERNAME].') - parser.add_argument('--password', + parser.add_argument('--os_password', default=utils.env('OS_PASSWORD', 'NOVA_PASSWORD'), help='Defaults to env[OS_PASSWORD].') - parser.add_argument('--tenant_name', + parser.add_argument('--os_tenant_name', default=utils.env('OS_TENANT_NAME', 'NOVA_PROJECT_ID'), help='Defaults to env[OS_TENANT_NAME].') - parser.add_argument('--auth_url', + parser.add_argument('--os_auth_url', default=utils.env('OS_AUTH_URL', 'NOVA_URL'), help='Defaults to env[OS_AUTH_URL].') - parser.add_argument('--region_name', + parser.add_argument('--os_region_name', default=utils.env('OS_REGION_NAME', 'NOVA_REGION_NAME'), help='Defaults to env[OS_REGION_NAME].') @@ -125,20 +125,31 @@ class OpenStackComputeShell(object): action='store_true', help=argparse.SUPPRESS) - # alias for --password, left in for backwards compatibility - parser.add_argument('--apikey', + # FIXME(dtroyer): The args below are here for diablo compatibility, + # remove them in folsum cycle + + # alias for --os_username, left in for backwards compatibility + parser.add_argument('--username', + help='Deprecated') + + # alias for --os_region_name, left in for backwards compatibility + parser.add_argument('--region_name', + help='Deprecated') + + # alias for --os_password, left in for backwards compatibility + parser.add_argument('--apikey', '--password', dest='apikey', default=utils.env('NOVA_API_KEY'), - help=argparse.SUPPRESS) + help='Deprecated') - # alias for --tenant_name, left in for backward compatibility - parser.add_argument('--projectid', + # alias for --os_tenant_name, left in for backward compatibility + parser.add_argument('--projectid', '--tenant_name', dest='projectid', default=utils.env('NOVA_PROJECT_ID'), - help=argparse.SUPPRESS) + help='Deprecated') - # alias for --auth_url, left in for backward compatibility - parser.add_argument('--url', + # alias for --os_auth_url, left in for backward compatibility + parser.add_argument('--url', '--auth_url', dest='url', default=utils.env('NOVA_URL'), - help=argparse.SUPPRESS) + help='Deprecated') return parser @@ -270,13 +281,16 @@ class OpenStackComputeShell(object): self.do_bash_completion(args) return 0 - (user, apikey, password, projectid, tenant_name, url, auth_url, - region_name, endpoint_type, insecure, service_type, - service_name) = ( - args.username, args.apikey, args.password, - args.projectid, args.tenant_name, args.url, - args.auth_url, args.region_name, args.endpoint_type, - args.insecure, args.service_type, args.service_name) + (os_username, os_password, os_tenant_name, os_auth_url, + os_region_name, endpoint_type, + insecure, service_type, service_name, + username, apikey, projectid, url, region_name) = ( + args.os_username, args.os_password, + args.os_tenant_name, args.os_auth_url, + args.os_region_name, args.endpoint_type, + args.insecure, args.service_type, args.service_name, + args.username, args.apikey, args.projectid, + args.url, args.region_name) if not endpoint_type: endpoint_type = DEFAULT_NOVA_ENDPOINT_TYPE @@ -286,46 +300,54 @@ class OpenStackComputeShell(object): service_type = utils.get_service_type(args.func) or service_type #FIXME(usrleon): Here should be restrict for project id same as - # for username or password but for compatibility it is not. + # for os_username or os_password but for compatibility it is not. if not utils.isunauthenticated(args.func): - if not user: - raise exc.CommandError("You must provide a username " - "via either --username or env[OS_USERNAME]") + if not os_username: + if not username: + raise exc.CommandError("You must provide a username " + "via either --os_username or env[OS_USERNAME]") + else: + os_username = username - if not password: + if not os_password: if not apikey: raise exc.CommandError("You must provide a password " - "via either --password or via env[OS_PASSWORD]") + "via either --os_password or via " + "env[OS_PASSWORD]") else: - password = apikey + os_password = apikey - if not tenant_name: + if not os_tenant_name: if not projectid: raise exc.CommandError("You must provide a tenant name " - "via either --tenant_name or env[OS_TENANT_NAME]") + "via either --os_tenant_name or " + "env[OS_TENANT_NAME]") else: - tenant_name = projectid + os_tenant_name = projectid - if not auth_url: + if not os_auth_url: if not url: raise exc.CommandError("You must provide an auth url " - "via either --auth_url or env[OS_AUTH_URL]") + "via either --os_auth_url or env[OS_AUTH_URL]") else: - auth_url = url + os_auth_url = url + + if not os_region_name and region_name: + os_region_name = region_name if options.version and options.version != '1.0': - if not tenant_name: + if not os_tenant_name: raise exc.CommandError("You must provide a tenant name " - "via either --tenant_name or env[OS_TENANT_NAME]") + "via either --os_tenant_name or env[OS_TENANT_NAME]") - if not auth_url: + if not os_auth_url: raise exc.CommandError("You must provide an auth url " - "via either --auth_url or env[OS_AUTH_URL]") + "via either --os_auth_url or env[OS_AUTH_URL]") - self.cs = client.Client(options.version, user, password, - tenant_name, auth_url, insecure, - region_name=region_name, + self.cs = client.Client(options.version, os_username, os_password, + os_tenant_name, os_auth_url, insecure, + region_name=os_region_name, endpoint_type=endpoint_type, extensions=self.extensions, service_type=service_type, |