У меня 3 узла CentOS. У каждого из них 2 IP-адреса: 10.0.1. * (Eth0) и 192.168.1. * (Eth1). На всех них установлена марионетка, и есть главный марионеточный сервер для управления конфигурацией на этих серверах. Все серверы взаимодействуют с марионеточным сервером, используя IP-адреса 10.0.1. *.
Мне нужно изменить IP-адрес eth1 на этих серверах. Могу ли я иметь общий файл конфигурации, который можно использовать для изменения IP-адреса на 3 серверах, или мне следует иметь 3 разных файла конфигурации для 3 серверов?
Прежде чем писать собственный код, взгляните на https://forge.puppetlabs.com. Потому что обычно есть модуль, который полностью покрывает все ваши потребности.
В вашем случае, если я правильно понимаю вашу задачу, это https://forge.puppetlabs.com/example42/network
Если вы все еще хотите сделать это вручную, вам следует либо использовать простую подстановку шаблона, как уже упоминалось, либо augeas
что я считаю лучшей идеей.
Например, чтобы настроить vmbr0
интерфейс вам нужно добавить что-то вроде этого для Debian:
augeas{ "vmbr0_interface" :
context => "/files/etc/network/interfaces",
changes => [
"set auto[child::1 = 'vmbr0']/1 vmbr0",
"set iface[. = 'vmbr0'] vmbr0",
"set iface[. = 'vmbr0']/family inet",
"set iface[. = 'vmbr0']/method static",
"set iface[. = 'vmbr0']/address 192.168.11.1",
"set iface[. = 'vmbr0']/netmask 255.255.255.0",
"set iface[. = 'vmbr0']/bridge_ports none",
"set iface[. = 'vmbr0']/bridge_stp off",
"set iface[. = 'vmbr0']/bridge_fd 0"
]
}
А для CentOS:
augeas { "eth1":
context => "/files/etc/sysconfig/network-scripts/ifcfg-eth1",
changes => [
"set DEVICE eth1",
"set BOOTPROTO none",
"set ONBOOT yes",
"set NETMASK 255.255.255.0",
"set IPADDR 10.12.0.10",
],
}
Также перейдите по этой ссылке http://projects.puppetlabs.com/projects/1/wiki/Network_Interface_Templates_Patterns. У него есть хорошие мысли о конфигурации сети.