- name: Install Storage Box mount dependencies apt: name: "{{ storage_box_package }}" state: present loop: "{{ storage_box_packages }}" loop_control: loop_var: storage_box_package - name: Create SSH directory file: path: "{{ ssh_config_dir }}" state: directory mode: "700" - name: Generate SSH key pair for storage box {{ storage_box_host }} openssh_keypair: path: "{{ ssh_config_dir }}/{{ storage_box_prefix }}" type: ed25519 - name: Create SSH config file file: path: "{{ ssh_config_dir }}/config" state: touch access_time: preserve modification_time: preserve mode: "600" - name: Update SSH config file for storage box {{ storage_box_host }} blockinfile: path: "{{ ssh_config_dir }}/config" block: | Host {{ storage_box_host }} {% if storage_box_username is defined %} User {{ storage_box_username }} {% endif %} Port {{ storage_box_port }} IdentityFile {{ ssh_config_dir }}/{{ storage_box_prefix }} PreferredAuthentications publickey,password marker: "# {mark} ANSIBLE MANAGED BLOCK {{ storage_box_host }}" - name: Copy script to add OpenSSH public key through SFTP copy: src: sftp/push_public_key.sh dest: /usr/local/bin/sftp_push_public_key owner: root group: root mode: "755" - name: Scan public keys for storage box {{ storage_box_host }}:{{ storage_box_port }} command: ssh-keyscan -p {{ storage_box_port }} {{ storage_box_host }} changed_when: no register: _ssh_known_host - name: Add backup host {{ storage_box_host }} in known hosts list known_hosts: name: |- {%- if storage_box_port == 22 -%} {{ storage_box_host }} {%- else -%} [{{ storage_box_host }}]:{{ storage_box_port }} {%- endif -%} key: "{{ _ssh_known_host.stdout }}" state: present - name: Push SSH public key to storage box {{ storage_box_host }} when: storage_box_password is defined command: sftp_push_public_key "{{ storage_box_host }}" "{{ ssh_config_dir }}/{{ storage_box_prefix }}.pub" environment: SSHPASS: "{{ storage_box_password }}" changed_when: - _storage_box_authorized.stdout is defined - "'Public key added!' in _storage_box_authorized.stdout" register: _storage_box_authorized - name: Create backup endpoint {{ storage_box_path }} on {{ storage_box_host }} shell: | sftp {{ storage_box_host }} <<-EOF mkdir "{{ storage_box_path }}" EOF changed_when: "'Couldn\\'t create directory' not in _backup_endpoint_created.stderr" register: _backup_endpoint_created - name: Create AutoFS config file for storage box {{ storage_box_host }} (SSHFS) lineinfile: path: /etc/auto.backup.{{ storage_box_prefix }} regex: "^{{ storage_box_mount.path }} " line: | {{ storage_box_mount.path }} -fstype=fuse,{{ storage_box_mount.options | join(',') }} :sshfs\#{{ storage_box_host }}\:{{ storage_box_path }} state: present create: yes notify: reload autofs - name: Add AutoFS config file into main AutoFS config lineinfile: path: /etc/auto.master regexp: '^/- /etc/auto.backup' line: /- /etc/auto.backup.{{ storage_box_prefix }} --timeout=90,--ghost state: present notify: reload autofs - name: Start AutoFS service service: name: autofs state: started enabled: yes register: autofs_started - name: Trigger AutoFS handlers meta: flush_handlers