Loops 可循环x次
我必须做一些基准测试,并在10个命令上循环3次(运行所有10x3,而不是第一个x3,然后是第二个x3,所以运行所有10x3)。我从寄存器变量中的文件中提取的10个命令(它不适用于_行:然后是命令)并执行它们1,2,3..,10在文件中管道输出,回显某些内容,然后再次执行它们。。。所有这一切都发生了三次 下面是我在x3下面的代码(nagios_check注册变量中有10条命令/行): 。。。上面这一部分我已经写了3次(全部),并且在编写了更多代码之后Loops 可循环x次,loops,ansible,roles,Loops,Ansible,Roles,我必须做一些基准测试,并在10个命令上循环3次(运行所有10x3,而不是第一个x3,然后是第二个x3,所以运行所有10x3)。我从寄存器变量中的文件中提取的10个命令(它不适用于_行:然后是命令)并执行它们1,2,3..,10在文件中管道输出,回显某些内容,然后再次执行它们。。。所有这一切都发生了三次 下面是我在x3下面的代码(nagios_check注册变量中有10条命令/行): 。。。上面这一部分我已经写了3次(全部),并且在编写了更多代码之后 有没有办法让它更简单?(这已经是一个角色了,我
有没有办法让它更简单?(这已经是一个角色了,我使用这个角色4次了-不要让我在更小的角色中打断它,因为它更复杂,我最终会有一个12倍于“这个角色”的大剧本,看起来很恐怖)我相信你最好的选择是,它将封装你试图实现的所有步骤。并将所有不同于1的变量放到一个列表中 根据您的描述,我可以假设您在以下方面存在问题:
- name: Run my nagios checks
my_custom_nagios_module_1.0: >
date={{ item.date }}
varaible_x={{ item.x }}
with_items:
- { date: '%Y-%m-%d', x: 'foo' }
- { date: '%Y-%m-%d', x: 'bar' }
- { date: '%Y-%m-%d', x: 'baz' }
与反复重复同一组任务相反。您可以将要重复的任务放在单独的yaml文件中:
---
# tasks-to-repeat.yml
- name: get the date for naming purpose
shell: date +%Y%m%d-%HH%MM%SS
register: dateext
- name: grep the commands from nagios
shell: grep -R check_http_EDEN_ /etc/nagios/nrpe.cfg | cut -d= -f2-
register: nagios_check
- name: check_eden_before
shell: (printf $(echo '{{ item }}' | awk -F'country=' '{print $2}' | cut -d'&' -f1); printf ' ';{{ item }} | cut -d ' ' -f-2) >> {{ ansible_env.DATA_LOG }}/eden-{{ ansible_hostname }}-{{ dateext.stdout }}
with_items: "{{ nagios_check.stdout_lines }}"
ignore_errors: True
- name: enter simple line
shell: echo "=================" >> {{ ansible_env.DATA_LOG }}/eden-{{ ansible_hostname }}-{{ dateext.stdout }}
然后将其包含在您的剧本中3次:
---
# Your playbook
... more code above
- include: task-to-repeat.yml
- include: task-to-repeat.yml
- include: task-to-repeat.yml
除现有答案外:您可以使用以下说明,而不是复制粘贴
n
乘以包含
块:
- name: Do things
include_tasks: subtask.yml
with_sequence: count=3
请添加您正在使用的真实代码。这将更容易理解您是如何尝试的。我刚刚编辑了需要重构的代码。恐怕没有一种简单直接的方法可以在Ansible中重复一组任务。我想到的最好的事情是编写一个shell脚本,它将完成您正在执行的三项任务,并使用适当的参数从Ansible调用单个shell脚本三次。这不是一个很好的解决方案。这个答案已经过时,请使用@Httqm解决方案。
- name: Do things
include_tasks: subtask.yml
with_sequence: count=3