2017-01-23 7 views
1

Я использую 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, создавая пустое определение, как показано ниже, оно еще устанавливает программное обеспечение, которое на самом деле является частью другого узла (в данном случае поле «A»).

node 'box B' { } 

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

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

UPDATE:

# 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, 
} 
+0

Что конкретно находится в 'iis.pp'? –

+1

Puppet вполне может использовать все в '/ etc/puppetlabs/code/environment/production/manifestests' или первый манифест там, в качестве манифеста по умолчанию. В любом случае, очень необычно иметь что-то другое, кроме 'site.pp'. Выдвиньте остальные манифесты и посмотрите, устраняет ли это проблему. –

+0

@ DominicCleal: Обновлено сообщение с содержанием iis.pp – Technext

ответ

2

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

В вашем случае анализируются и используются на каждом узле iis.pp, rds.pp10 и site.pp. (Directories: The main manifest(s) имеет еще некоторую информацию о том, как это установлено.)

Чтобы исправить это, используйте Puppet classes в группе конфигурации 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.

+0

По совпадению, я также просматривал аналогичную ссылку (после прочтения комментария Мэтта), о которой вы говорили выше, хотя мой был для [старше] (https://docs.puppet.com/puppet/3.8/dirs_manifest.html) выпуск. :) Спасибо за последний вопрос, связанный с производительностью. В случае нескольких файлов эффект может быть значительным. Сохраняя производительность в сторону, когда вы упомянули «Обычно это так, что вы можете определить разные определения узлов или классы ...», рекомендуется ли это? – Technext

+1

@Technext не совсем. Классы должны быть в модулях вместо манифеста, проще организовать и размещать связанные элементы (шаблоны, файлы, функции, FACT-плагины и т. Д.) Вместе с ними в том же модуле. Определения узлов должны быть там, если вы их используете, но я бы предложил использовать Hiera (например, hiera_include), поэтому существует только определение узла по умолчанию. –