我有一个厨师系统,其中我们有多个环境,并且在 JSON 环境中设置了属性。
我无法从食谱属性文件和食谱中访问这些内容。
例如,您可以使用 AWS CloudFormation(带有 Chef 服务器)部署一个由 Web 服务器、ELB 和 DB 组成的 Auto Scaling 组:http : //aws.amazon.com/cloudformation/aws-cloudformation-templates/
但是,您最初需要创建一个 CF 模板,是否可以仅使用 Chef Server 和 Knife 来完成?我们不想过多依赖 CloudFormation,而且 ( http://www.opscode.com/ ) 上的托管 Chef 服务器似乎能够做到这一点。
任何开源替代品?
谢谢。
有没有办法从 Chef recipe 返回而不引发异常?
说我有一个很长的食谱。我想在它的开头添加一个 ruby 块,它将检查某些条件(例如目录是否存在)并停止处理此配方(但继续执行 run_list 的其余部分),如果条件成功则不会引发异常。
条件执行 (only_if/not_if) 不能解决问题,因为我必须将条件添加到配方中的每个资源调用中,而它们可能有很多。
Opscode 的 wiki 中有一条评论,评论者询问相同但没有答案。
我正在使用 Chef-solo v10.12.0 来配置 Ubuntu 12.04 VM,但我一直遇到一个问题,即在更改配置文件时服务无法按预期重新启动或重新加载。
日志中没有错误,尽管它显然在执行配方中的所有其他操作。作为一种解决方法,我一直在手动重新启动服务或在每次执行配方时强制重新加载/重新启动,但我更愿意弄清楚出了什么问题并使其按预期工作。
一个始终无法按预期工作的示例配方:
package "pgbouncer"
cookbook_file "/etc/default/pgbouncer" do
source "pgbouncer/pgbouncer"
owner "root"
group "root"
mode 0644
end
service "pgbouncer" do
supports :start => true, :stop => true, :restart => true, :reload => true, :status => true
action [:enable, :start]
end
cookbook_file "/etc/pgbouncer/userlist.txt" do
source "pgbouncer/userlist.txt"
owner "postgres"
group "postgres"
mode 0640
notifies :restart, "service[pgbouncer]"
end
template "/etc/pgbouncer/pgbouncer.ini" do
source "pgbouncer/pgbouncer.ini"
owner "postgres"
group "postgres"
mode 0640
variables :postgres_host => node[:postgres_host]
notifies :restart, "service[pgbouncer]"
end
Run Code Online (Sandbox Code Playgroud) 假设您有一个标准的 Chef 存储库,其目录如下:
cookbooks
data_bags
environments
roles
Run Code Online (Sandbox Code Playgroud)
有没有办法一次性全部上传?否则你必须这样做:
knife cookbook upload -a
knife data bag from file data_bags/*.json
knife environment from file environments/*.rb
knife role from file roles/*.json
Run Code Online (Sandbox Code Playgroud)
也许有第三方工具可以做这种事情?
我有 2 台运行不受支持的旧版 Linux 的关键服务器,目前没有针对它们的灾难计划。
我想为他们建立一个备份系统,并能够制定一个傻瓜式的灾难计划。
服务器不能停机,因此冻结它们以获取快照或复制是不可能的。我看了看厨师和傀儡,不知道这些值不值得一试。我想听听建议。
我们在这里资源有限,并且希望我们的 qa 和 staging 环境在一台机器上。
我们将为我们的应用程序和支持服务运行单独的二进制文件和配置文件。
根据chef docs,一台机器可以是两个节点。它只是从不解释如何。
非常感激!
我遇到了“文件中的刀数据包”问题,其中刀无法识别从远程 git 存储库中提取的 .json 数据包文件。
我目前正在尝试从厨师单独使用过渡到厨师服务器,同时使用来自我们远程 git 存储库的食谱、数据包和其他厨师信息。
我目前已经提取了我们的 git 存储库的副本,并在 Knife.rb 中设置了食谱路径和数据包路径。我还加载了食谱,进行了调整等。
当尝试通过执行“从文件文件夹文件添加刀具数据包”来加载我们的 .json 数据包时,它看起来一直有效,直到我执行“刀具数据包列表”并显示为空白。所以我决定尝试在最后添加编辑选项以查看正在加载的内容(如果有)。这是我得到的错误:
knife data bag from file local_settings test.json -e nano
ERROR: Could not find or open file 'test.json' in current directory or in 'data_bags/local_settings/test.json'
Run Code Online (Sandbox Code Playgroud)
数据包文件确实存在,在适当的位置,在一个经过测试的工作 json 文件中。我有时也收到一条错误消息,提示“无法打开数据包“local_settings”。
我显然希望将数据包路径保留在适当的 git repo 文件夹中,以便能够在更集中的位置(我们的 git repo,而不是厨师服务器)跟踪更改。
任何正确方向的解决方案、建议或指示都值得赞赏。
我是 dev-ops 方面的新手,我一直在努力将 Python 应用程序打包到 RPM(使用 python setup.py bdist_rpm)通过 Yum 部署到 centos VM。Chef 用于管理虚拟机。作为持续部署过程的一部分,Python 应用程序将在 virtualenv 中运行。
RPM 是否应该是智能的和自包含的,执行诸如创建/启动 virtualenv 环境、pip 安装所需的依赖项,然后最终配置一个 init 进程(在这种情况下为 virtualenv 启动 uwsgi REST 服务器进程)等操作?
或者,Chef recipe 是否应该管理构建 virtualenv 和 pip 安装依赖项,而 RPM 本身做一个简单的“python setup.py install”来将我的 Python 模块加载到 virtualenv 的 pythonX.Y/site-packages 文件夹中?
对“yum install/reinstall”调用(比如通过自动化过程)的后续操作适用于任何一种方法,但前者需要更复杂的 RPM,这可能不是“最佳实践”,对吗?前者确实允许独立安装,以后可以更干净地删除,并且更好地分离开发人员(Python)和开发操作员(厨师)之间的问题。请就“通常”所做的事情提出建议。
我有一个用例,其中我的大部分 remote_file 资源和 yum 资源直接从内部服务器下载文件。但是,需要使用 remote_file 下载一两个文件,这些文件位于我们的防火墙之外,并且必须通过 HTTP 代理。如果我在 /etc/chef/client.rb 中设置 http_proxy 设置,它会对配方从内部资源下载 yum 和其他文件的能力产生不利影响。有没有办法让 remote_file 资源通过代理下载远程 URL,而无需在 /etc/chef/client.rb 中设置 http_proxy 值?
在下面的示例代码中,我从 rubyforge.org 下载了一个 redmine 包,这要求我的服务器通过公司代理。我在 remote_file 资源之前和之后想出了一个 ruby_block 来设置 http_proxy 并“取消设置”它。我正在寻找一种更清洁的方法来做到这一点。
ruby_block "setenv-http_proxy" do
block do
Chef::Config.http_proxy = node['redmine']['http_proxy']
ENV['http_proxy'] = node['redmine']['http_proxy']
ENV['HTTP_PROXY'] = node['redmine']['http_proxy']
end
action node['redmine']['rubyforge_use_proxy'] ? :create : :nothing
notifies :create_if_missing, "remote_file[redmine-bundle.zip]", :immediately
end
remote_file "redmine-bundle.zip" do
path "#{Dir.tmpdir}/redmine-#{attrs['version']}-bundle.zip"
source attrs['download_url']
mode "0644"
action :create_if_missing
notifies :decompress, "zipp[redmine-bundle.zip]", :immediately
notifies :create, "ruby_block[unsetenv-http_proxy]", :immediately
end
ruby_block …Run Code Online (Sandbox Code Playgroud) chef ×10
knife ×3
deployment ×2
attributes ×1
automation ×1
backup ×1
chef-solo ×1
linux ×1
provisioning ×1
puppet ×1
python ×1
rpm ×1
ubuntu ×1
ubuntu-12.04 ×1