Estou tentando escrever um playbook ansible que apenas atualiza o linux-generic
pacote, mas não consigo encontrar o encantamento mágico para fazê-lo realmente funcionar. Com esta jogada, recebo o erro parameters are mutually exclusive: deb|package|upgrade
que o google sugere que upgrade: full
não se destina a um único pacote:
- name: Check if linux-generic is installed
command: dpkg -l linux-generic
register: pkg_chk
- name: update kernel if installed
when: pkg_chk.rc == 0
apt:
update_cache: yes
autoremove : yes
autoclean : no
upgrade : full
dpkg_options: 'force-confold,force-confdef'
name : linux-generic
Removendo upgrade: full
executa o jogo...
TASK [update kernel if installed] **********************************************************
ok: [vivaldi.fammed.wisc.edu]
Mas, quando eu faço login na máquina e executo aptitude full-upgrade
, mostra que o ansible não fez nada:
# aptitude full-upgrade
The following NEW packages will be installed:
linux-headers-4.4.0-203{a} linux-headers-4.4.0-203-generic{a}
linux-image-4.4.0-203-generic{a} linux-modules-4.4.0-203-generic{a}
linux-modules-extra-4.4.0-203-generic{a}
Ok, então pensei em jogar o command:
módulo nele e usar apt
comandos simples, mas há algum problema com a string de comando que não escapei corretamente.
- name: upgrade linux-generic
when: pkg_chk.rc == 0
command: apt-get install -y --only-upgrade -o Dpkg::Options::='force-confdef' -o Dpkg::Options::='force-confold' linux-generic
register: install_chk
- name: autoremove linux-generic
when: install_chk.rc == 0
command: apt-get -y autoremove -o Dpkg::Options::='force-confdef' -o Dpkg::Options::='force-confold'
register: auto_chk
que dá este erro:
Syntax Error while loading YAML.
mapping values are not allowed in this context
The error appears to be in '/usr/src/ansible/tests/upgrade-kernel-only.yml': line 24, column 12, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
when: pkg_chk.rc == 0
command: apt-get install -y --only-upgrade -o Dpkg::Options::='force-confdef' -o Dpkg::Options::='force-confold' linux-generic
^ here
Eu tentei escapar dos :
=
caracteres, bem como substituir aspas duplas e aspas simples. Alguém sabe como fazer isso funcionar?
Existe alguma razão específica pela qual você não consideraria o módulo de pacote ansible, por exemplo
No que diz respeito ao erro ansible, você deve colocar seu comando entre aspas duplas, pois está usando aspas simples dentro: