#
# 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
  vars:
    ansible_python_interpreter: "{{ hostvars[vmhost]['ansible_python']['executable'] }}"
  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: 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: 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.{{ datacenter }}.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.{{ datacenter }}.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.{{ datacenter }}.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.{{ datacenter }}.fedoraproject.org

- name: gather facts
  setup:
  check_mode: no
  ignore_errors: True
  register: facts
  when: inventory_hostname not in result.list_vms
