还有一种创建方式 是使用py开发工具,调用openstackclient的方法进行创建实例 ,好处就是可随意指定我们要的虚拟机IP地址,需求的场景就是,某天我们需要主动分配一个比较熟知的IP用作某个服务组件
 
或者某天,你需要打包一个实例的快照,终止实例后,你想通过快照的方式将它恢复为原来的IP,可以使用以下方法。
 
以win7客户端为例。
先下载安装eclipse 安装
安装 eclipse 的python插件,插件安装方法可自行百度
 
本机,安装python2.7环境
安装完后,添加python到系统环境变量。因为我们后面要用它的cmd命令行进行下载安装openstackclient,环境变量方法可自行百度
 
下载python-pip工具插件,
解压到python安装目录下。
 
随后进入该pip目录,在空白处,按住Shift+鼠标右键,选“在此处打开命令窗口”
 
pip安装openstackclient
pip install openstackclient
安装完后基础的openstackclient端就完成了,直接可关闭窗口了,后续我们在eclipse上调试调用即可。
 
 
运行eclipse,新建一个python工程,创建一个pyDev项目
 
可以写调用api的工程模板了。
比如我在我的工作空间目录openstackdashboad下,创建了一个test.py模块。
 
手工创建双网卡IP实例脚本如下,也是参考官网提供,稍做了修改,如下我有些浅蓝注释,复制时记得把 <粉色注释> 可删除。
 
# coding:utf-8
import time
import sys
from novaclient.client import Client
 
 
reload(sys)
sys.setdefaultencoding (" utf-8")
 
def print_values_ip(ip_list):
    ip_dict_lisl = []
    for ip in ip_list:
        print( "-"*35 )
        print( "fixed_ip : %s" % ip.fixed_ip)
        print( "id : %s" % ip.id)
        print( "instance_id : %s" % ip.instance_id)
        print( "ip : %s" % ip.ip)
        print( "pool : %s" % ip.pool)
 
def get_nova_credentials_v2():
    d = {}
 
    d['version'] = '2'
    d['username'] = "demo"            
#像我们登录dashboard一样,要用户名
    d['api_key'] = "你的租户密码"              
#像我们登录dashboard一样,要密码认证
    d['auth_url'] = "http://controller:5000/v2.0"    
#像我们平时登录dashboard一样,填写登录地址
    d['project_id'] = "demo"           
#项目名称
    d['region_name'] = "RegionOne"     
#区域名称
    return d
 
def print_hosts(host_list):
    for host in host_list:
       print( "-"*35 )
       print( "host_name : %s" % host.host_name)
       print( "service : %s" % host.service)
       print( "zone : %s" % host.zone)
       print( "-"*35 )
 
if __name__ == '__main__':
    credentials = get_nova_credentials_v2()
    nova_client = Client(**credentials)
    serviers = nova_client.servers.list()
 
#    print(serviers)
    image = nova_client.images.find(name= "20G_CentOS7_noLvm")     
#这个是我们做好上传的centos7镜像名称,比如官网上的cirros,可以是镜像名称,也可以是快照名称
    flavor = nova_client.flavors.find(name= "C2-M4G-D20G")           
#这个是我们要的创建的主机类型和大小名称,比如官网上的tiny\small\large等等
    net = nova_client.networks.find(label= "1040100")                
#这个是我们定义好的,公网网段名称,比如官方的public,这主声明方法是为了解析到public得到它的net-id,并附给net
    net2 = nova_client.networks.find(label= "17216100")              
#这个是我们定义好的,私有网段名称,比如官方的private,这主声明方法是为了解析到private 得到它的net-id,并附给net2
    nics = [{'net-id': net.id, 'v4-fixed-ip': '10.40.100.27'},{'net-id' : net2.id,'v4-fixed-ip': '172.16.100.27'}]    
#这个是我们要为net和net2手工指定的双网卡IP地址
    instance = nova_client.servers.create(name= "vm27", image=image,flavor=flavor, availability_zone="stg_zone" , nics=nics)   
#vm27这个是为虚拟机指定一个主机名称,"stg_zone"是我们分配主机到指定的zone区域中去。
    print("Sleeping for 5s after create command")
    time.sleep(5)
    print("List of VMs")
 
    print(nova_client.servers.list())
 
 
 
 
配置完,保存,运行,注意你的这个IP是之前没有分配出云的,查看可通过dashboard界面查看虚拟状态。
 
 
 
手工创建单网卡IP实例脚本如下
 
# coding:utf-8
import time
import sys
from novaclient.client import Client
 
reload(sys)
sys.setdefaultencoding("utf-8")
 
def print_values_ip(ip_list):
    ip_dict_lisl = []
    for ip in ip_list:
        print("-"*35)
        print("fixed_ip : %s" % ip.fixed_ip)
        print("id : %s" % ip.id)
        print("instance_id : %s" % ip.instance_id)
        print("ip : %s" % ip.ip)
        print("pool : %s" % ip.pool)
 
def get_nova_credentials_v2():
    d = {}
    d['version'] = '2'
    d['username'] = "demo"
    d['api_key'] = "你的租户密码"
    d['auth_url'] = "http://controller:5000/v2.0"
    d['project_id'] = "demo"
    d['region_name'] = "RegionOne"
    return d
 
def print_hosts(host_list):
    for host in host_list:
       print("-"*35)
       print("host_name : %s" % host.host_name)
       print("service : %s" % host.service)
       print("zone : %s" % host.zone)
       print("-"*35)
 
if __name__ == '__main__':
    credentials = get_nova_credentials_v2()
    nova_client = Client(**credentials)
    serviers = nova_client.servers.list()
