使用python-boto启动Openstack实例

时间:2014-01-13 11:49:01

标签: python amazon-ec2 boto openstack

我正在尝试使用python-boto配置多个网络的opensatck设置启动实例。

但我得到了以下错误,

EC2ResponseError: EC2ResponseError: 400 Bad Request <?xml version="1.0"?> <Response><Errors><Error><Code>NetworkAmbiguous</Code><Message>Multiple possible networks found, use a Network ID to be more specific.</Message></Error></Errors><RequestID>req-28b5a4e8-3838-4111-95db-337c5048716d</RequestID></Response>

我的代码就像这里一样,

from boto import ec2
ostack = ec2.connection.EC2Connection(
    ec2_access_key, ec2_secret_key, is_secure=False, port=8773, region='nova',
    path='/services/Cloud'
)

ostack.run_instances('ami-xxxxx', key_name='BotoTest')

以上版本适用于配置为openstack的单个网络。

注意:run_instances没有network-id的关键字参数。

我犯了错误或如何解决?或者它是python-boto中的错误?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

我认为这不是boto的错误,boto是为与AWS-API进行通信而构建的。虽然大多数EC2-AWS功能与EC2-OpenStack API配合良好,但某些功能尚未实现,并且可通过HTTP-Error 500或400进行应答。

AWS将VPC(虚拟私有云)用作网络,将可用区用作子网。两者都有一个默认设置,如果在创建新实例时没有进一步的规范,则会采用该设置。但是在OpenStack中,我看不到将网络和子网标记为默认值的可能性。

在我的尝试中,private_ip_addresssubnet_id都无法在run_instances()指定网络/子网,如果OpenStack上有多个网络/子网。

编辑:如果您只有一个网络/子网,以下代码可以在trystack.org上与boto一起使用:

import boto
conn = boto.connect_ec2_endpoint("http://8.21.28.222:8773/services/Cloud",aws_access_key_id='...',aws_secret_access_key='...')
new_instance = conn.run_instances("ami-00000020", key_name="trystack", security_groups=["default"], instance_type="m1.small")

答案 1 :(得分:0)

你尝试过吗? :

from boto import ec2
ostack = ec2.connection.EC2Connection(
   ec2_access_key, ec2_secret_key, is_secure=False, port=8773, region='nova',
   path='/services/Cloud', debug=1
)

然后

ostack.run_instances('ami-xxxxx',  subnet_id='your network id', key_name='BotoTest')

亚马逊将其用于VPC网络?你在运行VPC吗?