我可以按照文档中的说明在角色文件中设置属性,但我无法访问我正在使用的说明书已经设置的属性。
例如在 /roles/appserver.rb 中:
name "appserver"
run_list(%w{
recipe[tomcat::default]
})
default_attributes(
:tomcat => {
:java_options => "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=" + node[:tomcat][:log_dir]
}
)
Run Code Online (Sandbox Code Playgroud)
我得到的是一个异常,说明厨师找不到“节点”方法/变量。
谢谢
我正在学习厨师,但在组织一切以与我的团队合作时遇到了问题。
首先,您似乎应该创建一个chef-repo 文件夹,您将在其中存储和修改用于管理节点的食谱。
我从事各种项目,每个项目都已经在 git 源代码控制之下。理想情况下,我会在我的每个项目中保留一个带有该项目食谱的chef-repo文件夹,对吗?
但是,在chef-repo 文件夹中,我必须添加一个包含我的刀配置和密钥验证的配置文件夹(.chef),这些是我特有的。将 .chef 文件夹添加到 gitignore 文件是否正常?
我知道食谱会上传到厨师服务器然后进行部署。其他团队如何在不重复大量工作的情况下将登台与生产环境分开?我们有一个 master 分支是我们的生产分支,一个 dev 分支是我们的临时分支(接收不到网站请求的 5%)和功能分支。大多数情况下,稳定时的 dev 分支会合并到 master 分支。我们如何分别上传食谱以便能够以单独的方式拥有两个环境?
谢谢您的帮助!
knife ssh没有找到我的节点。我知道它应该可以,因为当我可以搜索它们时,我会找到它们
# knife search node name:*
2 items found
Node Name: web_01
...
Node Name: admin
...
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时knife ssh(我会用“调试”标志显示它)我得到
# knife ssh "node:*" "uptime" -VV
DEBUG: Using configuration from /root/.chef/knife.rb
DEBUG: Signing the request as dev
DEBUG: Sending HTTP Request via GET to ec2-xx-xx-xx-xx.compute-1.amazonaws.com:4000/search/node
FATAL: No nodes returned from search!
Run Code Online (Sandbox Code Playgroud)
(是的,主持人是正确的,我只是为帖子审查了它)。
我试过修改 QUERY 参数并且总是得到相同的结果。我试过了:
有任何想法吗?
根据文件,我应该替换chef-solo为chef-client --local-mode.
本地模式在 11.8 版本中被添加到厨师客户端。如果您正在运行该版本的 Chef-client(或更高版本),您应该考虑使用本地模式而不是使用 Chef-solo。 https://docs.getchef.com/ctl_chef_solo.html
我只是替换了命令并且工作正常。这两个命令是否总是可以替换而无需重新配置?或者有一些我应该知道的细微差别?
我正在写一本 Chef 食谱来安装Hubot。在配方中,我执行以下操作:
bash "install hubot" do
user hubot_user
group hubot_group
cwd install_dir
code <<-EOH
wget https://github.com/downloads/github/hubot/hubot-#{node['hubot']['version']}.tar.gz && \
tar xzvf hubot-#{node['hubot']['version']}.tar.gz && \
cd hubot && \
npm install
EOH
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在安装食谱的服务器上运行 Chef-client 时,我获得了写入到运行 Chef-client 的用户目录而不是 hubot 用户的权限被拒绝的权限。出于某种原因,npm试图在错误的用户下运行,而不是在 bash 资源中指定的用户下。
我可以sudo su - hubot -c "npm install /usr/local/hubot/hubot"手动运行,这得到了我想要的结果(将 hubot 安装为 hubot 用户)。但是,似乎chef-client 并没有以hubot 用户的身份执行命令。您将在下面找到厨师 - 客户执行。先感谢您。
Saving to: `hubot-2.1.0.tar.gz'
0K ...... 100% 563K=0.01s
2012-01-23 12:32:55 (563 KB/s) - `hubot-2.1.0.tar.gz' saved [7115/7115]
npm ERR! …Run Code Online (Sandbox Code Playgroud) 我们有多本参考相同文件和模板的食谱,想知道是否有合理的方法来确保所有这些都是相同的文件,以确保没有过时。是否可以有多个食谱/食谱引用的单个文件/模板?我考虑过使用符号链接,但是这对我们不起作用,因为 Git 不支持它们。
我想声明一个资源,我想在通知时多次运行并且仅在通知时运行。如何防止资源在声明后自行运行?
有什么方法可以检查是否存在通知,以便我可以运行“only_if :notified”之类的内容?
鉴于以下配方:
ruby_block "block1" do
block do
puts "in block1"
end
action :create
end
remote_file "/tmp/foo" do
puts "in remote_file"
source "https://yahoo.com"
end
Run Code Online (Sandbox Code Playgroud)
我希望 ruby_block 首先运行(因为它首先出现)然后是 remote_file。
我想使用 ruby_block 来确定要下载的 remote_file 的 URL,因此顺序很重要。
如果不是我的 puts() 语句,我会假设这些语句按预期顺序运行,因为日志说:
==> default: [2014-06-12T17:49:19+00:00] INFO: ruby_block[block1] called
==> default: [2014-06-12T17:49:19+00:00] INFO: remote_file[/tmp/foo] created file /tmp/foo
==> default: [2014-06-12T17:49:20+00:00] INFO: remote_file[/tmp/foo] updated file contents /tmp/foo
Run Code Online (Sandbox Code Playgroud)
但除此之外,我的 puts() 语句如下:
==> default: in remote_file
==> default: in block1
Run Code Online (Sandbox Code Playgroud)
如果您认为资源按预期顺序运行,请考虑以下方法:
ruby_block "block1" do
block do
node.default['test'] = {}
node.default['test']['foo'] ='https://google.com' …Run Code Online (Sandbox Code Playgroud) 我们主要(但不完全)赢得服务器。
最好,我们可以启动操作系统并对其做很少或不做任何事情以使其准备好接收命令(我们知道我们可能需要创建一个带有代理或 ssh 服务器的基本映像)。
需要能够安装 mongodb、基于 Java 的应用程序、iis 配置等。
哪个工具具有最强的 Windows 支持/社区,并且(如果可能)最轻的初始化足迹?
操作答案:Powershell DSC。
这不是完整的故事(它没有完成厨师/木偶/等所做的所有工作),但它满足了很多需求,效果很好,并且在 win 8.1/2012-R2/10 中是开箱即用的。我们对此非常满意。
我的情况是,Chef 可能会启动一项服务 (postgres),但随后可能会在带外停止。我想要一个后续的 Chef 运行来导致服务运行。我试过这个:
service "postgresql" do
action :start
end
Run Code Online (Sandbox Code Playgroud)
但它没有效果,(up to date)大概是因为 Chef 知道它已经启动并且无法判断它已经停止。(可能是由于service ... status此服务的行为方式?)如果我这样写:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Run Code Online (Sandbox Code Playgroud)
我得到了想要的行为。也action :restart让它运行。然而,由于可移植性,这些看起来像是反模式(并且在后一种情况下可能会在再次启动之前停止它)。
那么,我如何告诉 Chef 强制启动该服务,即使它认为它已经在运行呢?
这是使用由 OpsCode 托管的 Chef 11.6 和默认的 postgresql 配方。(注意这很相似,但我认为与如何在 Chef 中强制对“最新”资源执行操作不完全相同?。)
---编辑(在 jtimberland 帖子后澄清)---
在-l debug这里显示:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Run Code Online (Sandbox Code Playgroud)
即使它没有运行。所以这听起来像是一个错误,我对此很感兴趣。但是,我主要对是否有办法告诉厨师“始终调用服务启动命令,跳过状态检查”感兴趣。这就是这里的问题。
(我不是专家,但我认为确保服务运行的最便携方法是启动服务,这几乎总是幂等的。OTOH检查 …
chef ×10
ansible ×1
automation ×1
deployment ×1
knife ×1
node.js ×1
postgresql ×1
puppet ×1
service ×1
windows ×1