ansible中定义变量可以使用vars关键字,变量由字母、数字、下划线组成,开头必须是字母。
先看一个简单的事例
[root@tiandong tiandong]# vim var.yml
---
- hosts: all
vars:
testvar1: testfile
remote_user: root
tasks:
- name: task1
file:
path: /testdir/{{testvar1}}
state: touch
在被控制端查看生成的文件
[root@winter testdir]# pwd
/testdir
[root@winter testdir]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 4 02:38 testfile
当我们要使用变量时使用{{testvar1}}就可以引用了,当然也可以定义多个变量
vars:
testvar1: testfile
testvar2: testfule2
当定义多个变量的时候有两种方法可以引用
方法一:
{{vars.testvar1}}
方法二:
{{vars['testvar1']}}
注:当使用冒号为参数赋值时,若变量前面没有路径的话就必须给变量加引号(path:"{{vars.testvar1}}"),前面有路径的话就不需要加引号(path:/testdir/{{vars.testvar1}})
当使用“=”为参数赋值时,就可以忽略该问题。
提示用户输入信息并写入变量:
有时候需要用户输入进行交互,可以使用如下方法:
[root@tiandong tiandong]# vim input.yml
---
- hosts: all
remote_user: root
vars_prompt:
- name: "your_name"
prompt: "what is your name"
- name: "your_age"
prompt: "how old are you"
tasks:
- name: output vars
debug:
msg: your name is {{your_name}},you are {{your_age}} years old.
[root@tiandong tiandong]# ansible-playbook input.yml
what is your name:
how old are you:
PLAY [all] *****************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [192.168.209.4]
TASK [output vars] *********************************************************************************************************************************
ok: [192.168.209.4] => {
"msg": "your name is tiandong,you are 25 years old."
}
PLAY RECAP *****************************************************************************************************************************************
192.168.209.4 : ok=2 changed=0 unreachable=0 failed=0
此时需要用户输入的,使用"var_prompt"关键字定义了两个变量“your_name”,“your_age”,当运行该剧本时,会提示“what is your name”的信息,然后输入的值存到“your_name”变量中,之后会出现“how old are you”的提示,用户的输入会存到“your_age”变量中。然后执行“output vars”任务。默认是不会显示用户输入的信息,这种方法可用于输入密码之类的敏感信息。要是用户输入的信息显示出来可以加private参数(private:no)
还可以为提示信息设置默认值。示例如下
[root@tiandong tiandong]# vim default.yml
---
- hosts: all
remote_user: root
vars_prompt:
- name: "solution"
prompt: "what is your solution?
A: solutionA
B: solutionB
C: solutionC
"
private: no
default: A
tasks:
- name: output vars
debug:
msg: The solution is {{solution}}.