ansible-playbook 中的jinja 和变量使用总结

1、ansible-playbook 中的jinja表达式

jinja for循环中的索引

 {% for  xx in xxxs %}
    loop.index --代表索引从1开始
    loop.index0--代表索引从0开始
    loop.last --值为 布尔 true代表是最后一个元素
    loop.first --值为 布尔 true代表是最后一个原始
 {% endfor %}

2、ansible-playbook 中特殊变量

1)groups 变量

groups是个对象,包括主机组的信息(hosts文件的信息),里面包括all[],ungrouped[] 这两个数组是默认有的, 其他组为自己定义的主机组的名称

2)获取本机ip的变量

ansible_default_ipv4.address

用法: {{ ansible_default_ipv4.address }}

 - name: "设置vip"
  set_fact:
     current_vip: "{{ virtual_ipaddress[my_idx] }}"
   loop: "{{ groups | list | difference('[ungrouped,all]') }}"
   loop_control:
     index_var: my_idx
   when:  item == ansible_default_ipv4.address

3)group_names 变量

group_names 主机组的名称的数组
group_names[0] 代表当前的主机组名称

4) 其他变量

主机名变量:ansible_fqdn
cpu变量:ansible_processor_vcpus
版本号变量:ansible_distribution_major_version
hostvars变量
groups变量
group_names变量
inventory_hostname变量
inventory_hostname_short变量
inventory_dir变量
inventory_file变量

3、ansible-playbook 特殊过滤器

1)list 和 difference

groups | list | difference(’[ungrouped,all]’) --此方法将groups 对象转换为list列表; 并从列表中用 difference 去除 ungrouped,all 两个元素,剩下的就是自己定义的主机组的名称

2)product map 和 join 过滤器

product:为list的每个元素生成一个字符串:默认是空格分隔
map: 的参数是键值对,key是 某个方法的名称,值是方法的参数 map('join', ':')表示的意思是 调用join方法,join方法的参数是:把前面的元素用分隔符连接
join:是连接的意思,发传过来的list或者数组中的元素进行连接,返回一个字符串
举例说明:

groups['all'] | product(['2181'])| map('join', ':') | join(',') 

表达式说明:
groups是系统变量,代表所有hosts的主机对象,
groups['all']groups中的all对象,表示 hosts中的说有主机ip信息的一个数组。其值为类似:[192.168.200.11,192.168.200.12]
product(['2181'])为每个元素产生一个2181字符串

假如 groups['all']值为[192.168.200.11,192.168.200.12]

groups['all'] | product(['2181'])| map('join', ':') | join(',') 
的结果为: 192.168.200.11:2181,192.168.200.12:2181

你可能感兴趣的:(ansible,ansible,自动化运维,自动化部署)