如何以正确的方式修复我的傀儡依赖?

时间:2016-06-07 05:21:06

标签: puppet

我有一个模块apt(我的自定义模块,我正在学习,想要探索更多)apt-get update。我还有两个用户定义的资源类型apt::keyapt::source

假设我想安装一个包示例docker,我们需要添加一个apt键和源代码。因此,我理想地希望按顺序执行执行

  1. 配置密钥,然后输入apt
  2. apt-get update
  3. 安装docker package
  4. 现在我想确保我的代码也位于正确的类下并遵循正确的依赖关系。我的目录结构类似于

    ├── apt
    │   └── manifests
    │       ├── init.pp
    │       ├── key.pp
    │       ├── packages.pp
    │       ├── source.pp
    │       └── update.pp
    └── docker
        └── manifests
            ├── init.pp
            ├── install.pp
    

    我应该在哪里定义docker的key和source以及如何实现依赖?我的依赖项应该在这些模块中还是在节点定义下的默认清单文件中?

    编辑:添加更多上下文 我很困惑,因为我可以通过两种选择实现这一目标:

    • 让docker :: install拥有apt :: source和apt :: key for docker。在这种情况下,我的apt :: source将通知apt :: update,并在apt-update之后安装docker包。虽然这种方法的问题是我必须在每个apt源更改后运行apt update。
    • 使用apt :: sources声明我的项目所需的所有源和键。这个问题是我的apt模块将与其他模块配合使用。

    因此,我希望看到人们如何实现这一点,还有其他我没有想到的替代方案。

1 个答案:

答案 0 :(得分:1)

  

让docker :: install拥有apt :: source和apt :: key for docker

我认为这是正确的方法,因为它包含/将所有资源整齐地封装到需要它们的模块(docker)中。

  

虽然这种方法的问题是我必须在每个apt源更改后运行apt update。

这是系统应该做的事情 - 如果来源发生变化,例如一个URL更改,您应该运行apt-get update重新加载包列表,因为它们可能已过期。我似乎不太可能经常改变消息来源。

如果您在目录中有多个apt源(即来自其他模块),那么Puppet代理在评估所有apt源资源之后仍然只刷新Exec[apt_update]一次(通知某些内容隐含{也有{1}}关系。)