2015-04-03 3 views
1

Я хочу, чтобы мой класс Puppet создавал файловый ресурс с содержимым на основе всех экземпляров определенного определенного типа. Я посмотрел на this question с идеей повторения экземпляров, чтобы создать файл, но, по-видимому, это «плохая идея» за один ответ, который есть в настоящее время.Как создать файл на основе экземпляров определенного типа в Puppet

Некоторые предпосылки: Я создаю класс monitor_service в Puppet для развертывания пользовательского приложения для мониторинга. Приложение считывает конфигурационный файл, который сообщает ему, что контролировать, один элемент в каждой строке, вдоль линий

ITEM: /var/things/thing-one (123) 
ITEM: /var/things/thing-two (456) 

Я также пишущие определенный тип, который развертывает экземпляры наблюдаемых элементов:

define my_thing::monitored_thing ($port) { 
    file { "/var/things/$name": 
    ... 
    } 
} 

на данном узле, я создал несколько monitored_thing сек как

my_thing::monitored_thing { "thing-one": 
    port => 123 
} 
my_thing::monitored_thing { "thing-two": 
    port => 456 
} 

Что такое «право» кукольные идиомы для создания файла конфигурации службы мониторинга? Я бы предпочел, чтобы это работало таким образом, чтобы класс monitor_service не должен был рассказывать, какие экземпляры monitored_thing он просматривает - просто создание экземпляра monitored_thing должно привести к его добавлению в файл конфигурации автоматически.

ответ

1

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

  1. puppetlabs-stdlib Использование «s file_line. Это позволяет указать, что файл должен содержать определенную строку. Лучше всего, когда вы не заботитесь о другом содержимом файла и просто хотите убедиться, что строка присутствует или отсутствует.

  2. Используйте puppetlabs-concat, если вы хотите, чтобы конечный файл включал только фрагменты, которые вы указываете, или порядок фрагментов.

  3. Используйте augeas type, если вам нужно отредактировать/добавить конфигурацию в файл с более сложной структурой, как XML, конфигурации Apache, и т.д.

+0

Эти фантастические выводы, спасибо за указатели! Я остановлюсь здесь снова, когда выясню, что я делаю. – Coderer

+0

Я думаю, что 'file_line' будет работать для моего варианта использования, но было бы неплохо, если бы при определении содержимого строки я мог бы сказать« какой »экземпляр это. То есть, что-то вроде 'my_thing :: monitored_thing.count', которое сообщит мне, сколько экземпляров этого определенного типа было создано во время оценки строки. Я знаю, что это «зависит от парсинга», что является «Плохой вещью», но в этом случае это поможет мне. Это невозможно? – Coderer

+0

Я тестирую 'file_line', но я не могу заставить его работать. У меня есть простая запись, которая выглядит как 'file_line {" test ": path => '/ opt/monitor/README', line => 'Это дополнительный текст'}' (обратите внимание, что файл README не контролируется Puppet!) и ничего не происходит. Я также попытался указать его на файл, который * * контролируется моим модулем; без изменений. – Coderer

Смежные вопросы