aboutsummaryrefslogtreecommitdiff
path: root/tasks/main.yml
blob: a0e5f7539038a570f5037373422ede0c8fb7bd1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
- name: "Setup password-less SSH port forwarding from {{ relay_host }} to {{ inventory_hostname }}"
  tags:
    - ssh
  ansible.builtin.include_role:
    name: ssh_relay_access
    apply:
      delegate_to: "{{ relay_host }}"
      tags:
        - relayed_domain
  # prefix the variables with their role name to prevent scoping issues
  vars:
    ssh_relay_accessing_host: "{{ relay_host }}"
    ssh_relay_accessed_host: "{{ inventory_hostname }}"
    ssh_relay_accessed_user: "{{ ansible_user }}"

- name: "Configure the SSH access from {{ relay_host }} to {{ inventory_hostname }}"
  tags:
    - ssh
  block:
    - name: "Authorize the {{ relay_host }} host key at {{ inventory_hostname }}"
      ansible.builtin.include_role:
        name: ssh_authorize_host
        apply:
          delegate_to: "{{ relay_host }}"
          tags:
            - relayed_domain
      vars:
        ssh_relayed_hostname: "{{ inventory_hostname }}"
        ssh_hostname: "{{ relay_host }}"
        ssh_port: "{{ relayed_host_ssh_port }}"

    - name: "Add {{ inventory_hostname }} to {{ relay_host }}'s ssh config"
      delegate_to: "{{ relay_host }}"
      ansible.builtin.blockinfile:
        create: true
        mode: '600'
        path: ~/.ssh/config
        marker: "# {mark} ANSIBLE MANAGED BLOCK {{ inventory_hostname }}"
        block: |
          Host {{ inventory_hostname }}
            User {{ ansible_user }}
            Port {{ relayed_host_ssh_port }}
            IdentityFile ~/.ssh/{{ relay_ssh_key_name }}

- name: "Add relayed domain ({{ domain }}) to {{ relay_host }}"
  ansible.builtin.include_role:
    name: uberspace_domains
    apply:
      delegate_to: "{{ relay_host }}"
      tags:
        - relayed_domain
    tasks_from: web
  vars:
    domains:
      - "{{ domain }}"

- name: Add web backend for the relayed domain to the relay port
  tags:
    - ssh
  delegate_to: "{{ relay_host }}"
  # TODO: detect if this is necessary
  ansible.builtin.command:
    cmd: "uberspace web backend set {{ domain }} --http --port {{ relay_port }}"

- name: Setup port forward service useing supervisorctl
  tags:
    - ssh
  delegate_to: "{{ relay_host }}"
  block:
    - name: Install service file
      ansible.builtin.template:
        src: forward-service.ini.j2
        dest: "~/etc/services.d/forward-{{ relay_port }}-to-{{ inventory_hostname }}-{{ relayed_port }}.ini"
        mode: '644'
      register: forward_service

    - name: Ensure port forward service is running
      community.general.supervisorctl:
        name: "forward-{{ relay_port }}-to-{{ inventory_hostname }}-{{ relayed_port }}"
        state: "{{ 'restarted' if forward_service.changed else 'started' }}"