Puppet устанавливает программное обеспечение, определенное в определении другого узла

Я использую Puppet Enterprise.

# puppet master --version
4.8.1

Манифесты реж (/etc/puppetlabs/code/environments/production/manifests) содержит следующее:

iis.pp
rds.pp
site.pp

У меня есть определение узла в site.pp как показано ниже:

# cat site.pp
node 'box A' {
    include iis
}

Теперь проблема, с которой я сталкиваюсь, заключается в том, что если я создаю новый узел (скажем, блок B) и добавляю его в site.pp, создав пустое определение, как показано ниже, он все равно устанавливает программное обеспечение, которое фактически является частью другого узла ('box А 'в данном случае) определение.

node 'box B' { }

У меня нет никаких include оператор в site.pp, определенный вне двух приведенных выше определений узлов.

Почему это происходит?

ОБНОВИТЬ:

# cat iis.pp
$iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']

windowsfeature { $iis_features:
  ensure => present,
}

1 ответ

Решение

Начиная с Puppet 4, все файлы в среде верхнего уровня manifests/ каталог будет автоматически загружен. Обычно это так, что вы можете определить различные определения узлов или классов и загрузить их все без использования import директива (используется в Puppet 2 и 3).

В твоем случае, iis.pp, rds.pp а также site.pp анализируются и используются на каждом узле. ( Каталоги: главный манифест (ы) имеет больше информации о том, как это настроено.)

Чтобы исправить это, используйте классы Puppet для группировки вашей конфигурации IIS (windowsfeature ресурсы) в iis класс - тогда ваш include iis будет использовать эту конфигурацию только на "коробке А".

Измените iis.pp, чтобы определить класс:

class iis {
  $iis_features = ['Web-Server','Web-WebServer','Web-Asp-Net45','Web-ISAPI-Ext','Web-ISAPI-Filter','NET-Framework-45-ASPNET']

  windowsfeature { $iis_features:
    ensure => present,
  }
}

В идеале, двигаться iis.pp в /etc/puppetlabs/code/environments/production/modules/iis/manifests/init.pp находиться в стандартном месте расположения модуля. Это обеспечивает лучшую производительность, так как Puppet не нужно читать iis.pp, пока вы не используете include iis,

Другие вопросы по тегам