# UNINSTALL
- name: uninstall sos
  yum: name=sos state=removed
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_result

- name: verify uninstallation of sos
  assert:
    that:
        - "yum_result.rc == 0"
        - "rpm_result.rc == 1"

# UNINSTALL AGAIN
- name: uninstall sos again in check mode
  yum: name=sos state=removed
  check_mode: true
  register: yum_result

- name: verify no change on re-uninstall in check mode
  assert:
    that:
        - "not yum_result.changed"

- name: uninstall sos again
  yum: name=sos state=removed
  register: yum_result

- name: verify no change on re-uninstall
  assert:
    that:
        - "not yum_result.changed"

# INSTALL
- name: install sos in check mode
  yum: name=sos state=present
  check_mode: true
  register: yum_result

- name: verify installation of sos in check mode
  assert:
    that:
        - "yum_result.changed"

- name: install sos
  yum: name=sos state=present
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_result

- name: verify installation of sos
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "rpm_result.rc == 0"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

# INSTALL AGAIN
- name: install sos again in check mode
  yum: name=sos state=present
  check_mode: true
  register: yum_result
- name: verify no change on second install in check mode
  assert:
    that:
        - "not yum_result.changed"

- name: install sos again
  yum: name=sos state=present
  register: yum_result
- name: verify no change on second install
  assert:
    that:
        - "not yum_result.changed"

# INSTALL AGAIN WITH LATEST
- name: install sos again with state latest in check mode
  yum: name=sos state=latest
  check_mode: true
  register: yum_result
- name: verify install sos again with state latest in check mode
  assert:
    that:
        - "not yum_result.changed"

- name: install sos again with state latest idempotence
  yum: name=sos state=latest
  register: yum_result
- name: verify install sos again with state latest idempotence
  assert:
    that:
        - "not yum_result.changed"

# INSTALL WITH LATEST
- name: uninstall sos
  yum: name=sos state=removed
  register: yum_result
- name: verify uninstall sos
  assert:
    that:
        - "yum_result|success"

- name: install sos with state latest in check mode
  yum: name=sos state=latest
  check_mode: true
  register: yum_result
- name: verify install sos with state latest in check mode
  assert:
    that:
        - "yum_result.changed"

- name: install sos with state latest
  yum: name=sos state=latest
  register: yum_result
- name: verify install sos with state latest
  assert:
    that:
        - "yum_result.changed"

- name: install sos with state latest idempotence
  yum: name=sos state=latest
  register: yum_result
- name: verify install sos with state latest idempotence
  assert:
    that:
        - "not yum_result.changed"

# Multiple packages
- name: uninstall sos and bc
  yum: name=sos,bc state=removed
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_sos_result

- name: check bc with rpm
  shell: rpm -q bc
  failed_when: False
  register: rpm_bc_result

- name: verify packages installed
  assert:
    that:
        - "rpm_sos_result.rc != 0"
        - "rpm_bc_result.rc != 0"

- name: install sos and bc as comma separated
  yum: name=sos,bc state=present
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_sos_result

- name: check bc with rpm
  shell: rpm -q bc
  failed_when: False
  register: rpm_bc_result

- name: verify packages installed
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "rpm_sos_result.rc == 0"
        - "rpm_bc_result.rc == 0"

- name: uninstall sos and bc
  yum: name=sos,bc state=removed
  register: yum_result

- name: install sos and bc as list
  yum:
    name:
      - sos
      - bc
    state: present
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_sos_result

- name: check bc with rpm
  shell: rpm -q bc
  failed_when: False
  register: rpm_bc_result

- name: verify packages installed
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "rpm_sos_result.rc == 0"
        - "rpm_bc_result.rc == 0"

- name: uninstall sos and bc
  yum: name=sos,bc state=removed
  register: yum_result

- name: install sos and bc as comma separated with spaces
  yum:
    name: "sos, bc"
    state: present
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos
  failed_when: False
  register: rpm_sos_result

- name: check sos with rpm
  shell: rpm -q bc
  failed_when: False
  register: rpm_bc_result

- name: verify packages installed
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "rpm_sos_result.rc == 0"
        - "rpm_bc_result.rc == 0"

- name: uninstall sos and bc
  yum: name=sos,bc state=removed

- name: install non-existent rpm
  yum: name="{{ item }}"
  with_items:
  - does-not-exist
  register: non_existent_rpm
  ignore_errors: True

- name: check non-existent rpm install failed
  assert:
    that:
    - non_existent_rpm|failed

