The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Ansible и переменная, обернута в фигурные {} скобки"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Система. проблемы, диагностика / Linux)
Изначальное сообщение [ Отслеживать ]

"Ansible и переменная, обернута в фигурные {} скобки"  +/
Сообщение от xintrea (ok), 12-Фев-20, 17:30 
В обрабатываемом файле имеется такая строка:

<Machine uuid="{5c70108e-f64c-4e8c-b8a4-a04231e24718}"

Видно, что UUID записан в фигурных скобках.

Я пишу задачу, которая заменит этот UUID:


- name: Замена <Mashine uuid=...>
  lineinfile:
    destfile: "{{ vmImagesPath }}/{{ item[0] }}/{{ imageFile }}.vbox"
    backrefs: yes
    regexp: '(^.*?\<Machine uuid\=\"\{)(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})(.*)'
    line: '<Machine uuid="{{{ vboxUuid.stdout }}}\3'

И последнюю строчку Ansible не может обработать, ему плохеет от трех скобок.

fatal: [hyperpc]: FAILED! => {"msg": "template error while templating string: expected token ':', got '}'. String: <Machine uuid=\"{{{ vboxUuid.stdout }}}\\3"}

Я пробовал экранировать так:

line: '<Machine uuid="\{{{ vboxUuid.stdout \}}}\3'

Тоже ошибка, но другая.
Я пробовал складывать строки так:

line: '<Machine uuid="{'+'{{ vboxUuid.stdout }}'+'}\3'

Тоже ошибка.

В общем, я никак не могу вывести значение переменной так, чтобы оно было окружено фигурными скобками. Как это сделать?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Ansible и переменная, обернута в фигурные {} скобки"  +/
Сообщение от ACCA (ok), 12-Фев-20, 23:17 
 
  line: "<Machine uuid=\"{{ '{' }}{{ vboxUuid.stdout }}{{ '}' }}\""

Ответить | Правка | Наверх | Cообщить модератору

2. "Ansible и переменная, обернута в фигурные {} скобки"  +/
Сообщение от xintrea (ok), 13-Фев-20, 09:39 
>
 
>   line: "<Machine uuid=\"{{ '{' }}{{ vboxUuid.stdout }}{{ '}' }}\""
>

Еще нужна ссылка назад \3, потому что в ней содержится все, что справа от UUID (включая фигурную скобку и закрывающую двойную кавычку). Поэтому, выражение должно выглядеть так:

 
  line: "<Machine uuid=\"{{ '{' }}{{ vboxUuid.stdout }}\3"

Но как только ее так изменяешь, появляется ошибка:


FAILED! => {"reason": "Syntax Error while loading YAML.\n  found unknown escape character\n\nThe error appears to have been in '/home/user/work/develop/iks_vm_farm_generate/subroutineReplaceUuid.yml': line 28, column 69, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    # line: \"<Machine uuid=\\\"{{ '{' }}{{ vboxUuid.stdout }}{{ '}' }}\\3\"\n    line:   \"<Machine uuid=\\\"{{ '{' }}{{ vboxUuid.stdout }}{{ '}' }}\\3\"\n                                                                    ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes.  Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \"{{ foo }}\"\n"}


Удивительно, но чтобы ссылка назад сработала как часть итогового регулярного выражения в выражении Jinja, её косую надо экранировать (хотя обычно экранировка делает строго противоположную вещь - превращает служебный символ в обычный символ).

 
  line: "<Machine uuid=\"{{ '{' }}{{ vboxUuid.stdout }}\\3"

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру