1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
community.general/tests/integration/targets/zypper/tasks/zypper.yml
Felix Fontein 11c7611ced
More true/false normalization (#6152)
* More true/false normalization.

* Boolean do not need explicit choices.

* One more.

* Fix type argument.
2023-03-06 23:02:24 +01:00

530 lines
12 KiB
YAML

---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: get hello package version
shell: zypper --xmlout se -svx hello | grep 'name="hello"' | grep 'repository="Main Repository"' | sed 's/.*edition="\([^ ]*\)".*/\1/'
register: hello_version
- name: set URL of test package
set_fact:
hello_package_url: https://download.opensuse.org/distribution/leap/{{ ansible_distribution_version }}/repo/oss/x86_64/hello-{{ hello_version.stdout }}.x86_64.rpm
- debug: var=hello_package_url
# UNINSTALL
- name: uninstall hello
zypper:
name: hello
state: removed
register: zypper_result
- name: check hello with rpm
shell: rpm -q hello
failed_when: false
register: rpm_result
- debug: var=zypper_result
- debug: var=rpm_result
- name: verify uninstallation of hello
assert:
that:
- "zypper_result.rc == 0"
- "rpm_result.rc == 1"
# UNINSTALL AGAIN
- name: uninstall hello again
zypper:
name: hello
state: removed
register: zypper_result
- name: verify no change on re-uninstall
assert:
that:
- "not zypper_result.changed"
# INSTALL
- name: install hello
zypper:
name: hello
state: present
register: zypper_result
- name: check hello with rpm
shell: rpm -q hello
failed_when: false
register: rpm_result
- debug: var=zypper_result
- debug: var=rpm_result
- name: verify installation of hello
assert:
that:
- "zypper_result.rc == 0"
- "zypper_result.changed"
- "rpm_result.rc == 0"
# INSTALL AGAIN
- name: install hello again
zypper:
name: hello
state: present
register: zypper_result
- name: verify no change on second install
assert:
that:
- "not zypper_result.changed"
# Multiple packages
- name: uninstall hello and metamail
zypper:
name:
- hello
- metamail
state: removed
register: zypper_result
- name: check hello with rpm
shell: rpm -q hello
failed_when: false
register: rpm_hello_result
- name: check metamail with rpm
shell: rpm -q metamail
failed_when: false
register: rpm_metamail_result
- name: verify packages uninstalled
assert:
that:
- "rpm_hello_result.rc != 0"
- "rpm_metamail_result.rc != 0"
- name: install hello and metamail
zypper:
name:
- hello
- metamail
state: present
register: zypper_result
- name: check hello with rpm
shell: rpm -q hello
failed_when: false
register: rpm_hello_result
- name: check metamail with rpm
shell: rpm -q metamail
failed_when: false
register: rpm_metamail_result
- name: verify packages installed
assert:
that:
- "zypper_result.rc == 0"
- "zypper_result.changed"
- "rpm_hello_result.rc == 0"
- "rpm_metamail_result.rc == 0"
- name: uninstall hello and metamail
zypper:
name:
- hello
- metamail
state: removed
# INSTALL nonexistent package
- name: install hello from url
zypper:
name: doesnotexist
state: present
register: zypper_result
ignore_errors: true
- name: verify package installation failed
assert:
that:
- "zypper_result.rc == 104"
- "zypper_result.msg.startswith('No provider of')"
# INSTALL broken local package
- name: create directory
file:
path: "{{remote_tmp_dir | expanduser}}/zypper1"
state: directory
- name: fake rpm package
file:
path: "{{remote_tmp_dir | expanduser}}/zypper1/broken.rpm"
state: touch
- name: install broken rpm
zypper:
name: "{{remote_tmp_dir | expanduser}}/zypper1/broken.rpm"
state: present
register: zypper_result
ignore_errors: true
- debug: var=zypper_result
- name: verify we failed installation of broken rpm
assert:
that:
- "zypper_result.rc == 3"
- "'Problem reading the RPM header' in zypper_result.stdout"
# Build and install an empty rpm
- name: uninstall empty
zypper:
name: empty
state: removed
- name: install rpmbuild
zypper:
name: rpmbuild
state: present
- name: clean zypper RPM cache
file:
name: /var/cache/zypper/RPMS
state: absent
- name: create directory
file:
path: "{{remote_tmp_dir | expanduser}}/zypper2"
state: directory
- name: copy spec file
copy:
src: empty.spec
dest: "{{ remote_tmp_dir | expanduser }}/zypper2/empty.spec"
- name: build rpm
command: |
rpmbuild -bb \
--define "_topdir {{remote_tmp_dir | expanduser }}/zypper2/rpm-build"
--define "_builddir %{_topdir}" \
--define "_rpmdir %{_topdir}" \
--define "_srcrpmdir %{_topdir}" \
--define "_specdir {{remote_tmp_dir | expanduser}}/zypper2" \
--define "_sourcedir %{_topdir}" \
{{ remote_tmp_dir }}/zypper2/empty.spec
register: rpm_build_result
- name: install empty rpm
zypper:
name: "{{ remote_tmp_dir | expanduser }}/zypper2/rpm-build/noarch/empty-1-0.noarch.rpm"
disable_gpg_check: true
register: zypper_result
- name: check empty with rpm
shell: rpm -q empty
failed_when: false
register: rpm_result
- name: verify installation of empty
assert:
that:
- "zypper_result.rc == 0"
- "zypper_result.changed"
- "rpm_result.rc == 0"
- name: uninstall empty
zypper:
name: empty
state: removed
- name: extract from rpm
zypper:
name: "{{ remote_tmp_dir | expanduser }}/zypper2/rpm-build/noarch/empty-1-0.noarch.rpm"
state: installed
disable_gpg_check: true
extra_args_precommand: --root {{ remote_tmp_dir | expanduser }}/testdir/
- name: check that dir var is exist
stat: path={{ remote_tmp_dir | expanduser }}/testdir/var
register: stat_result
- name: check that we extract rpm package in testdir folder and folder var is exist
assert:
that:
- "stat_result.stat.exists == true"
# test simultaneous remove and install using +- prefixes
- name: install hello to prep next task
zypper:
name: hello
state: present
- name: remove metamail to prep next task
zypper:
name: metamail
state: absent
- name: install and remove in the same run, with +- prefix
zypper:
name:
- -hello
- +metamail
state: present
register: zypper_res1
- name: install and remove again, leave out plus
zypper:
name:
- metamail
- -hello
state: present
register: zypper_res1a
- name: in and rm swapped
zypper:
name:
- -metamail
- hello
state: present
register: zypper_res1b
- name: install metamail
zypper:
name: metamail
state: absent
register: zypper_res2
- name: remove hello
zypper:
name: hello
state: present
register: zypper_res3
- name: verify simultaneous install/remove worked
assert:
that:
- zypper_res1 is successful
- zypper_res1 is changed
- zypper_res1a is not changed
- zypper_res1b is changed
- zypper_res2 is not changed
- zypper_res3 is not changed
- name: install and remove with state=absent
zypper:
name:
- metamail
- +hello
state: absent
register: zypper_res
ignore_errors: true
- name: verify simultaneous install/remove failed with absent
assert:
that:
- zypper_res is failed
- zypper_res.msg == "Can not combine '+' prefix with state=remove/absent."
- name: try rm patch
zypper:
name: openSUSE-2016-128
type: patch
state: absent
ignore_errors: true
register: zypper_patch
- assert:
that:
- zypper_patch is failed
- zypper_patch.msg.startswith('Can not remove patches.')
- name: try rm URL
zypper:
name: "{{ hello_package_url }}"
state: absent
ignore_errors: true
register: zypper_rm
- assert:
that:
- zypper_rm is failed
- zypper_rm.msg.startswith('Can not remove via URL.')
- name: remove pattern update_test
zypper:
name: update_test
type: pattern
state: absent
- name: install pattern update_test
zypper:
name: update_test
type: pattern
state: present
register: zypper_install_pattern1
- name: install pattern update_test again
zypper:
name: update_test
type: pattern
state: present
register: zypper_install_pattern2
- assert:
that:
- zypper_install_pattern1 is changed
- zypper_install_pattern2 is not changed
- name: remove hello
zypper:
name: hello
state: absent
- name: install via URL
zypper:
state: present
name: "{{ hello_package_url }}"
register: zypperin1
- name: test install
zypper:
name: hello
state: present
register: zypperin2
- assert:
that:
- zypperin1 is succeeded
- zypperin1 is changed
- zypperin2 is not changed
# check for https://github.com/ansible/ansible/issues/20139
- name: run updatecache
zypper:
name: hello
state: present
update_cache: true
register: zypper_result_update_cache
- name: run updatecache in check mode
zypper:
name: hello
state: present
update_cache: true
check_mode: true
register: zypper_result_update_cache_check
- assert:
that:
- zypper_result_update_cache is successful
- zypper_result_update_cache_check is successful
- zypper_result_update_cache_check is not changed
# - name: ensure no previous netcat package still exists
# zypper:
# name:
# - netcat-openbsd
# - gnu-netcat
# state: absent
#
# - name: install netcat-openbsd which conflicts with gnu-netcat
# zypper:
# name: netcat-openbsd
# state: present
#
# - name: try installation of gnu-netcat which should fail due to the conflict
# zypper:
# name: gnu-netcat
# state: present
# ignore_errors: true
# register: zypper_pkg_conflict
#
# - assert:
# that:
# - zypper_pkg_conflict is failed
# - "'conflicts with netcat-openbsd provided' in zypper_pkg_conflict.stdout"
#
# - name: retry installation of gnu-netcat with force_resolution set to choose a resolution
# zypper:
# name: gnu-netcat
# state: present
# force_resolution: True
- name: duplicate rpms block
vars:
looplist:
- 1
- 2
block:
- name: Deploy spec files to build 2 packages with duplicate files.
template:
src: duplicate.spec.j2
dest: "{{ remote_tmp_dir | expanduser }}/zypper2/duplicate{{ item }}.spec"
loop: "{{ looplist }}"
- name: build rpms with duplicate files
command: |
rpmbuild -bb \
--define "_topdir {{remote_tmp_dir | expanduser }}/zypper2/rpm-build"
--define "_builddir %{_topdir}" \
--define "_rpmdir %{_topdir}" \
--define "_srcrpmdir %{_topdir}" \
--define "_specdir {{remote_tmp_dir | expanduser}}/zypper2" \
--define "_sourcedir %{_topdir}" \
{{ remote_tmp_dir | expanduser }}/zypper2/duplicate{{ item }}.spec
loop: "{{ looplist }}"
- name: install duplicate rpms
zypper:
name: >-
{{ remote_tmp_dir | expanduser }}/zypper2/rpm-build/noarch/duplicate{{ item }}-1-0.noarch.rpm
disable_gpg_check: true
ignore_errors: true
register: zypper_duplicate_result
loop: "{{ looplist }}"
- name: Read in duplicate file contents
slurp:
src: /usr/lib/duplicate/duplicate.txt
register: duplicate_out
- name: Check failure when installing rpms with duplicate files without replacefiles option
assert:
that:
- zypper_duplicate_result.results[0] is successful
- zypper_duplicate_result.results[1] is failed
- '"fileconflict" in zypper_duplicate_result.results[1].stdout'
- '"/usr/lib/duplicate/duplicate.txt" in zypper_duplicate_result.results[1].stdout'
- '"duplicate1" in duplicate_out.content | b64decode'
- name: install duplicate rpms
zypper:
name: >-
{{ remote_tmp_dir | expanduser }}/zypper2/rpm-build/noarch/duplicate{{ item }}-1-0.noarch.rpm
disable_gpg_check: true
replacefiles: true
ignore_errors: true
register: zypper_duplicate_result
loop: "{{ looplist }}"
- name: Read in duplicate file contents
slurp:
src: /usr/lib/duplicate/duplicate.txt
register: duplicate_out
- name: Check success installing rpms with duplicate files using replacefiles option
assert:
that:
- zypper_duplicate_result is successful
- zypper_duplicate_result is changed
- '"duplicate2" in duplicate_out.content | b64decode'
- name: Remove installed duplicate rpms
zypper:
name: "duplicate{{ item }}-1-0"
state: absent
loop: "{{ looplist }}"