<!--- 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>
type: list
    elements: str
  disable_excludes:
    description:
      - Disable the excludes defined in DNF config files.
      - If set to C(all), disables all excludes.
      - If set to C(main), disable excludes defined in [main] in dnf.conf.
      - If set to C(repoid), disable excludes defined for given repo id.
    version_added: "2.7"
    type: str
  validate_certs:
    description:
      - This only applies if using a https url as the source of the rpm. e.g. for localinstall. If set to C(no), the SSL certificates will not be validated.
      - This should only set to C(no) used on personally controlled sites using self-signed certificates as it avoids verifying the source site.
    type: bool
    default: "yes"
    version_added: "2.7"
  allow_downgrade:
    description:
      - Specify if the named package and version is allowed to downgrade
        a maybe already installed higher version of that package.
        Note that setting allow_downgrade=True can make this module
        behave in a non-idempotent way. The task could end up with a set
        of packages that does not match the complete list of specified
        packages to install (because dependencies between the downgraded
        package and others can cause changes to the packages which were
        in the earlier transaction).
    type: bool
    default: "no"
    version_added: "2.7"