我需要在chef-client环境中禁用passwd插件,以避免因大量用户而导致FATAL错误。
我为本地客户端做的方法是将以下行添加到client.rb文件中:
ohai[:disabled_plugins] = ["passwd"]
在引导受管节点时,我希望通过knife bootstrap命令对受管节点执行相同的操作。从刀具文档,这里是语法:
- 提示HINT_NAME [= HINT_FILE]
Ohai暗示要设置在引导程序的目标上。提示包含在文件中,格式为JSON:{"attribute":"value","attribute":"value"...}
。 HINT_NAME是提示的名称,HINT_FILE是位于
/etc/chef/ohai/hints/HINT_FILE.json
在命令中使用多个--hint选项指定多个提示。
这就是我所做的:
在厨师工作站的/etc/chef/ohai/hints/HINT_FIILE.jason下,它有以下内容:
{disabled_plugins:["passwd"]}
这是刀引导命令:
knife bootstrap [managed_node_name] --hint disabled_plugins -sudo -x user -P [password] -N“test_node”
命令完成后,在managed_node上创建一个新文件:/etc/chef/ohai/hints/disabled_plugins.json,其中包含以下内容:
{}
这似乎不对......
知道我做错了吗?
答案 0 :(得分:1)
假设您的工作站(您运行刀的那个)有一个包含以下信息的文件/home/user/test.json
{ "foo": "bar" }
在节点(将执行厨师运行的服务器)上,您将使用以下语法在/etc/chef/ohai/hints/foo.json
中找到该文件:
$ knife bootstrap --hint foo=/home/user/test.json
节点上的这个时间/etc/chef/ohai/hints/foo.json
将包含
{ "foo": "bar" }
答案 1 :(得分:0)
我认为--hint
选项不会像您想象的那样工作,或者被手册页隐含。它似乎不是从Chef工作站上的/etc/chef/ohai/hints
目录读取,而是从您指定给--hint
选项的文件名中读取。
这应该有效:
$ cat > myhint.json << EOF
{disabled_plugins:["passwd"]}
EOF
$ knife bootstrap --hint=myhint.json blah blah
答案 2 :(得分:0)
所以我遇到了同样的问题,无法获得正常工作的提示,因为它似乎没有以这种特殊方式工作+缺乏文档样本。
最后我选择编辑client.rb
,这是用于生成$ gem contents chef | grep bootstrap | grep full
/home/henryt/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb
要获取正确的文件,请执行以下操作:
vim
然后chef-full.erb
ohai :disabled_plugins
client.rb
文件并在cat > /etc/chef/client.rb <<'EOP'
此处文档(Ohai::Config[:disabled_plugins] = [:Passwd]
)中添加--- ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb.orig
2016-07-22 00:53:33.689961205 -0700
+++ ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb
2016-07-22 00:44:21.253493396 -0700
@@ -64,6 +64,7 @@
cat > /etc/chef/client.rb <<'EOP'
<%= config_content %>
+Ohai::Config[:disabled_plugins] = [:Passwd]
EOP
cat > /etc/chef/first-boot.json <<'EOP'
行
client.rb
我的补丁文件:
ohai :disabled_plugins
现在,每当我启动计算机时,client.rb
都会生成#!/usr/bin/perl
use warnings;
use strict;
sub main();
my $CLIBS = "\$SYSTEMC_HOME/lib-linux64";
my $UVMCLIBS = "\$UVMSYSTEMC_HOME/lib-linux64";
my $CINC = "\$SYSTEMC_HOME/include";
my $UVMCINC = "\$UVMSYSTEMC_HOME/include";
main();
sub main(){
eval{
$ARGV[0];
}or do{
print("\n\tRun the script with SystemC <filename> as argument\n\n");
exit 1;
};
system "g++ -I$CINC -I$UVMCINC -L$CLIBS -lsystemc -L$UVMCLIBS -luvm-systemc $ARGV[0] -Wl,-rpath,$CLIBS -Wl,-rpath,$UVMCLIBS";
#system "./sim";
}
行,而我不必拥有自定义make check
文件。