Как тестировать шаблоны с данными hiera локально?

Я пытаюсь найти способ взять файл шаблона erb и использовать данные hiera (даже из одного файла yaml) и просто использовать шаблон для создания файла с замененными значениями.

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

Заранее спасибо.

Изменить: поскольку это может быть неясно, позвольте мне объяснить вариант использования.

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


person Mateusz M.    schedule 04.11.2014    source источник
comment
Итак, нужна ли вам семантика Hiera или вы хотите заполнить значения переменных из одного файла YAML?   -  person Felix Frank    schedule 06.11.2014
comment
Я бы предпочел использовать семантику Hiera, но, думаю, сработает заполнение переменных.   -  person Mateusz M.    schedule 07.11.2014
comment
Будет ли Puppet вообще участвовать? Или вы хотите установить Hiera на отдельной машине, которая не использует Puppet, но имеет Hiera и Ruby/ERB?   -  person Felix Frank    schedule 07.11.2014
comment
Puppet будет задействован на более позднем этапе для настройки тестовых сред. Я хочу иметь возможность заполнять шаблоны конфигурации на локальных машинах без марионетки перед их фиксацией.   -  person Mateusz M.    schedule 07.11.2014


Ответы (1)


Я не уверен, почему вы хотите сделать это напрямую из данных hiera, но это было бы легко реализовать с помощью рубиновых библиотек ERB и yaml. Что-то вроде (псевдокод):

class Erbwritter 
require 'erb'
require 'yaml

    attr_accessor :output_path, :yaml_path

    def initialize(template, command)
        @output = :output_path
        @data   = :yaml_path
         .....
    end

    def render()
        ERB.new(@template).result(binding)
    end

    def save(file)
        File.open(file, "w+") do |f|
            f.write(render)
        end
    end

    def parse_yaml(@data)
        File.open(@data, ...
        # parse some stuff, add them to a local {}
    end
end

Затем вы можете создать экземпляр этого класса, например:

newTemplate = Erbwritter.new(/path/to/output, /path/to/yaml)
newTemplate.save(File.join(Dir.pwd, your_file_name")) 

Опять же, это все в основном псевдокод и не будет работать из коробки, но это довольно близко. Так что получайте удовольствие.

Подробнее о классе ERB можно прочитать здесь.

person Jeff Malnick    schedule 05.11.2014
comment
Это выглядит хорошо, в принципе. Чтобы соединить это с собственно Hiera, вы также должны require 'hiera' добавить поисковые запросы, такие как модуль hiera-puppet, используемый для этого. - person Felix Frank; 07.11.2014