[tripleo] Package dependencies, podman, dnf modules

Cédric Jeanneret cjeanner at redhat.com
Tue Jan 5 12:33:01 UTC 2021

On 1/5/21 12:45 PM, Bogdan Dobrelya wrote:
> On 1/5/21 12:02 PM, Cédric Jeanneret wrote:
>> On 1/5/21 11:48 AM, Cédric Jeanneret wrote:
>>> On 1/5/21 9:56 AM, Marios Andreou wrote:
>>>> On Tue, Jan 5, 2021 at 9:44 AM Cédric Jeanneret <cjeanner at redhat.com
>>>> <mailto:cjeanner at redhat.com>> wrote:
>>>>      Hello there,
>>>>      Since we introduced Podman instead of Docker in tripleo, we are
>>>> running
>>>>      after the right version.
>>>>      For now, the version we should use is provided by a specific
>>>>      container-tools module stream (container-tools:2.0). The
>>>> default stream
>>>>      being container-tools:rhel8, we might end with a deployed
>>>> undercloud
>>>>      running the wrong podman version, leading to some nice issues,
>>>>      especially in a SELinux-enabled environment.
>>>> o/ Tengu thanks for socialising that issue, it's a fun one for sure...
>>>> first question is _where_ is that the default and it is mostly
>>>> rhetorical as I can guess. In general though i think it's worth
>>>> filing a
>>>> LP bug with some of these details so we can also track whatever is
>>>> decided as a fix here.
>>> Right - always hard to find the right starting point ;). Though a mail
>>> would be a nice thing in order to get directions/ideas - and, hey, you
>>> just pointed some already!
>>> Here's the LP:
>>> https://bugs.launchpad.net/tripleo/+bug/1910217
>>>>      Currently, the main dependency tree is:
>>>>      python3-tripleoclient requires podman
>>>>      That's mostly all.
>>>>      While we can, of course, edit the python3-tripleoclient spec
>>>> file in
>>>>      order to pin the precise podman version (or, at least, set
>>>> upper and
>>>>      lower constraints) in order to target the version provided by
>>>> the right
>>>>      stream, it's not ideal:
>>>>      - package install error will lead to more questions (since ppl
>>>> might
>>>>      skip doc for #reason)
>>>>      - if we change the target version, we'll need to ensure it's
>>>> present in
>>>>      a stream (and, well, update the doc if we need to switch the
>>>> stream)
>>>>      - and probably some other reasons.
>>>>      Since we can NOT depend on a specific stream in rpm (for
>>>> instance, we
>>>>      can't put "Requires @container-tools:2.0/podman" like we might in
>>>>      ansible), we're a bit stuck.
>>>>      An ugly hack is tested in the spec file[1], using a bash thing
>>>> in order
>>>>      to check the activated stream, but this is not ideal either,
>>>> especially
>>>>      since it makes the whole package building/checking fail during the
>>>>      "mock" stage. In order to make it pass, we'd need to modify the
>>>> whole
>>>>      RDO in order to take into account stream switching. This isn't
>>>>      impossible, but it leads to other concerns, especially when it
>>>> comes to
>>>>      "hey we need to switch the stream for <module>". And I'm pretty
>>>> sure no
>>>>      one will want to dig into it, for good reasons ;).
>>>>      This leads to a last possibility:
>>>>      drop the "Requires podman" from tripleo dependency tree, and
>>>> rely on
>>>> so how does that work in practice though I mean what about
>>>> python-tripleoclient. Quick grep just now tells me at least the
>>>> heat-launcher is directly using podman. How do we drop that
>>>> requirement.
>>> Good catch. Maybe by ordering a bit things and calling the podman
>>> install bit before calling the heat-launcher? Might be ugly and, well,
>>> against some of the common practices, but at least it would ensure we
>>> get what we actually want regarding versions and sources.
>>>>      tripleo-ansible to actually enable the correct module, and install
>>>>      podman.
>>>>      This means podman will be installed during the undercloud
>>>> deploy, for
>>>>      instance as a host_prep_tasks (step_0).
>>>> I am missing how using tripleo-ansible helps us with the stream
>>>> question. Do you mean add logic in tripleo-ansible that tests the
>>>> stream
>>>> and sets the correct version ?
>>> exactly. Ansible is able to switch module streams, and install packages.
>>> Basically, we'd "just" need to extend a bit this role/task:
>>> https://opendev.org/openstack/tripleo-ansible/src/branch/master/tripleo_ansible/roles/tripleo_podman/tasks/tripleo_podman_install.yml
>>> That would make things cleaner, nicer, and more reliable.
>> Maybe we can keep the dependency as-is, and "just" ensure
>> tripleo-ansible "tripleo_podman" role sets the right things during the
>> deploy time?
>> For instance, we can add a task ensuring we're using the right stream,
>> then install podman (and buildah). That means heat-launcher might use
>> the wrong podman version (bleh...) but the finished undercloud should be
>> fine? Not 100% sure it's really possible, especially since module
>> switching might fail under some conditions when a package is installed
>> :/.
> I propose to use in RPM specs
> Requires: podman
> Conflicts: podman < some_lower_constraint_version
> that would allow to fail early if, a wrong version is going to be
> installed via existing repos and streams. And failing early is much
> better than waiting up to the moment it starts running ansible IMHO. And
> at that later point it would only re-ensure the wanted version.

