在 bash 脚本中调用时 Keystone 客户端命令失败

Kyestone client commands fails when called inside bash script

我正在制作一个 bash 小脚本,试图安装 keystone 并创建初始管理员用户、租户等。 我尝试了各种 keystone 子命令,但它们都失败了:

Unable to establish connection to httx://10.0.2.100:35357/v2.0/tenants

我尝试通过文件获取 env 变量,使用 export 并且在最后的手段中甚至 运行 使用 --os-token--os-endpoint 命令。这是我在脚本中使用的最新版本:

keystone --debug --os-token secret --os-endpoint httx://10.0.2.100:35357/v2.0 tenant-list

带调试的完整消息如下:

WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
DEBUG:keystoneclient.session:REQ: curl -i -X GET httx://10.0.2.100:35357/v2.0/tenants -H "User-Agent: python-keystoneclient" -H "X-Auth-Token: secret"
INFO:urllib3.connectionpool:Starting new HTTP connection (1): 10.0.2.100 Unable to establish connection to httx://10.0.2.100:35357/v2.0/tenants

但是,如果我 运行 直接在 bash shell 上执行相同的命令,我没有问题。这是它的调试输出:

keystone --debug --os-token secret --os-endpoint httx://10.0.2.100:35357/v2.0 tenant-list WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
DEBUG:keystoneclient.session:REQ: curl -i -X GET httx://10.0.2.100:35357/v2.0/tenants -H "User-Agent: python-keystoneclient" -H "X-Auth-Token: secret" INFO:urllib3.connectionpool:Starting new HTTP connection (1): 10.0.2.100 DEBUG:urllib3.connectionpool:Setting read timeout to 600.0 DEBUG:urllib3.connectionpool:"GET /v2.0/tenants HTTP/1.1" 200 256 DEBUG:keystoneclient.session:RESP: [200] {'date': 'Tue, 17 Mar 2015 14:28:20 GMT', 'vary': 'X-Auth-Token', 'content-length': '256', 'content-type': 'application/json', 'x-distribution': 'Ubuntu'} RESP BODY: {"tenants_links": [], "tenants": [{"description": "Admin Tenant", "enabled": true, "id": "17008f66b9b54ca39654846e0b5e7af2", "name": "admin"}, {"description": "Service Tenant", "enabled": true, "id": "3a6823c10e454f4294aebdfec8b0c5dd", "name": "service"}]} +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | 17008f66b9b54ca39654846e0b5e7af2 | admin | True | | 3a6823c10e454f4294aebdfec8b0c5dd | service | True | +----------------------------------+---------+---------+

所以似乎只有当脚本尝试 运行 命令时才会失败... 我不明白为什么...任何帮助表示赞赏。

PS。我不得不用 httx 替换 http 以便能够 post 因为我没有足够的信誉点数。

几个小时后...我终于弄清楚出了什么问题。在我的脚本中,我首先重新启动 keystone 服务,以便考虑对“/etc/keystone/keystone.conf”文件的更改,然后我 运行 立即执行 keystone 命令。在回答我的命令之前,keystone 似乎需要一些时间才能启动。我在两个命令之间添加了 "sleep 1",现在它可以工作了。也许对某人有用:-)