【问题标题】:Best way to transfer files from one server to another server in chef在厨师中将文件从一台服务器传输到另一台服务器的最佳方法
【发布时间】:2015-10-30 17:42:34
【问题描述】:

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

如果有人做过这样的实现以及最好的方法,请帮助我。

【问题讨论】:

    标签: chef-infra recipe


    【解决方案1】:

    这取决于文件的具体内容。

    如果你有一个静态文件,那么你可以将你的文件放在你的食谱中

    <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

    希望这会有所帮助。

    【讨论】:

    • 我正在寻找将一个节点中的文件传输到另一个节点的代码。类似于 scp 命令。
    • 啊..我明白了。这是一个有状态的操作,我不建议使用 Chef,但您可以使用 exec 资源执行任意代码。如果文件需要在收敛期间存在,您可能需要做一些 hacky,例如跳过依赖于该文件的代码第一次收敛。我不确定时间安排如何。
    • 更正,它是一个执行资源,如执行'要执行的命令行代码'
    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多