在chef中将文件从一台服务器传输到另一台服务器的最佳方法

时间:2015-08-07 10:01:38

标签: chef recipe

我正在尝试自动化Oracle dataguard实施。我们需要将文件从主节点传输到辅助节点。

如果有人做过这样的实施,并且有任何最好的方法,请帮助我。

1 个答案:

答案 0 :(得分:0)

这取决于文件内容的确切含义。

如果您有静态文件,则可以将文件放在

下的食谱中
<cookbookname>\files\default

并使用cookbook_file资源

将它们移动到配方中的节点上
cookbook_file 'filename.ext' do
  path 'path\to\where\the\file\will\be
  action :create_if_missing
end

操作:create_if_missing只会在路径不存在的情况下将文件放在那里。

关于cookbook_file的更多文档:https://docs.chef.io/resource_cookbook_file.html

如果您的文件需要是动态的,以便它包含基于您正在运行的服务器的不同内容,那么您需要一个模板资源和附带的模板文件。

模板文件进入

<cookbookname>\templates\default

他们需要被命名为

<filename>.<fileextension>.erb

并且它们的格式完全正如您的文件需要格式化,但您放入的变量值除外。变量用

表示
<% ruby code to evaluate here %>

<%= value to interpolate here %>

换句话说,你可以使用do

<% if condition %>
This will only show up in your created file if the condition is true
<% end %>

或者你可以做

mysitename = <%= @sitename %>

这将导致您的食谱替换&lt;%=%&gt;带有@sitename值的标签。

通过在食谱中执行以下操作来使用模板

template 'path/file/will/be/placed/at' do
  variables(
    variable_name_1: variable_value,
    variable_name_2: variable_value,
    ...
    variable_name_n: variable_value
  )
end

路径应以与您要使用的模板相同的文件名减去.erb扩展名。请注意,variable_names不以@开头,但是当您在模板文件中使用它们时,您需要在它们前面加上@。

https://docs.chef.io/resource_template.html

上有关模板的更多信息

希望这有帮助。