Как передать все данные hiera в скрипт из марионетки?

Я хотел бы перейти от использования марионеток к простым старым сценариям. Во время этого перехода я хотел бы, чтобы скрипты обращались к информации в hiera. Есть ли способ для марионетки передать все пары ключ-значение скрипту в качестве аргумента через exec? Если бы я мог заставить марионетку передать json blob hiera в скрипт, это было бы идеально.

Путем экспериментов в моем файле hiera содержится

{
    "a" : ["a, b"],
    "b" : "b",
    "c" : {
        "a" : {
            "b" : "c"
        }
    }
}
  1. иера ("а"): "аб"
  2. иера("б"): "б"
  3. иера("с"): ""
  4. иера(""): ""

В идеале я хотел бы передать всю строку json из всех источников данных hiera в свои сценарии из exec? Может ли кто-нибудь подтвердить, возможно ли это, или есть ли обходной путь?


person work_account    schedule 02.11.2016    source источник
comment
Не могли бы вы привести пример того, что вы пытаетесь сделать? Это несколько неясно.   -  person Matt Schuchard    schedule 02.11.2016


Ответы (3)


Есть ли способ для марионетки передать все пары ключ-значение скрипту в качестве аргумента через exec?

В общем, нет, потому что разрешения Hiera могут быть контекстно-зависимыми. Нет никакой гарантии, что «все пары ключ-значение» четко определены для всего узла. Поэтому, прежде чем даже говорить о том, как можно обмениваться данными, вам нужно разобраться с проблемой того, что эти данные являются.

Даже если вы предполагаете, что не используется ни одно из средств Hiera, которые контекстуализируют данные более узко, чем на основе узла за узлом, и что вам нужно заниматься только приоритетным поиском (а не поиском в массиве или слиянием хэшей), Hiera не имеет встроенного средства для компиляции всех данных, относящихся к узлу. Однако, если вы имеете дело только со стандартным бэкэндом YAML или JSON, вы, вероятно, могли бы создать и использовать свою собственную взломанную версию, которая извлекает нужные данные, возможно, как значение какого-то специального ключа.

Однако даже в этом случае передача самих данных в качестве аргумента командной строки весьма сомнительна. Во-первых, вам потребуется сериализовать данные в форму, которая будет интерпретироваться как одно слово оболочки. Это, безусловно, можно автоматизировать, но в дальнейшем вы рискуете нарушать ограничения на длину аргумента. Соответствующая POSIX система может установить максимальную длину аргумента всего 4096 байт (хотя многие имеют гораздо большие ограничения), и это может быть слишком мало. И если вы пытаетесь сделать это с Windows, то знайте, что ее ограничения еще меньше.

В качестве альтернативы передаче данных в качестве аргумента командной строки вы можете записать их в файл, который будет читать ваш скрипт(ы). Однако даже это кажется немного глупым. У Hiera есть интерфейс командной строки — почему бы просто не распространять данные Hiera и конфигурацию иерархии, а ваши сценарии используют Hiera для запроса необходимых данных из него?

person John Bollinger    schedule 03.11.2016

В общем, это не должно работать.

Возможно, вы сможете написать собственный бэкэнд Hiera, который распознает специальный ключ поиска и возвращает полностью объединенный хэш всех данных из иерархии.

person um-FelixFrank    schedule 24.11.2016

Я не уверен, что правильно понял вопрос, но я предполагаю, что вы говорите о каком-то шаблоне? Вы можете использовать шаблоны и вставлять значения в заполнители.

Проверьте эту ссылку, если это поможет.

http://codingbee.net/tutorials/puppet/puppet-generate-files-templates-using-hiera-data/

person Nihal Sharma    schedule 24.12.2016
comment
В итоге я использовал шаблоны, но до сих пор не могу полностью пройти настройку hiera. Я должен был бы указать ключи, которые мне нужны. - person work_account; 11.01.2017
comment
Да, я думаю, это способ сделать это. - person Nihal Sharma; 11.01.2017