【发布时间】:2013-07-15 09:07:06
【问题描述】:
我知道在 puppet 中订购以在特定包之前运行 apt-get update 的基础知识,但我想指定只运行一次 apt-get update 然后执行 puppet 文件的其余部分。那可能吗?
Here 列出的所有方式都需要在每个包之前运行 apt-get 或使用箭头或需要指定每个包。
【问题讨论】:
我知道在 puppet 中订购以在特定包之前运行 apt-get update 的基础知识,但我想指定只运行一次 apt-get update 然后执行 puppet 文件的其余部分。那可能吗?
Here 列出的所有方式都需要在每个包之前运行 apt-get 或使用箭头或需要指定每个包。
【问题讨论】:
这是我从该列表中的建议:
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 在其他任何事情之前发生。
我希望这会有所帮助。
【讨论】:
使用puppetlabs-apt 模块,为将要安装的任何包定义对模块的依赖项就足够了:
Class['apt::update'] -> Package <| provider == 'apt' |>
这里假设apt的基本配置,例如:
class { 'apt':
update => {
frequency => 'daily',
},
purge => {
'sources.list' => false,
'sources.list.d' => true,
},
}
【讨论】:
pdk test unit 我得到dependency cycles found: (Package[gnupg] => Class[Apt] => Package[gnupg]) 并且测试失败