Puppet 只需要从 exec 资源调用文件资源
puppet need to call file resource from exec resource only
是否只有在 unless
条件满足时才从 exec
资源调用 puppet file
资源?默认情况下 file
资源不应执行,它只能通过 exec 资源触发。
更新的详细信息:
这是我的清单文件
file { '/tmp/test_script.sh':
path => '/tmp/test_script.sh',
mode => 755,
owner => 'root',
group => 'root',
ensure => file,
source => "puppet:///modules/custom_files//tmp/test_script.sh",
}
exec {'run_script':
unless => '/bin/rpm -qa | grep package-name',
require => File['test_script.sh'],
command => '/tmp/test_script.sh',
}
这里我希望 file { '/tmp/test_script.sh':
资源只有在 exec 资源的条件 unless => '/bin/rpm -qa | grep package-name',
不满足时才必须执行。否则不应执行此文件资源。
您展示的东西不可能像您想要的那样工作。因为 Exec
需要首先(有条件地)应用 File
,所以它自己的 unless
参数不会及时评估以影响它,即使它有办法做到这一点。
一般来说,机器当前状态的详细信息必须通过 事实 传达给目录编译器,Puppet 将根据这些详细信息来决定机器目录的内容。 Puppet / Facter 没有传达您需要的信息的内置事实,但是添加代理将为您评估的 external fact or a custom fact 非常容易。
细节根据所涉及的软件版本略有不同,但如果您使用的是最新的 Puppet 和 Facter,那么我的建议将是一个外部事实。例如,您可以将此脚本放在相应模块的 facts.d/
目录中:
#!/bin/bash
echo mypackage=$(/bin/rpm -q mypackage || echo none)
在您的清单中,您可以这样做:
if $mypackage == 'none' {
file { '/tmp/test_script.sh':
path => '/tmp/test_script.sh',
mode => 755,
owner => 'root',
group => 'root',
ensure => file,
source => "puppet:///modules/custom_files//tmp/test_script.sh",
}
exec {'run_script':
command => '/tmp/test_script.sh',
require => File['test_script.sh'],
}
}
请注意,事实是在应用任何资源之前进行评估的,因此如果您有其他可能管理相关 RPM 的清单,那么您需要与之协调。
是否只有在 unless
条件满足时才从 exec
资源调用 puppet file
资源?默认情况下 file
资源不应执行,它只能通过 exec 资源触发。
更新的详细信息:
这是我的清单文件
file { '/tmp/test_script.sh':
path => '/tmp/test_script.sh',
mode => 755,
owner => 'root',
group => 'root',
ensure => file,
source => "puppet:///modules/custom_files//tmp/test_script.sh",
}
exec {'run_script':
unless => '/bin/rpm -qa | grep package-name',
require => File['test_script.sh'],
command => '/tmp/test_script.sh',
}
这里我希望 file { '/tmp/test_script.sh':
资源只有在 exec 资源的条件 unless => '/bin/rpm -qa | grep package-name',
不满足时才必须执行。否则不应执行此文件资源。
您展示的东西不可能像您想要的那样工作。因为 Exec
需要首先(有条件地)应用 File
,所以它自己的 unless
参数不会及时评估以影响它,即使它有办法做到这一点。
一般来说,机器当前状态的详细信息必须通过 事实 传达给目录编译器,Puppet 将根据这些详细信息来决定机器目录的内容。 Puppet / Facter 没有传达您需要的信息的内置事实,但是添加代理将为您评估的 external fact or a custom fact 非常容易。
细节根据所涉及的软件版本略有不同,但如果您使用的是最新的 Puppet 和 Facter,那么我的建议将是一个外部事实。例如,您可以将此脚本放在相应模块的 facts.d/
目录中:
#!/bin/bash
echo mypackage=$(/bin/rpm -q mypackage || echo none)
在您的清单中,您可以这样做:
if $mypackage == 'none' {
file { '/tmp/test_script.sh':
path => '/tmp/test_script.sh',
mode => 755,
owner => 'root',
group => 'root',
ensure => file,
source => "puppet:///modules/custom_files//tmp/test_script.sh",
}
exec {'run_script':
command => '/tmp/test_script.sh',
require => File['test_script.sh'],
}
}
请注意,事实是在应用任何资源之前进行评估的,因此如果您有其他可能管理相关 RPM 的清单,那么您需要与之协调。