<!--- 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: str
    version_added: "2.8"
  allowerasing:
    description:
      - If C(yes) it allows  erasing  of  installed  packages to resolve dependencies.
    required: false
    type: bool
    default: "no"
    version_added: "2.10"
  nobest:
    description:
      - Set best option to False, so that transactions are not limited to best candidates only.
    required: false
    type: bool
    default: "no"
    version_added: "2.11"
  cacheonly:
    description:
      - Tells dnf to run entirely from system cache; does not download or update metadata.
    type: bool
    default: "no"
    version_added: "2.12"
notes:
  - When used with a `loop:` each package will be processed individually, it is much more efficient to pass the list directly to the `name` option.
  - Group removal doesn't work if the group was installed with Ansible because
    upstream dnf's API doesn't properly mark groups as installed, therefore upon
    removal the module is unable to detect that the group is installed
    (https://bugzilla.redhat.com/show_bug.cgi?id=1620324)
requirements:
  - "python >= 2.6"