Ansible 조건문

Ansible 조건문

내 목표는 아래 두 진술을 결합하는 방법을 찾는 것이지만 충분하지 않습니다. 이 예에서는 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. 변수 선언

가) 사용하다진자템플릿 및 테스트버전

    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 }}"

관련 정보