- name: use python-apt set_fact: python_apt: python-apt when: ansible_python_version is version('3', '<') - name: use python3-apt set_fact: python_apt: python3-apt when: ansible_python_version is version('3', '>=') - name: use Debian mirror set_fact: distro_mirror: http://ftp.debian.org/debian when: ansible_distribution == 'Debian' - name: use Ubuntu mirror set_fact: distro_mirror: http://archive.ubuntu.com/ubuntu when: ansible_distribution == 'Ubuntu' # UNINSTALL 'python-apt' # The `apt` module has the smarts to auto-install `python-apt`. To test, we # will first uninstall `python-apt`. - name: check {{ python_apt }} with dpkg shell: dpkg -s {{ python_apt }} register: dpkg_result ignore_errors: true - name: uninstall {{ python_apt }} with apt apt: pkg={{ python_apt }} state=absent purge=yes register: apt_result when: dpkg_result is successful # UNINSTALL 'hello' # With 'python-apt' uninstalled, the first call to 'apt' should install # python-apt. - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes register: apt_result - name: check hello with dpkg shell: dpkg-query -l hello failed_when: False register: dpkg_result - name: verify uninstallation of hello assert: that: - "'changed' in apt_result" - "dpkg_result.rc == 1" # UNINSTALL AGAIN - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes register: apt_result - name: verify no change on re-uninstall assert: that: - "not apt_result.changed" # INSTALL - name: install hello with apt apt: name=hello state=present register: apt_result - name: check hello with dpkg shell: dpkg-query -l hello failed_when: False register: dpkg_result - name: verify installation of hello assert: that: - "apt_result.changed" - "dpkg_result.rc == 0" - name: verify apt module outputs assert: that: - "'changed' in apt_result" - "'stderr' in apt_result" - "'stdout' in apt_result" - "'stdout_lines' in apt_result" # INSTALL AGAIN - name: install hello with apt apt: name=hello state=present register: apt_result - name: verify no change on re-install assert: that: - "not apt_result.changed" # UNINSTALL AGAIN - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes register: apt_result # INSTALL WITH VERSION WILDCARD - name: install hello with apt apt: name=hello=2.* state=present register: apt_result - name: check hello with wildcard with dpkg shell: dpkg-query -l hello failed_when: False register: dpkg_result - name: verify installation of hello assert: that: - "apt_result.changed" - "dpkg_result.rc == 0" - name: check hello version shell: dpkg -s hello | grep Version | awk '{print $2}' register: hello_version - name: check hello architecture shell: dpkg -s hello | grep Architecture | awk '{print $2}' register: hello_architecture - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes - name: install deb file apt: deb="/var/cache/apt/archives/hello_{{ hello_version.stdout }}_{{ hello_architecture.stdout }}.deb" register: apt_initial - name: install deb file again apt: deb="/var/cache/apt/archives/hello_{{ hello_version.stdout }}_{{ hello_architecture.stdout }}.deb" register: apt_secondary - name: verify installation of hello assert: that: - "apt_initial.changed" - "not apt_secondary.changed" - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes - name: install deb file from URL apt: deb="{{ distro_mirror }}/pool/main/h/hello/hello_{{ hello_version.stdout }}_{{ hello_architecture.stdout }}.deb" register: apt_url - name: verify installation of hello assert: that: - "apt_url.changed" - name: uninstall hello with apt apt: pkg=hello state=absent purge=yes - name: force install of deb apt: deb="/var/cache/apt/archives/hello_{{ hello_version.stdout }}_{{ hello_architecture.stdout }}.deb" force=true register: dpkg_force - name: verify installation of hello assert: that: - "dpkg_force.changed" # NEGATIVE: upgrade all packages while providing additional packages to install - name: provide additional packages to install while upgrading all installed packages apt: pkg=*,test state=latest ignore_errors: True register: apt_result - name: verify failure of upgrade packages and install assert: that: - "not apt_result.changed" - "apt_result.failed" - name: autoclean during install apt: pkg=hello state=present autoclean=yes # https://github.com/ansible/ansible/issues/23155 - name: create a repo file copy: dest: /etc/apt/sources.list.d/non-existing.list content: deb http://ppa.launchpad.net/non-existing trusty main - name: test for sane error message apt: update_cache: yes register: apt_result ignore_errors: yes - name: verify sane error message assert: that: - "'Failed to fetch' in apt_result['msg']" - "'403' in apt_result['msg']" - name: Clean up file: name: /etc/apt/sources.list.d/non-existing.list state: absent # https://github.com/ansible/ansible/issues/28907 - name: Install parent package apt: name: libcaca-dev - name: Install child package apt: name: libslang2-dev - shell: apt-mark showmanual | grep libcaca-dev ignore_errors: yes register: parent_output - name: Check that parent package is marked as installed manually assert: that: - "'libcaca-dev' in parent_output.stdout" - shell: apt-mark showmanual | grep libslang2-dev ignore_errors: yes register: child_output - name: Check that child package is marked as installed manually assert: that: - "'libslang2-dev' in child_output.stdout" - name: Clean up apt: name: "{{ item }}" state: absent with_items: - libcaca-dev - libslang2-dev # https://github.com/ansible/ansible/issues/38995 - name: build-dep for a package apt: name: tree state: build-dep register: apt_result - name: Check the result assert: that: - apt_result is changed - name: build-dep for a package (idempotency) apt: name: tree state: build-dep register: apt_result - name: Check the result assert: that: - apt_result is not changed