我试图将7000和7005之间的随机数分配给列表中不存在的变量。列表中有7000、7001、7004和7002。
- name: Set fact
set_fact:
val: "{{ 7004 | random(start=7000) }}"
until: val not in list
以上剧本尝试分配3次,失败。它没有赋值7003。
TASK [xxx] ******************************
task path: /tmp/awx_164677__l9__xmu/project/roles/xxxxx/tasks/main.yml:26
FAILED - RETRYING: Set fact (3 retries left).
FAILED - RETRYING: Set fact (2 retries left).
FAILED - RETRYING: Set fact (1 retries left).
fatal: [xxxprod]: FAILED! => {"ansible_facts": {"val": "7000"}, "attempts": 3, "changed": false}
如何将重试值从3增加到其他值?
注意:上面的列表是由这个剧本更新的,只有最后一个值没有更新。
谢谢。
retries
playbook关键字可用于指定在until
循环中放弃之前的重试次数。
until
关键字结合使用。- name: Set fact
set_fact:
val: "{{ 7004 | random(start=7000) }}"
until: val not in list
retries: 5
这里是您查看更多重试Playbook关键字的参考
只从缺少的项中随机选择。下面的剧本解决了随机完成序列的一般问题
- hosts: localhost
vars:
vals: [7000, 7003]
vals_all: [7000, 7001, 7002, 7003, 7004]
vals_missing: "{{ vals_all|difference(vals)|length }}"
tasks:
- set_fact:
vals2: "{{ vals }}"
- set_fact:
vals2: "{{ vals2 + [vals_all|difference(vals2)|random] }}"
with_sequence: end="{{ vals_missing }}"
- debug:
var: vals2
为
vals2:
- 7000
- 7003
- 7002
- 7001
- 7004
如果你想迭代的缺失项目的随机生成playbook下面
- hosts: localhost
vars:
vals: [7000, 7003]
vals_all: [7000, 7001, 7002, 7003, 7004]
vals_missing: "{{ vals_all|difference(vals)|length }}"
tasks:
- set_fact:
vals2: "{{ vals }}"
- debug:
var: val
with_sequence: end="{{ vals_missing }}"
vars:
val: "{{ [vals_all|difference(vals2)|random] }}"
vals2: "{{ vals2 + [vals] }}"
为
ok: [localhost] => (item=1) =>
ansible_loop_var: item
item: '1'
val:
- 7002
ok: [localhost] => (item=2) =>
ansible_loop_var: item
item: '2'
val:
- 7004
ok: [localhost] => (item=3) =>
ansible_loop_var: item
item: '3'
val:
- 7001
更改变量vals: [7000, 7001, 7004, 7002]
来解决问题。(但是,这是微不足道的,因为只缺少一个项目。)