需要巧克力般的提供程序来安装软件包,这将起作用,但是仅在另一个pp文件执行完毕后起作用。
问题在于,up会同时评估node语句下的文件和无效提供程序上的错误;问题是我通过注释掉另一个来运行第一个pp文件,然后让它运行并取消注释,然后使用p代理重新运行-测试所有工程。
我尝试了标签,并在标签中使用了if语句,但这似乎也不起作用。
class windows::chocolatey {
exec { 'set_executionpolicy':
command => "set-executionpolicy unrestricted -force -scope process;
(iex((new-object
net.webclient).DownloadString('https://chocolatey.org/install.ps1')))>\$null
2>&1",
provider => 'powershell',
creates => 'C:/ProgramData/chocolatey',
}
node "web-iis-02" {
class { 'windows':} #chocolatey installing to allow atom.pp to work
class { 'atom': } # init.pp below install using chocolatey
#installs package
class atom {
if tagged(windows) {
include atom::pakages
notify { "Calling Pakagepp script": }
}
}
#if tagged init.pp above calls this:
class atom::pakages {
include chocolatey
package { 'Atom':
ensure => 'latest',
provider => 'chocolatey',
}
我是从pakages.pp那里得到的:
错误:无法应用目录:参数提供程序失败 Package [Atom]:无效的软件包提供程序“ chocolatey”(文件: /etc/puppetlabs/code/environments/production/modules/atom/manifests/pakages.pp,第3行)
答案 0 :(得分:0)
尝试添加一个require
依赖项,以便在atom
类之后声明windows
类:
class { 'windows': }
class { 'atom':
require => Class['windows'],
}
又或者又快又脏:
class { 'windows': }
-> class { 'atom': }
您需要删除该tagged
条件,因为它不是必需的。
从您的问题中我不能完全确定哪个类取决于哪个类,但是我很确定这是您需要的require
。您可能需要为require
类添加一个chocolatey
:
class { 'atom':
require => Class['windows', 'chocolatey'],
}