Puppet не обновляет пакет после смены репо - PullRequest
0 голосов
/ 10 октября 2018

Согласно https://docs.gitlab.com/runner/install/linux-repository.html#upgrading-to-gitlab-runner-10 репозитории изменились, поэтому мы пытаемся обновить gitlab-runner всех узлов. Нам нужно удалить старое репо и добавить новое, а затем обновить пакет.

В нашем манифесте марионеток [1] ​​мы обновляем репо, гарантируем, что последняя версия пакета ипосле этого обновления мы должны запустить скрипт, чтобы убедиться, что служба запущена.Наша проблема в том, что мы должны запускать этот скрипт только после обновления.

Прямо сейчас, даже если репозиторий обновлен, пакет не обновляется.Пакет обновляется только в том случае, если distro_sync запускается или мы запускаем « yum update gitlab-runner », но никогда не выполняем кукольный запуск.Кажется, что пакет никогда не обновляется, как если бы он проверял последнюю версию старого репозитория, а не сравнивал его с недавно добавленным репо.

[1]

# Installs a GitLab-CI runner for CERN GitLab
class gitlab::gitlab_ci_runner (
  String $ensure = 'latest', # passed to the gitlab-runner package. Can be used to force a version
) {
  ensure_resource('yumrepo', 'gitlab-runner', {
      descr    => 'gitlab-runner for EL6/7',
      baseurl  => "http://packages.gitlab.com/runner/gitlab-runner/el/${::operatingsystemmajorrelease}/${::architecture}",
      gpgcheck => 0,
      enabled  => 1,
      exclude  => absent,
  })

  ensure_packages(['gitlab-runner'], {
    ensure  => $ensure,
    require => Yumrepo['gitlab-runner'],
  })

  exec {"post-install":
    command => 'sudo /usr/share/gitlab-runner/post-install',
    provider => shell,
    onlyif  => 'test -e /usr/share/gitlab-runner/post-install',
    refreshonly => true,
    subscribe => Package['gitlab-runner'],
  }

  service { 'gitlab-runner':
    ensure  => running,
    enable  => true,
    require => [Package['gitlab-runner'], Exec["post-install"]]
  }

}

1 Ответ

0 голосов
/ 10 октября 2018

Причина, по которой вы испытываете это поведение, заключается в том, что puppet выполняет предварительную выборку метаданных репозитория для ресурса пакета до применения ресурсов в каталоге.Обратите внимание на соответствующий исходный код для текущего состояния исходного кода здесь для yum и здесь для общего провайдера.Обратите внимание, что широкие функциональные возможности связанного кода не менялись с течением времени, поэтому, хотя тонкости могут измениться, общее поведение изменилось / не будет.

В связи с этим, определение версии latestПакет происходит до применения ресурса.Поэтому в вашей ситуации репозитории, на которые вы подписаны при компиляции каталога, будут определять версию пакета latest.Изменение подписки на репозиторий во время применения каталога не повлияет на поведение ensure => latest.

Как вы, вероятно, можете догадаться, обеспечение определенной версии будет по-прежнему иметь желаемый эффект, так как будет использовать новый репозиторий и не будет выполнять предварительную выборку ресурсов.относительно latest происходит (другие предварительные выборки все еще происходят).Кроме того, последовательное применение каталога будет иметь желаемый эффект для ensure => latest.Подводя итог, вы можете выбрать следующие варианты обхода:

  • Дважды подряд примените каталог Puppet.
  • ensure => <version>, где вы указываете точную версию или выпуск версии, например 10.0.5-el7.

Как и следовало ожидать, отличным дополнительным источником информации о предварительной выборке ресурсов является статья в блоге Гэри здесь .Прокрутите вниз до заголовка, который начинается с «Предварительная выборка, очистка, кэширование и прочее».Обратите внимание на обычную осторожность в блоге Гэри с «сильным языком».Официальная документация для него по сути бесполезна.

...