Повторите несколько раз конкретную задачу в недоступном playbook [duplicate]

Обычно это выполняется с помощью процесса, называемого сканированием классов. В общем случае загрузчики классов не позволяют сканировать все классы в пути к классам. Но обычно единственным используемым загрузчиком классов является UrlClassLoader, из которого мы можем получить список каталогов и файлов jar (см. getURLs ) и открывать их один за другим для отображения доступных классов.

Этот подход реализуется такими библиотеками, как Scannotation и Reflections .

Еще один подход заключается в использовании Java Plug-and-end API обработки аннотации ], чтобы написать обработчик аннотации, который будет собирать все аннотированные классы во время компиляции и создавать файл индекса для использования во время выполнения.

Вышеупомянутый механизм реализован в библиотеке ClassIndex .

Использование сканирования на основе классов обычно на два порядка медленнее, чем индексирование во время компиляции. См. этот контрольный показатель .

2
задан ady8531 14 September 2015 в 05:29
поделиться

2 ответа

Вы можете поместить задачи, которые хотите повторить, в отдельный файл 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
2
ответ дан Sebastian Stigler 15 August 2018 в 14:49
поделиться

Я считаю, что ваш лучший вариант - написать пользовательский модуль , который будет инкапсулировать все шаги, которые вы пытаетесь достичь. И поместите все переменные, отличные от 1, запускаются в один список.

Исходя из того, что вы описываете, я могу предположить, что у вас есть проблемы с:

  1. удобочитаемость
  2. maintance

Это будет намного чище иметь строку, которая будет выглядеть примерно так:

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

в отличие от повторения одного и того же набора задач снова и снова.

1
ответ дан Vor 15 August 2018 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: