我需要执行一些事情,因为木偶应用运行的最后一件事。我尝试通过定义一个阶段' last'来实现这一点,但是在资源模式下声明一个类的语法限制是个问题。
有没有一种好方法可以使用这样的舞台?或者是否有其他方法可以确保最后执行某个类?
例如,这给了我一个重复声明的错误(有时候,我不知道为什么在这一点上):
class xyz::firstrun {
exec { 'exec_firstrun':
onlyif => '/usr/bin/test -e /tmp/firstrun.sh',
command => '/tmp/firstrun.sh',
path => ['/usr/bin/','/usr/sbin'],
creates => '/tmp/firstrun.done',
}
}
class { 'xyz::firstrun':
stage => last,
}
有时候,第三级课程没有错误,但在主要阶段。
答案 0 :(得分:4)
我不是跑步阶段的忠实粉丝,但他们是这项工作的合适工具。有些不清楚究竟是什么给出了您描述的重复声明错误,但是,例如,如果您的类定义和类声明都出现在同一个文件中,那么这可能是个问题。
以下是使用运行阶段的解决方案的外观:
class site::stages {
stage { 'last':
# Stage['main'] does not itself need to be declared
require => Stage['main'],
}
}
class xyz::firstrun {
exec { 'exec_firstrun':
onlyif => '/usr/bin/test -e /tmp/firstrun.sh',
command => '/tmp/firstrun.sh',
path => ['/usr/bin/','/usr/sbin'],
creates => '/tmp/firstrun.done',
}
}
node 'foobar.my.com' {
include 'site::stages'
include 'something::else'
# Must use a resource-like declaration to assign a class to a stage
class { 'xyz::firstrun':
stage => 'last'
}
}
请注意,尽管通常首选类似于类的声明,但必须使用类似资源的声明将类分配给非默认阶段。因此,您必须小心避免多次声明此类。
答案 1 :(得分:1)
您可以使用puppet relationship and ordering执行此操作。 (1)如果你想在最后执行整个类,你可以在init.pp和用户排序箭头( - >)中包含你的类,以便在所有其他类之后执行它。
示例:
file:/etc/puppet/modules/tomcat/init.pp
class tomcat {
include ::archive
include ::stdlib
class { '::tomcat::tomcatapiconf': }->
class { '::tomcat::serverconfig': }
}
(2)如果您希望类中的特定资源在最后执行,您可以在类中使用相同的箭头( - >)或使用before
或require
资源
示例:
file { '/etc/profile.d/settomcatparam.sh':
ensure => file,
before => File_line['/etc/profile.d/settomcatparam.sh'],
}
file_line { '/etc/profile.d/settomcatparam.sh':
path => '/etc/profile.d/settomcatparam.sh',
ine => 'export LD_LIBRARY_PATH=/usrdata/apps/sysapps/apr/lib:/usrdata/apps/sysapps/apr-util/lib:/usrdata/apps/sysapps/tomcat-native/lib:$LD_LIBRARY_PATH',
}
OR
exec { 'configure apr-util':
cwd => "/tmp/apr-util-${tomcat::aprutilversion}/",
command => "bash -c './configure --prefix=/usrdata/apps/sysapps/apr-util --with-apr=/usrdata/apps/sysapps/apr'",
} ->
exec { 'make apr-util':
cwd => "/tmp/apr-util-${tomcat::aprutilversion}/",
command => 'make',
}
您还可以使用before, require and ->
的组合。只需确保不创建依赖循环。