UncleNUC Wiki

Second chance for NUCs

User Tools

Site Tools


lab:stack_of_nucs:ansible_playbook_-_update

This is an old revision of the document!


Ansible Playbook - Update

In the previous step we discovered and added the IP address of all our nodes to the file on NUC 2: /home/ansible/my-project/hosts

Our first Ansible playbook will be to update Ubuntu packages on all the worker nodes.

Purpose:

  • Demonstrate a very useful playbook
  • Update all our nodes to the latest code

Step 1 - Connect to the Ansible Control Node

From NUC 1, log in to the Ansible control node, NUC 2.

Step 2 - Disable DNS Stub Resolver

Even though each node receives its DNS information via DHCP, Ubuntu 22.04 will at times fail to resolve names. Rebooting solves the problem temporarily, but it will come back.

  1. Create file /home/ansible/my-project/disable-dns-stub.yml
    • disable-dns-stub.yml
      ---
      - name: Disable DNS stub listener
        hosts: nodes
        remote_user: ansible
        become: true
        tasks:
          - name: Disable DNS stub listener
            ini_file: dest=/etc/systemd/resolved.conf section=Resolve option=DNSStubListener value=no backup=yes
            tags: configuration
          - name: Restart NetworkManager
            systemd:
              name: NetworkManager
              state: restarted
          - name: Restart systemd-resolved
            systemd:
              name: systemd-resolved
              state: restarted
          - name: daemon-reload
            systemd:
              daemon_reload: true
  2. Run the playbook: ansible-playbook -i hosts disable-dns-stub.yml

Step 3 - Update Ubuntu on All Nodes

  1. Create file /home/ansible/my-project/update.yml
    • update.yml
      ---
      - hosts: nodes
        become: true
        become_user: root
        tasks:
          - name: Update apt repo and cache on all Debian/Ubuntu boxes
            apt: update_cache=yes force_apt_get=yes cache_valid_time=3600
      
          - name: Upgrade all packages on servers
            apt: upgrade=dist force_apt_get=yes
      
          - name: Check if a reboot is needed on all servers
            register: reboot_required_file
            stat: path=/var/run/reboot-required get_md5=no
      
          - name: Reboot the box if kernel updated
            reboot:
              msg: "Reboot initiated by Ansible for kernel updates"
              connect_timeout: 5
              reboot_timeout: 300
              pre_reboot_delay: 0
              post_reboot_delay: 30
              test_command: uptime
            when: reboot_required_file.stat.exists
  2. Run the playbook: ansible-playbook -i hosts update.yml

Next Step

Congratulations you just updated your nodes! Next is your second Ansible playbook - Ansible Playbook - CMOS.

Optional

Faster Bootup Times with WiFi Only

Set the ethernet interface to be “optional” on the nodes so they will boot faster; they normally wait for the network to come up on the wired interface. Since we are on WiFi only, the interface will never come up.

Steps:

  1. Create file /home/ansible/my-project/ethernetoptional.yml
    • ethnetoptional.yml
      ---
      - hosts: nodes
        become: true
        become_user: root
        tasks:
          - name: Set ethernet interface to optional
            lineinfile:
              path: /etc/netplan/00-installer-config.yaml
              insertafter: "dhcp4: true"
              line: "      optional: true"
          - name: Apply netplan
            command: netplan apply
            ignore_errors: true
  2. Test the playbook
    • ansible-playbook -i hosts ethernetoptional.yml

Check the WiFi on the NUC

Sometimes in my Lab testing I find a NUCs that seem slowing or become unresponsive. This can actually be due to a poor WiFi connection!

  1. Create the playbook check-wifi.yml
    • check-wifi.yml
      ---
      - name: Check wifi strength
        hosts: clients
        remote_user: ansible
        become: true
        tasks:
          - name: Make sure wireless-tools is installed
            apt:
              name: wireless-tools
              state: present
          - name: Gather wifi strength
            shell: "iwconfig | grep Quality"
            register: wifi
            changed_when: false
          - name: Display wifi strength
            debug:
              msg: "{{ item }}"
            with_items: "{{ wifi.stdout_lines }}"
          - name: Calculate wifi strength
            set_fact:
              strength: "{{ wifi.stdout | regex_search(regexp, '\\1') }}"
            vars:
              regexp: 'Quality=([0-9]+)/70'
          - name: Show value
            debug:
              msg:
                - "{{ strength[0] }}/70 = {{( ( (strength[0] | int) / 70) * 100 ) | int }}%"
  2. Run it: ansible-playbook -i hosts check-wifi.yml
  3. If all the NUCs are in the same place but one is much weaker than the others
    • check the antennas are connected to the Wifi card
    • does a different wifi card improve the connection?
lab/stack_of_nucs/ansible_playbook_-_update.1684463164.txt.gz · Last modified: 2023/05/19 02:26 by user