Skip to content

Commit e407b7b

Browse files
committed
feat: add the supabase admin agent to the ami build
1 parent 0271bfe commit e407b7b

File tree

8 files changed

+163
-9
lines changed

8 files changed

+163
-9
lines changed

ansible/files/permission_check.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,17 @@
9494
"systemd-coredump": [
9595
{"groupname": "systemd-coredump", "username": "systemd-coredump"}
9696
],
97+
"supabase-admin-agent": [
98+
{"groupname": "supabase-admin-agent", "username": "supabase-admin-agent"},
99+
{"groupname": "admin", "username": "supabase-admin-agent"},
100+
{"groupname": "salt", "username": "supabase-admin-agent"},
101+
],
97102
}
98103

99104
# postgresql.service is expected to mount /etc as read-only
100105
expected_mount = "/etc ro"
101106

107+
102108
# This program depends on osquery being installed on the system
103109
# Function to run osquery
104110
def run_osquery(query):
@@ -154,6 +160,7 @@ def check_nixbld_users():
154160

155161
print("All nixbld users are in the 'nixbld' group.")
156162

163+
157164
def check_postgresql_mount():
158165
# processes table has the nix .postgres-wrapped path as the
159166
# binary path, rather than /usr/lib/postgresql/bin/postgres which
@@ -182,6 +189,7 @@ def check_postgresql_mount():
182189

183190
print("postgresql.service mounts /etc as read-only.")
184191

