Перечислить список в файле переменных - Ansible [duplicate]

Вы хотите динамически строить регулярное выражение, и для этого правильным решением является использование конструктора new RegExp(string). Чтобы конструктор обрабатывал специальные символы буквально , вы должны избегать их. Существует встроенная функция в виджета автозаполнения jQuery UI , называемая $.ui.autocomplete.escapeRegex:

[...] вы можете использовать встроенный $.ui.autocomplete.escapeRegex. Он возьмет один строковый аргумент и уберет все символы регулярных выражений, что сделает результат безопасным для перехода к new RegExp().

Если вы используете jQuery UI, вы можете использовать эту функцию или скопировать его определение из источника :

function escapeRegex(value) {
    return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
}

И использовать его следующим образом:

"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]");
//            escapeRegex("[z-a]")       -> "\[z\-a\]"
// new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g
// end result                            -> "[a-z][a-z][a-z]"

17
задан ahmedjaad 21 April 2017 в 07:55
поделиться

1 ответ

Это действительно плохой пример того, как работает поиск subelements. (И имеет старый, неподдерживаемый, синтаксис).

Посмотрите на это:

---
- hosts: localhost
  gather_facts: no
  vars:
    families:
      - surname: Smith
        children:
          - name: Mike
            age: 4
          - name: Kate
            age: 7
      - surname: Sanders
        children:
          - name: Pete
            age: 12
          - name: Sara
            age: 17

  tasks:
    - name: List children
      debug:
        msg: "Family={{ item.0.surname }} Child={{ item.1.name }} Age={{ item.1.age }}"
      with_subelements:
        - "{{ families }}"
        - children

Задача Список детей похожа на вложенный цикл поверх families (внешний цикл) и над children подэлементом в каждом семействе (внутренний цикл). Поэтому вы должны предоставить список dicts в качестве первого аргумента для subelements и имени подэлемента, который вы хотите итерировать внутри каждого внешнего элемента.

Таким образом item.0 (семья в моем примере) является внешним элементом и item.1 (дочерний элемент в моем примере) является внутренним элементом.

В примере Ansible docs subelements используется для циклического перемещения по пользователям (внешний) и добавления нескольких открытых ключей (внутренних).

38
ответ дан Konstantin Suvorov 19 August 2018 в 11:27
поделиться
  • 1
    это объяснение в миллион раз лучше, чем одно из документов Ansible, теперь следующий вопрос: что, если я хочу, чтобы еще один внутренний цикл сказал внуков, как бы субэлементы работали над таким сценарием? – ahmedjaad 28 January 2017 в 13:07
  • 2
    Нет пути для третьего вложенного цикла, afaik. В зависимости от вашей задачи map или json_query могут быть полезны. – Konstantin Suvorov 28 January 2017 в 14:09
Другие вопросы по тегам:

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