---
- name: Include OS family-specific variables
  include_vars: "{{ ansible_facts.os_family }}.yml"

- name: Ensure required packages are installed
  package:
    name: "{{ bootstrap_package_dependencies }}"
    state: present
    cache_valid_time: "{{ apt_cache_valid_time if ansible_facts.os_family == 'Debian' else omit }}"
    update_cache: "{{ True if ansible_facts.os_family == 'Debian' else omit }}"
  become: True

- name: Check whether an SSH key exists
  stat:
    path: "{{ bootstrap_ssh_private_key_path }}"
    get_checksum: False
    mime: False
  register: ssh_key_stat

- name: Generate an SSH key
  command: ssh-keygen -t {{ bootstrap_ssh_key_type }} -N '' -f {{ bootstrap_ssh_private_key_path }}
  when: not ssh_key_stat.stat.exists

- name: Ensure SSH public key is in authorized keys
  authorized_key:
    user: "{{ ansible_facts.user_id }}"
    key: "{{ lookup('file', bootstrap_ssh_private_key_path ~ '.pub') }}"

- name: Scan for SSH keys
  command: ssh-keyscan {{ item }}
  with_items:
    - localhost
    - 127.0.0.1
  register: keyscan_result
  changed_when: False

- name: Ensure SSH keys are in known hosts
  known_hosts:
    host: "{{ item[0].item }}"
    key: "{{ item[1] }}"
  with_subelements:
    - "{{ keyscan_result.results }}"
    - stdout_lines
