2017-03-09 59 views
1

上的几个文件我需要调配位于调配机器的另一个目录下目录下的多个文件。调配位于文件夹

因此,我需要位于files/scripts/*.painless下的厨师资源库中的一些文件位于provisiong机器的文件夹(#{es_config_r.path_conf}/scripts/)上。

有没有办法做到这一点,或者我需要一个一个的配置?

我不,如果我已经解释这么好......

+0

你是指那些来自cookbooks'files /'文件夹下的文件? – StephenKing

+0

我想将所有的'files/scripts /'文件提供给'#{es_config_r.path_conf}/scripts /'。 – Jordi

+0

并且该文件夹位于您要供应的节点上(因为您之前下载并解压缩了ES/Kibana)或者是否在您的食谱中? – StephenKing

回答

2

为了从你的食谱中files/文件夹中放置的所有文件,可以使用remote_directory资源,如下所示:

remote_directory "#{es_config_r.path_conf}/scripts/" 

应该已经完成​​了这项工作,因为您在两侧都使用文件夹名称scripts/

为了让示例更清晰一点,您可以在files/scripts/painless/中放置无痛脚本。

remote_directory "#{es_config_r.path_conf}/scripts/" do 
    source "scripts/painless" 
end 
+0

对于此任务,我认为使用[cookbook_file](https://docs.chef.io/resource_cookbook_file.html)资源是比remote_file更合适的方法。由于它在文档中说:'使用cookbook_file资源从COOKBOOK_NAME /文件的子目录的文件传输/到位于运行的厨师client.' – Navarro

+0

同样适用于'remote_folder'主机上的指定路径,尽管我发现所选名称有点混乱('remote_folder'不像'remote_file)'那样工作。文档在这里说:'使用remote_directory资源来增量式地将食谱目录从一本食谱转移到一个节点。从食谱中复制的目录应位于COOKBOOK_NAME/files/default/REMOTE_DIRECTORY下.' – StephenKing

-1

您可以部署使用资源cookbook_file包含了一本食谱中的文件:此文件夹中的内容可以如下供应。

用一个简单的循环,可以部署在该目录中的所有文件,是这样的:

%w(foo bar zaz).each do |script| 
    cookbook_file "/path/to/#{script}" do 
    source "scripts/#{script}" 
    owner 'MrBean' 
    group 'ITV' 
    mode '0754' 
    end 
end 

假设对于这一点,当然,前提是你有你的脚本在你的食谱目录下your_cookbook/files/scripts/

其他更优雅的选项是保留脚本文件列表作为烹饪书的属性,因此您可以在每台机器的基础上部署一个dinamically脚本。 (例如,不保留与mysql管理httpd服务器相关的脚本)

+0

在'remote_directory'变为可用之前应该做到这一点。 – StephenKing

+0

通过这样做,您可以更好地控制将哪些文件部署在哪台机器上,而不必在不同目录中存储相同脚本的冗余副本。 – Navarro