How to run apt update and upgrade via Ansible shell
AnsibleAnsible PlaybookAnsible Problem Overview
I'm trying to use Ansible to run the following two commands:
sudo apt-get update && sudo apt-get upgrade -y
I know with ansible you can use:
ansible all -m shell -u user -K -a "uptime"
Would running the following command do it? Or do I have to use some sort of raw
command
ansible all -m shell -u user -K -a "sudo apt-get update && sudo apt-get upgrade -y"
Ansible Solutions
Solution 1 - Ansible
I wouldn't recommend using shell for this, as Ansible has the apt module designed for just this purpose. I've detailed using apt below.
In a playbook, you can update and upgrade like so:
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
update_cache: yes
cache_valid_time: 86400 #One day
The cache_valid_time
value can be omitted. Its purpose from the docs:
> Update the apt cache if its older than the cache_valid_time. This > option is set in seconds.
So it's good to include if you don't want to update the cache when it has only recently been updated.
To do this as an ad-hoc command you can run:
$ ansible all -m apt -a "upgrade=yes update_cache=yes cache_valid_time=86400" --become
ad-hoc commands are described in detail here
Note that I am using --become
and become: true
. This is an example of typical privilege escalation through Ansible. You use -u user
and -K
(ask for privilege escalation password). Use whichever works for you, this is just to show you the most common form.
Solution 2 - Ansible
Just to add a flavour on the answer. This one is an executable playbook in all the hosts specified in your inventory file.
- hosts: all
become: true
tasks:
- name: Update and upgrade apt packages
apt:
upgrade: yes
update_cache: yes
cache_valid_time: 86400
Solution 3 - Ansible
Using Ubuntu 16.04, I did a little adjustement:
- name: Update and upgrade apt packages
become: true
apt:
update_cache: yes
upgrade: 'yes'
I juste put the upgrade yes
between apostrophe to avoid un annoying warning:
[WARNING]: The value True (type bool) in a string field was converted to u'True' (type string). If this does
not look like what you expect, quote the entire value to ensure it does not change.
I would like just to comment into the original answer, but no permission, yet...
Ref: The value True (type bool) in a string field was converted to u'True' (type string)
Solution 4 - Ansible
We use the following command to update and upgrade all packages :
ansible all -m apt -a "name='*' state=latest update_cache=yes upgrade=yes" -b --become-user root