summaryrefslogtreecommitdiffstats
path: root/playbooks/libvirt/openshift-cluster/launch_instances.yml
blob: 3bbcae981a3d50ae85599744a3908245eab630d4 (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
- name: Create the libvirt storage directory for openshift
  file:
    dest: '{{ libvirt_storage_pool_path }}'
    state: directory

- name: Download Base Cloud image
  get_url:
    url: '{{ base_image_url }}'
    sha256sum: '{{ base_image_sha256 }}'
    dest: '{{ libvirt_storage_pool_path }}/{{ base_image_name }}'

- name: Create the cloud-init config drive path
  file:
    dest: '{{ libvirt_storage_pool_path }}/{{ item }}_configdrive/openstack/latest'
    state: directory
  with_items: '{{ instances }}'

- name: Create the cloud-init config drive files
  template:
    src: '{{ item[1] }}'
    dest: '{{ libvirt_storage_pool_path }}/{{ item[0] }}_configdrive/openstack/latest/{{ item[1] }}'
  with_nested:
    - '{{ instances }}'
    - [ user-data, meta-data ]

- name: Create the cloud-init config drive
  command: 'genisoimage -output {{ libvirt_storage_pool_path }}/{{ item }}_cloud-init.iso -volid cidata -joliet -rock user-data meta-data'
  args:
    chdir: '{{ libvirt_storage_pool_path }}/{{ item }}_configdrive/openstack/latest'
    creates: '{{ libvirt_storage_pool_path }}/{{ item }}_cloud-init.iso'
  with_items: '{{ instances }}'

- name: Create the libvirt storage pool for openshift
  command: 'virsh -c {{ libvirt_uri }} pool-create-as {{ libvirt_storage_pool }} dir --target {{ libvirt_storage_pool_path }}'
  ignore_errors: yes

- name: Refresh the libvirt storage pool for openshift
  command: 'virsh -c {{ libvirt_uri }} pool-refresh {{ libvirt_storage_pool }}'

- name: Create VMs drives
  command: 'virsh -c {{ libvirt_uri }} vol-create-as {{ libvirt_storage_pool }} {{ item }}.qcow2 10G --format qcow2 --backing-vol {{ base_image_name }} --backing-vol-format qcow2'
  with_items: '{{ instances }}'

- name: Create VMs
  virt:
    name: '{{ item }}'
    command: define
    xml: "{{ lookup('template', '../templates/domain.xml') }}"
    uri: '{{ libvirt_uri }}'
  with_items: '{{ instances }}'

- name: Start VMs
  virt:
    name: '{{ item }}'
    state: running
    uri: '{{ libvirt_uri }}'
  with_items: '{{ instances }}'

- name: Collect MAC addresses of the VMs
  shell: 'virsh -c {{ libvirt_uri }} dumpxml {{ item }} | xmllint --xpath "string(//domain/devices/interface/mac/@address)" -'
  register: scratch_mac
  with_items: '{{ instances }}'

- name: Wait for the VMs to get an IP
  command: "egrep -c '{{ scratch_mac.results | oo_collect('stdout') | join('|') }}' /proc/net/arp"
  ignore_errors: yes
  register: nb_allocated_ips
  until: nb_allocated_ips.stdout == '{{ instances | length }}'
  retries: 30
  delay: 1

- name: Collect IP addresses of the VMs
  shell: "awk '/{{ item.stdout }}/ {print $1}' /proc/net/arp"
  register: scratch_ip
  with_items: '{{ scratch_mac.results }}'

- set_fact:
    ips: "{{ scratch_ip.results | oo_collect('stdout') }}"

- name: Add new instances
  add_host:
    hostname: '{{ item.0 }}'
    ansible_ssh_host: '{{ item.1 }}'
    ansible_ssh_user: root
    groups: 'tag_env-{{ cluster }}, tag_host-type-{{ type }}, tag_env-host-type-{{ cluster }}-openshift-{{ type }}'
  with_together:
    - instances
    - ips

- name: Wait for ssh
  wait_for:
    host: '{{ item }}'
    port: 22
  with_items: ips

- name: Wait for root user setup
  command: 'ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null root@{{ item }} echo root user is setup'
  register: result
  until: result.rc == 0
  retries: 30
  delay: 1
  with_items: ips