📅  最后修改于: 2023-12-03 14:59:19.564000             🧑  作者: Mango
Ansible 是一个自动化配置管理系统。在 playbook 中,变量是 Ansible 的一个重要特性。变量使得 playbook 更加灵活和可重用,并允许将同一 playbook 使用于多个环境。
Ansible 中有三种类型的变量:全局变量、组变量和主机变量。
全局变量是从 Ansible 默认的全局变量文件中读取的变量。这些变量存储在 $ANSIBLE_HOME/group_vars/all
文件中。
组变量是针对所有主机的变量。这些变量存储在与组对应的文件中,例如 $ANSIBLE_HOME/group_vars/<group_name>
。
主机变量是针对单个主机的变量。这些变量存储在主机配置文件中,例如 $ANSIBLE_HOME/host_vars/<hostname>
。
在 Ansible playbook 中,变量可以通过以下方式定义:
在 playbook 中使用 vars
关键字,直接定义变量。
- name: Define a variable
hosts: localhost
vars:
my_var: "hello world"
tasks:
- name: Print the variable
debug:
msg: "{{ my_var }}"
在 playbook 中使用 vars_files
关键字,从变量文件中读取变量。
- name: Read from a variable file
hosts: localhost
vars_files:
- vars_file.yml
tasks:
- name: Print the variable
debug:
msg: "{{ my_var }}"
在 playbook 中使用 include_vars
关键字,从外部文件中读取变量。
- name: Include variables from an external file
hosts: localhost
tasks:
- include_vars:
file: vars_file.yml
- name: Print the variable
debug:
msg: "{{ my_var }}"
在 playbook 中,可以通过以下方式使用变量:
{{ var_name }}
语法在 playbook 中使用 {{ var_name }}
语法,将变量插入到 playbook 中。
- name: Use a variable
hosts: "{{ host_name }}"
vars:
host_name: "localhost"
tasks:
- name: Print the host name
debug:
msg: "The host name is {{ host_name }}"
set_fact
语法在 playbook 中使用 set_fact
语法,为变量设置新的值。
- name: Set a new variable
hosts: localhost
tasks:
- set_fact:
my_var: "hello world"
- name: Print the variable
debug:
msg: "{{ my_var }}"
在 Ansible 中,变量的优先级是有序的。默认情况下,变量的优先级如下:
set_fact
设定的变量ansible-playbook playbook.yml -e my_var=hello
)使用 Ansible 变量,可以轻松地管理 playbook 的配置,使得 playbook 更加灵活和可重用。变量的优先级有序,我们可以在 playbook 中轻松覆盖默认变量值。