标签: chef

流浪者/厨师 - nginx 食谱扩展

我对使用 Chef 还很陌生,尤其是使用 vagrant,所以对于更有经验的用户来说,这很可能是一个愚蠢的问题。

我正在使用这本食谱:https : //github.com/opscode-cookbooks/application_nginx

我只想添加我自己的站点配置(vhost)。

它必须是以下之一:

  1. 将我自己的食谱和模板直接添加到食谱中
  2. 创建我自己的食谱,以某种方式扩展 nginx 食谱以仅添加我需要的特定行为。

选项 1 对我来说似乎不正确,我不知道如何在不必完全分开食谱的情况下完成选项 2。

任何人都可以就如何实现这一目标提出建议吗?

nginx provisioning chef chef-solo vagrant

5
推荐指数
1
解决办法
1828
查看次数

如何使用当前的食谱模板目录与厨师在循环中递归复制所有模板

我试图弄清楚如何构建模板(或文件,因为它的工作方式相同)文件夹的路径,然后我可以读取它并在循环中使用模板资源,因此每个模板文件都可以触发更改通知.

我不能使用 remote_directory 因为我只想在模板更改时通知服务。

我也想避免手动模板规范,因为这些目录中可能有很多文件。另外,它允许我们只更改模板文件夹中的配置,而无需更改配方。

主要问题是那些子目录,如 default、host、host-version 和逻辑厨师通过确定正确的模板文件夹。我在想,我可以从我的自定义食谱中调用一个 Chef 类中的一个方法,以到达我的逻辑(循环)的起点。

我认为应该是这样的:

entry_point = CHEF::...getEntryPointDir

entry_point.glob..
.each do

    template fname do
    ...
    end

end
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助!

templates chef

5
推荐指数
1
解决办法
6735
查看次数

乱序厨师食谱导致 apt 软件包安装失败

我正在编写一个厨师食谱来安装 nginx 和 Phusion Passenger。简短的总结是我的运行列表中的配方没有按照我期望的顺序执行,这导致 apt 包安装以我不知道如何修复的方式失败。整个序列有点复杂,我会尽力保留基本细节。

我有自己的配方,lr-web用于将 Web 服务器自定义为我希望它处于的状态。它对nginx.conf. 我还有一个角色来协调整体配置,其运行列表是:

 "run_list":[
   "recipe[apt]",
   "recipe[nginx]",
   "recipe[passenger]",
   "recipe[lr-web]"
 ]
Run Code Online (Sandbox Code Playgroud)

此外,lr-web配方列表passenger,并nginx在它的依赖metadata.rb

aptnginx食谱是标准的Opscode公司的。但是我已经编写了自己的passenger配方,因为 OpsCode 使用 ruby​​gems 来安装乘客,但该版本不再受支持。按照modrails.com上的建议通过 apt 安装,我的passenger食谱中有以下步骤:

cookbook_file "/etc/apt/sources.list.d/passenger.list" do
  source "passenger.list"
  mode 600
  action :create_if_missing
end

bash "apt-get-update" do
  user "root"
  code <<-EOF
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
    apt-get install apt-transport-https ca-certificates
    apt-get update
EOF
end

apt_package "nginx-extras" …
Run Code Online (Sandbox Code Playgroud)

nginx phusion-passenger chef

5
推荐指数
1
解决办法
2303
查看次数

运行“sudo chef-client”不会更新为最新版本的食谱

这是情况:

我有一个我一直在努力安装 monit 和安装自定义 monit 配置的方法。该配置在过去几天发生了变化。

我有一个厨师服务器和一个厨师节点。服务器具有我提到的配方的最新版本。当我运行 'sudo chef-client' 时,它似乎运行通常的语句,但是当我检查 monit 配置时,它是旧版本,而不是最新版本。

当我将 Web UI 用于我的厨师服务器时,我可以看到它具有我的食谱的最新版本。

我该如何去调试这个?

chef

5
推荐指数
1
解决办法
3950
查看次数

Chef - 没有密码的 SSH

执行时:

knife bootstrap {{IP}} --ssh-user centos --ssh-password '' \
--sudo --use-sudo-password --node-name node1 \
--run-list 'recipe[learn_chef_httpd]'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR: Net::SSH::AuthenticationFailed: Authentication failed for user centos@{{IP}}@{{IP}}
Run Code Online (Sandbox Code Playgroud)

我正在尝试连接到没有密码的 centos 用户,因为我想使用 SSH-Key Auth。

我试过传递一些排列:

knife bootstrap {{IP}} -x centos -i .chef/james-chef-validator.pem  --sudo  --run-list 'recipe[learn_chef_httpd]'
Run Code Online (Sandbox Code Playgroud)

都没有成功...

如果使用 -VV 运行:

...

DEBUG: allowed methods: publickey,gssapi-keyex,gssapi-with-mic
DEBUG: none failed
DEBUG: trying publickey
DEBUG: connecting to ssh-agent
ERROR: could not connect to ssh-agent
ERROR: all authorization methods failed (tried none, publickey)
ERROR: Net::SSH::AuthenticationFailed: Authentication failed for user  centos@{{IP}}@{{IP}} …
Run Code Online (Sandbox Code Playgroud)

