When running enough desktop office machines doing maintenance and making changes like installing new software quickly becomes a problem. You can configure unattended upgrades but this becomes a problem when it does not work. Often a update won’t install and you’ll need to intervene.
To resolve this we decided to try Ansilbe, which has worked out great for us. We start up the machines using wake on lan at night, apply any changes run the updates and clean up the system.
If you do not know how Ansible works, read up on it here. We needed to work around some bugs in Ansible but the playbook below is what works right now.
--- - hosts: desktops strategy: free serial: 10 connection: local tasks: - name: wake up desktop local_action: command /usr/bin/wakeonlan {{ macaddress }} - name: wait for desktop to start wait_for: > host={{ inventory_hostname }} port=22 delay=1 timeout=360 delegate_to: localhost ignore_errors: True - hosts: desktops strategy: free remote_user: ansibleuser become: yes become_user: root serial: 5 tasks: - name: update apt: update_cache=yes - name: check for updates command: /usr/lib/update-notifier/apt-check --package-names register: packages - name: upgrade apt: upgrade=dist when: packages.stderr != "" - name: autoremove command: apt-get -y autoremove - name: cleanup command: apt-get clean - name: shutdown command: /sbin/shutdown -h +1
You’ll need to add all the desktop host names and mac addresses to /etc/ansible/hosts defining the mac address like this:
[desktops] desktop1.example.com macaddress=00:EE:EE:EE:00:EE desktop2.example.com macaddress=00:EE:EE:EE:00:EE desktop3.example.com macaddress=00:EE:EE:EE:00:EE
You can add any task to run on the desktops in the playbook.