first draft
This commit is contained in:
commit
09d4930cd2
2
ansible.cfg
Normal file
2
ansible.cfg
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[defaults]
|
||||||
|
inventory = hosts
|
3
group_vars/all.yml
Normal file
3
group_vars/all.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ansible_ssh_private_key_file: private/keyfile
|
||||||
|
libvirt:
|
||||||
|
images: /var/lib/libvirt/images
|
6
group_vars/docker_nodes.yml
Normal file
6
group_vars/docker_nodes.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
virt:
|
||||||
|
host: localhost
|
||||||
|
image: fedora-34-x64.qcow2
|
||||||
|
cpus: 2
|
||||||
|
ram: 2048
|
||||||
|
hdd: 10g
|
0
host_vars/localhost
Normal file
0
host_vars/localhost
Normal file
9
hosts
Normal file
9
hosts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[virt]
|
||||||
|
localhost ansible_connection=local
|
||||||
|
|
||||||
|
[docker_nodes]
|
||||||
|
docker[1:3]
|
||||||
|
|
||||||
|
[gitlab]
|
||||||
|
|
||||||
|
[zabbix]
|
13
play-00-setup-virt-env.yml
Normal file
13
play-00-setup-virt-env.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
- hosts: virt
|
||||||
|
become: true
|
||||||
|
gather_facts: false
|
||||||
|
roles:
|
||||||
|
- virt
|
||||||
|
|
||||||
|
- hosts: docker_nodes
|
||||||
|
gather_facts: false
|
||||||
|
serial: 1
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- virt_vm
|
2
private/.gitignore
vendored
Normal file
2
private/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!/.gitignore
|
31
roles/virt/tasks/main.yml
Normal file
31
roles/virt/tasks/main.yml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
- name: fetch images
|
||||||
|
get_url:
|
||||||
|
dest: "{{ libvirt.images }}/{{ item.dest }}"
|
||||||
|
group: root
|
||||||
|
owner: root
|
||||||
|
mode: u=rw,g=r,o=r
|
||||||
|
url: "{{ item.url }}"
|
||||||
|
checksum: "{{ item.checksum }}"
|
||||||
|
with_items:
|
||||||
|
- dest: fedora-34-x64.qcow2
|
||||||
|
checksum: sha1:fc08ad81a893b8253ec3bf6e25273cbb4fc8eafb
|
||||||
|
url: https://download.fedoraproject.org/pub/fedora/linux/releases/34/Cloud/x86_64/images/Fedora-Cloud-Base-34-1.2.x86_64.qcow2
|
||||||
|
|
||||||
|
- name: virt_net "docker" present
|
||||||
|
virt_net:
|
||||||
|
autostart: yes
|
||||||
|
name: docker
|
||||||
|
state: present
|
||||||
|
xml: '{{ lookup("template", "network/docker.xml.j2") }}'
|
||||||
|
|
||||||
|
- name: virt_net "docker" autostart
|
||||||
|
virt_net:
|
||||||
|
name: docker
|
||||||
|
autostart: yes
|
||||||
|
|
||||||
|
- name: virt_net "docker" active
|
||||||
|
virt_net:
|
||||||
|
name: docker
|
||||||
|
state: active
|
||||||
|
autostart: yes
|
10
roles/virt/templates/network/docker.xml.j2
Normal file
10
roles/virt/templates/network/docker.xml.j2
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<network>
|
||||||
|
<name>docker</name>
|
||||||
|
<bridge name="virbr1" stp="on" delay="0"/>
|
||||||
|
<domain name="docker"/>
|
||||||
|
<ip address="192.168.100.1" netmask="255.255.255.0">
|
||||||
|
<dhcp>
|
||||||
|
<range start="192.168.100.101" end="192.168.100.200"/>
|
||||||
|
</dhcp>
|
||||||
|
</ip>
|
||||||
|
</network>
|
71
roles/virt_vm/tasks/create_vm.yml
Normal file
71
roles/virt_vm/tasks/create_vm.yml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
# VM PREPARATION
|
||||||
|
|
||||||
|
- name: create vm storage
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
copy:
|
||||||
|
src: "{{ libvirt.images }}/{{ virt.image }}"
|
||||||
|
dest: "{{ libvirt.images }}/{{ inventory_hostname }}.qcow2"
|
||||||
|
force: no
|
||||||
|
|
||||||
|
- name: set vm storage size
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
shell:
|
||||||
|
cmd: qemu-img resize "{{ libvirt.images }}/{{ inventory_hostname }}.qcow2" "{{ virt.hdd }}"
|
||||||
|
|
||||||
|
- name: define vm
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
virt:
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
xml: '{{ lookup("template", "fedora-34.xml.j2") }}'
|
||||||
|
command: define
|
||||||
|
|
||||||
|
- name: make temp dir for cloud-init (CI)
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
tempfile:
|
||||||
|
state: directory
|
||||||
|
register: cidata
|
||||||
|
|
||||||
|
|
||||||
|
# CLOUD-INIT PREPARATION
|
||||||
|
|
||||||
|
- name: create CI-metadata
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
template:
|
||||||
|
src: ci-metadata.j2
|
||||||
|
dest: "{{ cidata.path }}/meta-data"
|
||||||
|
|
||||||
|
- name: create CI-userdata
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
template:
|
||||||
|
src: ci-userdata.j2
|
||||||
|
dest: "{{ cidata.path }}/user-data"
|
||||||
|
|
||||||
|
- name: create CI ISO
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
shell:
|
||||||
|
cmd: genisoimage -output "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso" -volid cidata -joliet -rock user-data meta-data
|
||||||
|
chdir: "{{ cidata.path }}"
|
||||||
|
|
||||||
|
# VM INIT
|
||||||
|
|
||||||
|
- name: attach CI to vm
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
shell:
|
||||||
|
cmd: virsh attach-disk "{{ inventory_hostname }}" --source "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso" --target sda --type cdrom --mode readonly --persistent
|
||||||
|
|
||||||
|
# CLOUD-INIT CLEANUP
|
||||||
|
|
||||||
|
- name: delete CI temp dir
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
file:
|
||||||
|
path: "{{ cidata.path }}"
|
||||||
|
state: absent
|
||||||
|
force: true
|
||||||
|
|
||||||
|
- name: delete CI ISO
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
file:
|
||||||
|
path: "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso"
|
||||||
|
state: absent
|
||||||
|
|
13
roles/virt_vm/tasks/main.yml
Normal file
13
roles/virt_vm/tasks/main.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
- name: check vm existance
|
||||||
|
delegate_to: "{{ virt.host }}"
|
||||||
|
stat:
|
||||||
|
path: "{{ libvirt.images }}/{{ inventory_hostname }}.qcow2"
|
||||||
|
get_checksum: false
|
||||||
|
get_attributes: false
|
||||||
|
get_mime: false
|
||||||
|
register: vmimg
|
||||||
|
|
||||||
|
- name: create vm
|
||||||
|
include_tasks: create_vm.yml
|
||||||
|
when: not vmimg.stat.exists
|
2
roles/virt_vm/templates/ci-metadata.j2
Normal file
2
roles/virt_vm/templates/ci-metadata.j2
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
instance-id: {{ inventory_hostname }}
|
||||||
|
local-hostname: {{ inventory_hostname }}
|
9
roles/virt_vm/templates/ci-userdata.j2
Normal file
9
roles/virt_vm/templates/ci-userdata.j2
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#cloud-config
|
||||||
|
|
||||||
|
users:
|
||||||
|
- name: ansible
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- {{ lookup("file", "private/keyfile.pub") }}
|
||||||
|
sudo: ['ALL=(ALL) NOPASSWD:ALL']
|
||||||
|
groups: sudo
|
||||||
|
shell: /bin/bash
|
137
roles/virt_vm/templates/fedora-34.xml.j2
Normal file
137
roles/virt_vm/templates/fedora-34.xml.j2
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>{{ inventory_hostname }}</name>
|
||||||
|
<metadata>
|
||||||
|
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
|
||||||
|
<libosinfo:os id="http://oracle.com/ol/8.2"/>
|
||||||
|
</libosinfo:libosinfo>
|
||||||
|
</metadata>
|
||||||
|
<memory unit="MiB">{{ virt.ram }}</memory>
|
||||||
|
<currentMemory unit="MiB">{{ virt.ram }}</currentMemory>
|
||||||
|
<vcpu placement="static">{{ virt.cpus }}</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch="x86_64" machine="pc-q35-5.2">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
<vmport state="off"/>
|
||||||
|
</features>
|
||||||
|
<cpu mode="host-model" check="partial"/>
|
||||||
|
<clock offset="utc">
|
||||||
|
<timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
<timer name="pit" tickpolicy="delay"/>
|
||||||
|
<timer name="hpet" present="no"/>
|
||||||
|
</clock>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled="no"/>
|
||||||
|
<suspend-to-disk enabled="no"/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
<disk type="file" device="disk">
|
||||||
|
<driver name="qemu" type="qcow2" discard="unmap" detect_zeroes="unmap"/>
|
||||||
|
<source file="{{ libvirt.images }}/{{ inventory_hostname }}.qcow2"/>
|
||||||
|
<target dev="vda" bus="virtio"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
|
||||||
|
</disk>
|
||||||
|
<controller type="usb" index="0" model="qemu-xhci" ports="15">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="sata" index="0">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="0" model="pcie-root"/>
|
||||||
|
<controller type="pci" index="1" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="1" port="0x10"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="2" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="2" port="0x11"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="3" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="3" port="0x12"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="4" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="4" port="0x13"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="5" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="5" port="0x14"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="6" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="6" port="0x15"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="7" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="7" port="0x16"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="virtio-serial" index="0">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
|
||||||
|
</controller>
|
||||||
|
<interface type="network">
|
||||||
|
<source network="docker"/>
|
||||||
|
<model type="virtio"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
|
||||||
|
</interface>
|
||||||
|
<serial type="pty">
|
||||||
|
<target type="isa-serial" port="0">
|
||||||
|
<model name="isa-serial"/>
|
||||||
|
</target>
|
||||||
|
</serial>
|
||||||
|
<console type="pty">
|
||||||
|
<target type="serial" port="0"/>
|
||||||
|
</console>
|
||||||
|
<channel type="unix">
|
||||||
|
<target type="virtio" name="org.qemu.guest_agent.0"/>
|
||||||
|
<address type="virtio-serial" controller="0" bus="0" port="1"/>
|
||||||
|
</channel>
|
||||||
|
<channel type="spicevmc">
|
||||||
|
<target type="virtio" name="com.redhat.spice.0"/>
|
||||||
|
<address type="virtio-serial" controller="0" bus="0" port="2"/>
|
||||||
|
</channel>
|
||||||
|
<input type="tablet" bus="usb">
|
||||||
|
<address type="usb" bus="0" port="1"/>
|
||||||
|
</input>
|
||||||
|
<input type="mouse" bus="ps2"/>
|
||||||
|
<input type="keyboard" bus="ps2"/>
|
||||||
|
<graphics type="spice" autoport="yes">
|
||||||
|
<listen type="address"/>
|
||||||
|
<image compression="off"/>
|
||||||
|
</graphics>
|
||||||
|
<sound model="ich9">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
|
||||||
|
</sound>
|
||||||
|
<video>
|
||||||
|
<model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
|
||||||
|
</video>
|
||||||
|
<redirdev bus="usb" type="spicevmc">
|
||||||
|
<address type="usb" bus="0" port="2"/>
|
||||||
|
</redirdev>
|
||||||
|
<redirdev bus="usb" type="spicevmc">
|
||||||
|
<address type="usb" bus="0" port="3"/>
|
||||||
|
</redirdev>
|
||||||
|
<memballoon model="virtio">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
|
||||||
|
</memballoon>
|
||||||
|
<rng model="virtio">
|
||||||
|
<backend model="random">/dev/urandom</backend>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
|
||||||
|
</rng>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
Loading…
Reference in New Issue
Block a user