【问题标题】:puppet apt-get update only once before anything else?puppet apt-get update 只更新一次?
【发布时间】:2013-07-15 09:07:06
【问题描述】:

我知道在 puppet 中订购以在特定包之前运行 apt-get update 的基础知识,但我想指定只运行一次 apt-get update 然后执行 puppet 文件的其余部分。那可能吗?

Here 列出的所有方式都需要在每个包之前运行 apt-get 或使用箭头或需要指定每个包。

【问题讨论】:

    标签: vagrant puppet apt-get


    【解决方案1】:

    这是我从该列表中的建议:

    exec { "apt-update":
        command => "/usr/bin/apt-get update"
    }
    
    Exec["apt-update"] -> Package <| |>
    

    这将确保 exec 在 any 包之前运行,而不是 exec 在 每个 包之前运行。事实上,puppet 中的任何资源只会每次 puppet 运行最多执行一次

    但是,如果您希望 exec 在任何类型的资源之前发生,我想您可以执行以下操作:

    exec { "apt-update":
        command => "/usr/bin/apt-get update",
        before  => Stage["main"],
    }
    

    “主”阶段是每个资源的默认阶段,因此这会使 exec 在其他任何事情之前发生。

    我希望这会有所帮助。

    【讨论】:

    • 谢谢 Sekm。我误解了它的工作原理,并认为如果有 5 个软件包,那么它将运行 apt-get update 5 次。感谢您解释它以及第二个选项,因为它可以在其他事情上派上用场。
    【解决方案2】:

    使用puppetlabs-apt 模块,为将要安装的任何包定义对模块的依赖项就足够了:

    Class['apt::update'] -> Package <| provider == 'apt' |>
    

    这里假设apt的基本配置,例如:

    class { 'apt':
        update => {
          frequency => 'daily',
        },
        purge => {
          'sources.list' => false,
          'sources.list.d' => true,
        },
      }
    

    【讨论】:

    • 这是更好的答案;它是 Puppet 文档中推荐的一种,它避免了手动指定要执行的命令。
    • 之后,当运行pdk test unit 我得到dependency cycles found: (Package[gnupg] =&gt; Class[Apt] =&gt; Package[gnupg]) 并且测试失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多