ansible之variable,ansiblevariable


变量的命名

和大多数编程语言类似,ansible的变量允许使用字母数字下划线来取,但是变量名始终以字母开头

yaml语法可以定义一个字典:

foo:
  field1: 1
  field2: 2

调用可以使用括号和点:

foo['field1']
foo.field1

点有时候会和python的某些属性调用冲突,所以尽量使用括号法。

变量的定义

  • 变量可以在inventory中定义
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
  • 变量可以在playbook中定义
- hosts: webservers
  vars:
    http_port: 80

这将很利于阅读playbook

  • 变量可以在roles和incloud的结构中定义
    在主目录中建立group_vars目录,在其中写入yaml格式定义的变量。

使用变量

My amp goes to {{ max_amp_value }}
这是简单的例子,双大括号内部就是变量名。

在playbook中,同样的使用:template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg

注意

在yaml语法中,如果你需要引用变量作为一行的开头,你要加上双引号,否则不能调用变量而是创建字典。

这是错的:

- hosts: app_servers
  vars:
      app_path: {{ base_path }}/22

这是对的:

- hosts: app_servers
  vars:
       app_path: "{{ base_path }}/22"

从系统获取变量:facts

有一种变量不是手动定义的,而是从系统获取的,facts就是这种变量的集合。

要获得一台主机的facts,使用这个命令:ansible hosts -m setup
这将会返回很多的内容的,其实就是facts变量的组成的字典。
例如:"ansible_distribution": "CentOS"这一项{{ansible_distribution}}的值就是“CentOS”。

相关内容

    暂无相关文章