Ansible to loop x times

后端 未结 3 1738
你的背包
你的背包 2021-01-20 03:28

I have to do some benchmarks and loop over 10 commands 3 times (run all 10x3, not the firstx3 then the secondx3 - so run all 10x3). The 10 commands I extract from a file in

相关标签:
3条回答
  • 2021-01-20 04:14

    In addition to existing answers : instead of copy-pasting n times the include block, you can use the with_sequence instruction :

    - name: Do things
      include_tasks: subtask.yml
      with_sequence: count=3
    
    0 讨论(0)
  • 2021-01-20 04:20

    You can put the tasks you want to repeat in a separate yaml file:

    ---
    # 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 }}
    

    and then include it in your playbook 3 times:

    ---
    # Your playbook
    ... more code above
    - include: task-to-repeat.yml
    - include: task-to-repeat.yml
    - include: task-to-repeat.yml
    
    0 讨论(0)
  • 2021-01-20 04:23

    I believe your best option is to write custom module that will encapsulate all the steps that you trying to achieve. And put all the variables that different from 1 run to another into a single list.

    Based on what you describing I can assume you have problems with:

    1. readability
    2. maintance

    This will be much cleaner to have a line that would look similar to this:

     - 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' }
    

    as opposed to repeat the same set of tasks over and over again.

    0 讨论(0)
提交回复
热议问题