我试图使用Vagrant和Puppet提供我的开发服务器。下面是我的一些傀儡宣言在这一点上。im所具有的问题是im在依赖循环中结束,这当然是正确的。唯一的问题是,我没有办法做到这一点,所以我需要一些帮助。
我使用的是由名为puppetlabs/ubuntu-14.04-64-puppet的Puppetlabs提供的最新版本的盒子。在将PPA添加到包管理器时,我会收到一个apt-add-repository不可用的错误。为此,您需要安装software-properties-common包。
唯一的问题是,在安装此软件包之前,您需要运行apt-get更新。第二个问题是清单不会接受它,它将尝试在前面添加PPA,这样,当然,这是一个逻辑结论,它只需要更新包管理器一次。但是,通过选择最后一个解决方案,我将在一个循环中结束,这会触发一个错误:
==>默认值:错误:未能应用目录:找到了一个依赖周期:==>默认值:(Execadd-apt-存储库-ppa:ondrej/php-7.0 => ClassApt:Update => Execapt_update => ClassApt::Update => Packagegit => ClassSystempackages => Apt::Ppappa:ondrej/php-7.0 => Execadd-apt-ppa:ondrej/php-7.0)
class systempackages {
package { [ 'git', 'curl', 'acl', 'unattended-upgrades', 'vim', 'software-properties-common']:
ensure => "installed",
require => [
Class['apt::update'],
],
}
}
/*===========================================*/
## System
Exec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ] }
class{'systempackages':}
# APT
class { 'apt':
update => {
frequency => 'always',
},
}
apt::ppa { 'ppa:ondrej/php-7.0':
before => Package['php7.0-cli'],
require => Class['systempackages'],
}
# PHP
package {'php7.0-cli':
ensure => 'installed',
}发布于 2015-12-17 17:42:24
考虑到这是在流浪,我建议手动安装软件包software-properties-common作为您的vagrant文件的一部分。
类似于config.vm.provision "shell", inline: "apt-get update && apt-get install software-properties-common的东西应该能工作。
发布于 2015-12-16 16:48:15
循环依赖反映了Puppet不是一个供应系统这一事实。它可以由一个供应系统使用,也可以与一个系统一起使用,但它取决于一个相当大的软件栈是否可用,然后才能启动。如果软件包‘软件-属性-公共’是Apt子系统全面运行所必需的,那么最好的选择是依靠您的供应系统来安装它,以便在Puppet运行之前就可以使用它,并且避免声明该包与Apt模块的类和资源之间的任何关系。
你也会受到傀儡实验室的影响--apt模块非常擅长于声明确保应用程序的正确顺序所需的关系。然而,这是一把双刃剑:人们以令人惊讶的频率从模块中声明自己与类或定义类型的关系,从而给自己制造麻烦。特别是,让您的Apt::ppa资源require --一个包含自己从Apt模块中的任何类或资源的资源--的类是自找麻烦的。
无论如何, is not a public class of the module。主要的含义是模块外部的代码不应该以任何方式引用它。相反,您应该依赖为类参数$apt::update提供的值来指示Puppet在适当的时间执行apt-get update。
https://stackoverflow.com/questions/34301196
复制相似问题