生成在范围内的随机值,不应该在可用值中



我试图在1-255的范围内生成随机值,不应该在可用值中。即思科交换机的备用组id。

- name: Filter avilable Group ID
shell: cat "standby_precheck.txt" | awk '{print $2}' | sed -e '1,3d'
register: avil_grp_ids
- name: Pick free standby group id 
set_fact:
standby_grp_id: "{{ 255 | random }}"
until: "standby_grp_id not in {{ avil_grp_ids.stdout_lines }}"
retries: 30 

有时选择值不在列表中,有时不在列表中,我尝试通过增加重试值到1000但有时它还是不起作用。used delegate_to: local也请看看我的输出如下。请帮我解决这个问题,如果有其他方法也请给我建议…提前感谢:)

任务(选择免费备用组id ] ***************************************************************************************************************************Ok: [localhost] =>{"ansible_facts"; {"retries": 1000, "standby_grp_id";"176">,"until"standby_grp_id不是["、"Grp"、"12","1","81","82","98","181","212","128","130","132","134","135","152","154","156","158","176">、"178"、"184"、"185"、"186","189","190","198","200","204","137","217","215","26"、"4"、"5"、"7"、"79","241","17","83","29"、"30","32"、"34","36","38","40"、"42","43"、"44"、"48"、"50","51",' 53 ',' 64 ',' 66 ',' 68 ',' 70 ',' 72 ',' 74 ',' 76 ',' 193 ',' 94 ',' 96 ',' 197 ',' 99 ',' 120 ',' 230 ',' 43 ',' 33 ',' 224 ',' 244 ',' 246 ',' 248 ',' 249 ',' 231 ',' 23 ',' 25 ',"56"、"58"、"60","65","63","146","14"、"16","252","2","6","10","62","28","233","35","235","236","237","46"、"41",52 ' 143 ', ' ', ' 71 ', ' 201 ', ' 73 ', ' 75 ', ' 77 ', ' 78 ',"18","28","86","88","92","93","194","170","91","19","242","221","202","192","112","113","114","214","115","216","116","117","118","218","119","195","196","122","123","206","208","213","220",' 22 ',' 129 ',' 254 ',' 167 ',' 163 ',' 162 ',' 169 ',' 219 ',' 140 ',' 142 ',' 144 ',' 121 ',' 148 ',' 21 ',' 232 ',' 234 ',' 31 ',' 55 ']"},"changed":假}

多次选择一个随机数并不能保证所有的值都会被尝试。

相反,您希望区分可能的id集和可用的id集:

range(1,255) | difference(avil_grp_ids.stdout_lines)

请记住,您可能需要转换一些值以确保类型匹配

Ansible文档

我有办法了,谢谢。

- name: Filter avilable Group ID
shell: cat "standby_precheck.txt" | awk '{print $2}' | sed -e '1,/Grp/ d'
register: avil_grp_ids

- name: run shell to get random number
shell: echo `shuf -i 1-255 -n 1` 
register: standby_grp_id
failed_when: standby_grp_id.rc > 255
until: standby_grp_id.stdout not in avil_grp_ids.stdout_lines
retries: 255
delay: 1

这是完美的工作…谢谢你:)

相关内容

最新更新