我正在尝试自动为‘m提供预装的对接器。
我的默认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
}最后一个exec命令返回(对于我认为成功的apt更新,返回100是默认的):
信息: /Stagemain//Apt::Ppappa:dotcloud/lxc-码头/Execapt存储库-ppa:dotcloud/lxc-docker:调度刷新Execapt_更新通知: /Stagemain/Apt::Update/Execapt_更新/returns:成功执行通知: /Stagemain/Apt::Update/Execapt_更新:从1个事件触发‘刷新’
但是,当我没有安装ssh到box并运行apt-get install lxc-docker时,我可以安装它。我做错了什么?我似乎无法让它与多种不同的配置一起工作。
发布于 2013-07-29 00:37:06
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脚本,并且做错了它。傀儡忽略了您在清单中指定资源的顺序,而是以它认为合适的方式应用它们。因此,要确保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']这意味着lxc-docker包资源将在PPA的apt::ppa资源“ppa:dotcloud/lxc”应用之后应用。如前所述,apt::ppa资源已经负责在添加PPA之后更新APT缓存,因此不需要在任何地方显式调用apt-get update。
发布于 2014-08-19 19:22:18
下面是使用require的另一种惯用答案:
class { 'apt':
always_apt_update => true,
}
apt::ppa { 'ppa:dotcloud/lxc-docker':}
package { [others]: }
package { 'lxc-docker':
ensure => 'installed',
require => Apt::Ppa['ppa:dotcloud/lxc-docker']
}https://serverfault.com/questions/526919
复制相似问题