ansible 中拼接字符串的方法

-- 2020.10.09 更新
对于cassandra 集群,seeds 不建议设置整个集群,每个机房至少两台即可

对yaml语法不是很熟,记录下动态生成变量的方法。只是自己找到的,如果有更好的方法就更好了

生成 "host:port,host:port,..." 类型文件

例如:
PXC 变量wsrep_cluster_address 需要列出集群中的节点,
cassandra 的seeds 需要写集群的种子节点
以及redis-cluster 创建集群的时候也要使用到,这些都要我们动态生成了

话不多说,直接上code吧

  1. 在template中的用法
# 需要定义个空列表
{% set cluster_address=[] -%}
{% set pxc_hosts = groups.pxc %}
{% for host in pxc_hosts -%}
  {% set pxc_ip = hostvars[host].inventory_hostname | default(host) -%}
  {% set pxc_port = group_port -%}
  {% set _ = cluster_address.append("%s:%s" % (pxc_ip, pxc_port)) -%}  
# 基本和python语法一样,只是注意写法就可以了
{% endfor -%}
# 使用的时候
wsrep_cluster_address           = 'gcomm://{{ cluster_address | join(',') }}' 
# 使用join 过滤器 可以生成',' 分隔的字符串
  1. 在playbook 中的用法
# 直接生成列表,免去定义的一步,再根据需要转为字符串
set_fact:
    cluster_address: |-
       [
         {% set pxc_hosts = groups.pxc %}
         {% for host in pxc_hosts -%}
           {% set pxc_ip = hostvars[host].inventory_hostname | default(host) -%}
           {% set pxc_port = group_port -%}
           "{{ pxc_ip }}:{{ pxc_port }}"  
         {% endfor -%}
       ]
>使用的时候
{{ cluster_address | join(',') }}'  # 使用join 过滤器可生成',' 分隔的字符串,分隔符自己定义
在playbook 中的用法也是相同,我找到的用的都是循环的方法 ,根据循环或者判断就能生成自己的需求了

你可能感兴趣的:(ansible 中拼接字符串的方法)