ansible变量

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?\n
     A: solutionA\n
     B: solutionB\n
     C: solutionC\n"
     private: no
     default: A
  tasks:
  - name: output vars
    debug:
     msg: The solution is {{solution}}.

 

posted @ 2018-07-19 22:02  winterforever  阅读(169)  评论(0编辑  收藏  举报