Add playbook for restoring offline'd node
This commit is contained in:
		
							
								
								
									
										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
 | 
			
		||||
		Reference in New Issue
	
	Block a user