blob: 9309dca2aa906f3d4d26244f8c800bb3e0702698 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Copyright: Contributors to the Ansible project
- name: Prep package_fact tests - Debian Family
block:
- name: install python apt bindings - python2
package: name="python-apt" state=present
when: ansible_python.version.major|int == 2
- name: install python apt bindings - python3
package: name="python3-apt" state=present
when: ansible_python.version.major|int == 3
- name: Gather package facts
package_facts:
manager: apt
- name: check for ansible_facts.packages exists
assert:
that: ansible_facts.packages is defined
- name: Now try again but installing misleading rpm
block:
- name: install misleading rpm api
package: name="python3-rpm" state=present
- name: prep outputdir
tempfile: path=~ state=directory
register: tempdir
- name: install misleading rpm 'binary' file
file: dest="{{tempdir['path']}}/rpm" state=touch mode='0700'
- name: Gather package facts, finding 'rpm' on debian fam (needed for latest version)
package_facts:
environment:
PATH: "${PATH}:{{tempdir['path']}}"
- name: check we got packages
assert:
that:
- (ansible_facts.packages | length ) > 0
- name: Same again but this time forcing rpm first
package_facts:
manager: ['rpm', 'apt']
environment:
PATH: "${PATH}:{{tempdir['path']}}"
- name: check we got packages
assert:
that:
- (ansible_facts.packages | length ) > 0
always:
- package: name="python3-rpm" state=absent
- file: path="{{tempdir['path']}}/rpm" state=absent
- file: path="{{tempdir['path']}}" state=absent
when: ansible_os_family == "Debian"
- name: Run package_fact tests - Red Hat Family
block:
- name: Gather package facts
package_facts:
manager: rpm
- name: check for ansible_facts.packages exists
assert:
that: ansible_facts.packages is defined
when: (ansible_os_family == "RedHat")
- name: Run package_fact tests - SUSE/OpenSUSE Family
block:
- name: install python rpm bindings - python2
package: name="rpm-python" state=present
when: ansible_python.version.major|int == 2
- name: install python rpm bindings - python3
package: name="python3-rpm" state=present
when: ansible_python.version.major|int == 3
- name: Gather package facts
package_facts:
manager: rpm
- name: check for ansible_facts.packages exists
assert:
that: ansible_facts.packages is defined
when: (ansible_os_family == "openSUSE Leap") or (ansible_os_family == "Suse")
- name: Same as those above, but based on pkg_mgr, tests aliases
block:
- name: Gather package facts
package_facts:
manager: '{{ ansible_facts["pkg_mgr"] }}'
- name: check for ansible_facts.packages exists
assert:
that:
- ansible_facts.packages is defined
- ansible_facts.packages | length > 1
when: ansible_facts['os_family'] in ["openSUSE Leap", "Suse", "RedHat", "Debian"]
# Check that auto detection works also
- name: Gather package facts
package_facts:
manager: auto
- name: check for ansible_facts.packages exists
assert:
that: ansible_facts.packages is defined
- name: Run package_fact tests - FreeBSD
block:
- name: Gather package facts
package_facts:
manager: pkg
- name: check for ansible_facts.packages exists
assert:
that: ansible_facts.packages is defined
- name: check there is at least one package not flagged vital nor automatic
command: pkg query -e "%a = 0 && %V = 0" %n
register: not_vital_nor_automatic
failed_when: not not_vital_nor_automatic.stdout
- vars:
pkg_name: "{{ not_vital_nor_automatic.stdout_lines[0].strip() }}"
block:
- name: check the selected package is not vital
assert:
that:
- 'not ansible_facts.packages[pkg_name][0].vital'
- 'not ansible_facts.packages[pkg_name][0].automatic'
- name: flag the selected package as vital and automatic
command: 'pkg set --yes -v 1 -A 1 {{ pkg_name }}'
- name: Gather package facts (again)
package_facts:
- name: check the selected package is flagged vital and automatic
assert:
that:
- 'ansible_facts.packages[pkg_name][0].vital|bool'
- 'ansible_facts.packages[pkg_name][0].automatic|bool'
always:
- name: restore previous flags for the selected package
command: 'pkg set --yes -v 0 -A 0 {{ pkg_name }}'
when: ansible_os_family == "FreeBSD"
|