Как лучше всего добавить в Puppet фрагмент текста в файл / etc / hosts?

8

Также хотелось бы сохранить возможность вручную редактировать 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, так как они будут перезаписаны шаблоном.

Ujjain
источник

Ответы:

14

Честно говоря, использование hostресурса - самый простой способ сделать это. Вам нужно только определить хосты, которыми вы хотите управлять с помощью puppet, и вы все равно можете редактировать оставшуюся часть файла вручную (даже если Puppet вставляет в этот заголовок, который говорит вам не делать этого).

augeasМодуль является излишеством для файла хостов, потому что он просто дублирует функциональность 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';
}
asciiphil
источник
Этот ответ немного лучше моего :-)
Cian
1

Используйте функциональность augeaus, встроенную в куклу. Вы хотите что-то вроде

augeas {
  context => "files/etc/hosts"
  changes => [
    "set <ip address> <name>",
  ],
}
Киан
источник
0

Один из случаев, когда вы можете использовать augeas для файла / etc / hosts, в дополнение к типам ресурсов hosts, - это дублирование строк IP-адресов.

Тип ресурса hosts вполне устраивает линии с одинаковыми IP-адресами. (Google это; где чрезвычайно мало случаев, когда это может быть хорошей идеей.)

Но если вы не хотите дублировать IP-адреса в вашем файле / etc / hosts - тогда augeas может вам помочь. хосты не помогают для этого.

колос
источник
-1

Просто метод, без кода:

Используйте шаблонизацию или что-то еще, что обновляет файл /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из обоих файлов каждый раз, когда один из них изменяется.

Свен
источник