Puppet: переопределить объявление класса ресурса - PullRequest
0 голосов
/ 25 апреля 2020

Надеясь, что кто-то с большим опытом работы с марионетками, чем я, может дать мне несколько советов по поводу конфигурации, которую я пытаюсь.

Я использую saz / s sh в качестве модуля для this.

Моя цель

  1. Используйте этот модуль для создания конфигурации s sh по умолчанию, которая будет отправлена ​​на все серверы redhat 7/8.
  2. Разрешить переопределение отдельных опций s sh, для каждого отдельного сервера, через hiera

для достижения # 1 я создал свой собственный модуль, который объявляет класс s sh :: server и определяет мои варианты. Я считаю, что это называется ресурсным объявлением класса. (Сокращенный код для удобства чтения)

#
class profiles::sshd::config {
  class { 'ssh::server':
    validate_sshd_file   => true,
    storeconfigs_enabled => false,
    options              => {
      'Port'                      => [22],
      'AddressFamily'             => 'any',
      'ListenAddress'             => '0.0.0.0',
      'Protocol'                  =>  '2',
      'HostKey'                   => ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key','/etc/ssh/ssh_host_ed25519_key'],
      'RekeyLimit'                =>  'default none',
      'SyslogFacility'            => 'AUTHPRIV',
      'LogLevel'                  => 'INFO',
    }
  }
}

Затем я включаю этот «модуль» в свою базу. Это работает хорошо, пока я не хочу переопределить любую из этих опций для отдельного сервера. Я не могу заставить hiera работать.

объявление

ssh::server::options:
    Port: [2222]

в файле fqdn yaml сервера, например, ничего не делает. Если я включаю модуль s sh :: server напрямую, а не через свой собственный класс, переопределения hiera будут работать.

Я перепробовал все виды синтаксиса для переопределений hiera, но никогда не получал вывод Кукольный забег, если я не использую класс напрямую. Например, я пытался:

ssh::server:options:
profiles::sshd::config:
profiles::sshd::config::ssh::server:
profiles::sshd::config::options:
profiles::sshd::config::ssh::server::options:

Есть ли лучший способ, которым я могу делать то, что я хочу, или кто-нибудь может предложить помощь в том, как я могу объявить переопределения hiera таким способом?

Любая помощь будет невероятно полезной

1 Ответ

0 голосов
/ 25 апреля 2020

для достижения # 1 Я создал свой собственный «модуль»

... и в нем класс с именем profile::sshd::config ...

, который объявляет класс s sh :: server и определяет мои параметры. Я считаю, что это называется объявлением ресурса как класс.

Да, вы написали объявление ресурса как класс. Обычно это плохая идея. Есть несколько причин, но среди них есть ...

[когда] я хочу переопределить любую из этих опций для отдельного сервера [,] я не могу заставить hiera работать.

Значения параметров класса, заданные посредством ресурсного объявления класса, имеют приоритет над значениями, указанными любым другим доступным способом, включая данные Hiera. Вы не можете переопределить их.

У вас есть две основные альтернативы:

  1. Дайте вашему классу-обертке свой собственный параметр для каждого из параметров упакованного класса, который вы хотите иметь в состоянии настроить. Используйте их для инициализации обернутого класса:

    class profiles::sshd::config(
        Boolean $validate_sshd_file = true,
        Boolean $storeconfigs_enabled = false,
        Hash $options = { ... },
    ) {
      class { 'ssh::server':
        validate_sshd_file   => $validate_sshd_file,
        storeconfigs_enabled => $storeconfigs_enabled,
        options              => $options,
      }
    }
    

    Предполагая, что затем вы объявляете класс profiles::sshd::config с помощью объявления, подобного include , вы можете настроить его параметры через Hiera. Но обратите внимание, что

  2. Если вы перейдете к объявлению типа * 1034, подобному включаемому, то вы можете определить параметры по умолчанию для него через Hiera и настроить его параметры через Hiera.

Существует и средняя дорога: учитывая объявление, подобное ресурсу ssh::server, вы можете использовать Hiera для настройки любых параметров, отличных от указанных в его декларация. Таким образом, если есть параметры, которые вы хотите избежать, чтобы быть доступными для настройки, то вы могли бы рассмотреть возможность объявления их (только) явно через ресурсное объявление класса, а в остальном полагаться на Hiera. Однако обратите внимание, что это все еще оставляет вас открытыми для некоторых других проблем, связанных с объявлениями классов, подобных ресурсам (это будет отдельный вопрос).

...