Ansible 关于变量的介绍

2019-09-05 0 By admin

ansible 提供了多种定义变量和使用的方式供我们选择使用。

一、定义变量

1.1、vars 在playbook 直接定义

在playbook 编写中,直接在开头部分的vars块中定义变量;并在任务中调用。

-  hosts: all
    vars:
        user:  lyzhang

1.2、vars_files 在playbook 中加载变量文件

使用 vars_files 可以加载外部的yaml格式的变量文件。

-  hosts:  all
    vars_files:
        -  path_to_varsfile

1.3、host inventory 定义的变量

主机清单中的变量分为:主机变量和主机组变量;其应用范围显而易见。
主机变量优先于组变量,但playbook中定义的变量高于这两者。

二、注册变量

2.1、register 注册变量

编写 playbook 中可以使用register语句捕获命令输出,保存到一个变量中。
在该playbook运行时,debug模块将install_result注册变量的值转储到终端。

    yum:
        name:  httpd
        state:  installed
    register:  install_result
-  debug :  var=install_result

2.2、set_fact模块定义新的变量

set_fact模块可以自定义facts,这些自定义的facts可以通过template或者变量的方式在playbook中使用。

- name: set_fact example
  hosts: test
  tasks:
    - name: create new var
      set_fact: new_vars="{{ old_var1}} {{ old_var2 }}"

三、使用变量

3.1、使用单个变量

在 playbook 中使用变量,需要使用两个大括括起来。

  - name: Get Hostname
    shell: hostname
    register: hostname
  - name: make dir
    file: 
        path: /data/{{ hostname.stdout }}
        state: directory

3.2、遍历一个数组

processes 变量中包含了一个数组,使用with_items 对数组变量进行遍历。
使用item遍历,查看数组中的元素。

  - name: loop process
    delegate_to: localhost
    set_fact: fall_process="{{ fall_process }} {{ item }} 、"
    when: '"{{ item }}" in processlists.stdout'
    with_items: "{{ processes }}"

四、字符串查找

在变量使用中,最常见的场景就是判断变量的字面量是否有一个特定的字符串了。
可以使用 when 关键字实现此功能。

    when: '"{{ item }}" in processlists.stdout'
	#processlist.stdout 中是否有 item 变量的字面量。