blob: 8427235e3fcc232b44bcc1d20d560f2509e580c2 (
plain) (
blame)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
---
- name: "Install garage binary"
become: true
vars:
garage_arch: "{{ ansible_facts['architecture'] }}-unknown-linux-musl"
garage_url: "https://garagehq.deuxfleurs.fr/_releases/v{{ garage_version }}/{{ garage_arch }}/garage"
block:
- name: "Check if garage is installed"
ansible.builtin.stat:
path: "/usr/local/bin/garage"
register: garage_binary_check
- name: "Download garage binary"
when: not garage_binary_check.stat.exists
ansible.builtin.get_url:
url: "{{ garage_url }}"
dest: "/usr/local/bin/garage"
mode: "0755"
owner: "root"
group: "root"
- name: "Configure garage"
become: true
block:
- name: "Create garage group"
ansible.builtin.group:
name: "garage"
system: true
- name: "Create garage user"
ansible.builtin.user:
name: "garage"
group: "garage"
system: true
shell: "/usr/sbin/nologin"
create_home: false
- name: "Create garage data and meta directories"
ansible.builtin.file:
path: "{{ item }}"
state: "directory"
owner: "garage"
group: "garage"
mode: "0750"
loop:
- "{{ garage_data_dir }}"
- "{{ garage_meta_dir }}"
- name: "Deploy garage configuration"
ansible.builtin.template:
src: "garage.toml.j2"
dest: "/etc/garage.toml"
owner: "root"
group: "garage"
mode: "0640"
no_log: true
notify: "Restart garage"
- name: "Deploy garage systemd service"
ansible.builtin.template:
src: "garage.service.j2"
dest: "/etc/systemd/system/garage.service"
owner: "root"
group: "root"
mode: "0644"
notify: "Restart garage"
- name: "Start and enable garage"
ansible.builtin.systemd_service:
name: "garage"
state: "started"
enabled: true
daemon_reload: true
- name: "Check layout readiness"
become: true
ansible.builtin.uri:
url: "http://127.0.0.1:{{ garage_admin_port }}/health"
status_code: [200, 503]
register: garage_health
changed_when: false
- name: "Provision garage cluster layout"
become: true
when: garage_health.status != 200
block:
- name: "Get node id"
ansible.builtin.command:
cmd: "garage node id -q"
register: garage_node_id
changed_when: false
- name: "Assign node to layout"
ansible.builtin.command:
cmd: >-
garage layout assign
--zone local --capacity {{ garage_capacity }}
{{ garage_node_id.stdout.split('@')[0] }}
changed_when: true
- name: "Apply layout"
ansible.builtin.command:
cmd: "garage layout apply --version 1"
changed_when: true
- name: "Wait for layout to be ready"
ansible.builtin.uri:
url: "http://127.0.0.1:{{ garage_admin_port }}/health"
status_code: 200
register: garage_health_wait
until: garage_health_wait.status == 200
retries: 30
delay: 1
- name: "Provision garage bucket and key"
become: true
block:
- name: "Create bucket"
ansible.builtin.command:
cmd: "garage bucket create {{ garage_bucket }}"
register: garage_bucket_create
changed_when: garage_bucket_create.rc == 0
failed_when: garage_bucket_create.rc != 0 and 'already exists' not in garage_bucket_create.stderr
- name: "Import key"
ansible.builtin.command:
cmd: "garage key import --yes -n {{ garage_bucket }} {{ garage_access_key_id }} {{ garage_secret_access_key }}"
register: garage_key_import
changed_when: garage_key_import.rc == 0
failed_when: garage_key_import.rc != 0 and 'already exists' not in garage_key_import.stderr
no_log: true
- name: "Allow key on bucket"
ansible.builtin.command:
cmd: "garage bucket allow --read --write --owner --key {{ garage_access_key_id }} {{ garage_bucket }}"
changed_when: false
no_log: true
|