100 lines
4.3 KiB
YAML
100 lines
4.3 KiB
YAML
---
|
|
- name: Acquiring home of current user
|
|
when: ansible_facts["system"] == "Linux"
|
|
ansible.builtin.shell:
|
|
cmd: "echo ~{{ ansible_user }}"
|
|
register: ansible_user_home
|
|
- name: Acquiring current user
|
|
when: ansible_facts["system"] == "Linux"
|
|
ansible.builtin.shell:
|
|
cmd: "echo {{ ansible_user }}"
|
|
register: current_user
|
|
- name: Informing user of requirement of two main domains
|
|
when: (certbot.domains | length) < 2 or (certbot.domains | length) > 2
|
|
ansible.builtin.fail:
|
|
msg: Only two domains allowed and required
|
|
- name: Informing user of requirement at least one wildcard
|
|
when: (certbot.domains | select("regex", "^\\*\\.") | list | length) == 0
|
|
ansible.builtin.fail:
|
|
msg: At least one of the FQDNs must have a wildcard
|
|
# - name: Setting the FQDN for development
|
|
# when: compose.mode == "dev"
|
|
# ansible.builtin.set_fact:
|
|
# web_fqdn: "{{ (certbot.domains | map('regex_replace', '\\.([^\\.]*)$', '.test') | reject('regex', '^\\*\\.') | list)[0] }}"
|
|
- name: Setting the FQDN
|
|
# when: compose.mode == "prod"
|
|
ansible.builtin.set_fact:
|
|
web_fqdn: "{{ (certbot.domains | reject('regex', '^\\*\\.') | list)[0] }}"
|
|
- name: Configuring Headscale
|
|
become: true
|
|
ansible.builtin.template:
|
|
src: headscale/config.yaml.j2
|
|
dest: /etc/headscale/config.yaml
|
|
owner: root
|
|
group: root
|
|
mode: "644"
|
|
force: true
|
|
backup: true
|
|
# validate: "headscale configtest"
|
|
- name: Starting SystemD service
|
|
become: true
|
|
ansible.builtin.systemd_service:
|
|
name: headscale
|
|
scope: system
|
|
enabled: true
|
|
state: started
|
|
- name: Registering a headscale user
|
|
become: true
|
|
ansible.builtin.command:
|
|
cmd: "headscale users create {{ headscale.users.admin.username }} -d '{{ headscale.users.admin.dname }}' -e '{{ headscale.users.admin.email }}'"
|
|
register: headscale_registration
|
|
changed_when:
|
|
- "'User created' in headscale_registration.stdout"
|
|
- name: Creating an authentication key for this registered headscale user
|
|
become: true
|
|
ansible.builtin.command:
|
|
cmd: "headscale preauthkeys create -e 24h -u 1"
|
|
register: tailscale_admin_authkey
|
|
- name: Pausing to inquire about how to proceed
|
|
ansible.builtin.pause:
|
|
prompt: "Type \"fetch\" to get the DSNet VPN service client configuration files, or \"show\" to see their contents for manual copying instead"
|
|
echo: true
|
|
register: data_method
|
|
- name: Choosing Headscale authentication key to control node for copying
|
|
when: data_method.user_input == "show"
|
|
block:
|
|
- name: Presenting Headscale authentication key to Control Node
|
|
ansible.builtin.debug:
|
|
msg: "Copy this client configuration of the headscale service:\n {{ tailscale_admin_authkey.stdout }}"
|
|
- name: Giving opportunity to manually copy Headscale authentication key
|
|
ansible.builtin.pause:
|
|
- name: Choosing Headscale service client configuration files to control node machine
|
|
when: data_method.user_input == "fetch"
|
|
block:
|
|
- name: Creating temporary file on managed node that stores Headscale authentication key
|
|
ansible.builtin.copy:
|
|
content: "{{ tailscale_admin_authkey.stdout }}"
|
|
dest: "/tmp/headscale.key"
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: "644"
|
|
register: tailscale_admin_authkey_file
|
|
- name: Placing Headscale authentication key into file on control node
|
|
ansible.builtin.fetch:
|
|
src: "{{ tailscale_admin_authkey_file.dest }}"
|
|
dest: "./.tmp/{{ inventory_hostname }}-{{ headscale.users.admin.username }}@headscale/headscale.key"
|
|
flat: true
|
|
- name: Placing Headscale authentication key into file on control node
|
|
ansible.builtin.fetch:
|
|
src: "{{ tailscale_admin_authkey_file.dest }}"
|
|
dest: "./roles/init-server/files/{{ item.name }}-{{ headscale.users.admin.username }}@headscale/headscale{{ (idx | string) }}.key"
|
|
flat: true
|
|
loop: "{{ headscale.clients }}"
|
|
loop_control:
|
|
index_var: idx
|
|
- name: Informing control node of acquired files
|
|
ansible.builtin.debug:
|
|
msg: "The Headscale authentication key files have been duplicated to './.tmp/{{ inventory_hostname }}-{{ headscale.users.admin.username }}@headscale/headscale.key' at the control node."
|
|
- name: Giving control node user time to read the aforementiioned message
|
|
ansible.builtin.pause:
|
|
seconds: 30 |