If you haven’t looked at Ansible yet then I’d suggest either reviewing a book (see bottom of post) or heading over to the website and reading up on it.
Using ansible for mundane tasks makes life as a system administrator/engineer much more livable. Instead of typing the same commands repeatedly let an automation system do that. In this example: ansible is the tool.
First, you need a set of hosts. This is either a file (hosts in my case) or you could get the data from a directory. It is entirely up to you.
Second, you’ll need to write a playbook to work against.
Then you can run up your play to update your servers!
I created multiple groups to show you some of the options available and the example command lines will follow after the hosts file.
# my hosts file
# these 2 groups need a username and password, so you'll need# to pass in the -k and -K flags to log in and use sudo[ubuntu1404-password]server3.geekandi.netserver4.geekandi.net
[ubuntu1204-password]server1.geekandi.netserver2.geekandi.net
[centos7-password]server21.geekandi.netserver22.geekandi.net
# create a host group of like systems[linux-password:children]ubuntu1404-passwordubuntu1204-passwordcentos7-password
# and set some variables for this group[linux-password:vars]ansible_ssh_user=mike
# these 2 groups use an ssh key to log into the server and# do not require a password for sudo[ubuntu1404-sshkey]server13.geekandi.netserver14.geekandi.net
[ubuntu1204-sshkey]server15.geekandi.netserver16.geekandi.net
[redhat7-sshkey]server31.geekandi.net
[linux-sshkey:children]ubuntu1404-sshkeyubuntu1204-sshkeyredhat7-sshkey
[linux-sshkey:vars]ansible_ssh_user=ansibleansible_ssh_private_key_file=~/.ssh/ansible.pem# run the play against the host group that requires a passwordansible-playbook -l ubuntu-password update-upgrade.yml -k -K# run the play against the host group that uses ssh keysansible-playbook -l ubuntu-sshkey update-upgrade.ymlAnd here is the very simple playbook that does the heavy lifting.
---
- hosts: all sudo: yes tasks: # This task updates servers that use 'yum' and RPM packages # by looking for CentOS or RedHat as a distribution name. This # will may also pick up modern OracleLinux but OL has a lot of # different strings. - name: .rpm upgrade server yum: > update_cache=yes name=* state=latest update_cache=yes when: > ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat'
# This task updates servers that use 'apt' and DEB packages # by looking for Debian or Ubuntu as a distribution name. - name: .deb do dist-upgrade apt: > update_cache=yes cache_valid_time=1200 upgrade=dist when: > ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'I’ll start adding more Ansible plays in the blog that will add some extra complexity.