<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
When asked to install `name: /usr/bin/cowsay`, the DNF plugin errors with `No group usr/bin/cowsay available.`.
The error message is wrong (there are no groups in sight).

It would be quite useful if Ansible installed a package with `/usr/bin/cowsay`.

##### ISSUE TYPE
- ~Bug Report~
- Feature Idea

##### COMPONENT NAME
ansible.builtin.dnf

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.17
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/pviktori/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.1 (default, Jan 20 2021, 00:00:00) [GCC 10.2.1 20201125 (Red Hat 10.2.1-9)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below

```
(it's empty)

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Fedora 33 (Workstation Edition)

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
playbook.yml:
```yaml
- hosts: localhost
  become_user: root
  tasks:
  - name: Install cowsay
    become: yes
    dnf:
      state: latest
      name: /usr/bin/cowsay
```
Without having `cowsay` installed, run `ansible-playbook playbook.yml -K`

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
At least the error message is wrong; it shouldn't mention groups.

But from [a comment in the source](https://github.com/ansible/ansible/blob/44ee04bd1f7d683fce246c16e752ace04d244b4c/lib/ansible/modules/dnf.py#L829), it looks like the package with `/usr/bin/cowsay` should be installed. (I don't care what the exact package name is.)


##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
```
...
TASK [Install cowsay] ************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "No group usr/bin/cowsay available.", "results": []}
...
```
<!--- Paste verbatim command output between quotes -->
<details>
<summary>Full output with extra verbosity</summary>

```paste below
$ ansible-playbook playbook.yml -K -vvvv
ansible-playbook 2.9.17
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/pviktori/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.9.1 (default, Jan 20 2021, 00:00:00) [GCC 10.2.1 20201125 (Red Hat 10.2.1-9)]
Using /etc/ansible/ansible.cfg as config file
BECOME password: 
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Parsed /etc/ansible/hosts inventory source with ini plugin
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost
does not match 'all'
Loading callback plugin default of type stdout, v2.0 from /usr/lib/python3.9/site-packages/ansible/plugins/callback/default.py
Skipping callback 'actionable', as we already have a stdout callback.
Skipping callback 'counter_enabled', as we already have a stdout callback.
Skipping callback 'debug', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'full_skip', as we already have a stdout callback.
Skipping callback 'json', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'null', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
Skipping callback 'selective', as we already have a stdout callback.
Skipping callback 'skippy', as we already have a stdout callback.
Skipping callback 'stderr', as we already have a stdout callback.
Skipping callback 'unixy', as we already have a stdout callback.
Skipping callback 'yaml', as we already have a stdout callback.

PLAYBOOK: playbook.yml ***********************************************************************************
Positional arguments: playbook.yml
verbosity: 4
connection: smart
timeout: 10
become_method: sudo
become_ask_pass: True
tags: ('all',)
inventory: ('/etc/ansible/hosts',)
forks: 5
1 plays in playbook.yml

PLAY [localhost] *****************************************************************************************

TASK [Gathering Facts] ***********************************************************************************
task path: /home/pviktori/dev/one-offs/reproducer/ansible/playbook.yml:1
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: pviktori
<127.0.0.1> EXEC /bin/sh -c 'echo ~pviktori && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/pviktori/.ansible/tmp `"&& mkdir "` echo /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968 `" && echo ansible-tmp-1612533793.5579023-739319-43501536054968="` echo /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968 `" ) && sleep 0'
Using module file /usr/lib/python3.9/site-packages/ansible/modules/system/setup.py
<127.0.0.1> PUT /home/pviktori/.ansible/tmp/ansible-local-739308mmzkf2pf/tmpeuskv_a5 TO /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968/AnsiballZ_setup.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968/ /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968/AnsiballZ_setup.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python3 /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968/AnsiballZ_setup.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/pviktori/.ansible/tmp/ansible-tmp-1612533793.5579023-739319-43501536054968/ > /dev/null 2>&1 && sleep 0'
ok: [localhost]
META: ran handlers

TASK [Install cowsay] ************************************************************************************
task path: /home/pviktori/dev/one-offs/reproducer/ansible/playbook.yml:4
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: pviktori
<127.0.0.1> EXEC /bin/sh -c 'echo ~pviktori && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/pviktori/.ansible/tmp `"&& mkdir "` echo /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201 `" && echo ansible-tmp-1612533794.5429337-739396-272813355272201="` echo /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201 `" ) && sleep 0'
Using module file /usr/lib/python3.9/site-packages/ansible/modules/packaging/os/dnf.py
<127.0.0.1> PUT /home/pviktori/.ansible/tmp/ansible-local-739308mmzkf2pf/tmphh11llf1 TO /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201/AnsiballZ_dnf.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201/ /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201/AnsiballZ_dnf.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S  -p "[sudo via ansible, key=jthmjasmjwuvaloyjtzuddwvrhdiohqn] password:" -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-jthmjasmjwuvaloyjtzuddwvrhdiohqn ; /usr/bin/python3 /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201/AnsiballZ_dnf.py'"'"' && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/pviktori/.ansible/tmp/ansible-tmp-1612533794.5429337-739396-272813355272201/ > /dev/null 2>&1 && sleep 0'
fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "allow_downgrade": false,
            "autoremove": false,
            "bugfix": false,
            "conf_file": null,
            "disable_excludes": null,
            "disable_gpg_check": false,
            "disable_plugin": [],
            "disablerepo": [],
            "download_dir": null,
            "download_only": false,
            "enable_plugin": [],
            "enablerepo": [],
            "exclude": [],
            "install_repoquery": true,
            "install_weak_deps": true,
            "installroot": "/",
            "list": null,
            "lock_timeout": 30,
            "name": [
                "/usr/bin/cowsay"
            ],
            "releasever": null,
            "security": false,
            "skip_broken": false,
            "state": "latest",
            "update_cache": false,
            "update_only": false,
            "validate_certs": true
        }
    },
    "msg": "No group usr/bin/cowsay available.",
    "results": []
}

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

</details>
if self.with_modules:
                    mdl = self.module_base._get_modules(grp_env_mdl_candidate)
                    if mdl[0]:
                        module_specs.append(grp_env_mdl_candidate)
                    else:
                        grp_specs.append(grp_env_mdl_candidate)
                else:
                    grp_specs.append(grp_env_mdl_candidate)
            else:
                pkg_specs.append(name)
        return pkg_specs, grp_specs, module_specs, filenames
    def _update_only(self, pkgs):
        not_installed = []
        for pkg in pkgs:
            if self._is_installed(pkg):
                try:
                    if isinstance(to_text(pkg), text_type):
                        self.base.upgrade(pkg)
                    else:
                        self.base.package_upgrade(pkg)
                except Exception as e:
                    self.module.fail_json(
                        msg="Error occurred attempting update_only operation: {0}".format(to_native(e)),
                        results=[],
                        rc=1,
                    )
            else:
                not_installed.append(pkg)
        return not_installed
    def _install_remote_rpms(self, filenames):