#    print(serviers)
    image = nova_client.images.find(name="20G_CentOS7.1_noLVM")
    flavor = nova_client.flavors.find(name="C2-M4G-D20G")
    net = nova_client.networks.find(label="10120100")
    nics = [{'net-id': net.id,'v4-fixed-ip':'10.40.150.150'}]
    instance = nova_client.servers.create(name="zabbixserver", image=image,flavor=flavor, availability_zone="stg_zone", nics=nics)
    print("Sleeping for 5s after create command")
    time.sleep(5)
    print("List of VMs")
    print(nova_client.servers.list())
 												
												
								- openstack私有云布署实践【12.2 网络Neutron-controller节点配置(办公网环境)】
		
网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...
		 
						- openstack私有云布署实践【12.1 网络Neutron-controller节点配置(科兴环境)】
		
网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...
		 
						- openstack私有云布署实践【0 前言】
		
管理控制层面示图: 其实在修改这个布署文档是,我发现当时生产中的布署已经严重偏离了openstack高可用的指导思想.我们自己实践的高可用其实是适应自己的架构而做的调整,因为我们现实手头上中没有比较符 ...
		 
						- openstack私有云布署实践【15 创建租户网络+实例】
		
这里以办公网测试环境为例,   (一)创建租户demo的网络   使用admin用户 source admin-openrc.sh 创建public公网 neutron net-create 1040 ...
		 
						- openstack私有云布署实践【9.3 主从controller单向同步glance-image目录】
		
采用Rysnc单向同步,而不用双方实时同步,原因是在历史的运行过程中,我们发现,有些镜像包太大,当在主用的glance将镜像保存时,并不是一时半会就把镜像保存好,当主用在保存时,备用节点又在实时同步那 ...
		 
						- openstack私有云布署实践【16.1 CentOS7.1 只有根分区镜像制作】
		
之所以要只有根分区镜像,是因为在创建VM或者调整云主机的硬盘大小时,它能自动扩容.无需人工介入   在原来的物理机10.40.41.1的CentOS 6.7上制作镜像.(当然如果你的制作镜像的宿主机是 ...
		 
						- openstack私有云布署实践【2 安装前的服务器基本环境准备】
		
服务器物理机都安装centos7.2 1511版本 , 此次采用的分区方式全是自动XFS格式LVM,在装系统时就将所有本地raid5硬盘都加入LVM全用了.默认/home目录有着最大的硬盘空间 并且我 ...
		 
						- openstack私有云布署实践【11.2 计算nova - compute节点配置(办公网环境)】
		
这里我只使用compute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysfsu ...
		 
						- openstack私有云布署实践【11.1 计算nova - compute节点配置(科兴环境)】
		
这里我只使用kxcompute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysf ...
		 
		
	
随机推荐
	
									- Web.Config Transformation配置灵活的配置文件
			
使用Web.Config Transformation配置灵活的配置文件 发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常 ...
			 
						- linux网络编程(一)
			
一.概念介绍 网络程序分为服务端程序和客户端程序.服务端即提供服务的一方,客户端为请求服务的一方.但实际情况是有些程序的客户端.服务器端角色不是这么明显,即互为客户端和服务端. 我们编写网络程序时,一 ...
			 
						- 封装使用ViewHolder模式的Adapter组件,及用其快速实现聊天界面
			
大家都对viewholder模式并不陌生吧,避免了重复调用findViewbyId,并对convertview进行重用.但是,开发中可能会有这样的困扰,每次在创建Adapter类时,总会有许多的重复代 ...
			 
						- django 创建一个通用视图
			
创建一个通用视图   抽取出我们代码中共性的东西是一个很好的编程习惯. 比如,像以下的两个Python函数:     def say_hello(person_name): print 'Hello, ...
			 
						- 依赖注入(IOC)二
			
依赖注入(IOC)二 上一章我们讲了构造注入与设值注入,这一篇我们主要讲接口注入与特性注入. 接口注入 接口注入是将抽象类型的入口以方法定义在一个接口中,如果客户类型需要获得这个方法,就需要以实现这个 ...
			 
						- 取SQL分组中的某几行数据
			
取SQL分组中的某几行数据 对表中数据分组,有时只需要某列的聚合值:有时却需要返回整行数据,常用的方法有:子查询.ROW_NUMBER.APPLY,总体感觉还是ROW_NUMBER比较直观.测试数据: ...
			 
						- 安装linux版qq,安装二进制包编译器,安装mysql-5.6.11,删除已安装或安装失败的mysql-5.6.11,简单mysql练习题
			
上午[root@localhost ~]# ./test3.sh dev1^C[root@localhost ~]# groupadd dev1[root@localhost ~]# vim /etc ...
			 
						- [置顶] IT老男人读《因为痛,所以叫青春》
			
最近偶然,从别人的书桌上看到这本书,其中有个关于时间的解释,很是让为成功焦虑的老男人受用.   因此,我喜欢将人生的80年跟一天中的24小时进行对照. 人生时钟的计算方法十分简单.24小时相当于144 ...
			 
						- 巧用final
			
1.final可以修饰函数的参数,以防止函数内部随意篡改不允许修改的参数. 2.在函数内部,把函数的局部变量声明为final类型,可以检查在函数内部它们是否的确只被赋值一次.
			 
						- 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类
			
一.深拷贝与浅拷贝 说得简单点,假设一个类有指针成员,如果在拷贝的时候顺带连指针指向的内存也分配了,就称为深拷贝:如果只是分配指针本身的内存,那就是浅拷贝.浅拷贝造成的问题是有两个指针指向同块内存,d ...