这很可能是反模式,但我仍然想知道:
我需要提取一个在puppet中的tgz然后将内容移动到其他地方。在木偶exec { }
中,是否可以引用存储在磁盘上的文件?
例如,/usr/local/puppet
提供了puppet,/usr/local/puppet/modules/components/files/file.tgz
提供了我需要的tgz文件。在exec { }
我可以执行command => "/bin/cp $modules/components/files/file.tgz /somewhere_else"
之类的操作吗?或者我是否必须首先声明file { source => "..." }
块?
答案 0 :(得分:1)
如果您使用puppet apply
运行puppet,这两种方法都是正确的。
在使用exec
复制文件的master-agent体系结构中,可能根本不起作用。
在我看来,使用file
资源更像是“傀儡”,但有一个明显的缺点。
您可以使用:
file { '/some_path/somewhere_else':
source => '/usr/local/puppet/modules/components/files/file.tgz',
}
这将创建与/some_path/somewhere_else
具有相同内容的文件/usr/local/puppet/modules/components/files/file.tgz
(它将复制原始文件)。
但是如果文件系统中不存在/some_path
,则命令将失败。
如果您使用的是tgz
个文件,您还可以考虑使用一些archive木偶模块,例如gini。
<强>更新强> 我可以提出两种方法:
使用puppet file server提供文件(或为旧木偶版本定义module path)。接下来只需使用它,例如:
file { '/some_path/somewhere_else':
source => "puppet:///modules/components/file.tgz',
}
定义自定义因子1,2,指向包含所需文件的文件系统中的路径。 E.g:
file { '/some_path/somewhere_else':
source => "${::my_custom_fact}/some_path/file.tgz',
}
我不认为任何core facts可能对你有用。