Contents

ansible vars

变量

  • ansible 可以在以下地方设置变量:

inventory 变量

  • 直接配置在 inventory 文件中的变量;示例如下:
[all]
[all:children]
prod
uat

[all:vars]
#组变量
ansible_ssh_user=root
ansible_ssh_private_key_file=/opt/id_rsa_root
svr_root_dir="/opt/server/"


[prod]
prod-db01    ansible_ssh_host=192.168.1.100
#子组变量 
[prod:vars]
svr_root_dir="/opt/server/prod/"

[uat]
#主机变量
uat-db01    ansible_ssh_host=192.168.1.101    svr_root_dir="/opt/server/uat/"

vars_files 变量

  • 变量设置在单独的文件中,示例如下:
# app_version.yml
app: miningauth
app_local_root: /home/yunwei/data/miningauth
app_releases_root: /data1/tomcat/releases/miningauth
tomcat_root: /data1/tomcat/auth

# playbook.yml
- hosts: all
  gather_facts: False
  vars_files:
    - app_version.yml

playbook 变量

  • 变量设置在剧本文件中,示例如下:
# playbook.yml
- hosts: all
  gather_facts: False
  vars:
    - project_local_dir: "/home/yunwei/data/{{app}}"
    - project_release_dir: "/data1/tomcat/releases/{{app}}"
    - project_dest_dir: "/data1/tomcat/{{p_dir}}"

命令行变量

  • 执行剧本时,定义 env=prod
ansible-playbook playbook.yml -e "env=prod"

主机变量和主机组变量

  • group_vars 和 host_vars,和 inventory 放在相同目录中;

  • 定义主机和主机组变量的首选做法是与 清单文件或目录 相同的工作目录中,创建 group_vars 和 host_vars 两个目录,这两个目录分别包含用于定义组变量和主机变量的文件。(下方的中括号代表可以省略的内容)

    • 创建 group_vars/group_name[.yml] 的 YAML 文件,设置变量为值:user: student
    • 同样需要在 host_vars/inventory_hostname[.yml] 目录中创建名称与主机匹配的文件来存放主机变量
    • 所以一个项目目录中包含:ansible.cfg、group_vars、host_vars、inventory、playbook.yml
  • 对于不同的ansible命令行,对于这两个folder的查找路径是不一样的。

    • 如果是ansible-playbook命令,他会去当前playbook所在文件的同级目录下去查找这两个文件夹
    • 如果是ansible和ansible-console命令行,则会去当前playbook所在文件统计目录下的inventory文件夹下去查找这两个文件夹。

主机变量

# host_vars/inventory_hostname[.yml]
version: 100
minute: 10
hour: 06

主机组变量

# host_vars/groupname[.yml]
version: 100
minute: 10
hour: 06

变量优先级

  • 可以在以下位置定义变量,按优先级从低到高排列:
    • 在清单中定义的组变量。
    • 在清单或 Playbook 所在目录的 group_vars 子目录中定义的组变量。
    • 在清单中定义的主机变量。
    • 在清单或 Playbook 所在目录的 host_vars 子目录中定义的主机变量。
    • 在运行时发现的主机事实,比如执行剧本时采集到的 facts 。
    • (vars 和 vars_files)playbook 中的 Play 变量。
    • 任务变量。
    • 在命令行中定义的额外变量。