【问题标题】:Understanding Chef's runlist order了解 Chef 的运行列表顺序
【发布时间】:2015-10-16 17:19:38
【问题描述】:

我正在学习厨师,到目前为止,我了解到最好将所有 opscode cookbooks 放在 cookbooks 目录中,并将我的所有自定义设置放在 site-cookbooks 中。这样我就可以在 site-cookbooks 中镜像例如 apt cookbook 并更改

默认['apt']['compile_time_update'] = true

强制进行 apt-get 更新,而在此之前它没有这样做。 顺便说一句,我花了很长时间才发现这个属性文件将被命名为“customize.rb”,据我所知,它没有在任何地方记录。

为了获得所有食谱及其对简单 LAMP 堆栈的依赖项,我正在使用 vagrant-librarian 插件。 所以我的 Cheffile 看起来像这样。

site 'http://community.opscode.com/api/v1'

cookbook 'apt', '~> 2.8.2'
cookbook 'openssl', '~> 4.4.0'
cookbook 'apache2', '~> 3.1.0'
cookbook 'mysql', '~> 6.1.0'
cookbook "php", github: "priestjim/chef-php"
cookbook 'phpmyadmin', '~> 1.0.6'

我的 Vagrantfile 如下:

Vagrant.configure(2) do |config|
   config.vm.box = "ubuntu/trusty64"
   config.vm.provider "virtualbox" do |v|
      v.memory = 1024
      v.name = 'chef-lamp'
   end
   config.vm.network "private_network", ip: "192.168.33.10"
   config.vm.host_name = "project.dev"
   config.vm.synced_folder "./public", "/vagrant/"

   config.omnibus.chef_version = "12.3.0"
   config.vm.provision "chef_solo" do |chef|
   chef.arguments = '--force-formatter'
   chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
   chef.add_recipe 'apt'
   chef.add_recipe 'build-essential'
   chef.add_recipe 'mysql'
   chef.add_recipe 'xml'
   chef.add_recipe 'openssl'
   chef.add_recipe 'apache2'
   chef.add_recipe 'apache2::mod_php5'
   chef.add_recipe 'apache2::mod_rewrite'
   chef.add_recipe 'php'
   chef.add_recipe 'php::module_mysql'
   chef.add_recipe 'apache2::mod_php5'
   chef.add_recipe 'apache2::vhost'
   #chef.add_recipe 'phpmyadmin'
  end
 end

我的主要问题是为什么厨师总是在处理 apt cookbook 后立即尝试安装 php,尽管它在运行列表中的位置很靠后,导致尝试重新启动 apache 时出现编译错误,例如由于 apache 正在运行线程 MPM,但您的 PHP 模块未编译为线程安全的。

当我将配置分为两部分时,第一次运行没有任何 php 资源,然后在第二次运行中添加 php 资源(流浪者配置),那么它工作正常。

我在那里错过了什么......我如何告诉厨师运行“apt,apache2,mysql” - 首先......然后安装php??

另一个问题是——我可以确定图书馆员添加的所有依赖项都由厨师(自动)包含在运行列表中,还是我必须像使用“build-essentials”一样手动包含所有依赖项我的 Vagrantfile 中的示例。

希望有人能帮助我,谢谢。

【问题讨论】:

  • 我几乎不认为cookbooks/site-cookbooks 模式是这些天要走的路。使用 Berkshelf 管理依赖项。你看过chefdk吗?
  • 好吧,我认为这是将自己从角色和包装食谱中拯救出来的最佳方式,同时保持版本控制的分离。
  • 为什么要从角色和包装器中拯救自己?

标签: php apache vagrant chef-infra librarian


【解决方案1】:

可以使用 run_action 方法在运行 run-list 之前执行动作。 Priestjim 食谱以这种方式安装 php。解决方案可能是使用社区食谱并复制自定义食谱或在您的自定义食谱中进行 php 安装。

【讨论】:

  • 我的天哪,我选择了 pastejim 的 repo,因为它是 phphmyadmin 食谱的依赖项。我应该仔细观察一下,以意识到整个事情是一个独立的灯安装,它包含的“apt”可能与我的运行列表 apt 合并。您会推荐哪本食谱仅安装带有其模块的 php?谢谢
  • 抱歉又错了....它不是独立的灯安装。它只是安装 apache::mod_php5。我对 apache2.rb 配方这个名字感到困惑。因此,php 的自定义配方应该在不调用“apt”的情况下完成。
  • 我会为自己找到另一个 php 食谱。因为我只是不明白为什么要在编译时安装 php 而不是在执行时使用这种“run_action”方法?
【解决方案2】:

解决方案是在 site-cookbooks 中编写自定义配方并更改软件包安装,其中显示 # Run the package installation at compile time 如下

node['php']['packages'].each do |pkg|
  package pkg
end

当然还有将原始配方中的所有以下模板和目录定义附加到自定义配方中。

现在似乎可以工作了。

也许这对任何人都有用,尽管这可能不是专业厨师的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多