更改存储库后,Puppet不会更新软件包

时间:2018-10-10 13:10:13

标签: gitlab puppet rpm yum

根据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 :(得分:2)

出现此现象的原因是因为puppet在资源的目录应用之前预取了包资源的存储库元数据。请注意yum源代码here和常规提供者here的当前状态的相关源代码。请注意,链接代码的广泛功能并未随时间而改变,因此,尽管细微之处可能会发生变化,但总体行为仍会/不会。

由于这个原因,在应用资源之前确定软件包的latest版本。因此,根据您的情况,在目录编译时您所预订的存储库将确定软件包的latest版本。在目录应用期间您的存储库订阅更改不会影响ensure => latest的行为。

您可能会猜到,确保特定版本仍将具有预期的效果,因为它将利用新的存储库,并且不会发生与latest有关的资源预取(仍然会进行其他预取)。或者,连续的目录应用程序将对ensure => latest具有所需的效果。总结一下,您的解决方法如下:

  • 连续两次应用Puppet目录。
  • ensure => <version>,您可以在其中指定确切的版本或版本发布,例如10.0.5-el7

正如人们所期望的,关于资源预取的大量其他信息来源是Gary的博客文章here。向下滚动到以“预取,刷新,缓存和其他”开头的标题。请注意有关Gary的博客具有“强语言”的常规注意事项。对此的官方文档基本上是没有用的。