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_family、Ansibleのファクトコレクションサポートによって提供される値を使用します。上記の操作を実行すると、次のファイルを含む可能性があります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'

関連情報