Почему включение-подобное объявление обычно предпочтительнее, но профильные классы не должны использовать их для объявления классов компонентов? - PullRequest
0 голосов
/ 08 февраля 2020
  • Каковы причины этих разных рекомендаций в случае профилей, объявляющих классы компонентов?

Я специально спрашиваю об этом, потому что я видел некоторую кодовую базу, которая имеет тенденцию применять рекомендацию используя стиль включения, даже когда профили объявляют классы компонентов. Таким образом, создается впечатление, что они не следуют рекомендациям по ролям и профилям, но все еще придерживаются общих рекомендаций Puppet.

  • Кроме того, существуют ли другие подобные случаи, когда предпочтение должно быть отдано ресурсным объявлениям?

Основная страница документации для классов, по-видимому, настоятельно рекомендует использовать объявление, подобное включению, над объявлениями, подобными ресурсам, и заявляет, что следующие

Объявления включения, подобные самый распространенный; они гибкие и идемпотентные, поэтому вы можете безопасно повторять их, не вызывая ошибок. Подобные ресурсам объявления в основном полезны, если вы хотите передать параметры в класс, но не можете или не используете Hiera.

А также:

ВНИМАНИЕ: Не смешивайте включающие и подобные ресурсам объявления для данного класса. Если вы объявляете или присваиваете класс с использованием обоих стилей, это может привести к сбоям компиляции.

https://puppet.com/docs/puppet/latest/lang_classes.html#include -like-объявлений


На С другой стороны, документация по ролям и профилям явно поощряет использование подобных ресурсам объявлений. В разделе «Правила для классов профилей» указано следующее:

Профили владеют всеми параметрами классов для своих классов компонентов. Если в профиле он отсутствует, это означает, что вам определенно нужно значение по умолчанию; класс компонента не должен использовать значение из данных Hiera.

И примеры, которые следуют за приведенным выше утверждением, явно используют ресурсоподобный синтаксис.

https://puppet.com/docs/pe/2017.2/r_n_p_full_example.html#the -правили-для-профильные классы

1 Ответ

0 голосов
/ 08 февраля 2020

Использование классов профилей для объявлений значительно снизит гибкость, поэтому я не вижу никаких конфликтов, с моей точки зрения, я думаю, что подразумевается то, что используют ресурсные объявления для передачи параметров, но используют 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' из одного файла, и он будет зафиксирован на всех серверах. Как вы можете видеть, совместное использование описаний ресурсов и включений может сделать код очень гибким и легко изменяемым. Вы можете вносить глобальные изменения в инфраструктуру только с помощью редактирования нескольких строк. Надеюсь, что это ответило на ваш вопрос.

...