我是一个傀儡初学者 - 如此忍受我:) 我试图写一个模块,执行以下操作:木偶:复制文件只有在包需要安装最新的
- 检查软件包是否安装了最新版本的软件仓库
- 如果需要安装软件包,那么配置文件将从puppet源位置复制到客户端。然后将安装该软件包
- 一旦文件被复制并安装软件包,运行脚本将使用客户端上的配置文件来应用必要的设置。
- 一旦这一切完成后,删除客户端
我已经想出以下复制的文件:
class somepackage(
$package_files_base = "/var/tmp",
$package_setup = "/var/tmp/package-setup.sh",
$ndc_file = "/var/tmp/somefile.ndc",
$osd_file = "/var/tmp/somefile.osd",
$nds_file = "/var/tmp/somefile.nds",
$configini_file = "/var/tmp/somefile.ini",
$required_files = ["$package_setup", "$ndc_file", "$osd_file", $nds_file", "$configini_file"])
{
package { 'some package':
ensure => 'latest',
notify => Exec['Package Setup'],
}
file { 'Package Setup Files':
path => $package_files_base,
ensure => directory,
replace => false,
recurse => true,
source => "puppet:///modules/somepackage/${::domain}",
mode => '0755',
}
exec { 'Package Setup':
command => "$package_setup",
logoutput => true,
timeout => 1800,
require => [ File['Package Setup Files']],
refreshonly => true,
notify => Exec['Remove config files'],
}
exec { 'Remove config files':
path => ['/usr/bin','/usr/sbin','/bin','/sbin'],
command => "rm \"${package_setup}\" \"${ndc_file}\" \"${osd_file}\" \"${nds_file}\" \"${configini_file}\"",
refreshonly => true,
}
}
虽然这实现了大多数的什么,我想做的事情,我注意到在重新运行傀儡时,应用这些文件虽然被删除,但正在被复制。
我可以理解为什么会发生这种情况,但我不知道如何对它进行编码,以便只有在程序包得到更新/安装(例如,程序包未安装或旧版本)时才会复制文件。否则,每当木偶每隔30分钟(默认设置)在客户端上运行时,文件就会被一遍又一遍地复制,我假设...我试图使用replace => false
来防止这种情况,但这只是意味着文件在从/var/tmp
之后这是该类的第一次运行,因为它仅阻止后续运行的类重新复制文件(从我的测试中)。这确实可以防止多余的重复性复制 - 但是我只想让这些文件在第一时间消失!
这可能吗? !头好痛:(提前
感谢我们正在EL7.3运行木偶版本3.8.6
编辑:要清楚,这是我挣扎了一下:资源file { 'Package Setup Files':
这种状态越来越文件复制即使包不更新/安装。如何防止这种情况的发生?
从我所了解的情况来看,只有在软件包不是最新的版本时才需要执行“软件包设置文件”?那是你唯一面临的问题? –
不,执行得很好 - “文件{'程序包设置文件''位是无论如何都会一直执行的文件。如果软件包已更新/安装,我只想限制这一点。 –
我注意到$ package_files_base没有在任何地方定义。错字? –