Использование классов профилей для объявлений значительно снизит гибкость, поэтому я не вижу никаких конфликтов, с моей точки зрения, я думаю, что подразумевается то, что используют ресурсные объявления для передачи параметров, но используют include-подобные объявления для большей гибкости, особенно если вы хотите настроить программные стеки для нескольких серверов. Например, вот что я написал для наших агентов Zabbix для всех Linux серверов:
class profile::base::zabbix_agent {
package { 'zabbix_agent':
ensure => 'installed',
source => 'https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm',
provider => 'rpm'
}
}
Существуют и другие ресурсоподобные объявления, но я просто привел это в качестве примера. Затем у меня есть объявление в виде включения для моей конфигурации basi c linux, которое одинаково для всех наших Linux серверов в инфраструктуре:
class role::base::linux {
include profile::base::motd
include profile::base::linux_defaults
include profile::base::yum_config
include profile::base::yum_cron
include profile::base::clamav
include profile::base::chrony
include profile::base::crontab
include profile::base::snmp
include profile::base::zabbix_agent
include profile::base::firewall
include profile::base::repo_packages
include profile::app::puppet_agent
}
Теперь каждый из узлов можно использовать простую строку, чтобы иметь все основные конфигурации c в одном месте:
node 'dev-jenkins.mycompany.org' {
include role::base::linux
include profile::app::jenkins
}
Я написал декларацию, похожую на ресурс, для каждого из перечисленных классов, затем я создал роли и профили на их основе. Теперь, если я хочу обновить свои zabbix агенты, я просто редактирую класс profile::base::zabbix_agent
и меняю источник. Если я хочу удалить zabbix агентов с серверов, я просто изменяю ensure => 'installed'
из одного файла, и он будет зафиксирован на всех серверах. Как вы можете видеть, совместное использование описаний ресурсов и включений может сделать код очень гибким и легко изменяемым. Вы можете вносить глобальные изменения в инфраструктуру только с помощью редактирования нескольких строк. Надеюсь, что это ответило на ваш вопрос.