博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
saltstack之virt模块创建虚拟机分析之四,创建虚拟机
阅读量:6852 次
发布时间:2019-06-26

本文共 2578 字,大约阅读时间需要 8 分钟。

前三篇,我已经说了,我们可以使用grains来定义一些网络和磁盘属性,今天我使用pillar来定义这些属性,并做些修改来,来快速启动虚拟机.

pillar

/srv/pillar/top.sls

base:
  'kvm.tc.com':
     - vm.profile

/srv/pillar/vm/profile.sls

virt: {'nic': {'nics': [{'eth0': {'bridge': 'br0'}}]}, 'disk': {'system': [{'system': {'pool': '/var/lib/libvirt/im
ages', 'format': 'raw'}}, {'data': {'pool': '/var/lib/libvirt/images', 'format': 'raw'}}]}} 

virt.py模块做些稍微的修改:

添加一个修改虚拟机函数:

def _edit_vm(nics,img_dest,name):    vm_name=name+".tc.com"    nic_content={}    for nic in nics:        name=nic['name']        vm_mac=nic['mac']        vm_ip=nic['ip']        nic_content[name]={}        nic_content[name]['ip']=vm_ip        nic_content[name]['mac']=vm_mac    g = guestfs.GuestFS(python_return_dict=True)    g.add_drive_opts(img_dest)    g.launch()    #partions_root=g.inspect_os() 不能使用此功能,否则我后面写的客户端无提示.    g.mount('/dev/sda3','/')  #这一块是针对我虚拟机镜像文件格式,如果你的不一样,可以做修改    #g.mount(partions_root[0],'/')    #edit vm hostname    hostname_fn='hostname.jinja'    try:        template_hostname = JINJA.get_template(hostname_fn)    except jinja2.exceptions.TemplateNotFound:        return False    hostname_context={'hostname':vm_name}    hostname_content=template_hostname.render(**hostname_context)    g.write('/etc/sysconfig/network',hostname_content)    #edit vm mac    mac_fn='mac.jinja'    try:        template_mac = JINJA.get_template(mac_fn)    except jinja2.exceptions.TemplateNotFound:        return False    mac_context={'mac':vm_mac}    mac_content=template_mac.render(**mac_context)    g.write('/etc/udev/rules.d/70-persistent-net.rules',mac_content)    #edit vm ip    net_fn='net.jinja'    try:        template_net = JINJA.get_template(net_fn)    except jinja2.exceptions.TemplateNotFound:        return False    net_context={'mac':vm_mac,'ip':vm_ip}    net_content=template_net.render(**net_context)    g.write('/etc/sysconfig/network-scripts/ifcfg-eth0',net_content)    g.close()    return True

修改init函数

    for disk in diskp:

        for disk_name, args in disk.items():
            if disk_name=='system':
                fn_ = '{0}.{1}'.format(disk_name, args['format'])
                img_dest = os.path.join(
                    args['pool'],
                    name,
                    fn_
                )   #获取系统镜像文件

    if not _edit_vm(nicp,img_dest,name):

        return False

修改_nic_profile函数:

添加一段获取ip的

vm_ip=kwargs.get('ip','192.168.x.41') #这样,便可以在客户端处获取ip地址信息了.

再在生成mac下,添加:

attributes['ip'] = vm_ip

客户端

#!/usr/bin/env pythonimport salt.clientlocal=salt.client.LocalClient()result=local.cmd('kvm.tc.com','virt.init',['web20','4','512','nic=nics','disk=system','ip=192.168.x.31'])print result

执行后,便会主动生成一个web20的虚拟机.

后期,通过Django开发一个web界面,便可以提交创建虚拟机喽。

如果想了解更多,请关注我们的公众号

公众号ID:opdevos
扫码关注

gongzhouhao.jpg

转载地址:http://pxuyl.baihongyu.com/

你可能感兴趣的文章
Hadoop HDFS文件操作的Java代码
查看>>
jqGrid的若干种用法
查看>>
电子书资源分享
查看>>
Java第二次实验
查看>>
Tomcat数据源总结
查看>>
MongoDB分片实战(一):集群搭建
查看>>
Struts2 原理
查看>>
prepareCall方法执行存储过程
查看>>
更新UI放在主线程的原因
查看>>
Django框架----数据库表的单表查询
查看>>
机器学习实战4:Adaboost提升:病马实例+非均衡分类问题
查看>>
事件管理器
查看>>
深入学习jQuery节点关系
查看>>
分享一个德州扑克的算法
查看>>
技术普及帖:你刚才在淘宝上买了一件东西
查看>>
全排列 UVA 11525 Permutation
查看>>
进程隐藏与进程保护(SSDT Hook 实现)(一)
查看>>
LOJ6346:线段树:关于时间 ——题解
查看>>
2.jeesite增删改查
查看>>
1.Dubbo教程
查看>>