Puppet Augeas с /etc/hosts
Я довольно новичок в Augeas, но мне сказали, что это инструмент для изменения конфигурации с помощью Puppet.
Я пытаюсь создать простой класс, который добавляет строку в / etc / hosts, если он еще не существует.
augeas { "test_config":
context => "/files/etc/hosts/01/",
changes => [
"set ipaddr 192.168.100.3",
"set canonical test.localdomain",
"set alias[1] test",
],
Это создает линию я после.
Файл hosts выглядит следующим образом
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.3 test.localhost test
192.168.0.4 badger.oam.eeint.co.uk badger
Поскольку я не хочу дубликатов, я создал строку соответствия в augtool, чтобы получить соответствие.
augtool> match /files/etc/hosts/3/alias /files/etc/hosts/3/alias = test
Мой текущий конфиг кажется в лучшем случае непредсказуемым
augeas { "test_config":
context => "/files/etc/hosts/*/",
changes => [
"set ipaddr 192.168.100.3",
"set canonical test.localdomain",
"set alias[1] test",
],
onlyif => "match alias 'test'",
}
Кто-нибудь может помочь подтолкнуть меня в правильном направлении на этом?
2 ответа
Для управления записями хоста вы должны использовать host
тип ресурса.
Этот тип поставляется по умолчанию с Puppet, но вы также можете использовать его с Augeas (что я бы порекомендовал) с помощью модуля http://augeasproviders.com/ (и, в частности, модуля augeasproviders-base).
Почему бы не использовать exec
ресурс?
exec{'serverfault demo':
command => 'echo 192.168.100.3 test.localdomain >> /etc/hosts',
unless => 'grep test.localdomain /etc/hosts',
path => ['/bin','/usr/bin'],
}
Это запустит echo
команда и добавить эту строку, только если строка 192.168.100.3 test.localdomain
не существует в /etc/hosts.