saltstack之virt模块创建虚拟机分析之二

简介:

那今天说下第2种,命令执行格式如下:

salt 'kvm.tiancity.com' virt.init web20 4 512 nic=nics disk=system


在这里,我们需要注意下对与kvm/qemu不允许使用profile,我们需要将virt.py改下代码:

wKioL1SKgY2yWdXzAAGs9K0sV2Q276.jpg

这样,就允许我的试验环境了。


我的想法是,我的虚拟机镜像文件被存储在
/var/lib/libvirt/images/web20/system.raw,看下我如何构造磁盘的数据结构呢.

diskp=[{'system':{'size':'8192','format':'raw','model':'virtio','pool':'/var/lib/libvirt/images'}}]

从分析代码中,

default = [
          {'system':
             {'size': '8192'}
          }
    ]

 elif hypervisor in ['qemu', 'kvm']:
        overlay = {'format': 'qcow2',
                   'model': 'virtio',
                   'pool': __salt__['config.option']('virt.images')
                  }

disklist = __salt__['config.get']('virt:disk', {}).get(profile, default)

看出来没,在没有提供disk的profile的情况下,我们使用的是default的数据,再使用

    for key, val in overlay.items():
        for i, disks in enumerate(disklist):
            for disk in disks:
                if key not in disks[disk]:
                    disklist[i][disk][key] = val

就会获取到disklist=

[{'system': {'format': 'qcow2',
   'model': 'virtio',
   'pool': '/srv/salt-images',
   'size': '8192'}}]


在这里我需要改变pool,那么我咋整呢?我可以用grains,pillar来设置.

root@saltstack:/srv/salt/_grains# more virt_disk_nic.py 
def disk_profile():
    grains = {}
    grains['virt']={'disk':{}}
    grains['virt']['disk']['system']={}
    grains['virt']['disk']['system']=[{'system':{'format':'raw','pool':'/var/lib/libvirt/images'}}]
    return grains

同步grains

root@saltstack:/srv/salt/_grains# salt 'kvm.tiancity.com' saltutil.sync_all
kvm.tiancity.com:
    ----------
    grains:
        - grains.virt_disk_nic
    modules:
    outputters:
    renderers:
    returners:
    states:

测试:
root@saltstack:/srv/salt/_grains# salt 'kvm.tiancity.com' config.get virt:disk --output=json
{
    "kvm.tiancity.com": {
        "system": [
            {
                "system": {
                    "pool": "/var/lib/libvirt/images", 
                    "format": "raw"
                }
            }
        ]
    }
}

那么对应的profile名字是system,所以,如果你想使用另类的profile名字,你仅需要修改的

grains['virt']['disk']['system(profile名字)']={}


接下来,我们再来构造网卡的构造

default = [{'eth0': {}}]

kvm_overlay = {'type': 'bridge', 'source': 'br0', 'model': 'virtio'}

config_data = __salt__['config.get']('virt:nic', {}).get(
            profile_name, default
        )

interfaces=[]

elif isinstance(config_data, list):
        for interface in config_data:
            if isinstance(interface, dict):
                if len(interface.keys()) == 1:
                    append_dict_profile_to_interface_list(interface)
                else:
                    interfaces.append(interface)

以上几处便是将interface网卡相关属性信息添加到interfaces列表中的

interfaces=[{'name':'eth0','type':'bridge','source':'br0','mac':'AC:DE:48:5D:9C:B4','model': 'virtio'}]

那么网卡和磁盘的构造:

def disk_nic():
    grains = {}
    grains['virt']={'disk':{},'nic':{}}
    grains['virt']['disk']['system']={}
    grains['virt']['nic']['nics']=[{'eth0':{'bridge':'br0'}}]
    grains['virt']['disk']['system']=[{'system':{'format':'raw','pool':'/var/lib/libvirt/images'}}]
    return grains

测试:

root@saltstack:/srv/salt/_grains# salt 'kvm.tiancity.com' config.get virt:nic --output=json         
{
    "kvm.tiancity.com": {
        "nics": [
            {
                "eth0": {
                    "bridge": "br0"
                }
            }
        ]
    }
}

好了,我们所有的东西都构造好了,那么我们来执行下,看看能不能正常启动我的虚拟机web20,当然镜像文件已经放置好到/var/lib/libvirt/images/web20/system.raw

开始执行吧...

wKiom1SKnL6xTuXbAABQt9OYuNk924.jpg

秒开....

wKioL1SKnDaCtYhsAAB3pw8XvqA218.jpg

wKioL1SKnFLyVTlbAABY6q_24U0911.jpg

哈哈。下次,我再尝试下,添加一块数据盘和添加一块网卡。


到时再看看能不能正常启动。



本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/1589346,如需转载请自行联系原作者

相关文章
|
2月前
使用qemu来dump虚拟机的内存,然后用crash来分析
使用qemu来dump虚拟机的内存,然后用crash来分析
|
6月前
|
监控 算法 Java
垃圾回收机制与性能调优:描述Java虚拟机(JVM)的垃圾回收算法,并解释为什么需要这些算法。如何使用Java内存分析工具(如VisualVM、JConsole或MAT)来识别和解决内存泄漏问题?
垃圾回收机制与性能调优:描述Java虚拟机(JVM)的垃圾回收算法,并解释为什么需要这些算法。如何使用Java内存分析工具(如VisualVM、JConsole或MAT)来识别和解决内存泄漏问题?
75 1
|
Java 编译器
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
【面试题精讲】int i=0;i=i++,从底层虚拟机角度分析答案
|
缓存 监控 负载均衡
【Java虚拟机】JVM调优和分析案例综合实战
【Java虚拟机】JVM调优和分析案例综合实战
【Java虚拟机】JVM调优和分析案例综合实战
|
存储 缓存 监控
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
220 0
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
|
存储 Java
【JVM原理探索】带你梳理分析虚拟机栈映射源代码的流程
【JVM原理探索】带你梳理分析虚拟机栈映射源代码的流程
139 0
【JVM原理探索】带你梳理分析虚拟机栈映射源代码的流程
|
存储 算法 Java
Java虚拟机-逃逸分析(Escape Analysis)和栈上分配
Java虚拟机-逃逸分析(Escape Analysis)和栈上分配
250 0
Java虚拟机-逃逸分析(Escape Analysis)和栈上分配
|
存储 安全 Java
【新】虚拟机深层系「GC本质底层机制」SafePoint 的深入分析和底层原理探究指南
【新】虚拟机深层系「GC本质底层机制」SafePoint 的深入分析和底层原理探究指南
178 0
|
Ubuntu 编译器 Shell
Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析
Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析
Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析
|
安全 Java Linux
从 Hotspot 虚拟机角度来分析 Java 线程启动
从 Hotspot 虚拟机角度来分析 Java 线程启动
从 Hotspot 虚拟机角度来分析 Java 线程启动

推荐镜像

更多
下一篇
无影云桌面