【发布时间】:2015-10-30 17:42:34
【问题描述】:
我正在尝试自动化 Oracle dataguard 实施。我们需要将文件从主节点传输到辅助节点。
如果有人做过这样的实现以及最好的方法,请帮助我。
【问题讨论】:
标签: chef-infra recipe
我正在尝试自动化 Oracle dataguard 实施。我们需要将文件从主节点传输到辅助节点。
如果有人做过这样的实现以及最好的方法,请帮助我。
【问题讨论】:
标签: chef-infra recipe
这取决于文件的具体内容。
如果你有一个静态文件,那么你可以将你的文件放在你的食谱中
<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 %>
这将导致您的配方将 标记替换为 @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
希望这会有所帮助。
【讨论】: