##### SUMMARY
The document for package_facts does not specify a requirement of python-apt being in an installed state on the system of which the module `package_facts` is going to collect package related data. While this may not cause any issue for EL based systems or any other - package_facts will return an error when used on any Debian based systems where python-apt package is not already in an installed state. 

##### ISSUE TYPE
- Documentation Report

##### COMPONENT NAME
package_facts

##### ANSIBLE VERSION

```
2.8.3
```


##### OS / ENVIRONMENT
* Ubuntu 18.04
* Ubuntu 16.04
* Debian 8
* Debian 9
* Debian 10


##### STEPS TO REPRODUCE

On any debian based system, ensure that python-apt package is not available to test it.

```shell
sudo apt-get remove python-apt
```

Then run the following playbook on an ansible controller node to test locally.

```yaml
 name: Playbook to test package_facts module locally on any Debian based system.
  hosts: localhost
  become: yes
  connection: local
  gather_facts: yes
  tasks:
    - name: Gather package facts on Debian based systems
      package_facts:
        manager: auto
      when: ansible_os_family == "Debian"
```



##### EXPECTED RESULTS
```yaml
$ ansible-playbook package.yml

PLAY [Playbook to test package_facts module locally on any Debian based system.] *******

TASK [Gathering Facts] *****************************************************************
ok: [localhost]

TASK [Gather package facts on Debian based systems] ************************************
ok: [localhost]

PLAY RECAP *****************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```


##### ACTUAL RESULTS

```yaml
$ ansible-playbook package.yml

PLAY [Playbook to test package_facts module locally on any Debian based system.] *******

TASK [Gathering Facts] *****************************************************************
ok: [localhost]

TASK [Gather package facts on Debian based systems] ************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not detect a supported package manager from the following list: ['portage', 'rpm', 'pkg', 'apt']"}

PLAY RECAP *****************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
```

##### Temporary workaround:

To install `python-apt` package on any Debian based systems where package_facts module is going to be used for.

##### Recommendation:

To either remove dependency on python-apt for Debian based systems from package_facts module or to specify python-apt requirement (for Debain based systems) in package_facts documentation.

LIB = 'apt'
    def __init__(self):
        self._cache = None
        super(APT, self).__init__()
    @property
    def pkg_cache(self):
        if self._cache is not None:
            return self._cache
        self._cache = self._lib.Cache()
        return self._cache
    def is_available(self):
        ''' we expect the python bindings installed, but if there is apt/apt-get give warning about missing bindings'''
        we_have_lib = super(APT, self).is_available()
        if not we_have_lib:
            for exe in ('apt', 'apt-get', 'aptitude'):
                if get_bin_path(exe):
                    self.warnings.append('Found "%s" but %s' % (exe, missing_required_lib('apt')))
                    break
        return we_have_lib
    def list_installed(self):
        
        cache = self.pkg_cache
        return [pk for pk in cache.keys() if cache[pk].is_installed]
    def get_package_details(self, package):
        ac_pkg = self.pkg_cache[package].installed
        return dict(name=package, version=ac_pkg.version, arch=ac_pkg.architecture, category=ac_pkg.section, origin=ac_pkg.origins[0].origin)
class PKG(CLIMgr):
    CLI = 'pkg'
    atoms = ['name', 'version', 'origin', 'installed', 'automatic', 'arch', 'category', 'prefix', 'vital']
    def list_installed(self):