Gitlab Puppet在更改回购协议后不更新包

Gitlab Puppet在更改回购协议后不更新包,gitlab,puppet,rpm,yum,Gitlab,Puppet,Rpm,Yum,根据repos的变化,我们正在尝试更新所有节点的gitlab运行程序我们需要删除旧的回购协议,添加新的回购协议,然后更新包。 在我们的puppet manifest[1]上,我们更新了repo,确保包的最新版本,并且在更新之后,我们必须在确保服务运行之前运行脚本。 我们的问题是,我们应该只在更新后运行此脚本 现在,即使回购协议更新了,一揽子协议也没有更新。只有在运行distro_sync或运行“yum update gitlab runner”时,才更新包,而不是通过puppet运行。似乎该包从

根据repos的变化,我们正在尝试更新所有节点的gitlab运行程序我们需要删除旧的回购协议,添加新的回购协议,然后更新包。

在我们的puppet manifest[1]上,我们更新了repo,确保包的最新版本,并且在更新之后,我们必须在确保服务运行之前运行脚本。 我们的问题是,我们应该只在更新后运行此脚本

现在,即使回购协议更新了,一揽子协议也没有更新。只有在运行distro_sync或运行“yum update gitlab runner”时,才更新包,而不是通过puppet运行。似乎该包从未更新过,就好像它在检查旧回购协议的最新版本,而不是与最近添加的回购协议进行比较

[1]


出现此行为的原因是,puppet在对资源进行编目应用程序之前,正在预取包资源的存储库元数据。请注意有关的源代码,以了解yum和general provider的源代码的当前状态。请注意,链接代码的广泛功能并没有随着时间的推移而改变,因此尽管细微之处可能会改变,但总体行为已经/将不会改变

因此,在应用资源之前会确定包的
最新版本。因此,在您的情况下,目录编译时订阅的存储库将决定包的
最新版本。目录应用程序期间对存储库订阅的更改不会影响
sure=>latest
的行为

正如您可能猜到的,确保特定版本仍然具有所需的效果,因为它将使用新的存储库,并且不会发生与
最新版本相关的资源预取(其他预取仍然发生)。或者,连续的目录应用程序将对
sure=>latest
产生所需的效果。总而言之,您的解决方案选项如下:

  • 连续应用傀儡目录两次
  • 确保=>
    指定准确的版本或版本发布,例如
    10.0.5-el7

正如人们所期待的,Gary的博客文章是关于资源预取的另一个重要信息来源。向下滚动至以“预取、刷新、缓存和其他”开头的标题。请注意,Gary的博客通常都会使用“强势语言”。它的官方文档基本上是无用的。

这可能是因为
确保=>
通过资源预取进行评估,以便在应用目录之前处理最新版本的repo元数据。因此,回购订阅更改不会影响包资源的
sure=>latest
,因为它发生在预取后的应用过程中。虽然这是很可能的,但我不能肯定地说这是事实,所以我将此作为评论。@MattSchuchard这正是问题所在,指定一个版本确实有效。你知道有没有办法刷新元数据?无论如何,请随意给出这个解释作为回应。这不是一个很好的解决办法,但是如果它在一个连续的目录应用程序中将包更新为最新的,那么我的理论就更有可能是正确的。好的,没关系,我只是找到了源代码来验证我的理论。你能链接源代码吗?在任何情况下,是的,连续的puppet运行都能按预期工作,因此我认为这是一种解决方法,除非有某种方法强制刷新。两次应用puppet apply不会使包更新,只会确保版本更新(使用sl6)。我很困惑,@Djurez。在前面关于这个问题本身的评论中,您似乎说执行两次连续运行会导致执行包更新。然而,在这里,你似乎与先前的评论相矛盾。我非常希望,如果一次运行成功地更新了存储库配置,那么第二次运行将确保您的包“最新”,并应用任何适当的包更新。如果这实际上没有发生,那么你必须有一些更微妙的事情发生,可能在木偶本身之外。1-使用sure=>2-sure=>latest运行。这确保了任何更新。使用sure=>not运行两次,很抱歉造成误解。
# 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"]]
  }

}