在Playbook中用户自定义的变量

用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。

Playbook中定义和使用的变量的方法

例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。

  1. ---
  2. - hosts: web
  3. vars:
  4. http_port: 80
  5. remote_user: root
  6. tasks:
  7. - name: insert firewalld rule for httpd
  8. firewalld: port={{ http_port }}/tcp permanent=true state=enabled immediate=yes

把变量放在单独的文件中

当变量比较多的时候,或者变量需要在多个playbook中重用的时候,可以把变量放到一个单独的文件中。通过关键字var_files把文件中定义的变量引起playbook中,使用变量的方法和在本文件中定义的变量相同。

  1. - hosts: web
  2. remote_user: root
  3. vars_files:
  4. - vars/server_vars.yml
  5. tasks:
  6. - name: insert firewalld rule for httpd
  7. firewalld: port={{ http_port }}/tcp permanent=true state=enabled immediate=yes

变量文件vars/server_vars.yml的内容为:

  1. http_port: 80

定义和使用复杂变量

有时候我们需要使用的变量的值不是简单的字符串或者数字,而是一个对象。这时候定义的语法如下,格式为YAML的字典格式:

  1. foo:
  2. field1: one
  3. field2: two

访问复杂变量中的子属性,可以利用中括号或者点号:

  1. foo['field1']
  2. foo.field1

YAML的陷阱

YAML的陷阱是某些时候YAML和Ansible Playbook的变量语法不能在一起好好工作了。这里仅发生在指冒号后面的值不能以{开头的时候,如果有必要以{开头,必须加上因号。总之在YAML值的定义中,如果提示YMAL语法错误,都可以尝试下加入引号来解决。

下面的代码会报错:

  1. - hosts: app_servers
  2. vars:
  3. app_path: {{ base_path }}/22

解决办法:要在”{ “开始的值加上引号:

  1. - hosts: app_servers
  2. vars:
  3. app_path: "{{ base_path }}/22"