Подписаться на пакеты в кукольный - PullRequest
0 голосов
/ 14 ноября 2018

Считайте, что у меня есть профиль, который устанавливает пакет.После установки запускаются некоторые команды exec.Но эти команды нужно запускать только один раз при первой установке пакета.

  package { 'package1':
    ensure => 'present'
  }

  exec { 'signal_package_conf':
        command     => 'systemctl restart package.service',
        path        => '/sbin:/bin:/usr/sbin:/usr/bin',
        refreshonly => true,
        subscribe   => Package['package1'],
      }

Но предположим, что этот конкретный пакет устанавливается как зависимость для другого пакета в другом профиле.

Когда puppet попадает на ресурс package1, он будетобнаружите, что пакет уже установлен и не будет устанавливать его снова.Поскольку puppet не будет знать об этой неявной зависимости от пакета, будет ли работать подписка на пакет и будет ли выполняться команда в ресурсе exec?

1 Ответ

0 голосов
/ 14 ноября 2018

Этот ответ состоит из двух частей, чтобы рассмотреть две возможные интерпретации вашего запроса об отношениях обновления в целом.

Обновление событий и упорядочение из других классов

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

Вопрос

Предположим, что ресурс Exec Y подписывает с refreshonly => true на ресурс X в классе A. Затем предположим, чторесурс Z требует того же ресурса X в классе B.

Другими словами, представьте себе этот код:

class b () {
  notify { 'Z':
    require => Notify['X'],
  }
}

class a () {
  notify { 'X': }
  exec { 'Y':
    command     => '/bin/echo Y',
    refreshonly => true,
    subscribe   => Notify['X'],
  }
}

include a
include b

Возможно ли, чтобы окончательный порядок был X, Z, Y, и если да, то событие refresh обязательно достигнет ресурса Exec Y, учитывая, что X и Y могут быть разделены Z по времени?

Ответ

Да и да.Напомним, что Puppet строит ориентированный ациклический граф и вычисляет окончательный порядок из обхода этого графа.Этот код приводит к двум возможным порядкам во времени: X, Y, Z и X, Z, Y (попробуйте несколько раз, используя puppet apply /tmp/code.pp --ordering=random).

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

Что если пакет A установлен как зависимость пакета B менеджером пакетов за пределами Puppet

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

Если да, то событие обновления не будет отправлено, если менеджер пакетов (или что-либо еще, кроме Puppet) выполнит подписку.

...