How to use wilde card to remove packages (dnf)

Hello all,

I like to use Ansible to remove few packages, but it seem not to support the wildecard option for package name matching.

  • name: Remove Packages
    package:
    name: “{{ item }}”
    state: absent
    tags:
  • packages_remove
    with_items:
  • b43-*
  • hexchat
  • libreoffice*

In the above example I was expecting the for “b43-*” to match b43-openfwwf and b43-fwcutter but non of them was removed.
same for libreoffice, here is the output with -vvv

ok: [localhost] => (item=libreoffice*) => { "changed": false, "invocation": { "module_args": { "autoremove": null, "conf_file": null, "disable_gpg_check": false, "disablerepo": [], "enablerepo": [], "installroot": "/", "list": null, "name": [ "libreoffice*" ], "state": "absent" } }, "item": "libreoffice*", "msg": "Nothing to do" }

Any hints ?

Package is a very generic module with no extra functionality.
For more functionality you need to use the module for your package system.

I all ready tried that, same result bascily.

`
ok: [localhost] => (item=[u’b43-openfwwf’, u’b43-fwcutter’, u’hexchat’, u’libreoffice*‘, u’claws-mail’]) => {
“changed”: false,
“invocation”: {
“module_args”: {
“autoremove”: true,
“conf_file”: null,
“disable_gpg_check”: false,
“disablerepo”: ,
“enablerepo”: ,
“installroot”: “/”,
“list”: null,
“name”: [
“b43-openfwwf”,
“b43-fwcutter”,
“hexchat”,
“libreoffice*”,
“claws-mail”
],
“state”: “absent”
}
},
“item”: [
“b43-openfwwf”,
“b43-fwcutter”,
“hexchat”,
“libreoffice*”,
“claws-mail”
],
“msg”: “Nothing to do”
}

`

When I check the documentation for the dnf module it has nothing about wildcard so it doesn't support that.

I was assuming it was possible, because of the example which allow to update all packages.

`

  • name: upgrade all packages
    dnf:
    name: “*”
    state: latest
    `

but it seems it is handled specifically in the code, and not passed directly to the dnf command.

if names == ['*'] and state == 'latest':
    base.upgrade_all()

Thanks.

You probably have a workaround, but just in case you don't this should work to remove all packages staring with libreoffice

  - dnf:
      list: installed
    register: r

  - dnf:
      name: "{{ r.results | selectattr('name', 'search', '^libreoffice') | map(attribute='name') | list }}"
      state: absent

Nice trick, didn’t know about this filter.

much appreciated :slight_smile:

thanks.