Назад | Перейти на главную страницу

марионетка дублирующих ресурсов и виртуальных ресурсов

Обзор

Я только начал использовать Puppet и ничего не мог понять.

Проблема

Из-за нормализации, когда я добавляю два класса к узлу с пакетами, имеющими одинаковые зависимости, происходит сбой.

Проще говоря, у вас есть дублирующиеся ресурсы - в данном случае пакет libssl.

Примечание: пакеты удерживаются, чтобы предотвратить установку последних пакетов.

Вопрос

Как лучше всего обойти это?

class ssh {
  package { 'openssh-server':
    ensure  => installed,
    require => Package['libssl'],
  }
  package { 'libssl': ensure => installed, }
}

class apache {
  package { 'apache':
    ensure   => installed,
    require  => Package['libssl'], 
  }        
  package { 'libssl': ensure => installed, }
}

node server {
  include apache
  include openssl-server

У вас есть два варианта, которые будут выглядеть почти одинаково.

1: сделайте это своим классом.

class ssh {
  package { 'openssh-server':
    ensure => present,
    require => Class['ssl'],
  }
}
class ssl {
  package { 'libssl': ensure => present, }
}

2: виртуальный ресурс

class vpackages {
  @package { 'libssl': }
}
class ssh {
  include vpackages
  package { 'openssh-server':
    ensure => present,
    require => Package['libssl'],
  }
  realize Package['libssl']
}

Я считаю, что лучше разбить зависимости на их собственные модули, чем использовать виртуальные ресурсы.

Если вы используете стандартное управление пакетами для управления пакетами, установленными через Puppet, вы можете не включать libssl зависимости пакетов в Puppet, поскольку это будет обрабатываться автоматически через систему управления пакетами в большинстве систем.

В Debian / Ubuntu, а также в системах RedHat / CentOS / SuSE инструменты управления пакетами будут искать зависимости, и, если вы не изо всех сил стараетесь остановить поведение по умолчанию, дополнительные зависимые пакеты будут включены, когда Puppet скажет системе об установке пакет (в вашем случае просто openssh-server или apache)

Это немного уродливо, но есть функция defined (), которая возвращает истину / ложь. Таким образом, вы можете определять ресурсы несколько раз, но «осознавать» их только при первой оценке. (используйте этапы марионеточного запуска!)

например.,

if defined(Package['libssl']) == false {
  package { 'libssl':
    ensure => installed, 
  }
}