Назад | Перейти на главную страницу

Итерация ресурсов в шаблоне марионетки

Я пытаюсь управлять своим /etc/hosts файл с марионеткой, но мне не нравится внутренний тип host, я бы хотел по возможности использовать свой собственный шаблон.

Поэтому я определил ресурс «хост»:

    # Basic hosts configuration
    class hosts {

    # Host resource
    define host (
        $address,
        $names
    ) {

    }

    Network::Hosts::Host {
        before   => File['/etc/hosts']
    }

    # Configure hosts file
    file {
        "/etc/hosts":
        ensure   => present,
        checksum => md5,
        owner    => root,
        group    => root,
        mode     => 0644,
        content  => template("network/hosts.erb"),
    }

В других местах я определяю ресурсы хоста:

network::hosts::host { 'puppet.test.lan':
    address => '192.168.56.101',
    names => 'puppet',
}

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

Как я могу перебрать все определенные мной хосты и включить их из шаблона?

Вы можете использовать R.I.Pienaar's марионетка модуль, в котором вы создаете один файл из множества небольших файлов или шаблонов.

Тогда определение будет выглядеть примерно так:

define host($address, $names) {
  concat::fragment{"hosts-$address":
    target  => "/etc/hosts",
    content => template("network/hosts_single.erb")
  }
}

В hosts_single.erb шаблон будет представлять одну строку в файле. Вы, вероятно, также добавите фрагмент для заголовка и установите order => "01" чтобы убедиться, что он находится в верхней части сгенерированного файла (по умолчанию 10).

Я бы посмотрел на библиотека Авгия для управления записями в вашем /etc/hosts файл. Это предварительное условие для Puppet, поэтому он уже установлен. Возможно, вам потребуется загрузить дополнительный пакет augeas, чтобы получить доступ к augtool утилита командной строки. Это полезно для тестирования перед интеграцией Puppet.

Пример записи файла hosts, приведенный на главном сайте: http://augeas.net/tour.html

или

http://honglus.blogspot.com/2012/01/augeas-quick-start.html

Я полагаю, вы также можете распространить стандартный файл hosts и просто изменить строку, которая должна быть уникальной для каждого хоста ...