- name: show python version
  debug: var=ansible_python_version

- name: use python-apt
  set_fact:
    python_apt: python-apt
  when: ansible_python_version | version_compare('3', '<')

- name: use python3-apt
  set_fact:
    python_apt: python3-apt
  when: ansible_python_version | version_compare('3', '>=')

# UNINSTALL 'python-apt'
#  The `apt` module has the smarts to auto-install `python-apt`.  To test, we
#  will first uninstall `python-apt`.
- name: check {{ python_apt }} with dpkg
  shell: dpkg -s {{ python_apt }}
  register: dpkg_result
  ignore_errors: true

- name: uninstall {{ python_apt }} with apt
  apt: pkg={{ python_apt }} state=absent purge=yes
  register: apt_result
  when: dpkg_result|success

# 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

- 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"
        - "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

- debug: var=apt_result
- debug: var=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

- debug: var=apt_result
- debug: var=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

- 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: 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: autoclean
  apt: autoclean=yes

- name: autoremove
  apt: autoremove=yes