192+
185193
def main():
186194
parser = argparse.ArgumentParser(
187195
prog="Supabase Postgres Artifact Permissions Checker",
@@ -251,5 +259,6 @@ def main():
251259
# Check if postgresql.service is using a read-only mount for /etc
252260
check_postgresql_mount()
253261

262+
254263
if __name__ == "__main__":
255264
main()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
%supabase-admin-agent ALL= NOPASSWD: /usr/bin/salt-call
2+
%supabase-admin-agent ALL= NOPASSWD: /usr/bin/gpg --homedir {{ gpgdir }} --import, /usr/bin/gpg --homedir {{ gpgdir }} --list-secret-keys *
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[Unit]
2+
Description=Configuration management via supabase-admin-agent salt
3+
After=network.target
4+
5+
[Service]
6+
Type=oneshot
7+
ExecStart=/opt/supabase-admin-agent/supabase-admin-agent --config /opt/supabase-admin-agent/config.yaml salt --apply --store-result
8+
User=supabase-admin-agent
9+
Group=supabase-admin-agent
10+
StandardOutput=journal
11+
StandardError=journal
12+
StateDirectory=supabase-admin-agent
13+
CacheDirectory=supabase-admin-agent
14+
15+
# Security hardening
16+
PrivateTmp=true
17+
18+
[Install]
19+
WantedBy=multi-user.target
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[Unit]
2+
Description=Run Supabase supabase-admin-agent salt on a schedule
3+
Requires=supabase-admin-agent_salt.service
4+
5+
[Timer]
6+
OnCalendar=*:0/10
7+
# Random delay up to {{ splay }} seconds splay
8+
RandomizedDelaySec={{ splay }}
9+
AccuracySec=1s
10+
Persistent=true
11+
12+
[Install]
13+
WantedBy=timers.target

ansible/manifest-playbook.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@
6161
shell: |
6262
cd /tmp && tar -cJf admin-mgr-{{ adminmgr_release }}-arm64.tar.xz admin-mgr
6363
64+
- name: Download supabase-admin-agent archive
65+
get_url:
66+
url: "https://supabase-internal-artifacts-bucket.s3.amazonaws.com/supabase-admin-agent/v{{ supabase_admin_agent_release }}/supabase-admin-agent_{{ supabase_admin_agent_release }}_linux_arm64.tar.gz"
67+
dest: "/tmp/supabase-admin-agent.tar.gz"
68+
timeout: 90
69+
70+
- name: supabase-admin-agent - unpack archive in /tmp
71+
unarchive:
72+
remote_src: yes
73+
src: /tmp/supabase-admin-agent.tar.gz
74+
dest: /tmp
75+
76+
- name: supabase-admin-agent - pack archive
77+
shell: |
78+
cd /tmp && tar -cJf supabase-admin-agent-{{ supabase_admin_agent_release }}-arm64.tar.xz supabase-admin-agent
79+
6480
- name: upload archives
6581
shell: |
6682
aws s3 cp /tmp/{{ item.file }} s3://{{ internal_artifacts_bucket }}/upgrades/{{ item.service }}/{{ item.file }}
@@ -73,3 +89,5 @@
7389
file: supabase-admin-api-{{ adminapi_release }}-arm64.tar.xz
7490
- service: admin-mgr
7591
file: admin-mgr-{{ adminmgr_release }}-arm64.tar.xz
92+
- service: supabase-admin-agent
93+
file: supabase-admin-agent-{{ supabase_admin_agent_release }}-arm64.tar.xz
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
- name: supabase-admin-agent - system group
2+
group:
3+
name: supabase-admin-agent
4+
system: yes
5+
6+
- name: supabase-admin-agent - system user
7+
user:
8+
name: supabase-admin-agent
9+
group: supabase-admin-agent
10+
groups: admin,salt
11+
append: yes
12+
system: yes
13+
shell: /bin/sh
14+
15+
- name: supabase-admin-agent - config dir
16+
file:
17+
path: /opt/supabase-admin-agent
18+
owner: supabase-admin-agent
19+
state: directory
20+
21+
- name: supabase-admin-agent - gpg dir
22+
file:
23+
path: /etc/salt/gpgkeys
24+
owner: root
25+
group: salt
26+
state: directory
27+
28+
- name: give supabase-admin-agent user permissions
29+
copy:
30+
src: files/supabase-admin-agent_config/supabase-admin-agent.sudoers.conf
31+
dest: /etc/sudoers.d/supabase-admin-agent
32+
mode: "0644"
33+
34+
- name: Setting arch (x86)
35+
set_fact:
36+
arch: "x86"
37+
when: platform == "amd64"
38+
39+
- name: Setting arch (arm)
40+
set_fact:
41+
arch: "arm64"
42+
when: platform == "arm64"
43+
44+
- name: Download supabase-admin-agent archive
45+
get_url:
46+
url: "https://supabase-internal-artifacts-bucket.s3.amazonaws.com/supabase-admin-agent/v{{ supabase_admin_agent_release }}/supabase-admin-agent-{{ supabase_admin_agent_release }}-linux-{{ arch }}.tar.gz"
47+
dest: "/tmp/supabase-admin-agent.tar.gz"
48+
timeout: 90
49+
50+
- name: supabase-admin-agent - unpack archive in /opt
51+
unarchive:
52+
remote_src: yes
53+
src: /tmp/supabase-admin-agent.tar.gz
54+
dest: /opt/supabase-admin-agent/
55+
owner: supabase-admin-agent
56+
extra_opts:
57+
- --strip-components=1
58+
59+
- name: supabase-admin-agent - create symlink
60+
ansible.builtin.file:
61+
path: /opt/supabase-admin-agent/supabase-admin-agent
62+
src: "/opt/supabase-admin-agent/supabase-admin-agent-linux-{{ arch }}"
63+
state: link
64+
owner: supabase-admin-agent
65+
mode: "0755"
66+
force: yes
67+
68+
- name: supabase-admin-agent - create salt systemd timer file
69+
copy:
70+
src: files/supabase-admin-agent_config/supabase-admin-agent_salt.timer
71+
dest: /etc/systemd/system/supabase-admin-agent_salt.timer
72+
73+
- name: supabase-admin-agent - create salt service file
74+
copy:
75+
src: files/supabase-admin-agent_config/supabase-admin-agent_salt.service
76+
dest: /etc/systemd/system/supabase-admin-agent_salt.service
77+
78+
- name: supabase-admin-agent - reload systemd
79+
systemd:
80+
daemon_reload: yes
81+
82+
# Initially ensure supabase-admin-agent is installed but not started
83+
- name: supabase-admin-agent - DISABLE service
84+
systemd:
85+
name: supabase-admin-agent_salt
86+
enabled: no
87+
state: stopped

ansible/tasks/setup-supabase-internal.yml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,19 @@
3434
aws configure set default.s3.use_dualstack_endpoint true
3535
3636
- name: install Vector for logging
37-
become: yes
37+
become: true
3838
apt:
3939
deb: "{{ vector_x86_deb }}"
4040
when: platform == "amd64"
4141

4242
- name: install Vector for logging
43-
become: yes
43+
become: true
4444
apt:
4545
deb: "{{ vector_arm_deb }}"
4646
when: platform == "arm64"
4747

4848
- name: add Vector to postgres group
49-
become: yes
49+
become: true
5050
shell:
5151
cmd: |
5252
usermod -a -G postgres vector
@@ -72,21 +72,21 @@
7272
daemon_reload: yes
7373

7474
- name: Create checkpoints dir
75-
become: yes
75+
become: true
7676
file:
7777
path: /var/lib/vector
7878
state: directory
7979
owner: vector
8080

8181
- name: Include file for generated optimizations in postgresql.conf
82-
become: yes
82+
become: true
8383
replace:
8484
path: /etc/postgresql/postgresql.conf
8585
regexp: "#include = '/etc/postgresql-custom/generated-optimizations.conf'"
8686
replace: "include = '/etc/postgresql-custom/generated-optimizations.conf'"
8787

8888
- name: Include file for custom overrides in postgresql.conf
89-
become: yes
89+
become: true
9090
replace:
9191
path: /etc/postgresql/postgresql.conf
9292
regexp: "#include = '/etc/postgresql-custom/custom-overrides.conf'"
@@ -115,5 +115,10 @@
115115
tags:
116116
- aws-only
117117

118+
- name: Install supabase-admin-agent
119+
import_tasks: internal/supabase-admin-agent.yml
120+
tags:
121+
- aws-only
122+
118123
- name: Envoy - use lds.supabase.yaml for /etc/envoy/lds.yaml
119124
command: mv /etc/envoy/lds.supabase.yaml /etc/envoy/lds.yaml

ansible/vars.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ postgres_major:
99

1010
# Full version strings for each major version
1111
postgres_release:
12-
postgresorioledb-17: "17.0.1.098-orioledb"
13-
postgres17: "17.4.1.048"
14-
postgres15: "15.8.1.105"
12+
postgresorioledb-17: "17.0.1.099-orioledb"
13+
postgres17: "17.4.1.049"
14+
postgres15: "15.8.1.106"
1515

1616
# Non Postgres Extensions
1717
pgbouncer_release: "1.19.0"
@@ -54,6 +54,7 @@ postgres_exporter_release_checksum:
5454

5555
adminapi_release: 0.84.1
5656
adminmgr_release: 0.25.1
57+
supabase_admin_agent_release: 1.4.32
5758

5859
vector_x86_deb: "https://packages.timber.io/vector/0.22.3/vector_0.22.3-1_amd64.deb"
5960
vector_arm_deb: "https://packages.timber.io/vector/0.22.3/vector_0.22.3-1_arm64.deb"

0 commit comments

Comments
 (0)