您的位置:首页 > 编程语言 > Python开发

python调用openstack的api,create_instance的程序解析

2017-10-17 15:27 393 查看
#!/usr/bin/python
import os
 
import time
 
import novaclient.v1_1.client as nvclient
 
#from credentials import get_nova_creds
#creds = get_nova_creds()
#nova = nvclient.Client(**creds)
 
nova = nvclient.Client('demo','demo','istl','http://192.168.5.71:5000/v2.0')
 
#nova.keypairs.create(name="osvmkey")
 
print "first step : choosing an image"
image_list1 = nova.images.list()
for x,y in enumerate(image_list1):
   print x,y
i = input("please input the correspond number :")
str1 = str(image_list1[i])
image = nova.images.find(name=str1[8:-1])
.............
 
 
#meta =  raw_input("please input server's meta :")
instance = nova.servers.create(name = ins_name, image=image, flavor=flavor, key_name=key_name,disk_config="AUTO",config_drive="True",files="/home/xli/chinese_time.sh",userdata="1")
#instance = nova.servers.create(name = ins_name, image=image, flavor=flavor, key_name=key_name,disk_config="AUTO",config_drive="True",meta="meta",userdata="1")
status = instance.status
while status == 'BUILD':
    time.sleep(5)
    # Retrieve the instance again so the status field updates
    instance = nova.servers.get(instance.id)
    status = instance.status
print "status: %s" % status
 
 
 
print "create a floating ip!"
floatingippool_list4 = nova.floating_ip_pools.list()
 
for x,y in enumerate(floatingippool_list4):
   print x,y
 
p = input("please input the corresponding number :")
str3 = str(floatingippool_list4[p])
floating_ip = nova.floating_ips.create(pool = str3[22:-1])
instance.add_floating_ip(floating_ip)
floatingip_list3 = nova.floating_ips.list()
for x,y in enumerate(floatingip_list3):
   print x,y
 
 
Import语句的作用是导入模块,模块是不带.py扩展的另外一个python文件的文件名
 
在这里我们导入了novaclient.v1_1.client的整个模块,但是需要把
nvclient.作为后面函数的前缀,这样就表示client.py的全部内容在这里可见,
 
在这里还有导入模块的一部分
from novaclient.v1_1 import security_groups

 
import novaclient.v1_1.client as nvclient   这个仅仅就是对导入的模块起了一个别名。
<
c48d
p style="margin:0pt;">nova = nvclient.Client('demo','demo','istl','http://192.168.5.71:5000/v2.0')
这里就是实例化类Client,然后后面的就是调用这个类下面的方法,
当我们打开client.py可以看到:

  它导进了V1_1下的全部.py文件,相当于把v1_1下的全部方法集成在一起放在了client.py里面,我们通过
 实例.方法  就可以调用
 
 
 
 
看client.py
的 Client类  有两种认证方式
 
 
 
 def __init__()是python里面特殊的对象初始化方法,__init__()是python中一个特殊的函数名,用于根据类的定义创建实例对象。而这个self参数指向了这个正在被创建的对象本身。当你在类声明里面定义__init__()方法时,第一个参数必须为self,相当于this
 
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息