chef knife

5
推荐指数
1
解决办法
1万
查看次数

您可以在防火墙后面使用配置管理(Puppet/Chef)吗?

我的任务是为基础架构设计和实施配置管理 (Chef),在该基础架构中,生产服务器完全分段并隔离在一个跳转盒后面。

 ---------------------------------
| Production | Staging, Test, Dev |
 ---------------------------------
Run Code Online (Sandbox Code Playgroud)

将文件投入生产的唯一方法是使用 sftp 连接。只有两个人有能力直接跳入生产。可以例外地允许严格控制的自动化系统(如 jenkins)将文件复制到生产中。

通常,我会建议在云中设置单个厨师服务器,但是生产服务器不能具有外部访问权限。(没有很多说服一些非常不情愿的人)。

我看到的一种解决方案是使用两个 Chef 服务器

 ---------------------------------------
| chef-production | chef-local         |
| Production      | Staging, Test, Dev |
 ---------------------------------------
Run Code Online (Sandbox Code Playgroud)

使用两个厨师服务器有一些我不知道如何克服的问题。

  • 如何使生产和本地服务器说明书保持同步?
  • 我们如何向生产厨师服务器添加新的生产节点,而不需要其中一位管理员运行 Knife 命令?
  • 我们如何更改生产中的数据包?

我愿意接受其他建议。我正在考虑不使用厨师服务器,而是使用chef-zeroor chef-solo。我的理解是,在使用多个环境时,这不是最佳解决方案。

chef

5
推荐指数
1
解决办法
361
查看次数

默认的 opsworks 说明书实际上有什么作用?

我工作的公司正在迁移到 AWS,因此我有机会开始调查他们提供的各种服务。OpsWorks 看起来非常适合推出大规模架构更改,但是“自定义”层包括 13 个无法删除的配方。

他们似乎做各种不同的事情,包括安装驱动器 /var/www/html

有谁知道我在哪里可以找到一些关于默认 OptsWorks 脚本正在做什么的文档,更重要的是他们为什么这样做?

我显然可以通读厨师脚本,但对他们来说是新手,就像阅读胡言乱语一样。

chef amazon-web-services opsworks

5
推荐指数
1
解决办法
278
查看次数

定期运行 Chef/Puppet 的优缺点是什么?

我总是在他们曾经定期运行 Puppet 的地方工作。因此,分发更改很容易且即时。在新团队中,他们不赞成定期运行 Chef 代理。他们只用它来引导操作系统,然后杀死它。我不明白为什么有人会使用像 Chef 这样的配置管理工具而不必定期运行它。无论我们在做什么引导,都可以通过基本的 shell 脚本来完成 - 安装 xyz 软件,复制配置文件,重新启动服务。

他们说在生产中定期运行它太危险了,因为他们不确定代码是否是幂等的。

我的查询是:

  • 你们中有多少人使用编排工具只是为了引导?这不就像在小巷里以每小时 20 英里的速度驾驶布加迪一样吗?
  • 当您扩大规模时,您在定期运行此程序时是否发现任何问题?你会怎么处理?(我知道的一种方法是在单独模式下运行代理,让他们从可以处理同时进行多个下载的某个存储库/人工工厂下载食谱,而不是压倒 Puppet/Chef 服务器)。
  • 我如何鼓励团队将代码修复为幂等的并定期运行代理?或者从 Chef 转移到像 bash 这样简单的东西,以减少维护/编写代码的开销。
  • 我说的对,我们没有按照应该使用的方式使用这些工具吗?
  • 我在这里遗漏/忽略了什么吗?

linux puppet chef best-practices operations-orchestration

5
推荐指数
1
解决办法
115
查看次数

哪种方式是使用 Chef 安装软件包最“优雅”的方式?

我有 3 种不同的方法来安装所述软件包,我最喜欢选项 #1,但我想看看是否有理由使用选项 #2 或 3 或任何其他选项?(我对这个问题的目标是获得不同方法的反馈;如果可能,不要在编译时安装......在这种情况下)

第一。

p = package "snmp" do
  package_name value_for_platform(
    [ "centos", "redhat", "suse" ] => { "default" => "net-snmp" },
    "default" => "snmpd"
  )
  action :install
end
Run Code Online (Sandbox Code Playgroud)

第二。

packages = case node[:platform]
  when "centos","redhat","fedora"
    %w{net-snmp}
  else
    %w{snmpd}
  end

packages.each do |pkg|
  package pkg
end
Run Code Online (Sandbox Code Playgroud)

第三。

package "snmpd" do
  action :install
  only_if do platform?("ubuntu", "debian") end
end
Run Code Online (Sandbox Code Playgroud)

linux configuration-management chef

4
推荐指数
1
解决办法
2204
查看次数

厨师:从其他食谱中导入定义

基本上我写了几本食谱,目前它们都复制了相同的定义文件。显然,这是一个糟糕的情况,因为它使添加新说明书变得更加困难,并且更改该定义文件需要更改三个或四个其他文件以使其完全相同。

有没有办法,如果我有一个单独的食谱,目的是基本上只包含该定义,我可以将该定义文件导入到需要它的食谱中?

chef

4
推荐指数
1
解决办法
5888
查看次数