私は RHEL8 を使用しており、nginx、php、solr などのインストールと構成などを行うプライベート リポジトリの下に多数の Galaxy ロールがあります。たとえば、nginx ロールには、デフォルトの 1.14 ではなく、より新しいバージョン 1.18:
- name: "Disable - Reset Stream Modules Not Wanted"
dnf:
disablerepo: "{{ item.stream }}:{{ item.version }}"
state: absent
when: item.stream == "nginx"
with_items: "{{ disable_module_streams }}"
これは素晴らしいことですが、有効なモジュールの依存関係 (パッケージがインストールされていない) が原因で、他の nginx ストリームを有効にできないという問題が残ります。
TASK [foo.nginx : Disable - Reset Stream Modules Not Wanted] ***************************************************************************************
ok: [localhost] => (item={'stream': 'nginx', 'version': 1.14})
skipping: [localhost] => (item={'stream': 'php', 'version': 7.2})
TASK [foo.nginx : Enable - Stream Module Packages] *************************************************************************************************
failed: [localhost] (item={'stream': 'nginx', 'version': 1.18}) => {"ansible_loop_var": "item", "changed": false, "failures": ["nginx:1.18 Problems in request:\nModular dependency problems with Defaults:\n\n Problem: conflicting requests\n - module php:7.2:820181215112050:76554e01-0.x86_64 requires module(nginx:1.14), but none of the providers can be installed\n - module nginx:1.14:820181214004940:9edba152-0.x86_64 conflicts with module(nginx:1.18) provided by nginx:1.18:8030020200529144723:30b713e6-0.x86_64\n - module nginx:1.18:8030020200529144723:30b713e6-0.x86_64 conflicts with module(nginx:1.14) provided by nginx:1.14:820181214004940:9edba152-0.x86_64\n - module nginx:1.14:8000020190830002848:f8e95b4e-0.x86_64 conflicts with module(nginx:1.18) provided by nginx:1.18:8030020200529144723:30b713e6-0.x86_64\n - module nginx:1.18:8030020200529144723:30b713e6-0.x86_64 conflicts with module(nginx:1.14) provided by nginx:1.14:8000020190830002848:f8e95b4e-0.x86_64"], "item": {"stream": "nginx", "version": 1.18}, "msg": "Failed to install some of the specified packages", "rc": 1, "results": []}
skipping: [localhost] => (item={'stream': 'php', 'version': 7.4})
フラグを使用してskip_broken: yes
これを回避し、モジュールの依存関係を ansible の外部で単純に管理し、とにかく依存関係を満たすことを知ってインストールすることができると思いましたが、結果として失敗します。これを行う唯一の方法は、ロールの外で依存モジュールを同時に無効/有効にし (独自のミニロールで、または単にタスクとして)、次のことを行うことです。
- name: "Enable - Enable Stream Modules Needed"
dnf:
enablerepo: "@nginx:1.18,@php:7.4"
state: present
with_items: "{{ enable_module_streams }}"
これが最善の方法ですか?
注:この特定のケースでは、nginx および php モジュール ストリームには相互に依存関係があるため、ansible ロールの順序を変更しても効果はありません。同様の問題を持つ他のモジュールがあると確信しています。
更新:うまくいけばより意味のあるタイトルの編集。