Ansible条件文

Ansible条件文

私の目標は、以下の2つのステートメントを組み合わせる方法を見つけることですが、十分ではありません。この例では、rhel のバージョンに関係なく Package1 と Package2 をインストールします。ただし、Package3はOSのバージョンによって異なるパッケージになります。重複しているように結合する方法があるはずですが、これが最善の方法でしょうか?どんなフィードバックでも歓迎します。

  - name: Install Packages
    yum:
      name: "{{ item }}"
      state: latest
    loop:
      - package1
      - package2
      - package3A (Only for RHEL8 versions)
    when: "{{ ansible_distribution_version }} >= 8.0"

  - name: Install Packages
    yum:
      name: "{{ item }}"
      state: latest
    loop:
      - package1
      - package2
      - package3B (Only for RHEL7 versions)
    when: "{{ ansible_distribution_version }} < 8.0"

答え1

  1. 変数宣言

A)使用する振り子テンプレートとテストバージョン

    packages:
      - package1
      - package2
      - "{{ package3 }}"
    package3: >-
      {%- if ansible_distribution_version is version('8.0', '>=') -%}
      package3A
      {%- elif ansible_distribution_version is version('8.0', '<') -%}
      package3B
      {%- endif -%}

b)オプションを辞書に入れ、変数を使用します。ansible_distribution_major_version

    packages:
      - package1
      - package2
      - "{{ package3[ansible_distribution_major_version|int]|
            default(package3.default) }}"
    package3:
      default: package3A
      7: package3B
      6: package3B
      5: package3B
  1. リストからパッケージをインストールする
- name: Install Packages
    yum:
      name: "{{ item }}"
      state: latest
    loop: "{{ packages }}"

関連情報