ansible:在jinja循环中构建字符串。

问题描述 投票:0回答:2

我想在jinja循环中为输出变量hostvariabletouseinawxworflow建立一个字符串(我想在awx工作流的后面步骤中使用这个变量w:hosts."{{hostvariabletouseinawxworflow}}"),当我在我的工作流中定义build一个vm时,很容易:hostvariabletouseinawxworflow = vmname: "{{ hostvariabletouseinawxworflow }}".)当我在我的工作流中定义build一个vm时,它很容易:hostvariabletouseinawxworflow = vmname.但是当>1 vms的名字是升序的......像第一台机器的名字还是像输入e. 例如:my-new-vm,但第二台是my-new-vm-2,hostvariabletouseinawxworflow的字符串将是:my-new-vm,my-new-vm-2,以此类推......我如何能在playbook任务中实现这种循环?

Scenario1: 
input_vars:
  vmcount:1
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm

Scenario2: 
input_vars:
  vmcount:2
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm, my-new-vm-2

Scenario3: 
input_vars:
  vmcount:3
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm, my-new-vm-2, my-new-vm-3
loops ansible
2个回答
1
投票

下面的任务应该会给你你想要的输出。

- set_fact:
    hostvariabletouseinawxworflow: {% for count in range(0, vmcount) %}{% if loop.first%}{{ vmname }}{% else %}{{ vmname }}-{{ loop.index }}{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} 
  vars:
    vmcount: 3
    vmname: my-new-vm

返回。

TASK [debug] ********
ok: [localhost] => {
    "hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"

请注意,为了可读性,可以将 jinja 分割成多行,但如果你在模板文件之外进行操作,处理空格和新行字符会很棘手。

如果你不确定这里的循环是如何分解的,它是被分割出来的。

{% for count in range(0, vmcount) %}
  {% if loop.first %}
    {{ vmname }}
  {% else %}
    {{ vmname }}-{{ loop.index }}
  {% endif %}

  {% if not loop.last %}
  , 
  {% endif %}
{% endfor %}

1
投票

一个使用 过滤器.这里 [vmname,] + 是专门用来避免产生 my-new-vm-1.

假设:vmcount为1或更多。

- set_fact:
    hostvariabletouseinawxworflow : "{{ ([vmname,] + [vmname,] | 
                                          product(range(2, vmcount+1)) | 
                                          map('join', '-') | list) | 
                                        join(', ') }}" 
  vars:
    vmcount: 3
    vmname: my-new-vm

- debug:
    var: hostvariabletouseinawxworflow

输出

"hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"
© www.soinside.com 2019 - 2024. All rights reserved.