Hi Steve, I am not sure what --help would give you (at my side it just prints the help without attempting execution of any of the commands), did you mean --debug? Here is what --debug provides: DEBUG: cliff.commandmanager found command 'hypervisor_stats_show' DEBUG: cliff.commandmanager found command 'security_group_create' DEBUG: cliff.commandmanager found command 'security_group_rule_list' DEBUG: cliff.commandmanager found command 'keypair_list' DEBUG: cliff.commandmanager found command 'keypair_delete' DEBUG: cliff.commandmanager found command 'host_list' DEBUG: cliff.commandmanager found command 'keypair_create' DEBUG: cliff.commandmanager found command 'server_pause' DEBUG: cliff.commandmanager found command 'server_reboot' DEBUG: cliff.commandmanager found command 'server_migrate' DEBUG: cliff.commandmanager found command 'server_set' DEBUG: cliff.commandmanager found command 'host_show' DEBUG: cliff.commandmanager found command 'server_unrescue' DEBUG: cliff.commandmanager found command 'usage_list' DEBUG: cliff.commandmanager found command 'server_add_volume' DEBUG: cliff.commandmanager found command 'server_unlock' DEBUG: cliff.commandmanager found command 'security_group_set' DEBUG: cliff.commandmanager found command 'compute_agent_create' DEBUG: cliff.commandmanager found command 'server_rescue' DEBUG: cliff.commandmanager found command 'server_add_security_group' DEBUG: cliff.commandmanager found command 'console_log_show' DEBUG: cliff.commandmanager found command 'compute_agent_delete' DEBUG: cliff.commandmanager found command 'server_ssh' DEBUG: cliff.commandmanager found command 'server_lock' DEBUG: cliff.commandmanager found command 'server_unset' DEBUG: cliff.commandmanager found command 'server_show' DEBUG: cliff.commandmanager found command 'server_suspend' DEBUG: cliff.commandmanager found command 'keypair_show' DEBUG: cliff.commandmanager found command 'server_image_create' DEBUG: cliff.commandmanager found command 'flavor_list' DEBUG: cliff.commandmanager found command 'server_remove_volume' DEBUG: cliff.commandmanager found command 'security_group_delete' DEBUG: cliff.commandmanager found command 'aggregate_add_host' DEBUG: cliff.commandmanager found command 'aggregate_remove_host' DEBUG: cliff.commandmanager found command 'server_remove_security_group' DEBUG: cliff.commandmanager found command 'ip_floating_remove' DEBUG: cliff.commandmanager found command 'aggregate_create' DEBUG: cliff.commandmanager found command 'hypervisor_show' DEBUG: cliff.commandmanager found command 'ip_floating_list' DEBUG: cliff.commandmanager found command 'aggregate_delete' DEBUG: cliff.commandmanager found command 'usage_show' DEBUG: cliff.commandmanager found command 'security_group_rule_create' DEBUG: cliff.commandmanager found command 'compute_agent_set' DEBUG: cliff.commandmanager found command 'server_rebuild' DEBUG: cliff.commandmanager found command 'flavor_delete' DEBUG: cliff.commandmanager found command 'server_delete' DEBUG: cliff.commandmanager found command 'server_resume' DEBUG: cliff.commandmanager found command 'availability_zone_list' DEBUG: cliff.commandmanager found command 'hypervisor_list' DEBUG: cliff.commandmanager found command 'flavor_create' DEBUG: cliff.commandmanager found command 'console_url_show' DEBUG: cliff.commandmanager found command 'ip_fixed_add' DEBUG: cliff.commandmanager found command 'server_create' DEBUG: cliff.commandmanager found command 'aggregate_show' DEBUG: cliff.commandmanager found command 'compute_agent_list' DEBUG: cliff.commandmanager found command 'flavor_show' DEBUG: cliff.commandmanager found command 'ip_fixed_remove' DEBUG: cliff.commandmanager found command 'ip_floating_create' DEBUG: cliff.commandmanager found command 'server_list' DEBUG: cliff.commandmanager found command 'ip_floating_pool_list' DEBUG: cliff.commandmanager found command 'ip_floating_add' DEBUG: cliff.commandmanager found command 'security_group_show' DEBUG: cliff.commandmanager found command 'server_resize' DEBUG: cliff.commandmanager found command 'ip_floating_delete' DEBUG: cliff.commandmanager found command 'compute_service_set' DEBUG: cliff.commandmanager found command 'security_group_list' DEBUG: cliff.commandmanager found command 'project_usage_list' DEBUG: cliff.commandmanager found command 'aggregate_set' DEBUG: cliff.commandmanager found command 'aggregate_list' DEBUG: cliff.commandmanager found command 'server_unpause' DEBUG: cliff.commandmanager found command 'compute_service_list' DEBUG: cliff.commandmanager found command 'security_group_rule_delete' DEBUG: openstackclient.shell compute API version 2, cmd group openstack.compute.v2 DEBUG: cliff.commandmanager found command 'network_set' DEBUG: cliff.commandmanager found command 'network_show' DEBUG: cliff.commandmanager found command 'network_list' DEBUG: cliff.commandmanager found command 'network_delete' DEBUG: cliff.commandmanager found command 'network_create' DEBUG: openstackclient.shell network API version 2, cmd group openstack.network.v2 DEBUG: cliff.commandmanager found command 'image_set' DEBUG: cliff.commandmanager found command 'image_delete' DEBUG: cliff.commandmanager found command 'image_create' DEBUG: cliff.commandmanager found command 'image_list' DEBUG: cliff.commandmanager found command 'image_show' DEBUG: cliff.commandmanager found command 'image_save' DEBUG: openstackclient.shell image API version 1, cmd group openstack.image.v1 DEBUG: cliff.commandmanager found command 'snapshot_show' DEBUG: cliff.commandmanager found command 'backup_create' DEBUG: cliff.commandmanager found command 'volume_list' DEBUG: cliff.commandmanager found command 'snapshot_delete' DEBUG: cliff.commandmanager found command 'volume_show' DEBUG: cliff.commandmanager found command 'snapshot_unset' DEBUG: cliff.commandmanager found command 'volume_set' DEBUG: cliff.commandmanager found command 'backup_delete' DEBUG: cliff.commandmanager found command 'volume_create' DEBUG: cliff.commandmanager found command 'volume_type_list' DEBUG: cliff.commandmanager found command 'volume_type_create' DEBUG: cliff.commandmanager found command 'backup_restore' DEBUG: cliff.commandmanager found command 'snapshot_list' DEBUG: cliff.commandmanager found command 'volume_unset' DEBUG: cliff.commandmanager found command 'backup_show' DEBUG: cliff.commandmanager found command 'volume_type_delete' DEBUG: cliff.commandmanager found command 'volume_type_set' DEBUG: cliff.commandmanager found command 'snapshot_set' DEBUG: cliff.commandmanager found command 'backup_list' DEBUG: cliff.commandmanager found command 'volume_delete' DEBUG: cliff.commandmanager found command 'snapshot_create' DEBUG: cliff.commandmanager found command 'volume_type_unset' DEBUG: openstackclient.shell volume API version 1, cmd group openstack.volume.v1 DEBUG: cliff.commandmanager found command 'project_show' DEBUG: cliff.commandmanager found command 'role_show' DEBUG: cliff.commandmanager found command 'domain_delete' DEBUG: cliff.commandmanager found command 'request_token_create' DEBUG: cliff.commandmanager found command 'consumer_create' DEBUG: cliff.commandmanager found command 'role_list' DEBUG: cliff.commandmanager found command 'endpoint_set' DEBUG: cliff.commandmanager found command 'group_create' DEBUG: cliff.commandmanager found command 'role_set' DEBUG: cliff.commandmanager found command 'user_password_set' DEBUG: cliff.commandmanager found command 'service_delete' DEBUG: cliff.commandmanager found command 'consumer_list' DEBUG: cliff.commandmanager found command 'domain_show' DEBUG: cliff.commandmanager found command 'user_delete' DEBUG: cliff.commandmanager found command 'identity_provider_delete' DEBUG: cliff.commandmanager found command 'role_remove' DEBUG: cliff.commandmanager found command 'role_assignment_list' DEBUG: cliff.commandmanager found command 'role_create' DEBUG: cliff.commandmanager found command 'request_token_authorize' DEBUG: cliff.commandmanager found command 'region_delete' DEBUG: cliff.commandmanager found command 'project_list' DEBUG: cliff.commandmanager found command 'role_add' DEBUG: cliff.commandmanager found command 'identity_provider_show' DEBUG: cliff.commandmanager found command 'consumer_show' DEBUG: cliff.commandmanager found command 'group_list' DEBUG: cliff.commandmanager found command 'catalog_show' DEBUG: cliff.commandmanager found command 'identity_provider_set' DEBUG: cliff.commandmanager found command 'mapping_show' DEBUG: cliff.commandmanager found command 'policy_create' DEBUG: cliff.commandmanager found command 'group_show' DEBUG: cliff.commandmanager found command 'federation_project_list' DEBUG: cliff.commandmanager found command 'endpoint_show' DEBUG: cliff.commandmanager found command 'credential_set' DEBUG: cliff.commandmanager found command 'token_issue' DEBUG: cliff.commandmanager found command 'access_token_create' DEBUG: cliff.commandmanager found command 'identity_provider_create' DEBUG: cliff.commandmanager found command 'identity_provider_list' DEBUG: cliff.commandmanager found command 'policy_delete' DEBUG: cliff.commandmanager found command 'credential_show' DEBUG: cliff.commandmanager found command 'mapping_set' DEBUG: cliff.commandmanager found command 'mapping_create' DEBUG: cliff.commandmanager found command 'mapping_list' DEBUG: cliff.commandmanager found command 'user_show' DEBUG: cliff.commandmanager found command 'group_set' DEBUG: cliff.commandmanager found command 'trust_delete' DEBUG: cliff.commandmanager found command 'federation_protocol_show' DEBUG: cliff.commandmanager found command 'user_set' DEBUG: cliff.commandmanager found command 'policy_list' DEBUG: cliff.commandmanager found command 'federation_protocol_delete' DEBUG: cliff.commandmanager found command 'credential_create' DEBUG: cliff.commandmanager found command 'domain_set' DEBUG: cliff.commandmanager found command 'service_create' DEBUG: cliff.commandmanager found command 'consumer_set' DEBUG: cliff.commandmanager found command 'trust_list' DEBUG: cliff.commandmanager found command 'policy_show' DEBUG: cliff.commandmanager found command 'domain_create' DEBUG: cliff.commandmanager found command 'federation_protocol_list' DEBUG: cliff.commandmanager found command 'region_show' DEBUG: cliff.commandmanager found command 'federation_protocol_set' DEBUG: cliff.commandmanager found command 'catalog_list' DEBUG: cliff.commandmanager found command 'group_delete' DEBUG: cliff.commandmanager found command 'trust_show' DEBUG: cliff.commandmanager found command 'endpoint_list' DEBUG: cliff.commandmanager found command 'federation_domain_list' DEBUG: cliff.commandmanager found command 'credential_list' DEBUG: cliff.commandmanager found command 'group_contains_user' DEBUG: cliff.commandmanager found command 'project_create' DEBUG: cliff.commandmanager found command 'region_list' DEBUG: cliff.commandmanager found command 'service_list' DEBUG: cliff.commandmanager found command 'group_add_user' DEBUG: cliff.commandmanager found command 'domain_list' DEBUG: cliff.commandmanager found command 'endpoint_delete' DEBUG: cliff.commandmanager found command 'project_set' DEBUG: cliff.commandmanager found command 'policy_set' DEBUG: cliff.commandmanager found command 'service_show' DEBUG: cliff.commandmanager found command 'group_remove_user' DEBUG: cliff.commandmanager found command 'federation_protocol_create' DEBUG: cliff.commandmanager found command 'project_delete' DEBUG: cliff.commandmanager found command 'trust_create' DEBUG: cliff.commandmanager found command 'credential_delete' DEBUG: cliff.commandmanager found command 'user_create' DEBUG: cliff.commandmanager found command 'mapping_delete' DEBUG: cliff.commandmanager found command 'consumer_delete' DEBUG: cliff.commandmanager found command 'region_create' DEBUG: cliff.commandmanager found command 'role_delete' DEBUG: cliff.commandmanager found command 'service_set' DEBUG: cliff.commandmanager found command 'endpoint_create' DEBUG: cliff.commandmanager found command 'region_set' DEBUG: cliff.commandmanager found command 'user_list' DEBUG: openstackclient.shell identity API version 3, cmd group openstack.identity.v3 DEBUG: cliff.commandmanager found command 'object_create' DEBUG: cliff.commandmanager found command 'object_list' DEBUG: cliff.commandmanager found command 'object_delete' DEBUG: cliff.commandmanager found command 'container_list' DEBUG: cliff.commandmanager found command 'object_show' DEBUG: cliff.commandmanager found command 'container_delete' DEBUG: cliff.commandmanager found command 'container_create' DEBUG: cliff.commandmanager found command 'container_show' DEBUG: cliff.commandmanager found command 'container_save' DEBUG: cliff.commandmanager found command 'object_save' DEBUG: openstackclient.shell object_store API version 1, cmd group openstack.object_store.v1 DEBUG: cliff.commandmanager found command 'extension_list' DEBUG: cliff.commandmanager found command 'quota_set' DEBUG: cliff.commandmanager found command 'quota_show' DEBUG: cliff.commandmanager found command 'limits_show' INFO: openstackclient.shell command: -> openstackclient.compute.v2.server.ListServer DEBUG: openstackclient.api.auth Auth plugin v3token selected DEBUG: openstackclient.api.auth auth_type: v3token DEBUG: openstackclient.api.auth fetching option os_auth_url DEBUG: openstackclient.api.auth fetching option os_domain_id DEBUG: openstackclient.api.auth fetching option os_domain_name DEBUG: openstackclient.api.auth fetching option os_project_id DEBUG: openstackclient.api.auth fetching option os_project_name DEBUG: openstackclient.api.auth fetching option os_project_domain_id DEBUG: openstackclient.api.auth fetching option os_project_domain_name DEBUG: openstackclient.api.auth fetching option os_trust_id DEBUG: openstackclient.api.auth fetching option os_token INFO: openstackclient.common.clientmanager Using auth plugin: v3token DEBUG: openstackclient.common.clientmanager Get auth_ref Traceback (most recent call last): File "/usr/lib64/python2.7/logging/__init__.py", line 859, in emit msg = self.format(record) File "/usr/lib64/python2.7/logging/__init__.py", line 732, in format return fmt.format(record) File "/usr/lib64/python2.7/logging/__init__.py", line 471, in format record.message = record.getMessage() File "/usr/lib64/python2.7/logging/__init__.py", line 335, in getMessage msg = msg % self.args TypeError: not all arguments converted during string formatting Logged from file base.py, line 172 INFO: requests.packages.urllib3.connectionpool Starting new HTTPS connection (1): host DEBUG: requests.packages.urllib3.connectionpool "POST /v3/auth/tokens HTTP/1.1" 403 164 DEBUG: keystoneclient.session Request returned failure status: 403 for url https://host:5000/v3/auth/tokens DEBUG: openstackclient.compute.v2.server.ListServer take_action(Namespace(all_projects=False, columns=[], flavor=None, formatter='table', host=None, image=None, instance_name=None, ip=None, ip6=None, long=False, max_width=0, name=None, quote_mode='nonnumeric', reservation_id=None, status=None)) DEBUG: openstackclient.compute.client Instantiating compute client: DEBUG: openstackclient.compute.v2.server.ListServer search options: {'instance_name': None, 'status': None, 'host': None, 'ip6': None, 'name': None, 'ip': None, 'flavor': None, 'reservation_id': None, 'image': None, 'all_tenants': False} Traceback (most recent call last): File "/usr/lib64/python2.7/logging/__init__.py", line 859, in emit msg = self.format(record) File "/usr/lib64/python2.7/logging/__init__.py", line 732, in format return fmt.format(record) File "/usr/lib64/python2.7/logging/__init__.py", line 471, in format record.message = record.getMessage() File "/usr/lib64/python2.7/logging/__init__.py", line 335, in getMessage msg = msg % self.args TypeError: not all arguments converted during string formatting Logged from file base.py, line 172 DEBUG: requests.packages.urllib3.connectionpool "POST /v3/auth/tokens HTTP/1.1" 403 164 DEBUG: keystoneclient.session Request returned failure status: 403 for url https://host:5000/v3/auth/tokens ERROR: openstack You are not authorized to perform the requested action. (Disable debug mode to suppress these details.) (HTTP 403) (Request-ID: req-0fafaa6e-802e-460e-bdee-2edcf942d8f7) Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/cliff/app.py", line 303, in run_subcommand result = cmd.run(parsed_args) File "/usr/lib/python2.7/site-packages/cliff/display.py", line 91, in run column_names, data = self.take_action(parsed_args) File "/usr/lib/python2.7/site-packages/openstackclient/compute/v2/server.py", line 691, in take_action data = compute_client.servers.list(search_opts=search_opts) File "/usr/lib/python2.7/site-packages/novaclient/v2/servers.py", line 583, in list return self._list("/servers%s%s" % (detail, query_string), "servers") File "/usr/lib/python2.7/site-packages/novaclient/base.py", line 64, in _list _resp, body = self.api.client.get(url) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 170, in get return self.request(url, 'GET', **kwargs) File "/usr/lib/python2.7/site-packages/novaclient/client.py", line 90, in request **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 206, in request resp = super(LegacyJsonAdapter, self).request(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 95, in request return self.session.request(url, method, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/utils.py", line 318, in inner return func(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 315, in request auth_headers = self.get_auth_headers(auth) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 615, in get_auth_headers return auth.get_headers(self, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/base.py", line 114, in get_headers token = self.get_token(session) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/base.py", line 104, in get_token return self.get_access(session).auth_token File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/base.py", line 144, in get_access self.auth_ref = self.get_auth_ref(session) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/v3/base.py", line 174, in get_auth_ref authenticated=False, log=False, **rkwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 514, in post return self.request(url, 'POST', **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/utils.py", line 318, in inner return func(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 407, in request raise exceptions.from_response(resp, method, url) Forbidden: You are not authorized to perform the requested action. (Disable debug mode to suppress these details.) (HTTP 403) (Request-ID: req-0fafaa6e-802e-460e-bdee-2edcf942d8f7) DEBUG: openstackclient.shell clean_up ListServer DEBUG: openstackclient.shell got an error: You are not authorized to perform the requested action. (Disable debug mode to suppress these details.) (HTTP 403) (Request-ID: req-0fafaa6e-802e-460e-bdee-2edcf942d8f7) ERROR: openstackclient.shell Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/openstackclient/shell.py", line 176, in run return super(OpenStackShell, self).run(argv) File "/usr/lib/python2.7/site-packages/cliff/app.py", line 238, in run result = self.run_subcommand(remainder) File "/usr/lib/python2.7/site-packages/cliff/app.py", line 303, in run_subcommand result = cmd.run(parsed_args) File "/usr/lib/python2.7/site-packages/cliff/display.py", line 91, in run column_names, data = self.take_action(parsed_args) File "/usr/lib/python2.7/site-packages/openstackclient/compute/v2/server.py", line 691, in take_action data = compute_client.servers.list(search_opts=search_opts) File "/usr/lib/python2.7/site-packages/novaclient/v2/servers.py", line 583, in list return self._list("/servers%s%s" % (detail, query_string), "servers") File "/usr/lib/python2.7/site-packages/novaclient/base.py", line 64, in _list _resp, body = self.api.client.get(url) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 170, in get return self.request(url, 'GET', **kwargs) File "/usr/lib/python2.7/site-packages/novaclient/client.py", line 90, in request **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 206, in request resp = super(LegacyJsonAdapter, self).request(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/adapter.py", line 95, in request return self.session.request(url, method, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/utils.py", line 318, in inner return func(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 315, in request auth_headers = self.get_auth_headers(auth) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 615, in get_auth_headers return auth.get_headers(self, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/base.py", line 114, in get_headers token = self.get_token(session) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/base.py", line 104, in get_token return self.get_access(session).auth_token File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/base.py", line 144, in get_access self.auth_ref = self.get_auth_ref(session) File "/usr/lib/python2.7/site-packages/keystoneclient/auth/identity/v3/base.py", line 174, in get_auth_ref authenticated=False, log=False, **rkwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 514, in post return self.request(url, 'POST', **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/utils.py", line 318, in inner return func(*args, **kwargs) File "/usr/lib/python2.7/site-packages/keystoneclient/session.py", line 407, in request raise exceptions.from_response(resp, method, url) Forbidden: You are not authorized to perform the requested action. (Disable debug mode to suppress these details.) (HTTP 403) (Request-ID: req-0fafaa6e-802e-460e-bdee-2edcf942d8f7) For obtaining the token I am using a small script that I wrote which does the conversation and relies on the curlicue script: #!/bin/bash echo Obtaining a scoped token from Keyston via OAuth1 authentication if [ -z "$OAUTH_REQUEST_DOMAIN_NAME" ]; then echo -n Enter OAUTH_REQUEST_DOMAIN_NAME: read OAUTH_REQUEST_DOMAIN_NAME else echo Using OAUTH_REQUEST_DOMAIN_NAME=$OAUTH_REQUEST_DOMAIN_NAME fi if [ -z "$OAUTH_REQUEST_PROJECT_NAME" ]; then echo -n Enter OAUTH_REQUEST_PROJECT_NAME: read OAUTH_REQUEST_PROJECT_NAME else echo Using OAUTH_REQUEST_PROJECT_NAME=$OAUTH_REQUEST_PROJECT_NAME fi if [ -z "$OAUTH_REQUEST_ROLE" ]; then echo -n Enter OAUTH_REQUEST_ROLE: read OAUTH_REQUEST_ROLE else echo Using OAUTH_REQUEST_ROLE=$OAUTH_REQUEST_ROLE fi if [ -z "$OAUTH_CONSUMER_KEY" ]; then echo -n Enter OAUTH_CONSUMER_KEY: read OAUTH_CONSUMER_KEY else echo Using OAUTH_CONSUMER_KEY=$OAUTH_CONSUMER_KEY fi if [ -z "$OAUTH_CONSUMER_SECRET" ]; then echo -n Enter OAUTH_CONSUMER_SECRET: read OAUTH_CONSUMER_SECRET else echo Using OAUTH_CONSUMER_SECRET=$OAUTH_CONSUMER_SECRET fi echo echo "Obtaining Request Token" OUTPUT="$(openstack request token create --consumer-key $OAUTH_CONSUMER_KEY --consumer-secret $OAUTH_CONSUMER_SECRET --project $OAUTH_REQUEST_PROJECT_NAME --domain $OAUTH_REQUEST_DOMAIN_NAME)" if (grep -q "+---------+----------------------------------+" <<< "$OUTPUT" ) then echo -e "Result:\e[92m[OK]\e[0m" else echo -e "\e[91m[ERROR] No result was found in output:\n\e[0m\e[33m$OUTPUT \e[0m" fi #echo "$OUTPUT" OAUTH_REQUEST_TOKEN_KEY=`echo "$OUTPUT" | grep key | sed 's/[|] key [|] \(.*\) [|]$/\1/g' | tr -d '\r\n'` OAUTH_REQUEST_TOKEN_SECRET=`echo "$OUTPUT" | grep secret | sed 's/[|] secret [|] \(.*\) [|]$/\1/g' | tr -d '\r\n'` echo -e "OAUTH_REQUEST_TOKEN_KEY=\e[92m$OAUTH_REQUEST_TOKEN_KEY\e[0m" echo -e "OAUTH_REQUEST_TOKEN_SECRET=\e[92m$OAUTH_REQUEST_TOKEN_SECRET\e[0m" echo echo "Authorizing Request Token" OUTPUT="$(openstack request token authorize --request-key $OAUTH_REQUEST_TOKEN_KEY --role $OAUTH_REQUEST_ROLE)" if (grep -q "+----------------+----------+" <<< "$OUTPUT" ) then echo -e "Result:\e[92m[OK]\e[0m" else echo -e "\e[91m[ERROR] No result was found in output:\n\e[0m\e[33m$OUTPUT \e[0m" fi #echo "$OUTPUT" OAUTH_VERIFIER=`echo "$OUTPUT" | grep oauth_verifier | sed 's/[|] oauth_verifier [|] \(.*\) [|]$/\1/g' | tr -d '\r\n'` echo -e "OAUTH_VERIFIER=\e[92m$OAUTH_VERIFIER\e[0m" echo echo "Obtaining Access Token" OUTPUT="$(openstack access token create --consumer-key $OAUTH_CONSUMER_KEY --consumer-secret $OAUTH_CONSUMER_SECRET --request-key $OAUTH_REQUEST_TOKEN_KEY --request-secret $OAUTH_REQUEST_TOKEN_SECRET --verifier $OAUTH_VERIFIER)" if (grep -q "+---------+----------------------------------+" <<< "$OUTPUT" ) then echo -e "Result:\e[92m[OK]\e[0m" else echo -e "\e[91m[ERROR] No result was found in output:\n\e[0m\e[33m$OUTPUT \e[0m" fi echo "$OUTPUT" OAUTH_ACCESS_TOKEN_KEY=`echo "$OUTPUT" | grep key | sed 's/[|] key [|] \(.*\) [|]$/\1/g' | tr -d '\r\n'` OAUTH_ACCESS_TOKEN_SECRET=`echo "$OUTPUT" | grep secret | sed 's/[|] secret [|] \(.*\) [|]$/\1/g' | tr -d '\r\n'` OAUTH_ACCESS_TOKEN_EXPIRES=`echo "$OUTPUT" | grep expires | sed 's/[|] expires [|] \(.*\) *[|]$/\1/g' | tr -d '\r\n'` echo -e "OAUTH_ACCESS_TOKEN_KEY=\e[92m$OAUTH_ACCESS_TOKEN_KEY\e[0m" echo -e "OAUTH_ACCESS_TOKEN_SECRET=\e[92m$OAUTH_ACCESS_TOKEN_SECRET\e[0m" echo -e "OAUTH_ACCESS_TOKEN_EXPIRES=\e[92m$OAUTH_ACCESS_TOKEN_EXPIRES\e[0m" cat << EOF > /tmp/consumer oauth_consumer_key=$OAUTH_CONSUMER_KEY&oauth_consumer_secret=$OAUTH_CONSUMER_SECRET EOF cat << EOF > /tmp/access_token oauth_token=$OAUTH_ACCESS_TOKEN_KEY&oauth_token_secret=$OAUTH_ACCESS_TOKEN_SECRET&oauth_expires_at=$OAUTH_ACCESS_TOKEN_EXPIRES EOF OUTPUT="$(curlicue -f /tmp/consumer -f /tmp/access_token -- \ -H "Content-Type: application/json" \ -d "{\"auth\":{\"identity\":{\"methods\":[\"oauth1\"],\"oauth1\":{}}}}" \ https://host:35357/v3/auth/tokens \ --compressed --insecure -si)" rm /tmp/consumer rm /tmp/access_token echo "$OUTPUT" SUBJECT_TOKEN=`echo "$OUTPUT" | grep X-Subject-Token | sed 's/X-Subject-Token: \(.*\).*$/\1/g' | tr -d '\r\n'` echo echo -e "Obtained scoped token: \e[92m$SUBJECT_TOKEN\e[0m" There are also some small fixes I had to apply to the curlicue script (a wrapper of curl which compiles the oauth header): Original code: oauth_nonce="$(openssl rand -base64 12)" Fixed code : oauth_nonce="$(openssl rand -hex 12)" Original code: params="$(mk_params "$url_params" | join_params '&')" Fixed code : params="$(mk_params | join_params '&')" Best regards, Bogdan