161 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
---
 | 
						|
- name: Install and Configure Nomad Podman Driver on Client Nodes
 | 
						|
  hosts: nomad_clients
 | 
						|
  become: yes
 | 
						|
  vars:
 | 
						|
    nomad_plugin_dir: "/opt/nomad/plugins"
 | 
						|
    
 | 
						|
  tasks:
 | 
						|
    - name: Create backup directory with timestamp
 | 
						|
      set_fact:
 | 
						|
        backup_dir: "/root/backup/{{ ansible_date_time.date }}_{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}{{ ansible_date_time.second }}"
 | 
						|
    
 | 
						|
    - name: Create backup directory
 | 
						|
      file:
 | 
						|
        path: "{{ backup_dir }}"
 | 
						|
        state: directory
 | 
						|
        mode: '0755'
 | 
						|
    
 | 
						|
    - name: Backup current Nomad configuration
 | 
						|
      copy:
 | 
						|
        src: /etc/nomad.d/nomad.hcl
 | 
						|
        dest: "{{ backup_dir }}/nomad.hcl.backup"
 | 
						|
        remote_src: yes
 | 
						|
      ignore_errors: yes
 | 
						|
    
 | 
						|
    - name: Backup current apt sources
 | 
						|
      shell: |
 | 
						|
        cp -r /etc/apt/sources.list* {{ backup_dir }}/
 | 
						|
        dpkg --get-selections > {{ backup_dir }}/installed_packages.txt        
 | 
						|
      ignore_errors: yes
 | 
						|
    
 | 
						|
    - name: Create temporary directory for apt
 | 
						|
      file:
 | 
						|
        path: /tmp/apt-temp
 | 
						|
        state: directory
 | 
						|
        mode: '1777'
 | 
						|
    
 | 
						|
    - name: Download HashiCorp GPG key
 | 
						|
      get_url:
 | 
						|
        url: https://apt.releases.hashicorp.com/gpg
 | 
						|
        dest: /tmp/hashicorp.gpg
 | 
						|
        mode: '0644'
 | 
						|
      environment:
 | 
						|
        TMPDIR: /tmp/apt-temp
 | 
						|
    
 | 
						|
    - name: Install HashiCorp GPG key
 | 
						|
      shell: |
 | 
						|
        gpg --dearmor < /tmp/hashicorp.gpg > /usr/share/keyrings/hashicorp-archive-keyring.gpg        
 | 
						|
      environment:
 | 
						|
        TMPDIR: /tmp/apt-temp
 | 
						|
    
 | 
						|
    - name: Add HashiCorp repository
 | 
						|
      lineinfile:
 | 
						|
        path: /etc/apt/sources.list.d/hashicorp.list
 | 
						|
        line: "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com {{ ansible_distribution_release }} main"
 | 
						|
        create: yes
 | 
						|
        mode: '0644'
 | 
						|
    
 | 
						|
    - name: Update apt cache
 | 
						|
      apt:
 | 
						|
        update_cache: yes
 | 
						|
      environment:
 | 
						|
        TMPDIR: /tmp/apt-temp
 | 
						|
      ignore_errors: yes
 | 
						|
    
 | 
						|
    - name: Install nomad-driver-podman
 | 
						|
      apt:
 | 
						|
        name: nomad-driver-podman
 | 
						|
        state: present
 | 
						|
      environment:
 | 
						|
        TMPDIR: /tmp/apt-temp
 | 
						|
    
 | 
						|
    - name: Create Nomad plugin directory
 | 
						|
      file:
 | 
						|
        path: "{{ nomad_plugin_dir }}"
 | 
						|
        state: directory
 | 
						|
        owner: nomad
 | 
						|
        group: nomad
 | 
						|
        mode: '0755'
 | 
						|
    
 | 
						|
    - name: Create symlink for nomad-driver-podman in plugin directory
 | 
						|
      file:
 | 
						|
        src: /usr/bin/nomad-driver-podman
 | 
						|
        dest: "{{ nomad_plugin_dir }}/nomad-driver-podman"
 | 
						|
        state: link
 | 
						|
        owner: nomad
 | 
						|
        group: nomad
 | 
						|
    
 | 
						|
    - name: Get server IP address
 | 
						|
      shell: |
 | 
						|
        ip route get 1.1.1.1 | grep -oP 'src \K\S+'        
 | 
						|
      register: server_ip_result
 | 
						|
      changed_when: false
 | 
						|
    
 | 
						|
    - name: Set server IP fact
 | 
						|
      set_fact:
 | 
						|
        server_ip: "{{ server_ip_result.stdout }}"
 | 
						|
    
 | 
						|
    - name: Stop Nomad service
 | 
						|
      systemd:
 | 
						|
        name: nomad
 | 
						|
        state: stopped
 | 
						|
    
 | 
						|
    - name: Create updated Nomad client configuration
 | 
						|
      copy:
 | 
						|
        content: |
 | 
						|
          datacenter = "{{ nomad_datacenter }}"
 | 
						|
          data_dir = "/opt/nomad/data"
 | 
						|
          log_level = "INFO"
 | 
						|
          bind_addr = "{{ server_ip }}"
 | 
						|
          
 | 
						|
          server {
 | 
						|
            enabled = false
 | 
						|
          }
 | 
						|
          
 | 
						|
          client {
 | 
						|
            enabled = true
 | 
						|
            servers = ["100.117.106.136:4647", "100.116.80.94:4647", "100.97.62.111:4647", "100.116.112.45:4647", "100.84.197.26:4647"]
 | 
						|
          }
 | 
						|
          
 | 
						|
          plugin_dir = "{{ nomad_plugin_dir }}"
 | 
						|
          
 | 
						|
          plugin "nomad-driver-podman" {
 | 
						|
            config {
 | 
						|
              volumes {
 | 
						|
                enabled = true
 | 
						|
              }
 | 
						|
              recover_stopped = true
 | 
						|
            }
 | 
						|
          }
 | 
						|
          
 | 
						|
          consul {
 | 
						|
            address = "127.0.0.1:8500"
 | 
						|
          }          
 | 
						|
        dest: /etc/nomad.d/nomad.hcl
 | 
						|
        owner: nomad
 | 
						|
        group: nomad
 | 
						|
        mode: '0640'
 | 
						|
        backup: yes
 | 
						|
    
 | 
						|
    - name: Validate Nomad configuration
 | 
						|
      shell: nomad config validate /etc/nomad.d/nomad.hcl
 | 
						|
      register: nomad_validate
 | 
						|
      failed_when: nomad_validate.rc != 0
 | 
						|
    
 | 
						|
    - name: Start Nomad service
 | 
						|
      systemd:
 | 
						|
        name: nomad
 | 
						|
        state: started
 | 
						|
        enabled: yes
 | 
						|
    
 | 
						|
    - name: Wait for Nomad to be ready
 | 
						|
      wait_for:
 | 
						|
        port: 4646
 | 
						|
        host: "{{ server_ip }}"
 | 
						|
        delay: 5
 | 
						|
        timeout: 60
 | 
						|
    
 | 
						|
    - name: Display backup location
 | 
						|
      debug:
 | 
						|
        msg: "Backup created at: {{ backup_dir }}" |