【问题标题】:How are Chef attributes stored internallyChef 属性如何在内部存储
【发布时间】:2023-04-02 03:00:01
【问题描述】:

我知道我们可以在哪里定义厨师属性、属性类型以及它们的优先级。我只想了解它们是如何在内部存储的。

假设我声明了一个属性

default[:app][:install] = "/etc/app"

1) 它是如何在内部存储的?它是在节点对象中的树结构(heirarchy)中使用,还是作为哈希图或节点对象中的变量列表?

2) 另外,在大多数食谱中,我看到属性是在 2 或 3 级中声明的,我不明白这是标准还是最佳实践?对于必须声明属性的方式是否有任何指导方针?是否与它的内部存储有关。我不能将属性声明为

 default[:appinstall]= "/etc/app"

并在我的食谱中按以下方式访问它?

  node[:appinstall]

【问题讨论】:

    标签: attributes chef-infra chef-recipe cookbook chef-attributes


    【解决方案1】:

    只有四个 Mash(Hash 的子类,用于修复字符串与符号键)。当您通过node['foo'] 访问合并视图时,它使用Chef::Node::Attribute 对象并行遍历所有四个,直到找到叶值。

    您所展示的内容对于设置和使用属性是正确的,尽管字符串键优于符号。通常,您还应该使用食谱名称来限定您的属性,例如:

    default['mycookbook']['appinstall'] = '/etc/app'
    

    这将减少与其他食谱发生冲突的机会。

    【讨论】:

    • 顺便问一下,为什么字符串优先于符号?我读过一些文章,如果您多次使用相同的属性,最好使用符号。
    • 主要是因为它对不了解 Ruby 的人来说更清楚。几乎所有语言都使用带引号的字符串来表示字符串,但符号和 Ruby 语法尤其难以解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多