We'll need to set an upper constraint - in some conditions, the default
version is newer than the one we actually want.
This is already done, more or less, downstream with an OSP specific package.
While it sounds appealing, I still see issues when it comes to version
changes. I'd rather ensure we have the proper stream activated,
especially since your proposal will lead to more LP/BZ being opened by
ppl that don't read the doc© - resulting in endless bounces and more
complains about the non-user-friendliness of this approach :(.

Ah, also.... we seem to have the same kind of constrain with some "virt"
module - default is "rhel" but we apparently need another one (iirc "8")
- though this seems to be downstream-only, and only for the overcloud
(or standalone)... So the issue isn't "just" for podman, and a better,
generic thing would be really nice :).



>> Guess some testing will be needed as well.
>>>>      While I'm not that happy with this idea, it's probably not as
>>>> bad as the
>>>>      other hacks we've tested so far, and would, at last, prevent
>>>> once for
>>>>      all the usual "it's not working" due to a wrong podman version
>>>> (and,
>>>>      yes, we get plenty of them, especially in the OSP version).
>>>>      What do you think? Any other way of solving this issue?
>>>> Remember, we're
>>>>      talking about "ensuring we get the right version, coming from a
>>>> specific
>>>>      stream" and, especially, "ensure operator can't install the
>>>> wrong one"
>>>>      (if they don't follow the doc, of if they are using automation
>>>> that
>>>>      doesn't check actual requirements in the doc"...
>>>> in general i lean more towards 'ansible tasks' rather than 'bash thing
>>>> in the specfile' to solve that. Either way though this is us reacting
>>>> (with some fix/hack/workaround) to a problem that isn't anything to do
>>>> with TripleO or even OpenStack but rather an OS/packaging issue. So do
>>>> we have any longer term plans on what you mentioned on IRC just now
>>>> regarding  getting module support for RPM deps (do you mean
>>>> something in
>>>> the spec file here?) or is that a complete dead end?
>>> AFAIK, module support within RPM spec file as a standard thing is not in
>>> the roadmap. Apparently, the ppl behind this "module" concept aren't
>>> willing to add any sort of support.
>>> I've worked with Lon (Red Hat side) for the patch in the spec file,
>>> we've tried multiple ways and, well...... it's really not something I'm
>>> happy with. One idea I just got was about rpm hooks - iirc there's a
>>> thing in dnf that might help, have to read some more things about that.
>>> But I have the feeling this is still the wrong way - unless it's
>>> considered as a "last security net just to be really-really sure",
>>> instead of the current usage we have (which is, basically, ensure ppl do
>>> read the doc and follow it).
>>> So the main thing: it's not a TripleO issue per se - we're just using a
>>> feature that has a weak support in some cases, and, well, we happen to
>>> hit one of those cases. As usuall I'd say ;).
>>> Cheers,
>>> C.
>>>> thanks, marios
>>>>      Thank you for your thoughts!
>>>>      Cheers,
>>>>      C.
>>>>      [1] https://review.rdoproject.org/r/#/c/31411/
>>>>      <https://review.rdoproject.org/r/#/c/31411/>
>>>>      --
>>>>      Cédric Jeanneret (He/Him/His)
>>>>      Sr. Software Engineer - OpenStack Platform
>>>>      Deployment Framework TC
>>>>      Red Hat EMEA
>>>>      https://www.redhat.com/ <https://www.redhat.com/>

Cédric Jeanneret (He/Him/His)
Sr. Software Engineer - OpenStack Platform
Deployment Framework TC
Red Hat EMEA

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openstack.org/pipermail/openstack-discuss/attachments/20210105/3b6d8008/attachment.sig>

More information about the openstack-discuss mailing list