- name: show python version debug: var=ansible_python_version - 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', '>=') # 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 - debug: var=apt_result - debug: var=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 - debug: var=apt_result - debug: var=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: 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" # 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/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: - "'E: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 - name: autoclean during install apt: pkg=hello state=present autoclean=yes - name: autoclean apt: autoclean=yes - name: autoremove apt: autoremove=yes