私は秘密の値を得るためにルビーブロックを使用しています。しかし、秘密がノード属性として保存されないように変更したい。それ以外の場合は、シェフの属性を表示するときに表示されます。シェフの秘密のデータバッグから秘密の値を取得する
ruby_block 'load_acl_master_token' do
block do
secret = Chef::EncryptedDataBagItem.load_secret("/etc/chef/app_encrypted_data_bag_secret")
acl_master_token = Chef::EncryptedDataBagItem.load("app_consul_secrets", "app_consul_acl_mastertoken", secret)
node.set['cluster']['acl_master_token'] = acl_master_token['keyval']
end
only_if { node['cluster']['acl'] == true }
end
bootstrap_json = Chef::JSONCompat.to_json_pretty(node['consul']['config'].to_hash)
rb_bootstrap_hash = JSON.parse(bootstrap_json)
require "active_support/core_ext/hash"
rb_cluster_hash_acl_master_token = rb_bootstrap_hash.deep_merge({ "acl_master_token" => acl_master_token['uuidgen'] })
もっと効率的な方法で同じコードを書くことができますか?
コードは、私が
NameError
---------
No resource, method, or local variable named acl_master_token' for Chef::Recipe "server"' `
iがlazy attribute
としてacl_master_token['uuidgen']
を行う必要があり、このエラーを取得し、
rb_cluster_hash_acl_master_token = rb_bootstrap_hash.deep_merge({ "acl_master_token" => acl_master_token['uuidgen'] })
以下のように見えます。はいの場合、どのように見えるでしょうか?
私が削除した場合、 'node.set [ 'クラスタ'] [ 'acl_master_token'] = acl_master_token [ 'KEYVAL']'と直接使う 'acl_master_token [ 'KEYVAL']'私は時エラーをコンパイルし得ます。何をすべきかを助けてください – meallhour
変数にアクセスするスコープに変数が設定されていることを確認する必要があります。コードがどのように見えるかわからなければ、私はあまり言い表せません。 – coderanger
コード なしリソース--------- NameError '私はこのエラーを取得し、({[ 'はuuidgen'] acl_master_token "acl_master_token"=>})' rb_cluster_hash_acl_master_token = rb_cluster_hash_acl_policy.deep_merge以下のように見えると ' '' Chef :: Recipe 'server "' ' – meallhour