Ansible分配随机数,增加重试次数



我试图将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增加到其他值?

注意:上面的列表是由这个剧本更新的,只有最后一个值没有更新。

谢谢。

retriesplaybook关键字可用于指定在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]来解决问题。(但是,这是微不足道的,因为只缺少一个项目。)

最新更新