如何通过厨师刀引导命令传递ohai提示

时间:2014-02-25 22:44:49

标签: chef knife

我需要在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,其中包含以下内容:

  

{}

这似乎不对......

知道我做错了吗?

3 个答案:

答案 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文件。