- name: Upload Neon binaries hosts: storage gather_facts: False remote_user: "{{ remote_user }}" tasks: - name: get latest version of Neon binaries register: current_version_file set_fact: current_version: "{{ lookup('file', '.neon_current_version') | trim }}" tags: - pageserver - safekeeper - name: inform about versions debug: msg: "Version to deploy - {{ current_version }}" tags: - pageserver - safekeeper - name: upload and extract Neon binaries to /usr/local ansible.builtin.unarchive: owner: root group: root src: neon_install.tar.gz dest: /usr/local become: true tags: - pageserver - safekeeper - binaries - putbinaries - name: Deploy pageserver hosts: pageservers gather_facts: False remote_user: "{{ remote_user }}" tasks: - name: upload init script when: console_mgmt_base_url is defined ansible.builtin.template: src: scripts/init_pageserver.sh dest: /tmp/init_pageserver.sh owner: root group: root mode: '0755' become: true tags: - pageserver - name: init pageserver shell: cmd: /tmp/init_pageserver.sh args: creates: "/storage/pageserver/data/tenants" environment: NEON_REPO_DIR: "/storage/pageserver/data" LD_LIBRARY_PATH: "/usr/local/v14/lib" become: true tags: - pageserver - name: read the existing remote pageserver config ansible.builtin.slurp: src: /storage/pageserver/data/pageserver.toml register: _remote_ps_config tags: - pageserver - name: parse the existing pageserver configuration ansible.builtin.set_fact: _existing_ps_config: "{{ _remote_ps_config['content'] | b64decode | sivel.toiletwater.from_toml }}" tags: - pageserver - name: construct the final pageserver configuration dict ansible.builtin.set_fact: pageserver_config: "{{ pageserver_config_stub | combine({'id': _existing_ps_config.id }) }}" tags: - pageserver - name: template the pageserver config template: src: templates/pageserver.toml.j2 dest: /storage/pageserver/data/pageserver.toml become: true tags: - pageserver - name: upload systemd service definition ansible.builtin.template: src: systemd/pageserver.service dest: /etc/systemd/system/pageserver.service owner: root group: root mode: '0644' become: true tags: - pageserver - name: start systemd service ansible.builtin.systemd: daemon_reload: yes name: pageserver enabled: yes state: restarted become: true tags: - pageserver - name: post version to console when: console_mgmt_base_url is defined shell: cmd: | INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) curl -sfS -H "Authorization: Bearer {{ CONSOLE_API_TOKEN }}" {{ console_mgmt_base_url }}/management/api/v2/pageservers/$INSTANCE_ID | jq '.version = {{ current_version }}' > /tmp/new_version curl -sfS -H "Authorization: Bearer {{ CONSOLE_API_TOKEN }}" -X POST -d@/tmp/new_version {{ console_mgmt_base_url }}/management/api/v2/pageservers tags: - pageserver - name: Deploy safekeeper hosts: safekeepers gather_facts: False remote_user: "{{ remote_user }}" tasks: - name: upload init script when: console_mgmt_base_url is defined ansible.builtin.template: src: scripts/init_safekeeper.sh dest: /tmp/init_safekeeper.sh owner: root group: root mode: '0755' become: true tags: - safekeeper - name: init safekeeper shell: cmd: /tmp/init_safekeeper.sh args: creates: "/storage/safekeeper/data/safekeeper.id" environment: NEON_REPO_DIR: "/storage/safekeeper/data" LD_LIBRARY_PATH: "/usr/local/v14/lib" become: true tags: - safekeeper # in the future safekeepers should discover pageservers byself # but currently use first pageserver that was discovered - name: set first pageserver var for safekeepers set_fact: first_pageserver: "{{ hostvars[groups['pageservers'][0]]['inventory_hostname'] }}" tags: - safekeeper - name: upload systemd service definition ansible.builtin.template: src: systemd/safekeeper.service dest: /etc/systemd/system/safekeeper.service owner: root group: root mode: '0644' become: true tags: - safekeeper - name: start systemd service ansible.builtin.systemd: daemon_reload: yes name: safekeeper enabled: yes state: restarted become: true tags: - safekeeper - name: post version to console when: console_mgmt_base_url is defined shell: cmd: | INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) curl -sfS -H "Authorization: Bearer {{ CONSOLE_API_TOKEN }}" {{ console_mgmt_base_url }}/management/api/v2/safekeepers/$INSTANCE_ID | jq '.version = {{ current_version }}' > /tmp/new_version curl -sfS -H "Authorization: Bearer {{ CONSOLE_API_TOKEN }}" -X POST -d@/tmp/new_version {{ console_mgmt_base_url }}/management/api/v2/safekeepers tags: - safekeeper