Ansible ansible.buildin.package 변수 대체

Ansible ansible.buildin.package 변수 대체

여기의 예를 따르십시오. https://docs.ansible.com/ansible/latest/collections/ansible/builtin/package_module.html#examples

# This uses a variable as this changes per distribution.
- name: Remove the apache package
  ansible.builtin.package:
    name: "{{ apache }}"
    state: absent

해당 변수를 OS별로 어떻게 만드는지 이해할 수 없습니다. 이 변수를 릴리스 apache또는 httpd릴리스 기반 으로 정의하려면 어떻게 해야 합니까 ?

나는 배포판을 기반으로 게임을 만드는 방법을 알고 있지만 위와 같이 변수 대체를 사용하는 방법은 모릅니다.

---
- name: Upgrade packages
  hosts: all
  become: true
  tasks:
    - name: Update all packages to the latest version Debian
      ansible.builtin.apt:
        update_cache: yes
        cache_valid_time: 3600
        upgrade: full
      when: ansible_facts['os_family'] == "Debian"

    - name: Update all packages to the latest version RedHat
      ansible.builtin.dnf:
        update_cache: yes
        name: "*"
        state: latest
      when: ansible_facts['os_family'] == "RedHat"

유일한 차이점은 설치할 패키지 이름이고 내가 만드는 나머지 역할은 OS 유형 간에 멱등성이 있기 때문에 매번 새로운 작업을 생성하지 않으려고 노력하고 있습니다.

답변1

해당 변수를 OS별로 어떻게 만드는지 이해할 수 없습니다. 배포판에 따라 이 변수를 apache 또는 httpd로 정의하려면 어떻게 해야 합니까?

많은 옵션이 있습니다.

간단한 해결책은 다음과 같습니다.vars_files섹션을 선택하고 운영 체제 이름을 기반으로 변수 파일을 로드하도록 합니다. 예를 들어:

- hosts: all
  gather_facts: true
  vars_files:
    - "vars/{{ ansible_os_family|lower }}.yaml"
  tasks:
    - name: Remove the apache package
      ansible.builtin.package:
        name: "{{ apache }}"
        state: absent

이는 ansible_os_familyAnsible의 사실 수집 지원에서 제공하는 값을 사용합니다. 위 작업을 수행하면 다음을 포함하는 파일이 있을 수 있습니다 vars/redhat.yaml.

apache: httpd

vars/debian.yaml또는 다음을 포함하는 파일:

apache: apache2

더 세분성이 필요한 경우 대신 사용할 수 있습니다 ansible_distribution(예: Fedora, CentOS, Red Hat 등에 속하고 대신 특정 배포판의 이름을 가짐).ansible_os_familyansible_os_familyRedhatansible_distribution


이 작업을 역할의 일부로 수행하려면 다음을 사용할 수 있습니다.include_vars기준 치수. 바라보다문서에서:

- name: Load a variable file based on the OS type, or a default if not found. Using free-form to specify the file.
  ansible.builtin.include_vars: "{{ lookup('ansible.builtin.first_found', params) }}"
  vars:
    params:
      files:
        - '{{ansible_distribution}}.yaml'
        - '{{ansible_os_family}}.yaml'
        - default.yaml
      paths:
        - 'vars'

관련 정보