从文档中看到可以使用命令行的方式创建虚拟机,死马当作活马医,好歹试一下吧,居然成功了!然后各种测试都通过。好吧,忽然间感觉到问题的原因了,控制面板dashboard这个东西没装好,坑我又装了遍所有的服务,几乎要放弃了。
然后是各种修改尝试:1、和官方文档核对配置文件。2、和已安装成功的人核对配置文件。
核对的结果是几乎一样。没有找到有明显错误或者有较大差别。可是人家的可以正常创建虚拟机。
打开日志,一行一行分析。每次报错,必然会有一个这样的错误:
INFO nova.api.openstack.wsgi [req-5ed8bcd7-92f6-43ce-8281-82c4ba9472e8 b6a8a4841f14425a9ef9680f966192b0 9699c6607bf347c4976f4ae592ad4506 - - -] HTTP exception thrown: Security group bb10e460-7729-4ef7-acf2-15f990679fc0 not found for project 9699c6607bf347c4976f4ae592ad4506.
首先,从控制面板上和从命令行,创建虚拟机操作会发出创建虚拟机的请求到后台,控制面板创建失败,命令行创建成功
nova debug log from CLI can success 2017-03-07 16:49:22.865 3325 DEBUG nova.api.openstack.wsgi [req-68ba7805-afae-41cf-9619-e0278bbe5f40 670eda15b024423c8ca3619b52614a8f b2fd83925b0a433b82eaac7f40948b4c - - -] Action: 'create', calling method:>, body: {"server": {"name": "vm5", "imageRef": "2a2663da-b0dd-4f0b-91a8-3504cec717f9", "key_name": "adminkey", "flavorRef": "1", "max_count": 1, "min_count": 1, "security_groups": [{"name": "default"}]}} _process_stack /usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py:696 from horizon failed 2017-03-07 16:47:41.505 3325 DEBUG nova.api.openstack.wsgi [req-2aa372a5-55e9-4bf8-aa21-9d02554e53f0 670eda15b024423c8ca3619b52614a8f b2fd83925b0a433b82eaac7f40948b4c - - -] Action: 'create', calling method: >, body: {"server": {"name": "vm5", "imageRef": "2a2663da-b0dd-4f0b-91a8-3504cec717f9", "availability_zone": "nova", "key_name": "adminkey", "flavorRef": "1", "OS-DCF:diskConfig": "AUTO", "max_count": 1, "min_count": 1, "networks": [{"uuid": "e614c5fd-be35-415f-98ea-5b5b70194741"}], "security_groups": [{"name": "681ca58f-2803-4de4-8266-e1e9e232b9c9"}]}} _process_stack /usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py:696
分析发送的参数,只有一个参数有较大差别:
命令行发送的参数值
"security_groups": [{"name": "default"}]
控制面板发送的参数值
"security_groups": [{"name": "681ca58f-2803-4de4-8266-e1e9e232b9c9"}]
执行的SQL语句
MariaDB [nova]> SELECT *
-> FROM security_groups
-> WHERE security_groups.deleted = 0
-> AND security_groups.project_id = '9699c6607bf347c4976f4ae592ad4506'
-> AND security_groups.name = '681ca58f-2803-4de4-8266-e1e9e232b9c9'
-> ;
Empty set (0.00 sec)
数据库中实际存放的数据
MariaDB [nova]> SELECT * FROM security_groups WHERE security_groups.deleted = 0 AND security_groups.project_id = '9699c6607bf347c4976f4ae592ad4506' ;
+---------------------+------------+------------+----+---------+-------------+----------------------------------+----------------------------------+---------+
| created_at | updated_at | deleted_at | id | name | description | user_id | project_id | deleted |
+---------------------+------------+------------+----+---------+-------------+----------------------------------+----------------------------------+---------+
| 2017-03-10 08:07:48 | NULL | NULL | 681ca58f-2803-4de4-8266-e1e9e232b9c9 | default | default | b6a8a4841f14425a9ef9680f966192b0 | 9699c6607bf347c4976f4ae592ad4506 | 0 |
+---------------------+------------+------------+----+---------+-------------+----------------------------------+----------------------------------+---------+
1 row in set (0.00 sec)
看到没有,实际上name字段的值是default,但是查询条件里是用的name=id,这么查肯定是查不到的,于是就有了 HTTP exception thrown: Security group bb10e460-7729-4ef7-acf2-15f990679fc0 not found for project 9699c6607bf347c4976f4ae592ad4506.于是创建就失败。所以这个是个BUG。
开源软件的小问题就是太松散,没人收你钱,也不会有人对你的问题负责,但是你可以拿到源码,有一个很友好的圈子,你可以对你遇到的问题想解决办法,然后贡项给大家。
可是怎么解决呢,openstack 的mikata版本里的dashboard用的是openstack-dashboard-9.0.1-1.el7.noarch,没有其它版本的RPM包了。
解决办法是,通过源码安装控制面板,可以完美解决这个问题,其实openstack 的mitaka版的控制面板项目horizon有四个版本,通过centos7的YUM安装的,是最低版本,还有三个更高的版本,没有rpm。详细的安装过程在这里
通过源码安装horizon