Кодировать косую черту / в файле Ansible YAML

При хранении случайно сгенерированных паролей в хранилище Ansible у меня нет проблем, если только пароль не содержит / (косая черта, косая черта)

Согласно Yaml Spec 1.2, при просмотре печатных символов ASCII я должен экранируйте двойные кавычки, обратную косую черту и прямую косую черту с помощью обратной косой черты.

Я пробовал это, но я получаю ошибку синтаксического анализа.

Строка из файла хранилища

test: "a<>?x\/x.,:;'-=_+b*()c&d{}\"e^f[]!@g%h\\i$j"

Ошибка:

fatal: [127.0.0.1]: FAILED! => {"failed": true, "msg": "Syntax Error while loading YAML.\n\n\nThe error appears to have been in 'False': line 14, column 13, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\n(could not open file to display line)"}

person jdog    schedule 12.07.2016    source источник
comment
Какая у вас ошибка, если вы НЕ экранируете косую черту? Нравится test: "a<>?x/x.,:;'-=_+b*()c&d{}\"e^f[]!@g%h\\i$j"   -  person Konstantin Suvorov    schedule 12.07.2016
comment
только что попробовал, и вы правы, не нужно убегать   -  person jdog    schedule 13.07.2016


Ответы (1)


Ansible — это Python, поэтому он использует PyYaml. PyYaml реализует YAML 1.1, а не 1.2. В YAML 1.1 косая черта не является экранируемым символом (в то время как в версии 1.2).

Не экранируйте косую черту. Это не специальный символ в YAML, поэтому его не нужно экранировать. YAML 1.2 добавил для него escape-последовательность только из-за совместимости с JSON.

Если вы хотите полностью избежать неприятных вопросов, связанных с бегством, используйте блочные скаляры:

test: |-
  a<>?x/x.,:;'-=_+b*()c&d{}"e^f[]!@g%h\i$j

Вам не нужно ничего убегать там.

person flyx    schedule 12.07.2016