cfff72e9db
In answer to #2540, `aptitude` was introduced as tool of choice for running upgrades in the apt module and installing new packages that arise as dependencies during upgrades. This recently lead to problems, as for example Ubuntu Xenial (16.04) ships without aptitude (installed). Studying the man pages of both apt-get and aptitude, it appears that we can achieve the effects of `aptitude safe-upgrade` using ``` apt-get upgrade --with-new-pkgs --autoremove ``` while `aptitude full-upgrade` seems to be identical to `apt-get dist-upgrade`. We use `apt-get` as described above as a fall-back in case that `aptitude` cannot be found, issuing a warning when it does so. Furthermore it introduces a flag `force_apt_get` which may be used to enforce usage of apt-get (which does not issue a warning). The integration tests are updated accordingly. Cf. also the discussion in #27370. Fixes #18987
72 lines
2.5 KiB
YAML
72 lines
2.5 KiB
YAML
# (c) 2014, James Tanner <tanner.jc@gmail.com>
|
|
|
|
# This file is part of Ansible
|
|
#
|
|
# Ansible is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Ansible is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
- include: 'apt.yml'
|
|
when: ansible_distribution in ('Ubuntu', 'Debian')
|
|
|
|
- include: 'apt-multiarch.yml'
|
|
when: ansible_distribution in ('Ubuntu', 'Debian') and ansible_userspace_architecture != apt_foreign_arch
|
|
|
|
- include: 'apt-builddep.yml'
|
|
when: ansible_distribution in ('Ubuntu', 'Debian')
|
|
|
|
- include: upgrade.yml upgrade_type=dist
|
|
when: ansible_distribution in ('Ubuntu', 'Debian')
|
|
|
|
- name: Check if aptitude is installed
|
|
command: dpkg-query --show --showformat='${db:Status-Abbrev}' aptitude
|
|
register: aptitude_status
|
|
when: ansible_distribution in ('Ubuntu', 'Debian')
|
|
|
|
- debug: var=aptitude_status.stdout
|
|
|
|
- name: Remove aptitude, if installed, to test fall-back to apt-get
|
|
apt:
|
|
pkg: aptitude
|
|
state: absent
|
|
when:
|
|
- aptitude_status.stdout.find('ii') != -1
|
|
|
|
- include: "upgrade.yml aptitude_present={{ False | bool }} upgrade_type={{ item.upgrade_type }} force_apt_get={{ item.force_apt_get }}"
|
|
when:
|
|
- ansible_distribution in ('Ubuntu', 'Debian')
|
|
with_items:
|
|
- { upgrade_type: safe, force_apt_get: False }
|
|
- { upgrade_type: full, force_apt_get: False }
|
|
- { upgrade_type: safe, force_apt_get: True }
|
|
- { upgrade_type: full, force_apt_get: True }
|
|
|
|
- name: (Re-)Install aptitude, run same tests again
|
|
apt:
|
|
pkg: aptitude
|
|
state: present
|
|
|
|
- include: upgrade.yml upgrade_type={{ item.upgrade_type }} force_apt_get={{ item.force_apt_get }}
|
|
when:
|
|
- ansible_distribution in ('Ubuntu', 'Debian')
|
|
with_items:
|
|
- { upgrade_type: safe, force_apt_get: False }
|
|
- { upgrade_type: full, force_apt_get: False }
|
|
- { upgrade_type: safe, force_apt_get: True }
|
|
- { upgrade_type: full, force_apt_get: True }
|
|
|
|
- name: Remove aptitude if not originally present
|
|
apt:
|
|
pkg: aptitude
|
|
state: absent
|
|
when:
|
|
- aptitude_status.stdout.find('ii') == -1
|