使用 Ansible 自动化创建 KVM虚拟机

接上一篇 kvm虚拟机自动化配置IP

本文主要介绍如何使用 Ansible 自动化创建 KVM 虚拟机

代码如下 kvm.yml

---
- hosts:   kvm
  remote_user: wangzezhi
  sudo: yes
  vars:
    image_name: centos7_2_v2_auto
    instance_name: '{{ name }}'
    instance_dir: '{{ dir }}'
    tem_dir: /home/wangzezhi/ops/ansible/playbooks/templates
    tem_file: "{{ tem_dir }}/set_ip_tem.sh.j2"
    file_name: /tmp/set_ip.sh

  tasks:
  - name: create the file set_ip.sh
    template: src={{ tem_file }} dest={{ file_name }}
    tags: file

  - name: clone the instance
    command: virt-clone -o {{ image_name }} -n {{ instance_name }}  -f /{{ instance_dir }}/vm-images/{{ instance_name }}.qcow2
    tags: clone

  - name: copy in the  file set_ip.sh
    shell: virt-copy-in -d {{ instance_name }} {{ file_name }} /opt/
    tags: file_copy_in

  - name: start the instance
    shell: virsh start {{ instance_name }}
    tags: start

Playbook 详解:

  • 根据变量动态生成 set_ip.sh 这个文件,用来配置虚拟机 IP 信息
  • 通过 KVM 模板克隆新的虚拟机
  • set_ip.sh 这个文件注入新的虚拟机
  • 启动虚拟机

模板文件 set_ip_tem.sh.j2

#!/bin/bash
#for kvm instance configure the ip address

cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-eth1  
DEVICE="eth1"  
ONBOOT=yes  
BOOTPROTO=static  
IPADDR={{ ip }}  
NETMASK={{ netmask }}  
EOF

/etc/init.d/network restart

sed -i '/set_ip/ d' /etc/rc.d/rc.local  

使用方法:

ansible-playbook kvm.yml -e "name=vm01 dir=data2 ip=192.168.1.17 netmask=255.255.255.0"  

指定(实例名字,目录,IPNETMASK)这四个变量,就可以自动化地创建 KVM 虚拟机