chef-infra - 将属性从 Terraform 传递给 Chef
问题描述
我试图弄清楚如何将值从 Terraform 传递给 Chef。我在 Terraform 中设置了一个属性。
run_list = ['cookbook::default']
attributes_json = <<EOF
{
"department": "CC"
}
EOF
这是我的厨师食谱
department = ''
if node['platform_family'] == 'windows'
user 'test' do
password 'hash'
comment department
end
if department == 'CC'
group 'Administrators' do
action :modify
members 'test'
append true
end
end
end
当我运行 Terraform 时,它成功完成但不满足部门的条件,因此它不会将测试帐户添加到管理组。我也将部门插入到用户评论中,这样我就可以看到价值(如果有的话)。什么都没有通过。
谁能看到我做错了什么?
解决方案
当您将 JSON 传递给json_attributes
Terraform 的 Chef 配置程序中的参数时,它会被转换为哈希并node
在传递给 Chef 时添加到哈希中。因此,您的值可以作为分配给 的哈希中的键值对访问node
,并且您的特定键是department
和值是CC
。因此,Chef(和 Ruby)中的查找语法为:
node['department']
在 Chef 中更新您的代码,我们到达:
if node['department'] == 'CC'
group 'Administrators' do
action :modify
members 'test'
append true
end
end
推荐阅读
- android - 错误:启用视图绑定android时,包android.view不存在
- c# - 多个随机输入数之间的减法
- python - 在 scipy 中从 solve_ivp 捕获 UserWarnings(求解 ODE)
- c# - 出现“无法隐式转换类型”错误但无法弄清楚原因
- jasper-reports - 带有其他子报表的子报表总是更改页面而不是使用剩余空间
- c# - Microsoft.EntityFrameworkCore.Diagnostics.RelationalStrings.get_InvalidMaxBatchSize()
- verilog - 例如 uut/A1/,正式端口 S 的宽度 1 不等于实际信号 in1 的宽度 4
- python - 为什么我的 python 代码出现值错误
- machine-learning - 如何在 CatBoostRegressor 中传递分类特征?
- java - 如何将一串http请求参数转换为列表