在课堂上,我想这样做:
stop a service
reinstall a package
start the previous service again
这是我的班级:
class MyClass{
service{"ServiceName-start":
name => "ServiceName",
ensure => "stopped",
}
package{"PackageName":
ensure => "installed",
require => Service["ServiceName-Start"],
}
service{"ServiceName-Stop":
name => "ServiceName",
ensure => "running",
require => Package["PackageName"]
}
}
我收到了这个错误:
重复定义:服务[ServiceName]已在文件中定义 第2行/puppet/mycsass.pp;无法在/puppet/myclass.pp:9重新定义
答案 0 :(得分:1)
不幸的是,它似乎并不像你想的那么简单。 Here's a brief explanation of the problem in the Puppet User's group.
这句话总结了帖子:
Puppet不是脚本引擎,它的语言不是 脚本语言。你可以在Puppet中编写脚本,但确实如此 繁琐。木偶是关于实现和维持特定的 系统资源状态,故意不再强调机制 从这里到那里。因此,“我如何让Puppet表演 ?“很少是一个有用的问题。
帖子作者还提供了一个替代(虽然不太吸引人的解决方案),我已经适应了你的例子:
class MyClass {
exec { "ServiceName-Stop":
command => "/bin/sh -c '/sbin/service ServiceName stop",
}
package{"PackageName":
ensure => "installed",
require => Service["ServiceName-Stop"],
}
service{"ServiceName-Start":
name => "ServiceName",
ensure => "running",
require => Package["PackageName"]
}
}
答案 1 :(得分:0)
可能虚拟资源在这里很有用虽然我不确定...我正在使用的两个.pp文件的当前结构如下:
/etc/puppet/modules/testmodule/manifests/init.pp
/etc/puppet/modules/testmodule/manifests/test.pp
init.pp看起来像这样;我已经使用mysqld进行服务。
class testmodule {
@service { "mysqld" :
ensure => stopped,
}
}
test.pp看起来像这样;
class testmodule::test inherits testmodule {
realize(Service["mysqld"])
package { "mysql" :
ensure => installed,
notify => Service["mysqld"],
}
Service["mysqld"] {
ensure => running,
}
realize(Service["mysqld"])
}
在您的site.pp中,您可以这样做:
node 'my_nodename.com' {
include testmodule::test
}
希望这会有所帮助......