Loops ansible:在jinja循环中构建字符串
我想在jinja循环中为输出变量hostVariableToseinawxWorFlow构建一个字符串(我想在awx工作流w/:hosts:“{hostVariableToseinawxWorFlow}}”的后面步骤中使用这个变量)。当我在工作流中定义/构建一个vm时,它很容易:hostVariableToseinawxWorFlow=vmname。但是当超过1个虚拟机时,虚拟机的名称将递增。。与第一台机器一样,名称仍然与输入相同,例如my new vm,但第二台机器是my-new-vm-2,HostVariableToSeinawxWorFlow的字符串是:my new vm,my-new-vm-2等等。。。我如何在剧本任务中进行这种循环Loops ansible:在jinja循环中构建字符串,loops,ansible,Loops,Ansible,我想在jinja循环中为输出变量hostVariableToseinawxWorFlow构建一个字符串(我想在awx工作流w/:hosts:“{hostVariableToseinawxWorFlow}}”的后面步骤中使用这个变量)。当我在工作流中定义/构建一个vm时,它很容易:hostVariableToseinawxWorFlow=vmname。但是当超过1个虚拟机时,虚拟机的名称将递增。。与第一台机器一样,名称仍然与输入相同,例如my new vm,但第二台机器是my-new-vm-2,H
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
以下任务应为您提供所需的输出:
- 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 %}
使用。
此处[vmname,]+
专门用于避免生成my-new-vm-1
假设:vmcount为1或更多
输出
"hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"
两个都成功了!非常感谢您的精彩回答和宝贵时间。使用awx/tower和创建vsphere VM的通用方法帮助其他人,并在工作流中部署:1.workflow-node:在专用“设置/堡垒”主机上创建带有terraform模块的VM。2.节点:刷新vsphere动态资源清册3。节点:使用set_stats 4-xx设置主机名(如上所述)。将作业模板与--hosts一起使用:“{{hostvariabletouseinawxworflow | default('vsphere_vm_name')}”。vsphere inventory脚本atm的问题是它不读取标记/不从标记创建组,所以我需要这个解决方法。
"hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"