【问题标题】:What is Chef doing when I use the `s3cmd` recipe?当我使用 `s3cmd` 食谱时,Chef 在做什么?
【发布时间】:2014-09-10 10:12:11
【问题描述】:

我正在使用 Chef 和 this s3cmd cookbook。

正如this tutorial 所说,我使用knife 下载并压缩它。我实际上按照教程说明让s3cmd 工作,但我无法理解s3cmd 的安装到底在哪里发生?

谁能向我解释一下 Chef 在使用 s3cmd 配方时在做什么?

【问题讨论】:

  • 你能链接到你正在使用的食谱和教程吗?您在节点运行列表中添加了什么?您查看过chef-client 运行的调试日志吗?
  • 我将它用于我的 s3cmd 配置:github.com/fred/chef-s3cmd
  • 好的。所以你已经将配方添加到节点的运行列表中并且它已成功安装s3cmd?你只是想知道怎么做?
  • 是的,一切正常,我只是看不到厨师为我安装它的位置和方式,我需要知道才能正确管理我的服务器。

标签: amazon-s3 chef-infra s3cmd


【解决方案1】:

当您在本地运行 chef-solo(或在服务器设置中运行 chef-client)时,您是在告诉 Chef 编译一组在您的食谱食谱中定义的 resources,然后应用于您正在运行的 node命令上。

资源定义了您要设置的任务和设置。

为节点设置的run_list 定义了将编译的食谱食谱。

s3cmd

在您的情况下,您的run_list 可能是recipe[s3cmd]。

这会指示 Chef 查看 s3cmd 食谱,由于您没有提供具体的食谱,它会加载 s3cmd/recipes/default.rb。

如果您提供了特定的食谱,例如 recipe[s3_cmd::other],那么 Chef 会加载文件 s3_cmd/recipes/other.rb。

Chef 会将配方中定义的所有 resources 编译到一个列表中,并在列表中运行,根据需要对您的系统进行更改。

s3cmd::default 做了什么

  1. 首先它会安装一些packages(通过你的发行包管理器)

    python, python-setuptools, python-distutils-extra, python-dateutil, s3cmd
    

    注意:这与readme 所说的s3cmd 的安装方式完全不同!经常检查!

  2. 弄清楚配置应该去哪里。

    if node['s3cmd']['config_dir']
      home_folder = node['s3cmd']['config_dir']
    else
      home_folder = node['etc']['passwd'][node['s3cmd']['user']]['dir']
    end
    
  3. 从cookbook 中的template 创建.s3cfg 配置文件。

    template "#{home_folder}/.s3cfg" do...
    

还有什么

Cookbooks 还可以定义自己的resources and providers 来创建更多可重复使用的cookbooks。资源名称和属性将在cookbook/resources/blah.rb 中定义。每个资源action 的代码将在cookbook/providers/blah.rb 中

代码可以打包在cookbook/libraries/blah.rb 中并包含在其他Ruby 文件中。

使用--log-level DEBUG 选项运行chef-solo 并逐步执行输出。尝试确定运行列表编译阶段,然后确定所有内容的应用位置。

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多