У меня есть команда SQL, которую я хотел бы использовать в качестве значения узла JSON, который является частью определения индекса. Все это передается как команда в манифесте марионетки. Я хотел бы вывести скрипт sql так, чтобы он мог редактироваться независимо, но не могу понять, как заставить все это играть хорошо
Кукольный Манифест:
...
exec { 'create_index':
command => 'curl -XPUT http://localhost:9200/_river/my_jdbc_river/_meta -d "{ \"type\": \"jdbc\", \"jdbc\": \"sql\": \"`cat /vagrant/puppet/scripts/data.sql`\" } }"
}
...
Проблема в том, что для повышения читабельности у меня есть новые строки и для структурирования индекса я использую такие кавычки:
SQL Script (data.sql):
SELECT
name as "data.name",
description as "data.description"
FROM
data
Есть ли способ, которым я могу это осуществить?
command-line
puppet
Benny
источник
источник
Ответы:
Это на самом деле не вопрос, связанный с марионетками, а скорее вопрос JSON. Чтобы иметь возможность включать контент, в котором есть новые строки, вам нужно либо экранировать новые строки, либо удалить их.
Если вы решите избежать их, вам придется заменить каждую новую строку на escape-последовательность. Ваша конечная точка должна будет распознать экранированные новые строки и преобразовать их обратно в обычные новые строки перед дальнейшей обработкой.
Другой вариант - просто удалить символ новой строки. Это имеет то преимущество, что не требует изменений в конечной точке:
Тем не менее, я бы порекомендовал создать отдельный скрипт, который просто берет путь к файлу sql и выполняет всю магию, а команда create_index вызывает этот скрипт:
источник