设为首页 收藏本站
查看: 1394|回复: 0

[经验分享] openstack私有云布署实践【19 通过python客户端 创建实例VM指定IP地址】

[复制链接]

尚未签到

发表于 2017-12-5 13:56:13 | 显示全部楼层 |阅读模式
还有一种创建方式 是使用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())

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420817-1-1.html 上篇帖子: 部署openstack的官网文档解读mysql的配置文件 下篇帖子: openstack源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表