I'm trying to use the dnf module of Ansible with the module switch to install PHP 7.4 from the remi repo.

I'm doing this as a command, as I can't get it to work using Ansible dnf.

This is what I want to do: dnf module -y install php:remi-7.4

I can't work out if I can use the module switch on the Ansible dnf module. Does anyone know if that's possible?



Thanks for replying. I don't have a problem using the dnf module in Ansible, I have a problem with using the parameter module using Ansible dnf.

I'm doing this:

- name: install php from stream {{ php_module_stream }}
  command: dnf module -y install {{ php_module_stream }}

and I want to do something like this:

- name: install php from stream {{ php_module_stream }}
    name: {{ php_module_stream }}
    module: true

I can't work out how to use the word module in dnf.


You can install a module (which is essentially a group of packages) by adding a @ prior to the name of the module to the name parameter of the Ansible dnf module. It can be used like this:

- name: install the 'Development tools' package group
    name: '@Development tools'
    state: present
  • I'll reply to this as an answer to my question, so I can format the text. – Deaton Nov 14 '19 at 12:09
  • There are a few issues with this. OP is asking about using the 'dnf module' with the "module switch", which is not a (documented) parameter of the dnf module in Ansible 2.9. The doc example is using the yum/dnf name for a package group (invoking the 'group' functionality of yum/dnf), which has been around long prior to yum4/dnf. This answer could be the right one for the OP's problem, but it does not necessarily address the point the OP makes about the Ansible DNF module and the "modules" capabilities of Yum4/DNF itself. The semantics can be tricky and are confusing in this case. – 0xSheepdog Nov 14 '19 at 16:25
  • @Henrik Pingel thanks. I should have read your reply properly. This setting @php:remi-7.4 for the name might do the trick worked. – Deaton Nov 15 '19 at 14:23
  • no worries, I could have read your question more properly as well. I refactored my answer now. – Henrik Pingel Nov 15 '19 at 14:46

Semantics warning: Ansible uses the term "Module" to describe a specific command set or functionality. DNF/Yum4 uses the term "module" to describe groups of packages, features, and software vendors. These can easily confuse things in this question.

Per the official documentation for Ansible 2.9, there is no (documented) support for the DNF/Yum4 "modules" capabilities.

If you specifically need to use the 'modules' switch with DNF/Yum4, you can do so using the ansible command or shell modules, depending on how you use it. Some example code:

- name: Use dnf command to install postgresql 9.6 client
  command: dnf module install postgresql:9.6/client

This task will enable the postgreql module, 9.6 stream, and install the packages tagged as part of the 'client' profile.

Alternatively, you could try the following notation with the dnf module in Ansible; I have not tested it and cannot say if it will work or if Ansible can properly interpret the special characters.

- name: Use the ansible dnf_module to install postgresql 9.6 client
    name: "@postgresql:9.6/client"
    state: present

According to RHEL8 documentation, yum4/dns accepts this notation without explicitly calling the "module" switch. (Example near the bottom of section 4.6)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.