summaryrefslogtreecommitdiffstats
path: root/xci/playbooks/roles/create-nodes/tasks/prepare_libvirt.yml
blob: 06afaec3c6dfd169f1b3762fd4354933968c1643 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
---
- name: "Restart libvirt service"
  service: name="{{libvirt_service_name}}" state=restarted

# NOTE(Shrews) We need to enable ip forwarding for the libvirt bridge to
# operate properly with dnsmasq. This should be done before starting dnsmasq.
- name: "Enable IP forwarding in sysctl"
  sysctl:
    name: "net.ipv4.ip_forward"
    value: 1
    sysctl_set: yes
    state: present
    reload: yes

# NOTE(Shrews) Ubuntu packaging+apparmor issue prevents libvirt from loading
# the ROM from /usr/share/misc.
- name: "Look for sgabios in {{ sgabios_dir }}"
  stat: path={{ sgabios_dir }}/sgabios.bin
  register: test_sgabios_qemu

- name: "Look for sgabios in /usr/share/misc"
  stat: path=/usr/share/misc/sgabios.bin
  register: test_sgabios_misc

- name: "Place sgabios.bin"
  command: cp /usr/share/misc/sgabios.bin /usr/share/qemu/sgabios.bin
  when: >
    test_sgabios_qemu == false and
    test_sgabios_misc == true

# NOTE(TheJulia): In order to prevent conflicts, stop
# dnsmasq to prevent conflicts with libvirt restarting.
# TODO(TheJulia): We shouldn't need to do this, but the
# libvirt dhcp instance conflicts withour specific config
# and taking this path allows us to not refactor dhcp at
# this moment. Our DHCP serving should be refactored
# so we don't need to do this.
- name: "Stop default dnsmasq service"
  service:
    name: dnsmasq
    state: stopped
  ignore_errors: true

# NOTE(TheJulia): Seems if you test in a VM, this might
# be helpful if your installed your host originally
# with the default 192.168.122/0/24 network
- name: destroy libvirt network
  virt_net:
    name: "{{ item }}"
    state: absent
    uri: "{{ vm_libvirt_uri }}"

# Ubuntu creates a default network when installing libvirt.
# This network uses the 192.168.122.0/24 range and thus
# conflicts with our admin network
- name: destroy libvirt network
  virt_net:
    name: "default"
    state: absent
    uri: "{{ vm_libvirt_uri }}"

- name: ensure libvirt network is present
  virt_net:
    name: "{{ item }}"
    state: present
    xml: "{{ lookup('template', 'net-'+item+'.xml.j2') }}"
    uri: "{{ vm_libvirt_uri }}"

- name: find facts on libvirt networks
  virt_net:
    command: facts
    uri: "{{ vm_libvirt_uri }}"

- name: "Delete network interface if virtual network is not active"
  command: ip link del {{ ansible_libvirt_networks[item].bridge }}
  when:
    - ansible_libvirt_networks[item].state != 'active'
    - vm_libvirt_uri == 'qemu:///system'
  ignore_errors: yes

- name: set libvirt network to autostart
  virt_net:
    name: "{{ item }}"
    autostart: yes
    uri: "{{ vm_libvirt_uri }}"

- name: ensure libvirt network is running
  virt_net:
    name: "{{ item }}"
    state: active
    uri: "{{ vm_libvirt_uri }}"

- name: get libvirt network status
  virt_net:
    name: "{{ item }}"
    command: status
    uri: "{{ vm_libvirt_uri }}"
  register: test_vm_net_status

- name: fail if libvirt network is not active
  assert:
    that: test_vm_net_status.status == 'active'

- name: define a libvirt pool if not set
  virt_pool:
    name: "{{ node_storage_pool }}"
    state: present
    uri: "{{ vm_libvirt_uri }}"
    xml: "{{ lookup('template', 'pool_dir.xml.j2') }}"

- name: ensure libvirt pool is running
  virt_pool:
    name: "{{ node_storage_pool }}"
    state: active
    autostart: yes
    uri: "{{ vm_libvirt_uri }}"

- name: create dir for bm logs
  file:
    state: directory
    path: "{{ node_logdir }}"
    recurse: yes
    mode: "0755"

- name: install virtualbmc
  pip:
    name: virtualbmc
    version: 1.5 # >1.3 needs zmq dependency.
    virtualenv: "{{ lookup('env', 'XCI_VENV') }}"

- name: Create directory for the config of vbmc
  file:
    path: /etc/virtualbmc
    state: directory

- name: Place the config for virtualbmc
  copy:
    src: virtualbmc.conf
    dest: /etc/virtualbmc/virtualbmc.conf