Compare commits
	
		
			5 Commits
		
	
	
		
			a0be654b92
			...
			20450332d4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 20450332d4 | |||
| 776e35f1a3 | |||
| 4275a0bc23 | |||
| 674d432773 | |||
| 05b475c464 | 
							
								
								
									
										56
									
								
								playbooks/node-up.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								playbooks/node-up.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| --- | ||||
| - name: Online nodes | ||||
|   hosts: cluster | ||||
|   vars_prompt: | ||||
|     - name: skylab_datastore_encryption_password | ||||
|       prompt: Enter datastore block decryption password | ||||
|       private: true | ||||
|   roles: | ||||
|     - role: datastore | ||||
|       when: "'datastore' in skylab_roles | default([])" | ||||
|   tasks: | ||||
|     - name: Fetch node swarm ID | ||||
|       ansible.builtin.command: | ||||
|         cmd: !unsafe docker info --format '{{ .Swarm.NodeID}}' | ||||
|       changed_when: false | ||||
|       register: _docker_node_id_raw | ||||
|  | ||||
|     - name: Update node availability | ||||
|       vars: | ||||
|         ansible_python_interpreter: "{{ skylab_state_dir }}/ansible-runtime/bin/python" | ||||
|       community.docker.docker_node: | ||||
|         availability: active | ||||
|         hostname: "{{ _docker_node_id_raw.stdout.strip() }}" | ||||
|  | ||||
|     - name: Determine node addresses | ||||
|       vars: | ||||
|         _node_addresses: | ||||
|           - "{{ lookup('vars', 'ansible_' + skylab_cluster.interface.access).ipv4.address | ansible.netcommon.ipaddr('host/prefix') }}" | ||||
|       ansible.builtin.set_fact: | ||||
|         _node_addresses: "{{ _node_addresses + [item.address | ansible.netcommon.ipaddr('host/prefix')] }}" | ||||
|       loop: "{{ lookup('vars', 'ansible_' + skylab_cluster.interface.access).ipv4_secondaries }}" | ||||
|       loop_control: | ||||
|         label: "{{ item.address }}" | ||||
|  | ||||
|     - name: Determine cluster access addresses | ||||
|       run_once: true | ||||
|       vars: | ||||
|         _cluster_node_ips: [] | ||||
|       ansible.builtin.set_fact: | ||||
|         _cluster_node_ips: "{{ _cluster_node_ips + [hostvars[item].skylab_cluster.address | ansible.netcommon.ipaddr('host/prefix')] }}" | ||||
|       loop: "{{ groups.cluster }}" | ||||
|  | ||||
|     - name: Remove alternative node IPs | ||||
|       become: true | ||||
|       when: item in _cluster_node_ips and item != (skylab_cluster.address | ansible.netcommon.ipaddr('host/prefix')) | ||||
|       ansible.builtin.command: | ||||
|         cmd: ip address delete {{ item | ansible.netcommon.ipaddr('host/prefix') }} dev {{ skylab_cluster.interface.access }} | ||||
|       changed_when: true | ||||
|       loop: "{{ _node_addresses }}" | ||||
|  | ||||
|     - name: Add node IP | ||||
|       become: true | ||||
|       when: skylab_cluster.address | ansible.netcommon.ipaddr('host/prefix') not in _node_addresses | ||||
|       ansible.builtin.command: | ||||
|         cmd: ip address add {{ skylab_cluster.address | ansible.netcommon.ipaddr('host/prefix') }} dev {{ skylab_cluster.interface.access }} | ||||
|       changed_when: true | ||||
| @@ -14,6 +14,13 @@ | ||||
|     path: /mnt/brick/datastore | ||||
|     state: directory | ||||
|  | ||||
| - name: Start and disable glusterd | ||||
|   become: true | ||||
|   ansible.builtin.systemd: | ||||
|     name: glusterd | ||||
|     state: started | ||||
|     enabled: false | ||||
|  | ||||
| - name: Fetch peer status | ||||
|   become: true | ||||
|   ansible.builtin.command: | ||||
|   | ||||
| @@ -60,6 +60,7 @@ | ||||
|   block: | ||||
|     - name: Prompt for decryption key | ||||
|       no_log: true | ||||
|       when: skylab_datastore_encryption_password is not defined | ||||
|       ansible.builtin.pause: | ||||
|         prompt: >- | ||||
|           Datastore device {{ inventory_hostname }}:/dev/{{ skylab_datastore_device }} is not | ||||
| @@ -73,7 +74,7 @@ | ||||
|         device: /dev/{{ skylab_datastore_device }} | ||||
|         state: opened | ||||
|         name: brick | ||||
|         passphrase: "{{ _luks_decryption_key.user_input }}" | ||||
|         passphrase: "{{ _luks_decryption_key.user_input | default(skylab_datastore_encryption_password) }}" | ||||
|  | ||||
|     - name: Fetch updated block device information | ||||
|       ansible.builtin.command: | ||||
|   | ||||
| @@ -16,3 +16,9 @@ | ||||
| - name: Configure hostsfile | ||||
|   when: skylab_direct_peers is defined | ||||
|   ansible.builtin.include_tasks: hosts.yaml | ||||
|  | ||||
| - name: Enable tmpfs mount | ||||
|   become: true | ||||
|   ansible.builtin.systemd: | ||||
|     name: tmp.mount | ||||
|     enabled: true | ||||
|   | ||||
| @@ -30,6 +30,12 @@ | ||||
|     remote_addrs: "{{ _docker_swarm_manager_addresses }}" | ||||
|     join_token: "{{ _docker_swarm_join_token.stdout.strip() }}" | ||||
|  | ||||
| - name: Fetch node swarm ID | ||||
|   ansible.builtin.command: | ||||
|     cmd: !unsafe docker info --format '{{ .Swarm.NodeID}}' | ||||
|   changed_when: false | ||||
|   register: _docker_node_id_raw | ||||
|  | ||||
| # For newly added nodes we don't want to have services be automatically scheduled on them | ||||
| # until the configuration is complete. The node-up playbook will be responsible for updating | ||||
| # the node to make it available in the cluster again | ||||
| @@ -38,4 +44,4 @@ | ||||
|     ansible_python_interpreter: "{{ skylab_ansible_venv }}/bin/python" | ||||
|   community.docker.docker_node: | ||||
|     availability: drain | ||||
|     hostname: "{{ skylab_hostname }}" | ||||
|     hostname: "{{ _docker_node_id_raw.stdout.strip() }}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user