mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-09 06:22:57 +00:00
Deploy storage into new account Migrate safekeeper and pageserver initialisation to management api v2
192 lines
5.0 KiB
YAML
192 lines
5.0 KiB
YAML
- 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 -d '{"version": {{ current_version }} }' -X PATCH {{ console_mgmt_base_url }}/api/v1/pageservers/$INSTANCE_ID
|
|
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 -d '{"version": {{ current_version }} }' -X PATCH {{ console_mgmt_base_url }}/api/v1/safekeepers/$INSTANCE_ID
|
|
tags:
|
|
- safekeeper
|