4

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,

David

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 }}
  dnf:
    name: {{ php_module_stream }}
    module: true

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

Deaton
  • 144
  • 1
  • 7

2 Answers2

4

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
  dnf:
    name: '@Development tools'
    state: present
Henrik Pingel
  • 8,676
  • 2
  • 24
  • 38
  • 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
1

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
  dnf:
    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)

0xSheepdog
  • 535
  • 2
  • 19
  • The link to the yum4/dnf docs is down (404). – Lucas Feb 04 '21 at 18:14
  • 1
    The first option will not be idempotent, as in, it'll show "changed" every single time, even if nothing changes. So please either don't use that, or add some pre-tasks that check state and run the current command depending on that state. The second one does work, at least on Fedora 35. – bviktor Dec 16 '21 at 16:16
  • @bviktor is right. My example code is very simplistic and basic. There are other things that can be added to make the automation easier and more informative. YMMV – 0xSheepdog Aug 07 '22 at 17:11