# Install in installroot='/'
- name: install sos
  yum: name=sos state=present installroot='/'
  register: yum_result

- name: check sos with rpm
  shell: rpm -q sos --root=/
  failed_when: False
  register: rpm_result

- name: verify installation of sos
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "rpm_result.rc == 0"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: uninstall sos
  yum:
    name: sos
    installroot: '/'
    state: removed
  register: yum_result

- name: install group
  yum:
    name: "@Development Tools"
    state: present
  register: yum_result

- name: verify installation of the group
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: install the group again
  yum:
    name: "@Development Tools"
    state: present
  register: yum_result

- name: verify nothing changed
  assert:
    that:
        - "yum_result.rc == 0"
        - "not yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: install the group again but also with a package that is not yet installed
  yum:
    name:
      - "@Development Tools"
      - sos
    state: present
  register: yum_result

- name: verify sos is installed
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: try to install the group again, with --check to check 'changed'
  yum:
    name: "@Development Tools"
    state: present
  check_mode: yes
  register: yum_result

- name: verify nothing changed
  assert:
    that:
        - "not yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'results' in yum_result"

- name: try to install non existing group
  yum:
    name: "@non-existing-group"
    state: present
  register: yum_result
  ignore_errors: True

- name: verify installation of the non existing group failed
  assert:
    that:
        - "yum_result.rc == 1"
        - "not yum_result.changed"
        - "yum_result|failed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: try to install non existing file
  yum:
    name: /tmp/non-existing-1.0.0.fc26.noarch.rpm
    state: present
  register: yum_result
  ignore_errors: yes

- name: verify installation failed
  assert:
    that:
        - "yum_result|failed"
        - "not yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"

- name: try to install from non existing url
  yum:
    name: http://non-existing.com/non-existing-1.0.0.fc26.noarch.rpm
    state: present
  register: yum_result
  ignore_errors: yes

- name: verify installation failed
  assert:
    that:
        - "yum_result|failed"
        - "not yum_result.changed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"

- name: use latest to install httpd
  yum:
    name: httpd
    state: latest
  register: yum_result

- name: verify httpd was installed
  assert:
    that:
      - "'changed' in yum_result"

- name: uninstall httpd
  yum:
    name: httpd
    state: removed

- name: update httpd only if it exists
  yum:
    name: httpd
    state: latest
    update_only: yes
  register: yum_result

- name: verify httpd not installed
  assert:
    that:
      - "not yum_result.changed"
      - "'Packages providing httpd not installed due to update_only specified' in yum_result.results"

- name: try to install not compatible arch rpm, should fail
  yum:
    name: http://download.fedoraproject.org/pub/epel/7/ppc64le/b/banner-1.3.4-3.el7.ppc64le.rpm
    state: present
  register: yum_result
  ignore_errors: True

- name: verify that yum failed
  assert:
    that:
        - "yum_result.rc == 1"
        - "not yum_result.changed"
        - "yum_result|failed"

# setup for testing installing an RPM from url

- set_fact:
    pkg_name: fpaste

- name: cleanup
  yum:
    name: "{{ pkg_name }}"
    state: absent

- set_fact:
    pkg_url: http://download.fedoraproject.org/pub/epel/7/x86_64/f/fpaste-0.3.7.4.1-1.el7.noarch.rpm
# setup end

- name: download an rpm
  get_url:
    url: "{{ pkg_url }}"
    dest: "/tmp/{{ pkg_name }}.rpm"

- name: install the downloaded rpm
  yum:
    name: "/tmp/{{ pkg_name }}.rpm"
    state: present
  register: yum_result

- name: verify installation
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "not yum_result|failed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: install the downloaded rpm again
  yum:
    name: "/tmp/{{ pkg_name }}.rpm"
    state: present
  register: yum_result

- name: verify installation
  assert:
    that:
        - "yum_result.rc == 0"
        - "not yum_result.changed"
        - "not yum_result|failed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"

- name: clean up
  yum:
    name: "{{ pkg_name }}"
    state: absent

- name: install from url
  yum:
    name: "{{ pkg_url }}"
    state: present
  register: yum_result

- name: verify installation
  assert:
    that:
        - "yum_result.rc == 0"
        - "yum_result.changed"
        - "not yum_result|failed"

- name: verify yum module outputs
  assert:
    that:
        - "'changed' in yum_result"
        - "'msg' in yum_result"
        - "'rc' in yum_result"
        - "'results' in yum_result"
