#
# This task is the thing that creates a vm for later use
#
- include_vars: dir=/srv/web/infra/ansible/vars/all/ ignore_files=README

- name: get vm list
  delegate_to: "{{ vmhost }}"
  virt: command=list_vms
  register: result
  check_mode: no

#- name: ensure no old facts exist
#  delegate_to: localhost
#  file: path=/root/.ansible_facts_cache/{{ inventory_hostname }} state=absent
#  when: inventory_hostname not in result.list_vms

- name: ensure the lv for the guest is made
  lvol: lv={{ inventory_hostname }} vg={{ volgroup }} size={{ lvm_size }} state=present
  delegate_to: "{{ vmhost }}"
  when: inventory_hostname not in result.list_vms

- name: run the virt-install
  shell: "{{ virt_install_command }}"
  delegate_to: "{{ vmhost }}"
  when: inventory_hostname not in result.list_vms

- name: wait for the install to finish -> {{ inventory_hostname }}
  virt: command=status name={{ inventory_hostname }}
  register: vmstatus
  until: vmstatus.status == 'shutdown'
  delegate_to: "{{ vmhost }}"
  retries: 1500
  delay: 20
  when: inventory_hostname not in result.list_vms

- name: ARMv7 copy the kernel out
  shell: "virt-builder --get-kernel {{ volgroup }}/{{ inventory_hostname }} --output /var/lib/libvirt/images/  | awk -F/ '{print $NF}' > /var/lib/libvirt/images/{{ inventory_hostname }}-details.txt"
  delegate_to: "{{ vmhost}}"
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: ARMv7 extract the kernel details
  command: "head -n1 /var/lib/libvirt/images/{{ inventory_hostname }}-details.txt"
  delegate_to: "{{ vmhost}}"
  register: host_armv7kernel
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: ARMv7 extract the initrd details
  command: "tail -n1 /var/lib/libvirt/images/{{ inventory_hostname }}-details.txt"
  delegate_to: "{{ vmhost}}"
  register: host_armv7initrd
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: ARMv7 copy the cmdline out
  shell: "virt-cat -a {{ volgroup }}/{{ inventory_hostname }} /boot/extlinux/extlinux.conf | grep -m1 append | sed -e 's/append //'"
  delegate_to: "{{ vmhost}}"
  register: host_cmdline
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: ARMv7 update the virt parameters
  virt_boot: domain={{ inventory_hostname }} kernel=/var/lib/libvirt/images/{{ host_armv7kernel.stdout }} initrd=/var/lib/libvirt/images/{{ host_armv7initrd.stdout }} cmdline={{ host_cmdline.stdout }}
  delegate_to: "{{ vmhost }}"
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: when armv7kernelupdate is set we are done
  fail: msg="armv7kernelupdate was set, so kernel has been updated and target booted up"
  when: armv7kernelupdate is defined

- name: start the vm up and set it to autostart
  virt: state=running name={{ inventory_hostname }} autostart=True
  delegate_to: "{{ vmhost }}"
  when: inventory_hostname not in result.list_vms

- name: ARMv7 pause while VM updates
  pause: seconds=5
  when: inventory_hostname.startswith('buildvm-armv7') and ( inventory_hostname not in result.list_vms or armv7kernelupdate is defined )
  tags:
    - armv7-kernel

- name: make sure there is no old ssh host key for the host still around
  local_action: known_hosts path={{item}} host={{ inventory_hostname }} state=absent
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  when: inventory_hostname not in result.list_vms

- name: (osbs-control01.stg) make sure there is no old ssh host key for the host still around
  known_hosts: path={{item}} host={{ inventory_hostname }} state=absent
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  - /etc/ssh/ssh_known_hosts
  when: inventory_hostname not in result.list_vms and inventory_hostname in groups['osbs-masters-stg']+groups['osbs-nodes-stg']
  delegate_to: osbs-control01.stg.phx2.fedoraproject.org

- name: (osbs-control01) make sure there is no old ssh host key for the host still around
  known_hosts: path={{item}} host={{ inventory_hostname }} state=absent
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  - /etc/ssh/ssh_known_hosts
  when: inventory_hostname not in result.list_vms and inventory_hostname in groups['osbs-masters']+groups['osbs-nodes']
  delegate_to: osbs-control01.phx2.fedoraproject.org

- name: wait for ssh on the vm to start back
  local_action: wait_for delay=10 host={{ inventory_hostname }} port=22 state=started timeout=1200
  when: inventory_hostname not in result.list_vms

- name: gather ssh host key from new instance
  local_action: command ssh-keyscan -t rsa {{ inventory_hostname }}
  ignore_errors: True
  register: hostkey
  when: inventory_hostname not in result.list_vms

- name: add new ssh host key (until we can sign it)
  local_action: known_hosts path={{item}} key="{{ hostkey.stdout }}" host={{ inventory_hostname }} state=present
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  when: inventory_hostname not in result.list_vms

- name: (osbs-control01.stg) add new ssh host key
  known_hosts: path={{item}} key="{{ hostkey.stdout }}" host={{ inventory_hostname }} state=present
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  - /etc/ssh/ssh_known_hosts
  when: inventory_hostname not in result.list_vms and inventory_hostname in groups['osbs-masters-stg']+groups['osbs-nodes-stg']
  delegate_to: osbs-control01.stg.phx2.fedoraproject.org

- name: (osbs-control01) add new ssh host key
  known_hosts: path={{item}} key="{{ hostkey.stdout }}" host={{ inventory_hostname }} state=present
  ignore_errors: True
  with_items:
  - /root/.ssh/known_hosts
  - /etc/ssh/ssh_known_hosts
  when: inventory_hostname not in result.list_vms and inventory_hostname in groups['osbs-masters']+groups['osbs-nodes']
  delegate_to: osbs-control01.phx2.fedoraproject.org

