我正在尝试使用预安装的 docker 自动配置 VM。
我的默认 init.pp 看起来像:
class { 'apt':
always_apt_update => true,
}
package { [
#'build-essential',
#'vim',
#'curl',
#'zsh',
#'git-core',
#'htop',
#'wget',
#'linux-image-generic-lts-raring',
'python-software-properties'
#'lxc-docker'
]:
ensure => 'installed',
}
apt::ppa { 'ppa:dotcloud/lxc-docker':}
# refresh apt source
exec { "apt-update":
command => "/usr/bin/apt-get update && apt-get install lxc-docker --force-yes",
returns => 100
}
Run Code Online (Sandbox Code Playgroud)
最后一个 exec 命令返回(我认为返回 100 是成功的 apt-get 更新的默认值):
info: /Stage[main]//Apt::Ppa[ppa:dotcloud/lxc-docker]/Exec[add-apt-repository-ppa:dotcloud/lxc-docker]:Exec[apt_update]的调度刷新通知:/ Stage[main]/Apt::Update/Exec[apt_update]/returns: 执行成功通知:/Stage[main]/Apt::Update/Exec[apt_update]: 从 1 个事件触发 'refresh'
但是,当我 ssh 进入盒子时,docker 没有安装并运行,apt-get install lxc-docker
然后我可以安装它。我究竟做错了什么?我似乎无法让它与多种不同的配置一起工作。
daf*_*aff 13
apt-get
成功时返回 0,错误时返回 100,您可以从apt-get
手册页中轻松看到。所以你已经倒退了。您正在使用 组合两个命令&&
,这意味着第二个命令仅在第一个成功完成(返回 0)时运行。因此,如果apt-get update
要返回“100”,正如您错误地期望的那样,第二个命令甚至不会运行。
如果您仔细阅读日志消息,您会看到所应用的 Exec 资源名为“apt_update”而不是“apt-update”。前者在apt
类中定义并在apt::ppa
应用资源时运行。后者是您自己的 Exec 资源,它也会出现在日志输出中,但作为Exec[apt-update]
. 寻找那个。
在任何情况下,您在此处构建的内容都不起作用,因为您试图将 Puppet 用作美化的 Shell 脚本并且做错了。Puppet 会忽略您在清单中指定资源的顺序,而是以它认为合适的方式应用它们。因此,要确保lxc-docker
从指定的 PPA 安装包,您需要确保在包资源之前应用 PPA 资源。
有几种方法可以做到这一点,所有方法都涉及您指定关系或依赖关系。这是使用链接箭头的一种方法:
class { 'apt':
always_apt_update => true,
}
apt::ppa { 'ppa:dotcloud/lxc-docker':}
# Your regular packages don't know or care about the PPA
package { [
'build-essential',
'vim',
'curl',
'zsh',
'git-core',
'htop',
'wget',
'linux-image-generic-lts-raring',
'python-software-properties'
]:
ensure => 'installed',
}
# We single lxc-docker out to be able to specify
# the relationship to Apt::Ppa properly
package { 'lxc-docker':
ensure => 'installed'
}
Apt::Ppa['ppa:dotcloud/lxc-docker'] ->
Package['lxc-docker']
Run Code Online (Sandbox Code Playgroud)
这意味着lxc-docker
将在应用apt::ppa
PPA 资源“ppa:dotcloud/lxc-docker”后应用包资源。如前所述apt::ppa
,在添加 PPA 后,资源已经负责更新 APT 缓存,因此无需在apt-get update
任何地方显式调用。
归档时间: |
|
查看次数: |
7579 次 |
最近记录: |