gpt4 book ai didi

Linux 命令输出到 Chef 属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:32 27 4
gpt4 key购买 nike

问题是我需要将 Linux 命令的值分配给 CHef 属性。但无法执行。

Im using the below code and not finding the result. Kindly Help what im 
missing

ruby_block "something" do
block do
Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)
node.default['foo'] = shell_out("echo Hello world").stdout
end
action :create
end



log "demo" do
message lazy { node['foo'] }
end

下面是运行日志:

Starting Chef Client, version 13.9.1
resolving cookbooks for run list: ["sample_repo"]
Synchronizing Cookbooks:
- sample_repo (0.1.4)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 2 resources
Recipe: sample_repo::default
* ruby_block[something] action create
- execute the ruby block something
* log[demo] action write


Running handlers:
Running handlers complete
Chef Client finished, 2/2 resources updated in 02 seconds

提前致谢

最佳答案

您的代码没有问题,日志消息没有显示,因为 log 资源的默认级别是 :info 并且默认情况下是 chef-client 在交互运行时不显示信息级别的日志消息。也就是说,这种将内容存储在节点属性中的代码非常脆弱,除非特别需要,否则可能不应该使用。更好的做法是:

message lazy { shell_out("echo Hello world").stdout }

此外,您不需要任何像您那样时髦的变异 include 东西,AFAIK,默认情况下,shell_out 助手在大多数情况下都可用。此外,您通常应该使用 shell_out!() 而不是 shell_out(),如果命令失败,! 版本会自动引发异常。除非您特别希望允许失败的命令,否则请使用 ! 版本。

关于Linux 命令输出到 Chef 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51626132/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com