forked from k-space/kube
		
	zrepl
This commit is contained in:
		
							
								
								
									
										47
									
								
								ansible-playbooks/zrepl/zrepl.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ansible-playbooks/zrepl/zrepl.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| - name: zrepl | ||||
|   hosts: nasgroup | ||||
|   tasks: | ||||
|   - name: 'apt: zrepl gpg' | ||||
|     ansible.builtin.get_url: | ||||
|       url: 'https://zrepl.cschwarz.com/apt/apt-key.asc' | ||||
|       dest: /usr/share/keyrings/zrepl.asc | ||||
|   - name: 'apt: zrepl repo' | ||||
|     apt_repository: | ||||
|       repo: 'deb [arch=amd64 signed-by=/usr/share/keyrings/zrepl.asc] https://zrepl.cschwarz.com/apt/debian bookworm main' | ||||
|   - name: 'apt: ensure packages' | ||||
|     apt: | ||||
|       state: latest | ||||
|       pkg: zrepl | ||||
|  | ||||
|   - name: 'zrepl: ensure config' | ||||
|     ansible.builtin.template: | ||||
|       src: "zrepl_{{ansible_hostname}}.yml.j2" | ||||
|       dest: /etc/zrepl/zrepl.yml | ||||
|       mode: 600 | ||||
|     register: zreplconf | ||||
|   - name: 'zrepl: restart service after config change' | ||||
|     when: zreplconf.changed | ||||
|     systemd_service: | ||||
|       state: restarted | ||||
|       enabled: true | ||||
|       name: zrepl | ||||
|   - name: 'zrepl: ensure service' | ||||
|     when: not zreplconf.changed | ||||
|     systemd_service: | ||||
|       state: started | ||||
|       enabled: true | ||||
|       name: zrepl | ||||
|  | ||||
| # avoid accidental conflicts of changes on recv (would err 'will not overwrite without force') | ||||
| - name: 'zfs: ensure recv mountpoint=off' | ||||
|   hosts: offsite | ||||
|   tasks: | ||||
|   - name: 'zfs: get mountpoint' | ||||
|     shell: zfs get mountpoint -H -o value {{offsite_dataset}} | ||||
|     register: result | ||||
|     changed_when: false | ||||
|   - when: result.stdout != "none" | ||||
|     name: 'zfs: ensure mountpoint=off' | ||||
|     changed_when: true | ||||
|     shell: zfs set mountpoint=none {{offsite_dataset}} | ||||
|     register: result | ||||
							
								
								
									
										47
									
								
								ansible-playbooks/zrepl/zrepl_nas.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ansible-playbooks/zrepl/zrepl_nas.yml.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| global: | ||||
|   logging: | ||||
|     - type: syslog | ||||
|       format: logfmt | ||||
|       level: warn | ||||
|   monitoring: | ||||
|     - type: prometheus | ||||
|       listen: ':9811' | ||||
|  | ||||
| jobs: | ||||
|   - name: k6zrepl | ||||
|     type: snap | ||||
|     # "<" aka recursive, https://zrepl.github.io/configuration/filter_syntax.html | ||||
|     filesystems: | ||||
|       'nas<': true | ||||
|     snapshotting: | ||||
|       type: periodic | ||||
|       prefix: zrepl_ | ||||
|       interval: 1h | ||||
|     pruning: | ||||
|       keep: | ||||
|         # Keep non-zrepl snapshots | ||||
|         - type: regex | ||||
|           negate: true | ||||
|           regex: '^zrepl_' | ||||
|  | ||||
|         - type: last_n | ||||
|           regex: "^zrepl_.*" | ||||
|           count: 4 | ||||
|         - type: grid | ||||
|           regex: "^zrepl_.*" | ||||
|           grid: 4x1h | 6x4h | 3x1d | 2x7d | ||||
|  | ||||
|   - name: k6zrepl_offsite_src | ||||
|     type: source | ||||
|     send: | ||||
|       encrypted: true # zfs native already-encrypted, filesystems not encrypted will log to error-level | ||||
|     serve: | ||||
|       type: tcp | ||||
|       listen: "{{ansible_host}}:35566" # NAT-ed to 193.40.103.250 | ||||
|       clients: { | ||||
|         "78.28.64.17": "offsite.k-space.ee", | ||||
|       } | ||||
|     filesystems: | ||||
|         'nas<': true | ||||
|     snapshotting: # handled by above job, separated for secuwurity (isolation of domains) | ||||
|       type: manual | ||||
							
								
								
									
										38
									
								
								ansible-playbooks/zrepl/zrepl_offsite.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								ansible-playbooks/zrepl/zrepl_offsite.yml.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| global: | ||||
|   logging: | ||||
|     - type: syslog | ||||
|       format: logfmt | ||||
|       level: warn | ||||
|  | ||||
| jobs: | ||||
|   - name: k6zrepl_offsite_dest | ||||
|     type: pull | ||||
|     recv: | ||||
|       placeholder: | ||||
|         encryption: off # https://zrepl.github.io/configuration/sendrecvoptions.html#placeholders | ||||
| #      bandwidth_limit: | ||||
| #        max: 9 MiB # 75.5 Mbps | ||||
|     connect: | ||||
|       type: tcp | ||||
|       address: '193.40.103.250:35566' # firewall whitelisted to offsite | ||||
|     root_fs: {{offsite_dataset}} | ||||
|     interval: 10m # start interval, does nothing when no snapshots to recv | ||||
|     replication: | ||||
|       concurrency: | ||||
|         steps: 2 | ||||
|     pruning: | ||||
|       keep_sender: # offsite does not dictate nas snapshot policy | ||||
|         - type: regex | ||||
|           regex: '.*' | ||||
|       keep_receiver: | ||||
|         # Keep non-zrepl snapshots | ||||
|         - negate: true | ||||
|           type: regex | ||||
|           regex: "^zrepl_" | ||||
|  | ||||
|         - type: last_n | ||||
|           regex: "^zrepl_" | ||||
|           count: 4 | ||||
|         - type: grid | ||||
|           regex: "^zrepl_" | ||||
|           grid: 4x1h | 6x4h | 3x1d | 2x7d | ||||
| @@ -5,12 +5,21 @@ all: | ||||
|       - eaas | ||||
|     extra_admins: [] | ||||
|   children: | ||||
|     nasgroup: | ||||
|       hosts: | ||||
|         nas.k-space.ee: | ||||
|           ansible_host: 172.23.0.7 | ||||
|         offsite: | ||||
|           ansible_host: 78.28.64.17 | ||||
|           ansible_port: 10648 | ||||
|       vars: | ||||
|         offsite_dataset: offsite/backup_zrepl | ||||
|     misc: | ||||
|       children: | ||||
|         nasgroup: | ||||
|       hosts: | ||||
|         ns1.k-space.ee: | ||||
|           ansible_host: 172.20.0.2 | ||||
|         nas.k-space.ee: | ||||
|           ansible_host: 172.23.0.7 | ||||
|     proxmox: | ||||
|       vars: | ||||
|         extra_admins: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user