Как лучше всего добавить в Puppet фрагмент текста в файл /etc/hosts?
Также хотелось бы сохранить возможность вручную редактировать hosts-файл, хотя бы первые 10 строк.
#Public IP's - eth0
192.168.1.103 front-01
192.168.1.106 front-02
#Private IP's - eth1
192.169.40.201 priv0-0
192.169.40.202 priv0-1
192.169.40.207 priv1-0
192.169.40.208 priv1-1
#Virtual IP's - eth0:1
192.169.50.202 vip-01
192.169.50.205 vip-02
Иметь эти записи хостов внизу /etc/hosts, было бы идеально. Каков наилучший способ сделать это? Есть ли лучший способ, чем написание 8 хост-строк манифеста?
# create a simple hostname and ip host entry
host { 'front-01':
ip => '192.168.1.103',
}
Могут быть группы серверов, которым требуются разные IP-адреса / имена хостов в их /etc/hosts. Я бы использовал шаблон, но это означает, что люди больше не могут вносить ручные изменения в свои /etc/hosts, так как они будут перезаписаны шаблоном.
4 ответа
Честно говоря, используя host
ресурс это самый простой способ сделать это. Вам нужно только определить хосты, которыми вы хотите управлять с помощью puppet, и вы все равно можете редактировать оставшуюся часть файла вручную (даже если Puppet вставляет в этот заголовок, который говорит вам не делать этого).
augeas
модуль избыточен для файла hosts, потому что он просто дублирует функциональность host
ресурс (хотя он не добавляет в заголовок "не редактировать этот файл").
Если вы действительно хотите что-то более сложное или хотите точно контролировать размещение строк в файле, используйте модуль concat с локальным источником для одного из фрагментов. Вот пример для такого рода вещи (используя файл MOTD) в concat
документация.
Но на самом деле, просто используйте host
ресурс для хостов, которые вы хотите определить из Puppet, и отредактируйте локальные файлы хостов для всего, что вам нужно.
Также обратите внимание, что вы можете довольно компактно написать определения хоста в Puppet:
host {
# Public IPs - eth0
'front-01': ip => '192.168.1.103';
'front-02': ip => '192.168.1.106';
# Private IPs - eth1
'priv0-0': ip => '192.169.40.201';
'priv0-1': ip => '192.169.40.202';
'priv1-0': ip => '192.169.40.207';
'priv1-1': ip => '192.169.40.208';
# Virtual IPs - eth0:1
'vip-01': ip => '192.169.50.202';
'vip-02': ip => '192.169.50.205';
}
Используйте функциональность augeaus, встроенную в куклу. Вы хотите что-то вроде
augeas {
context => "files/etc/hosts"
changes => [
"set <ip address> <name>",
],
}
Один из случаев, когда вы можете использовать augeas для файла / etc / hosts, в дополнение к типам ресурсов hosts, - это дублирование строк IP-адресов.
Тип ресурса hosts довольно удачно разрешает линии с одинаковыми IP-адресами. (Google это; где чрезвычайно мало случаев, когда это может быть хорошей идеей.)
Но если вы не хотите дублировать IP-адреса в вашем файле / etc / hosts - тогда augeas может вам помочь. хосты не помогают для этого.
Просто метод, без кода:
Используйте шаблоны или что-то, что обновляет файл /etc/hosts.puppet
с четкими начальными и конечными линиями
###PUPPETSTART###
## Users: Lines between START and END will be deleted, put your own entries below
192.168.0.1 host1
###PUPPETEND###
и иметь сценарий оболочки как зависимость, которая вырезает этот сегмент из /etc/hosts
и заменяет его содержимым /etc/hosts.puppet
,
Имейте в виду, что в этом случае возникает состояние гонки, когда пользователи редактируют файл, а марионеточный прогон меняет его. Кроме того, попросите своих пользователей отредактировать файл /etc/hosts.user
и построить /etc/hosts
из обоих файлов, когда один из них меняется.