Для марионеточных экспертов я пытаюсь изменить свой node.pp
на базе фактерской сети.
Например, я хотел бы иметь подсети с 10.10.10.0 по 10.10.10.255 и 192.168.2.0 для получения следующих марионеточных модулей.
В моем nodes.pp
это регулярное выражение работает?
node \d(10).(10).[0-10].[0-255] | \d (192).(168).(2).[0] $ {
include "ntp"
include "dhcp"
include "common"
}
node default {
include "common"
}
^ будет работать выше? Спасибо
Это не будет работать, как показано. Во-первых, регулярное выражение не годится, но и сопоставители узлов основаны на certname
, которое является полным доменным именем хоста. Это не значит, что вы не можете этого сделать, но для этого потребуется дополнительная работа и вам потребуется войти в область неподдерживаемой конфигурации. Так что, по сути, вы сами по себе. Вот что говорится в документации Puppet:
Операторы узлов соответствуют узлам по имени. Имя узла - это его уникальный идентификатор; по умолчанию это его
certname
, которая, в свою очередь, по умолчанию соответствует полному доменному имени узла.Примечание об именах узлов без сертификата
Хотя можно установить что-нибудь кроме
certname
в качестве имени узла (используя либо node_name_fact или node_name_value настройки), мы обычно не рекомендуем это делать. Он позволяет повторно использовать сертификат одного узла для многих узлов, но снижает безопасность, затрудняет надежную идентификацию узлов и может мешать работе других функций.Установка имени узла без сертификата официально не поддерживается в Puppet Enterprise.
Версия Puppet не указана, поэтому мой ответ основан на последней версии (5.3) на момент написания.
Вместо этого почему бы вам не использовать определение узла по умолчанию и не объединить его с логикой на основе значения $::network
?
node default {
case $::network {
/^(10\.10\.[0-10]\.[0-255]|192\.168\.2\.0)$/ : {
include ntp
include dhcp
include common
}
default: { include common }
}
}
Это было проверено путем изменения включений на уведомления и изменения сети на $ var и тестирования различных значений.
[aaron@localhost ~]$ cat network.pp
#$var='10.10.1.5'
$var='192.168.2.1'
case $var {
/^(10\.10\.[0-10]\.[0-255]|192\.168\.2\.0)$/ : {
notice('match')
}
default: { notice('default') }
}
[aaron@localhost ~]$ puppet apply network.pp
Notice: Scope(Class[main]): default
Notice: Compiled catalog for localhost.local in environment production
in 0.21 seconds
Notice: Applied catalog in 0.01 seconds
Я включил это, чтобы вы получили хорошее представление о том, как быстро увидеть, должно ли что-то работать, не затрачивая усилий на развертывание этого на вашем Puppetmaster и тестирование на различных хостах.