我如何参考当前的puppet模块文件目录?

时间:2015-06-30 14:36:35

标签: puppet

这很可能是反模式,但我仍然想知道:

我需要提取一个在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 => "..." }块?

1 个答案:

答案 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

<强>更新 我可以提出两种方法:

  1. 使用puppet file server提供文件(或为旧木偶版本定义module path)。接下来只需使用它,例如:

    file { '/some_path/somewhere_else':
       source => "puppet:///modules/components/file.tgz',
    }
    
  2. 定义自定义因子12,指向包含所需文件的文件系统中的路径。 E.g:

    file { '/some_path/somewhere_else':
       source => "${::my_custom_fact}/some_path/file.tgz',
    }
    
  3. 我不认为任何core facts可能对你有用。