小编Sar*_*ins的帖子

必需属性没有默认值

当该属性没有合理的默认值时,在资源(如模板)中使用属性的推荐方法是什么。期望在运行时提供属性值。如果不是,厨师食谱执行应该出错。

我现在拥有的方式是将属性值应用于模板时为空字符串。

/食谱/default.rb

template "/var/tmp/my_script.sh" do
    source "my_script.erb"
    mode "0755"
    variables({
        :url => node['environment']['url']
    })
end
Run Code Online (Sandbox Code Playgroud)

/templates/default/my_script.erb

#!/bin/bash
echo "The url is: <%= @url %>"
Run Code Online (Sandbox Code Playgroud)

生成的 /var/tmp/my_script.sh 文件如下所示:

#!/bin/bash
echo "The url is: "
Run Code Online (Sandbox Code Playgroud)

但我希望它会出错。有什么建议吗?

chef chef-solo

8
推荐指数
1
解决办法
3125
查看次数

如何从节点的顶级属性值创建哈希或 yml?

我有一个厨师食谱,我想获取 node['cfn']['environment'] 下的所有属性并将它们写入 yml 文件。我可以做这样的事情(它工作正常):

content = {
  "environment_class" => node['cfn']['environment']['environment_class'],
  "node_id" => node['cfn']['environment']['node_id'],
  "reporting_prefix" => node['cfn']['environment']['reporting_prefix'],
  "cfn_signal_url" => node['cfn']['environment']['signal_url']
}

yml_string = YAML::dump(content)

file "/etc/configuration/environment/platform.yml" do
  mode 0644
  action :create
  content "#{yml_string}"
end
Run Code Online (Sandbox Code Playgroud)

但我不喜欢我必须明确列出属性的名称。如果稍后我添加一个新属性,如果它自动包含在写出的 yml 文件中,那就太好了。所以我尝试了这样的事情:

yml_string = node['cfn']['environment'].to_yaml
Run Code Online (Sandbox Code Playgroud)

但是因为节点实际上是一个 Mash,所以我得到了一个像这样的 platform.yml 文件(它包含很多我不想要的意外嵌套):

--- !ruby/object:Chef::Node::Attribute
normal:
  tags: []
  cfn:
    environment: &25793640
      reporting_prefix: Platform2
      signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/...
      environment_class: Dev
      node_id: i-908adf9
...
Run Code Online (Sandbox Code Playgroud)

但我想要的是这个:

----
reporting_prefix: Platform2
signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/...
environment_class: Dev
node_id: i-908adf9
Run Code Online (Sandbox Code Playgroud)

如何在不按名称显式列出属性的情况下实现所需的 yml 输出?

chef chef-solo

6
推荐指数
1
解决办法
6759
查看次数

标签 统计

chef ×2

chef-solo ×2