本来打算自己写一波 ansible 系列的,后来发现一老哥写的太好了,「点击此处直达」,我这里也就边看边对该系列文章做下笔记,方便以后查阅,ansible 入门的话墙裂建议阅读前方链接博文~~~
变量的定义与引用
如果我们想要在某个 play 中定义变量,可以借助 vars
关键字,示例如下:
---
- hosts: all
vars:
testvar1: testfile
remote_user: root
tasks:
- name: task1
file:
path: /testdir/{{ testvar1 }}
state: touch
上例中,先使用 vars
关键字,表示在当前 play 中进行变量的相关设置。
vars
关键字的下一级定义了一个变量,变量名为 testvar1
,变量值为 testfile
。
当我们需要使用 testvar1
的变量值时,则需要引用这个变量,如你所见,使用 {{变量名}}
可以引用对应的变量。
也可以定义多个变量,示例如下。
vars:
testvar1: testfile
testvar2: testfile2
除了使用上述语法,使用 YAML 的块序列语法也可以定义变量,示例如下
vars:
- testvar1: testfile
- testvar2: testfile2
在定义变量时,还能够以类似属性的方式定义变量,示例如下:
---
- hosts: all
remote_user: root
vars:
nginx:
conf80: /etc/nginx/conf.d/80.conf
conf8080: /etc/nginx/conf.d/8080.conf
tasks:
- name: task1
file:
path: "{{nginx.conf80}}"
state: touch
- name: task2
file:
path: "{{nginx.conf8080}}"
state: touch
如上例所示,我定义了两个变量,两个变量的值对应两个 nginx
配置文件路径:
vars:
nginx:
conf80: /etc/nginx/conf.d/80.conf
conf8080: /etc/nginx/conf.d/8080.conf
我们需要引用这两个变量时,有两种语法可用
# 语法一
"{{nginx.conf80}}"
# 语法二
"{{nginx['conf8080']}}"
这样使用变量在逻辑上比较清晰,可以看出 conf80
与 conf8080
都属于 nginx
相关的配置。
变量文件分离
除了能够在 playbook 中直接定义变量,我们还可以在某个文件中定义变量,然后再在 playbook 中引入对应的文件,引入文件后,playbook 即可使用文件中定义的变量。
首先,我们来定义一个专门用来存放 nginx 相关变量的文件(文件名为 nginx_vars.yml
),在文件中定义变量时,不要使用 vars
关键字,直接定义变量即可,定义变量的语法与在 playbook
中定义变量的几种语法相同。
# 语法一示例:
testvar1: testfile
testvar2: testfile2
# 语法二示例:
- testvar1: testfile
- testvar2: testfile2
# 语法三示例:
nginx:
conf80: /etc/nginx/conf.d/80.conf
conf8080: /etc/nginx/conf.d/8080.conf
你可以选择你觉得较为舒适的语法定义变量,如下所示,直接在nginx_vars.yml
文件中定义变量即可。
# cat nginx_vars.yml
nginx:
conf80: /etc/nginx/conf.d/80.conf
conf8080: /etc/nginx/conf.d/8080.conf
在 nginx_vars.yml
中定义完相关变量后,即可在 playbook 中引入文件中的变量,在 playbook 中引入包含变量的文件时,需要使用 vars_files
关键字,被引入的文件需要以 -
开头,以 YAML 中块序列的语法引入,示例如下:
- hosts: all
vars_files:
- nginx_vars.yml
tasks:
- name: task1
file:
path={{nginx.conf80}}
state=touch
- name: task2
file:
path={{nginx['conf8080']}}
state=touch
上例中使用 vars_files
关键字引入了对应的变量文件,然后使用了文件中定义的变量。
上例中 vars_files
关键字只引入了一个变量文件,也可以引入多个变量文件,每个被引入的文件都需要以 -
开头,示例如下:
vars_files:
- /testdir/ansible/nginx_vars.yml
- /testdir/ansible/other_vars.yml
vars
关键字和 vars_files
关键字可以同时使用,如下:
vars:
- conf90: /etc/nginx/conf.d/90.conf
vars_files:
- /testdir/ansible/nginx_vars.yml
评论区