регистрировать результат stat with_items, выполняющий задачу, если результат stat

Как и другие языки, '& amp;' является логическим побитовым оператором, тогда как '& amp; & amp;' является логической операцией.

Например (прошу простить мой синтаксис).

Если A = [True True False True] B = False

A & amp; B = [False False False False]

.. или если B = True A & amp; B = [True True False True]

Для «& amp; & amp;» правый операнд вычисляется только в том случае, если левый операнд имеет значение true, а результат представляет собой одно булево значение.

x = (b ~ = 0) & amp; & amp; (a / b> 18.5)

Надеюсь, это ясно.

0
задан Archit Goyal 13 July 2018 в 19:46
поделиться

2 ответа

Я думал, что оператор when будет запускать только задание IF, если statresult существует.

Он может это сделать, но вам нужно обработать ваше условное выражение, например, его Python.

 when: 'domainexists' in item

Обновление. Итак, при втором просмотре вашей пьесы, я вижу некоторые другие проблемы, которые вам нужно будет исправить, прежде чем это сработает.

  1. создается впечатление, что вы лечите with_items, как будто предоставляете доступ к глобальной переменной items, которую затем изменяете и пытаетесь использовать в будущих задачах. Это не так. Любые петли стиля with_X - это то, что он зациклирует задачу с любым списком, который вы ему даете. Кроме того, документация Ansible рекомендует не использовать петли with_X, так как loop стал рекомендуемым способом петли с Ansible 2.5.
  2. В вашей первой игре Don 't сохранить ваш результат stat в item. Храните его в своей собственной переменной, так как item - специальная переменная, используемая для циклов. Это может быть любое другое имя, которое вы хотите. Кроме того, не стоит беспокоиться о сохранении его с помощью собственного ключа, просто укажите ему простое имя переменной, например existant_domain_list, а не existant_domain_list.statresult.
  3. Вы зарегистрировались на item.statresult, но никогда не используете это снова в вашем плейбуке. Возможно, это потому, что вы делаете # 1. Когда вы регистрируете результат, он доступен для нисходящих задач в playbook автоматически (пока вы используете свое собственное имя переменной).

Кроме этого, это намного лучше, чем я сделал моя первая игра-головоломка Ansible лет назад! У вас есть хорошее представление о предполагаемой функциональности инструмента.

-1
ответ дан Himal 17 August 2018 в 12:13
поделиться
  • 1
    Большое спасибо за ответ! Я поменяю swit with_items с помощью цикла и попробую использовать его, чтобы поставить результат stat в свою собственную переменную. – RedR0ze 13 July 2018 в 20:36
  • 2
    Без проблем! Также ответ @ techraf также дает отличный совет по обработке результатов состояния для нисходящих циклов. – Himal 13 July 2018 в 20:57

Вот как выглядит ваша playbook:

---
- hosts: all
  become: yes
  gather_facts: no
  tasks:
    - name: Check that domains exist
      stat:
        path: /path/to/the/domain/{{ item }}
      loop:
        - path1
        - path2
        - path3
      register: my_stat

    - name: Ensure symlinks are created for bin on existing domain machines
      file:
        src: /path/new/symlink_bin_link
        dest: /path/to/the/domain/{{ item }}/bin
        state: link
      loop: "{{ my_stat.results | selectattr('stat.exists') | map(attribute='item') | list }}"

    - name: Ensure symlinks are created for config on existing domain machines
      file:
        src: /path/new/symlink_config_link
        dest: /path/to/the/domain/{{ item }}/config
        state: link
      loop: "{{ my_stat.results | selectattr('stat.exists') | map(attribute='item') | list }}"

Объяснение:

Также: src и dest должны быть определены в обратном направлении для символических ссылок, чем в вашем коде.


Далее , вы можете объединить последние две задачи в одну, добавив фильтр product к итерабельному определению.

2
ответ дан techraf 17 August 2018 в 12:13
поделиться
  • 1
    Отлично! Большое спасибо! Я определенно буду погружаться в функции selectattr и map, чтобы узнать больше. – RedR0ze 16 July 2018 в 13:51
Другие вопросы по тегам:

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