繁体   English   中英

在 Chef 手册中获取错误设置和评估变量

[英]Getting error setting and evaluating variables in Chef cookbook

大家早上好....我想知道是否有人可以帮我解决这个问题。

我正在编写 Chef 说明书,其中我从 AWS SecretsManager 检索值并将它们分配给配方中的变量,然后将它们传递给配置文件的模板。 但是,我认为我遇到了执行顺序问题,其中在部署模板之前没有设置这些变量。 所以,我可能有这样的事情:

lifecyclestage = shell_out("cat /etc/chef/bootstrap.json | jq -r '.policy_group'| tr -d '\n'").stdout
stackVersion = shell_out("cat /apps/chef-repo/stackVersion.txt | tr -d '\n'").stdout
webListenerPort = shell_out("aws secretsmanager get-secret-value --secret-id MySecret-#{lifecyclestage}-#{stackVersion} | jq -r '.SecretString' | jq -r '.listenerportweb'| tr -d '\n'").stdout

我收到一个错误:

undefined local variable or method `stackVersion' for cookbook

也许有更好的方法来做到这一点? 或者也许有一种方法可以按正确的顺序设置和解析变量?

在 Chef 的一名员工的帮助下,我得以完成这项工作。 最终,我最终创建了一个共享资源来将这些值设置为节点属性,然后在整个食谱中引用它们。

所以,我创建了 libraries/shared.rb 并设置了一个函数:

def setEnvVars
  lifecyclestage = shell_out("cat /etc/chef/bootstrap.json | jq -r '.policy_group'| tr -d '\n'").stdout
  node.default['stackVersion'] = shell_out("cat /apps/chef-repo/stackVersion.txt | tr -d '\n'").stdout
  node.run_state['secretContent'] = JSON.parse(shell_out("aws secretsmanager get-secret-value --secret-id MySecret-#{node['lifecyclestage']}-#{node['stackVersion']}-secrets --region us-west-2 | jq -r '.SecretString'").stdout)
end

然后,我从我的 default.rb 配方中调用了这个函数。

最后,secretContent 现在是一个 json 字符串,我可以使用 node.run_state['secretContent']['secret_key_name'] 在说明书中引用它,并以这种方式获取值,这很好用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM