仅当文件存在时才应停止puppet服务
根据我的示例中的文档,如果成功应用了target resource require=>Exec['checkForFile'],则将执行资源'service x'。 只有当文件'/etc/init.d/x'存在时,exec命令才会执行 因此,当文件'/etc/init.d/x'不存在时,不应执行Exec['checkForFile']中的命令,并且 如果未执行目标资源,则应跳过资源“服务x” 对我来说,资源服务x没有运行,这是正确的,但同时我没有收到任何错误或退出代码1,以显示Exec['checkForFile']无法运行。这是预期的行为吗仅当文件存在时才应停止puppet服务,puppet,puppet-enterprise,Puppet,Puppet Enterprise,根据我的示例中的文档,如果成功应用了target resource require=>Exec['checkForFile'],则将执行资源'service x'。 只有当文件'/etc/init.d/x'存在时,exec命令才会执行 因此,当文件'/etc/init.d/x'不存在时,不应执行Exec['checkForFile']中的命令,并且 如果未执行目标资源,则应跳过资源“服务x” 对我来说,资源服务x没有运行,这是正确的,但同时我没有收到任何错误或退出代码1,以显示Exec['che
class test2::testcleanup (
$target_location,
)
{
service { 'x':
ensure => stopped,
restart => "service x restart",
stop => "service x stop",
status => "service x status",
require => Exec['checkForFile'],
before => [
File["/etc/init.d/x"],
File[ "remove_directory"],
],
}
exec { "checkForFile":
command => "/bin/true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => 'test -f /etc/init.d/x',
logoutput => true,
}
file {'/etc/init.d/x':
ensure => absent,
}
file {'remove_directory':
ensure => absent,
path => $target_location,
recurse => true,
purge => true,
force => true,
}
}
根据我示例中的文档,资源“ServiceX”
如果目标资源require=>Exec['checkForFile']为
成功申请。exec命令将仅在以下情况下执行:
存在文件“/etc/init.d/x”
是,如果未成功应用Exec['checkForFile']
,则不会应用Service['x']
因此,当文件'/etc/init.d/x'不存在时,中的命令
不应执行Exec['checkForFile']
是的,但这与未应用的Exec
不同
与任何其他资源一样,Exec
s model target machine状态,尽管在它们的情况下,该状态是一个目录运行上下文的本地状态。通常,它被描述为Exec
的命令是否已运行,但最好用另一种方式来描述,即Exec
的命令是否需要运行。如果它处于“需要运行”状态,则成功执行Exec
的命令将其转换为“不需要运行”状态
除非
,仅当
和创建执行
的属性,用于确定相应物理(也就是说)资源的初始状态。如果未提供任何资源,则物理资源最初处于“需要运行”状态。如果提供了其中一个或多个,则它们可能表示Exec
最初处于“不需要运行”状态。这就是目标状态。在这种情况下,Exec
将在不运行其命令的情况下成功应用
以及资源的服务
如果未执行目标资源,则应跳过“x”
否。如果应用Exec
失败,将跳过服务['x']
。只有当其命令运行并以失败状态退出时,才会发生这种情况
例如,在Exec
中使用测试,而不是onlyif
-f/etc/init.d/x'
作为其命令
对我来说,资源服务x不是正确运行的,而是在
同时,我没有收到任何错误或退出代码1显示
Exec['checkForFile']无法运行。这是预期的行为吗
class test2::testcleanup (
$target_location,
)
{
service { 'x':
ensure => stopped,
restart => "service x restart",
stop => "service x stop",
status => "service x status",
require => Exec['checkForFile'],
before => [
File["/etc/init.d/x"],
File[ "remove_directory"],
],
}
exec { "checkForFile":
command => "/bin/true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => 'test -f /etc/init.d/x',
logoutput => true,
}
file {'/etc/init.d/x':
ensure => absent,
}
file {'remove_directory':
ensure => absent,
path => $target_location,
recurse => true,
purge => true,
force => true,
}
}
也许吧
在您的情况下,Exec
始终成功应用。如果存在/etc/init.d/x
,则运行/bin/true
(成功)。如果文件不存在,Exec
将成功,而不运行/bin/true
<代码>服务['x']
将以任何方式应用,但如果物理服务已处于其目标状态(已停止),则Puppet将不会采取任何进一步的操作,并且该资源的任何内容都不会以默认日志级别显示在其输出中。启用代理中的--debug
日志应该可以更清楚地了解发生了什么
但所有这些都是落后的。Puppet并不是一个脚本引擎,它也不能像脚本引擎那样工作。确定机器的适当目标状态所需的任何瞬态机器信息最好以事实的形式传达给傀儡。然后,在目录构建过程中,根据这些事实和任何其他可用数据,确定要声明哪些资源 此外,最好将用于确定其目标状态的当前机器状态量降至最低。相反,更愿意将目标状态与机器的标识联系起来,并在必要时根据不变特征(操作系统、硬件架构等)调整细节。尽管这个模型可能不足以满足所有需求,但它通常已经足够了,而且它还可以作为一个很好的基线 根据我示例中的文档,资源“ServiceX” 如果目标资源require=>Exec['checkForFile']为 成功申请。exec命令将仅在以下情况下执行: 存在文件“/etc/init.d/x” 是,如果未成功应用
Exec['checkForFile']
,则不会应用Service['x']
因此,当文件'/etc/init.d/x'不存在时,中的命令
不应执行Exec['checkForFile']
是的,但这与未应用的Exec
不同
与任何其他资源一样,Exec
s model target machine状态,尽管在它们的情况下,该状态是一个目录运行上下文的本地状态。通常,它被描述为Exec
的命令是否已运行,但最好用另一种方式来描述,即Exec
的命令是否需要运行。如果它处于“需要运行”状态,则成功执行Exec
的命令将其转换为“不需要运行”状态
除非
,仅当
和创建执行
的属性,用于确定相应物理(也就是说)资源的初始状态。如果未提供任何资源,则物理资源最初处于“需要运行”状态。如果提供了其中一个或多个,则它们可能表示Exec
最初处于“不需要运行”状态。这就是目标