summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/package_facts/tasks/main.yml
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"