【问题标题】:how to pass ohai hints through chef knife bootstrap command如何通过厨师刀引导命令传递 ohai 提示
【发布时间】:2014-03-28 11:34:08
【问题描述】:

我需要在我的 chef-client 环境中禁用 passwd 插件以避免由于大量用户而导致的致命错误。

我为本地客户端做的方式是在client.rb文件中加入以下行:

ohai[:disabled_plugins] = ["passwd"]

当引导受管节点时,我想通过刀引导命令对受管节点执行相同的操作。从刀文档,这里是语法:

--提示 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"]}

这里是刀引导命令:

刀引导 [managed_node_name] --hint disabled_plugins -sudo -x 用户 -P [密码] -N "test_node"

命令完成后,在 managed_node 上会创建一个新文件:/etc/chef/ohai/hints/disabled_plugins.json,内容如下:

{}

这似乎不对...

知道我做错了什么吗?

【问题讨论】:

    标签: chef-infra knife


    【解决方案1】:

    所以我遇到了同样的问题并且无法获得正常工作的提示,因为它似乎无法以这种特殊方式工作 + 缺乏文档样本。

    最后我只是选择编辑chef-full.erb,这是用于生成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 文件并在client.rb 文件中添加ohai :disabled_plugins 行 (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 文件。

    【讨论】:

      【解决方案2】:

      假设您的工作站(运行刀的那个)中有一个文件/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" }
      

      【讨论】:

        【解决方案3】:

        我不认为--hint 选项的工作方式与您的想法一样,或者手册页暗示了这一点。它似乎不是从 Chef 工作站上的 /etc/chef/ohai/hints 目录中读取的,而是从您指定到 --hint 选项的文件名中读取的。

        这应该可行:

        $ cat > myhint.json << EOF
        {disabled_plugins:["passwd"]}
        EOF
        $ knife bootstrap --hint=myhint.json blah blah
        

        【讨论】:

        • 尝试了您的建议,在 Chef 工作站上创建了 myhint.json 文件,并运行了刀 boostrap 命令。完成后,在受管节点上,会创建一个文件为 /etc/chef/ohai/hints/myhint.json.json。该文件的内容是:{} 所以它还没有工作。
        猜你喜欢
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 2013-08-28
        相关资源
        最近更新 更多