簡體   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