【问题标题】:Output of a shell script to chef recipe vaiable-backticks not wokring将shell脚本输出到厨师食谱变量反引号不起作用
【发布时间】:2020-08-23 07:29:01
【问题描述】:

您好,我正在尝试将 shell 脚本的输出设置为厨师食谱中的变量,但我看不到该变量设置不正确;我尝试了三种方式:

1.) 直接如下设置:

password = "`/home/#{OWNER}/fox/get_secretsmanager_pwd.sh '#{KEYSTORE_NAME}' 'password'`"

2.) 尝试以下方法:

ruby_block 'Get ' do
  block do
    node.set['test']['password'] = "`/home/#{OWNER}/fox/get_secret_pwd.sh '#{KEYSTORE_NAME}' 'password' `"
    Chef::Log.info("password: #{node['test']['password']}")
  end
  action :run
end

3.) 也尝试了以下方法:

ruby_block 'Get ' do
  block do
    Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)
    command = "`/home/#{OWNER}/fox/get_secrets_pwd.sh '#{KEYSTORE_NAME}' 'password' `"
    command_out = shell_out(command)
    node.set['test']['password'] = command_out.stdout
    Chef::Log.info("password2: #{node['test']['password']}")
  end
  action :run
end

此脚本 (/home/#{OWNER}/fox/get_secrets_pwd.sh '#{KEYSTORE_NAME}' 'password' ) 将从 DB 返回文本。

【问题讨论】:

  • 你引用了反引号,所以它们没有调用命令。
  • 您的 foodcritic 规则告诉您不要使用 node.set,因为这在 node.defaultnode.override 不使用的节点上仍然存在。您永远不应该使用“node.set”(并且该 API 在 Chef 13+ 中已被删除)。此外,由于 Chef 节点可以读取其他节点的节点数据,因此您写入该节点的密码值会有效地发布到您的整个组织以及其中的任何受损服务器。您应该使用普通的 ruby​​ 变量,或者应该使用 node.run_state['test']['password'] 来将该值保持在节点本地而不是发布它。

标签: ruby shell chef-infra


【解决方案1】:

不要引用你的反引号

这是由不会引发错误的微妙语法问题引起的。您正在为节点属性分配固定字符串,而不是命令的输出,因为您引用了反引号!

您的代码可能还有其他问题,但如果您更改:

node.set['test']['password'] = "`/home/#{OWNER}/fox/get_secret_pwd.sh '#{KEYSTORE_NAME}' 'password' `"

到:

node.set['test']['password'] =
  `/home/#{OWNER}/fox/get_secret_pwd.sh '#{KEYSTORE_NAME}' 'password')`

那么它应该正确地将命令的输出分配给节点属性。

【讨论】:

  • 感谢雅各布。删除 shellout 中的反引号后它起作用了。我们组织中设置了 foodcritic 规则,这些规则停止使用直接使用它,如 node.set['test']['password'] = /home/#{OWNER}/fox/get_secret_pwd.sh '#{KEYSTORE_NAME}' 'password')
  • 应用配方时出现以下错误:Chef::Exceptions::ValidationFailed ------------------------ ---------- 属性 storepass 必须是以下之一:字符串!你通过了零。因为我已经使用上述逻辑设置了密码并将其传递给另一个 ruby​​ 块代码。在编译过程中,由于在初始化过程中检查失败,您能否告诉我如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多