从属性文件访问 Chef 数据包
Access a Chef data bag from an attributes file
有没有办法从 default.rb
属性文件中访问 Chef 数据包?
我的用例是我需要将操作系统环境变量的集合表示为最终传递给模板的属性散列。其中一些环境变量是我存储在加密数据包中的凭据。不幸的是,Chef 不允许我从属性文件中访问食谱 DSL,因此我通常使用的 data_bag_item
方法不可用。
提前致谢。
为什么你不能在配方中设置属性,从数据包中,并按预期使用。通常,我会在 attributes/default.rb
中为完全相同的值设置默认值,以防数据包在 运行 时不存在。
在属性文件中:
default['cookbook_name']['secret_value'] = '__UNDEFINED__'
然后在配方中填写并按预期引用属性:
node.default['cookbook_name']['secret_value'] = data_bag_item('something', 'else')
属性文件用作存储属性的位置。配方编译完成后,最终结果预计为 运行。价值从何而来并不重要。
您不能使用 DSL 助手,但您可以自己直接使用 Chef::DataBagItem.load
。检查 Chef 代码以了解如何使用它(我们没有记录这些 API AFAIK)。
有没有办法从 default.rb
属性文件中访问 Chef 数据包?
我的用例是我需要将操作系统环境变量的集合表示为最终传递给模板的属性散列。其中一些环境变量是我存储在加密数据包中的凭据。不幸的是,Chef 不允许我从属性文件中访问食谱 DSL,因此我通常使用的 data_bag_item
方法不可用。
提前致谢。
为什么你不能在配方中设置属性,从数据包中,并按预期使用。通常,我会在 attributes/default.rb
中为完全相同的值设置默认值,以防数据包在 运行 时不存在。
在属性文件中:
default['cookbook_name']['secret_value'] = '__UNDEFINED__'
然后在配方中填写并按预期引用属性:
node.default['cookbook_name']['secret_value'] = data_bag_item('something', 'else')
属性文件用作存储属性的位置。配方编译完成后,最终结果预计为 运行。价值从何而来并不重要。
您不能使用 DSL 助手,但您可以自己直接使用 Chef::DataBagItem.load
。检查 Chef 代码以了解如何使用它(我们没有记录这些 API AFAIK)。