Add libvirt-host role
Configures a host as a Libvirt/KVM hypervisor. It can also create pools and networks
This commit is contained in:
parent
4751a96cc5
commit
c2771d7c0e
61
ansible/roles/libvirt-host/README.md
Normal file
61
ansible/roles/libvirt-host/README.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
Libvirt Host
|
||||||
|
============
|
||||||
|
|
||||||
|
This role configures a host as a Libvirt/KVM hypervisor. It can also configure
|
||||||
|
storage pools and networks on the host.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
The host should have Virtualization Technology (VT) enabled.
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
`libvirt_host_networks` is a list of pools to define and start. Each item
|
||||||
|
should be a dict containing the following items:
|
||||||
|
- `name` The name of the pool.
|
||||||
|
- `type` The type of the pool, currently only `dir` is supported.
|
||||||
|
- `capacity` The capacity, in bytes, of the pool.
|
||||||
|
- `path` The absolute path to the pool's backing directory.
|
||||||
|
- `mode` The access mode of the pool.
|
||||||
|
- `owner` The owner of the pool.
|
||||||
|
- `group` The group of the pool.
|
||||||
|
|
||||||
|
`libvirt_host_networks` is a list of networks to define and start. Each item
|
||||||
|
should be a dict containing the following items:
|
||||||
|
- `name` The name of the network.
|
||||||
|
- `mode` The forwarding mode of the network, currently only `bridge` is
|
||||||
|
supported.
|
||||||
|
- bridge` The name of the bridge interface for this network.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
---
|
||||||
|
- name: Ensure that Libvirt is configured
|
||||||
|
hosts: all
|
||||||
|
roles:
|
||||||
|
- role: libvirt-host
|
||||||
|
libvirt_host_pools:
|
||||||
|
- name: my-pool
|
||||||
|
type: dir
|
||||||
|
capacity: 1024
|
||||||
|
path: /path/to/pool
|
||||||
|
mode: 0755
|
||||||
|
owner: my-user
|
||||||
|
group: my-group
|
||||||
|
libvirt_host_networks:
|
||||||
|
- name: br-example
|
||||||
|
mode: bridge
|
||||||
|
bridge: br-example
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Mark Goddard (<mark@stackhpc.com>)
|
19
ansible/roles/libvirt-host/defaults/main.yml
Normal file
19
ansible/roles/libvirt-host/defaults/main.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
# List of pools to define and start.
|
||||||
|
# Each item should be a dict containing the following items:
|
||||||
|
# name: The name of the pool.
|
||||||
|
# type: The type of the pool, currently only 'dir' is supported.
|
||||||
|
# capacity: The capacity, in bytes, of the pool.
|
||||||
|
# path: The absolute path to the pool's backing directory.
|
||||||
|
# mode: The access mode of the pool.
|
||||||
|
# owner: The owner of the pool.
|
||||||
|
# group: The group of the pool.
|
||||||
|
libvirt_host_pools: []
|
||||||
|
|
||||||
|
# List of networks to define and start.
|
||||||
|
# Each item should be a dict containing the following items:
|
||||||
|
# name: The name of the network.
|
||||||
|
# mode: The forwarding mode of the network, currently only 'bridge' is
|
||||||
|
# supported.
|
||||||
|
# bridge: The name of the bridge interface for this network.
|
||||||
|
libvirt_host_networks: []
|
19
ansible/roles/libvirt-host/meta/main.yml
Normal file
19
ansible/roles/libvirt-host/meta/main.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Mark Goddard
|
||||||
|
description: >
|
||||||
|
Role to install and configure a host as a Libvirt/KVM hypervisor
|
||||||
|
company: StackHPC Ltd
|
||||||
|
license: Apache2
|
||||||
|
min_ansible_version: 2.0
|
||||||
|
platforms:
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- 7
|
||||||
|
galaxy_tags:
|
||||||
|
- cloud
|
||||||
|
- kvm
|
||||||
|
- libvirt
|
||||||
|
- vm
|
||||||
|
|
||||||
|
dependencies: []
|
19
ansible/roles/libvirt-host/tasks/install.yml
Normal file
19
ansible/roles/libvirt-host/tasks/install.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure the libvirt package is installed
|
||||||
|
yum:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: installed
|
||||||
|
with_items:
|
||||||
|
- libvirt
|
||||||
|
- libvirt-daemon-kvm
|
||||||
|
- libvirt-python
|
||||||
|
- python-lxml
|
||||||
|
- qemu-kvm
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure the libvirt daemon is started and enabled
|
||||||
|
service:
|
||||||
|
name: libvirtd
|
||||||
|
state: running
|
||||||
|
enabled: yes
|
||||||
|
become: True
|
5
ansible/roles/libvirt-host/tasks/main.yml
Normal file
5
ansible/roles/libvirt-host/tasks/main.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- include: validate.yml
|
||||||
|
- include: install.yml
|
||||||
|
- include: pools.yml
|
||||||
|
- include: networks.yml
|
22
ansible/roles/libvirt-host/tasks/networks.yml
Normal file
22
ansible/roles/libvirt-host/tasks/networks.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure libvirt networks are defined
|
||||||
|
virt_net:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
command: define
|
||||||
|
xml: "{{ item.xml | default(lookup('template', 'network.xml.j2')) }}"
|
||||||
|
with_items: "{{ libvirt_host_networks }}"
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure libvirt networks are active
|
||||||
|
virt_net:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
state: active
|
||||||
|
with_items: "{{ libvirt_host_networks }}"
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure libvirt networks are started on boot
|
||||||
|
virt_net:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
autostart: yes
|
||||||
|
with_items: "{{ libvirt_host_networks }}"
|
||||||
|
become: True
|
32
ansible/roles/libvirt-host/tasks/pools.yml
Normal file
32
ansible/roles/libvirt-host/tasks/pools.yml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure libvirt storage pool directories exist
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
owner: "{{ item.owner }}"
|
||||||
|
group: "{{ item.group }}"
|
||||||
|
mode: "{{ item.mode|int(base=8) }}"
|
||||||
|
state: directory
|
||||||
|
with_items: "{{ libvirt_host_pools }}"
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure libvirt storage pools are defined
|
||||||
|
virt_pool:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
command: define
|
||||||
|
xml: "{{ item.xml | default(lookup('template', 'pool.xml.j2')) }}"
|
||||||
|
with_items: "{{ libvirt_host_pools }}"
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure libvirt storage pools are active
|
||||||
|
virt_pool:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
state: active
|
||||||
|
with_items: "{{ libvirt_host_pools }}"
|
||||||
|
become: True
|
||||||
|
|
||||||
|
- name: Ensure libvirt storage pools are started on boot
|
||||||
|
virt_pool:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
autostart: yes
|
||||||
|
with_items: "{{ libvirt_host_pools }}"
|
||||||
|
become: True
|
13
ansible/roles/libvirt-host/tasks/validate.yml
Normal file
13
ansible/roles/libvirt-host/tasks/validate.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
- name: Verify that Virtualization Technology (VT) is enabled
|
||||||
|
command: grep -c -E 'svm|vmx' /proc/cpuinfo
|
||||||
|
changed_when: False
|
||||||
|
failed_when: False
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Fail if Virtualization Technology (VT) is disabled
|
||||||
|
fail:
|
||||||
|
msg: >
|
||||||
|
Virtualization Technology (VT) is currently disabled. Please enable VT
|
||||||
|
before running this role again.
|
||||||
|
when: result.rc != 0
|
5
ansible/roles/libvirt-host/templates/network.xml.j2
Normal file
5
ansible/roles/libvirt-host/templates/network.xml.j2
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<network connections='1'>
|
||||||
|
<name>{{ item.name }}</name>
|
||||||
|
<forward mode='{{ item.mode }}'/>
|
||||||
|
<bridge name='{{ item.bridge }}'/>
|
||||||
|
</network>
|
7
ansible/roles/libvirt-host/templates/pool.xml.j2
Normal file
7
ansible/roles/libvirt-host/templates/pool.xml.j2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<pool type='{{ item.type }}'>
|
||||||
|
<name>{{ item.name }}</name>
|
||||||
|
<capacity unit='bytes'>{{ item.capacity }}</capacity>
|
||||||
|
<target>
|
||||||
|
<path>{{ item.path }}</path>
|
||||||
|
</target>
|
||||||
|
</pool>
|
Loading…
Reference in New Issue
Block a user