ここの例に従ってください。 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_family
ansible_os_family
Redhat
ansible_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'