📜  Ansible-变量(1)

📅  最后修改于: 2023-12-03 14:59:19.564000             🧑  作者: Mango

Ansible 变量

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 中定义

在 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 中,变量的优先级是有序的。默认情况下,变量的优先级如下:

  1. 命令行传递的变量
  2. set_fact 设定的变量
  3. 触发 playbook 时传递的变量(例如:ansible-playbook playbook.yml -e my_var=hello
  4. 主机变量
  5. 组变量
  6. 全局变量
总结

使用 Ansible 变量,可以轻松地管理 playbook 的配置,使得 playbook 更加灵活和可重用。变量的优先级有序,我们可以在 playbook 中轻松覆盖默认变量值。