Создание файла с Puppet с фактами с нескольких хостов

Создание файла с Puppet с фактами с нескольких хостов

Я пытаюсь заставить puppet создать файл конфигурации, который выглядит следующим образом:

[All]
Hosts=apt-dater@puppetmaster;apt-dater@blaster; (etc...)

По сути, этот файл нуждается в записи для каждого узла, включающего класс apt-dater. Я экспериментировал с экспортированными ресурсами, но не могу найти чистый способ собрать их вместе. Как мне создать этот файл?

решение1

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

Augeas — очень умный инструмент, но он может оказаться сложным, если вам придется начать писать и распространять собственные линзы. Однако puppet-concatего очень легко понять. Я не проверял синтаксис следующего, но он должен направить вас на правильный путь:

# apt-dater/manifests/server.pp
class apt-dater::server {
    file { "/somepath/apt-dater/hosts.conf": }
    concat::fragment{ "apt-dater_hosts_header":
        content => "[All]\nHosts=",
        order   => 1,
    }
    Apt-dater::Client <<| |>>
}

# apt-dater/manifests/defines/register.pp
define apt-dater::register($order=10) {
    concat::fragment{ "apt-dater_hosts_$name":
        target  => "/somepath/apt-dater/hosts.conf",
        content => "apt-dater@${name};",
    }
}

# apt-dater/manifests/client.pp
class apt-dater::client {
    @apt-dater::register{ "$hostname": }
}

Затем настройте узлы:

# On the central server.
include apt-dater::server

# On each of the client nodes.
include apt-dater::client

Связанный контент