фильтр регулярных выражений в модуле замены для ansible - PullRequest
0 голосов
/ 29 ноября 2018

Попытка получить замену регулярного выражения в заданной роли для обновления автомасштабирования.В моем CFT у меня есть следующее отображение:

  DevRegionSettings:
    us-east-1:
    primaryZone: us-east-1a
    # secondaryZone: us-east-1b

    # autoscale is wrong at point of instantiation
    amiAutoscale: ami-234sefsrwerwer21
    amiDB:        ami-12313123
    amiCoord:     ami-12312312
    amiWeb:       ami-13123123
    amiWorker:    ami-12312312

Я хочу заменить только значение amiAutoscale на последний ami, который я нашел ранее в роли.

I 'Я регулярное выражение noob и не могу понять это для моей жизни.Поигрался с некоторыми регулярными выражениями из этой темы: Регулярное выражение для соответствия ключу в YAML

Но все равно не могу заставить его делать то, что я хочу: (

Любая помощьбудет признателен!

Задание, которое я выполнял, было следующим:

- name: Replacing ami in the Dev Cloudformation Template
  replace:
    regexp: '(^\s*(?P<key>\w+_amiAutoscale):\s*(?P<value>\d+))'
    replace: "{{ latest_ami.image_id }}"
    path: "$path_to_cft.yaml"

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018
- name: Replacing ami in the Dev Cloudformation Template
  replace:
   regexp: '(^\s*(?P<key>amiAutoscale):\s*(?P<value>.+))'
   replace: "{{ latest_ami.image_id }}"
   path: "$path_to_cft.yaml"
0 голосов
/ 29 ноября 2018

Ваше регулярное выражение не совпадает, поскольку регулярное выражение ожидает совпадения с 1+ символами слова, за которыми следует символ подчеркивания \w+_ сразу после начальных пробельных символов ^\s*, которых нет в данных.

Кроме того, вименованная группа захвата (?P<value>\d+) соответствует 1+ цифрам, что не соответствует ami-234sefsrwerwer21

Что вы также можете сделать для данных в качестве примера, это использовать только 2 группы захвата и класс символов во второй группе укажите, что вы хотите сопоставить:

^\s*(?P<key>amiAutoscale)\s*:\s*(?P<value>[\w-]+)

Regex demo

0 голосов
/ 29 ноября 2018

Итак, пара проблем с вашим регулярным выражением:

  • \w+_amiAutoscale - Строка amiAutoscale: ami-234sefsrwerwer21 не имеет _ до amiAutoscale
  • (?P<value>\d+) - ami-234sefsrwerwer21 не является последовательностью цифр.

Это сработало для меня, но может быть слишком открытым для шаблона: (^\s*(?P<key>amiAutoscale):\s*(?P<value>.+))

Пример: https://regex101.com/r/76VGlJ/1

...