summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/apt/tasks/apt.yml
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/apt/tasks/apt.yml')
-rw-r--r--test/integration/targets/apt/tasks/apt.yml547
1 files changed, 547 insertions, 0 deletions
diff --git a/test/integration/targets/apt/tasks/apt.yml b/test/integration/targets/apt/tasks/apt.yml
new file mode 100644
index 0000000..d273eda
--- /dev/null
+++ b/test/integration/targets/apt/tasks/apt.yml
@@ -0,0 +1,547 @@
+- 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(3)`. To test, we
+# will first uninstall `python-apt`.
+- name: uninstall python-apt with apt
+ apt:
+ pkg: [python-apt, python3-apt]
+ state: absent
+ purge: yes
+ register: apt_result
+
+# In check mode, auto-install of `python-apt` must fail
+- name: test fail uninstall hello without required apt deps in check mode
+ apt:
+ pkg: hello
+ state: absent
+ purge: yes
+ register: apt_result
+ check_mode: yes
+ ignore_errors: yes
+
+- name: verify fail uninstall hello without required apt deps in check mode
+ assert:
+ that:
+ - apt_result is failed
+ - '"If run normally this module can auto-install it." in apt_result.msg'
+
+- name: check with dpkg
+ shell: dpkg -s python-apt python3-apt
+ register: dpkg_result
+ ignore_errors: true
+
+# UNINSTALL 'hello'
+# With 'python-apt' uninstalled, the first call to 'apt' should install
+# python-apt without updating the cache.
+- name: uninstall hello with apt and prevent updating the cache
+ apt:
+ pkg: hello
+ state: absent
+ purge: yes
+ update_cache: no
+ register: apt_result
+
+- name: check hello with dpkg
+ shell: dpkg-query -l hello
+ failed_when: False
+ register: dpkg_result
+
+- name: verify uninstall hello with apt and prevent updating the cache
+ assert:
+ that:
+ - "'changed' in apt_result"
+ - apt_result is not changed
+ - "dpkg_result.rc == 1"
+
+- name: Test installing fnmatch package
+ apt:
+ name:
+ - hel?o
+ - he?lo
+ register: apt_install_fnmatch
+
+- name: Test uninstalling fnmatch package
+ apt:
+ name:
+ - hel?o
+ - he?lo
+ state: absent
+ register: apt_uninstall_fnmatch
+
+- name: verify fnmatch
+ assert:
+ that:
+ - apt_install_fnmatch is changed
+ - apt_uninstall_fnmatch is changed
+
+- name: Test update_cache 1 (check mode)
+ apt:
+ update_cache: true
+ cache_valid_time: 10
+ register: apt_update_cache_1_check_mode
+ check_mode: true
+
+- name: Test update_cache 1
+ apt:
+ update_cache: true
+ cache_valid_time: 10
+ register: apt_update_cache_1
+
+- name: Test update_cache 2 (check mode)
+ apt:
+ update_cache: true
+ cache_valid_time: 10
+ register: apt_update_cache_2_check_mode
+ check_mode: true
+
+- name: Test update_cache 2
+ apt:
+ update_cache: true
+ cache_valid_time: 10
+ register: apt_update_cache_2
+
+- name: verify update_cache
+ assert:
+ that:
+ - apt_update_cache_1_check_mode is changed
+ - apt_update_cache_1 is changed
+ - apt_update_cache_2_check_mode is not changed
+ - apt_update_cache_2 is not changed
+
+- name: uninstall apt bindings with apt again
+ apt:
+ pkg: [python-apt, python3-apt]
+ state: absent
+ purge: yes
+
+# 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
+ until: apt_result is success
+
+- 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"
+ - apt_result is not changed
+ - "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
+
+# INSTALL WITHOUT REMOVALS
+- name: Install hello, that conflicts with hello-traditional
+ apt:
+ pkg: hello
+ state: present
+ update_cache: no
+
+- name: check hello
+ shell: dpkg-query -l hello
+ register: dpkg_result
+
+- name: verify installation of hello
+ assert:
+ that:
+ - "apt_result.changed"
+ - "dpkg_result.rc == 0"
+
+- name: Try installing hello-traditional, that conflicts with hello
+ apt:
+ pkg: hello-traditional
+ state: present
+ fail_on_autoremove: yes
+ ignore_errors: yes
+ register: apt_result
+
+- name: verify failure of installing hello-traditional, because it is required to remove hello to install.
+ assert:
+ that:
+ - apt_result is failed
+ - '"Packages need to be removed but remove is disabled." in apt_result.msg'
+
+- name: uninstall hello with apt
+ apt:
+ pkg: hello
+ state: absent
+ purge: yes
+ update_cache: no
+
+- 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
+
+- name: undo previous install
+ apt: pkg=hello state=absent
+
+# 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: "{{ pkgs }}"
+ state: absent
+ vars:
+ pkgs:
+ - 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
+
+# check policy_rc_d parameter
+
+- name: Install unscd but forbid service start
+ apt:
+ name: unscd
+ policy_rc_d: 101
+
+- name: Stop unscd service
+ service:
+ name: unscd
+ state: stopped
+ register: service_unscd_stop
+
+- name: unscd service shouldn't have been stopped by previous task
+ assert:
+ that: service_unscd_stop is not changed
+
+- name: Uninstall unscd
+ apt:
+ name: unscd
+ policy_rc_d: 101
+
+- name: Create incorrect /usr/sbin/policy-rc.d
+ copy:
+ dest: /usr/sbin/policy-rc.d
+ content: apt integration test
+ mode: 0755
+
+- name: Install unscd but forbid service start
+ apt:
+ name: unscd
+ policy_rc_d: 101
+
+- name: Stop unscd service
+ service:
+ name: unscd
+ state: stopped
+ register: service_unscd_stop
+
+- name: unscd service shouldn't have been stopped by previous task
+ assert:
+ that: service_unscd_stop is not changed
+
+- name: Create incorrect /usr/sbin/policy-rc.d
+ copy:
+ dest: /usr/sbin/policy-rc.d
+ content: apt integration test
+ mode: 0755
+ register: policy_rc_d
+
+- name: Check if /usr/sbin/policy-rc.d was correctly backed-up during unscd install
+ assert:
+ that: policy_rc_d is not changed
+
+- name: Delete /usr/sbin/policy-rc.d
+ file:
+ path: /usr/sbin/policy-rc.d
+ state: absent
+
+# https://github.com/ansible/ansible/issues/65325
+- name: Download and install old version of hello (to test allow_change_held_packages option)
+ apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{ hello_old_version }}_amd64.deb"
+ notify:
+ - remove package hello
+
+- name: Put hello on hold
+ shell: apt-mark hold hello
+
+- name: Get hold list
+ shell: apt-mark showhold
+ register: allow_change_held_packages_hold
+
+- name: Check that the package hello is on the hold list
+ assert:
+ that:
+ - "'hello' in allow_change_held_packages_hold.stdout"
+
+- name: Try updating package to the latest version (allow_change_held_packages=no)
+ apt:
+ name: hello
+ state: latest
+ ignore_errors: True
+ register: allow_change_held_packages_failed_update
+
+- name: Get the version of the package
+ shell: dpkg -s hello | grep Version | awk '{print $2}'
+ register: allow_change_held_packages_hello_version
+
+- name: Verify that the package was not updated (apt returns with an error)
+ assert:
+ that:
+ - "allow_change_held_packages_failed_update is failed"
+ - "'--allow-change-held-packages' in allow_change_held_packages_failed_update.stderr"
+ - "allow_change_held_packages_hello_version.stdout == hello_old_version"
+
+- name: Try updating package to the latest version (allow_change_held_packages=yes)
+ apt:
+ name: hello
+ state: latest
+ allow_change_held_packages: yes
+ register: allow_change_held_packages_successful_update
+
+- name: Get the version of the package
+ shell: dpkg -s hello | grep Version | awk '{print $2}'
+ register: allow_change_held_packages_hello_version
+
+- name: Verify that the package was updated
+ assert:
+ that:
+ - "allow_change_held_packages_successful_update is changed"
+ - "allow_change_held_packages_hello_version.stdout != hello_old_version"
+
+- name: Try updating package to the latest version again
+ apt:
+ name: hello
+ state: latest
+ allow_change_held_packages: yes
+ register: allow_change_held_packages_no_update
+
+- name: Get the version of the package
+ shell: dpkg -s hello | grep Version | awk '{print $2}'
+ register: allow_change_held_packages_hello_version_again
+
+- name: Verify that the package was not updated
+ assert:
+ that:
+ - "allow_change_held_packages_no_update is not changed"
+ - "allow_change_held_packages_hello_version.stdout == allow_change_held_packages_hello_version_again.stdout"
+
+# Virtual package
+- name: Install a virtual package
+ apt:
+ package:
+ - emacs-nox
+ - yaml-mode # <- the virtual package
+ state: latest
+ register: install_virtual_package_result
+
+- name: Check the virtual package install result
+ assert:
+ that:
+ - install_virtual_package_result is changed
+
+- name: Clean up virtual-package install
+ apt:
+ package:
+ - emacs-nox
+ - elpa-yaml-mode
+ state: absent
+ purge: yes