---

- name: proxy
  when:
    - proxy_http | d()
    - proxy_https | d()
  include_role:
    name: proxy

- name: install requirements
  apt:
    force_apt_get: true
    install_recommends: false
    name: "{{ conf_req_packages }}"

- name: clone envsetup repository
  when: not offline_mode | d(false)
  ignore_errors: true
  register: conf_clone
  git:
    repo: "{{ conf_repo_url }}"
    version: "{{ conf_repo_version }}"
    dest: "{{ conf_repo_dest }}"

- name: ask to continue
  when:
    - not offline_mode | d(false)
    - conf_clone is failed
  pause:
    prompt: "Previous task failed, it may be normal if you have local changes in the commited files, do you want to continue anyway?"
    seconds: 30

- name: generate root ssh key pair
  register: conf_root
  user:
    name: root
    generate_ssh_key: true
    ssh_key_type: ed25519
    ssh_key_file: .ssh/id_ed25519

- name: check if auto-generated-conf.sh exists
  check_mode: false
  register: check_conf
  stat:
    path: "{{ conf_repo_dest }}/auto-generated-conf.sh"

- name: check if conf.sh exists
  check_mode: false
  register: check_local_conf
  stat:
    path: "{{ conf_repo_dest }}/conf.sh"

- name: download conf and update ssh public key with activation key
  when: skyreach_activation_key | d(false)
  register: conf_dl_ak
  changed_when: conf_dl_ak.status == 200
  failed_when:
    - conf_dl_ak.status != 200
    - not check_conf.stat.exists
    - not skyreach_system_key
  uri:
    url: https://{{ conf_host }}/erp/credentials/envsetup-conf.sh
    method: POST
    body_format: form-urlencoded
    body:
      key: "{{ skyreach_activation_key }}"
      public_key: "{{ conf_root.ssh_public_key }}"
    return_content: true
    validate_certs: "{{ conf_valid_cert }}"

- name: download conf and update ssh public key with system key
  when:
    - not check_conf.stat.exists or conf_update
    - skyreach_system_key | d(false)
  register: conf_dl_sk
  changed_when: conf_dl_sk.status == 200
  failed_when:
    - conf_dl_sk.status != 200
    - not check_conf.stat.exists
  uri:
    url: https://{{ conf_host }}/erp/credentials/envsetup-conf.sh
    method: POST
    body_format: form-urlencoded
    body:
      api_key: "{{ skyreach_system_key }}"
      public_key: "{{ conf_root.ssh_public_key }}"
    return_content: true
    validate_certs: "{{ conf_valid_cert }}"

- name: save generated conf
  loop:
    - "{{ conf_dl_ak }}"
    - "{{ conf_dl_sk }}"
  when: item is changed
  copy:
    content: "{{ item.content }}"
    dest: "{{ conf_repo_dest }}/auto-generated-conf.sh"
    force: true
    backup: true

- name: touch local conf
  file:
    path: "{{ conf_repo_dest }}/conf.sh"
    access_time: preserve
    modification_time: preserve
    state: touch

- name: load global conf
  changed_when: false
  check_mode: false
  source_file:
    path: "{{ conf_repo_dest }}/global-conf.sh"
    prefix: envsetup_
    lower: true

- name: load generated conf
  when: check_conf.stat.exists or conf_update
  changed_when: false
  check_mode: false
  source_file:
    path: "{{ conf_repo_dest }}/auto-generated-conf.sh"
    prefix: envsetup_
    lower: true

- name: load local conf
  changed_when: false
  check_mode: false
  source_file:
    path: "{{ conf_repo_dest }}/conf.sh"
    prefix: envsetup_
    lower: true

- name: debug variables
  when: conf_debug
  debug:
    var: ansible_facts

...
