Chef:修改资源而不覆盖

时间:2017-10-20 09:56:41

标签: ruby resources chef

我在living-elastic食谱上有以下资源。

elasticsearch_configure 'elasticsearch' do
    configuration ({
        'http.port' => port,
        'cluster.name' => cluster_name,
        'node.name' => node_name,
    })
end

我想在另一本食谱上修改它而不覆盖它:

edit_resource!(:elasticsearch_configure, 'elasticsearch') do
    configuration ({
        'path.repo' => ["/backups/s3_currently_dev", "/backups/s3_currently", "/backups/s3_daily", "/backups/s3_weekly", "/backups/s3_monthly"]
    })
end

这会覆盖端口,cluster_name和node_name。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

使用Ruby Hash#update方法:

edit_resource!(:elasticsearch_configure, 'elasticsearch') do
    configuration.update({
        'path.repo' => ["/backups/s3_currently_dev", "/backups/s3_currently", "/backups/s3_daily", "/backups/s3_weekly", "/backups/s3_monthly"]
    })
end

这是有效的,因为调用没有新值的属性会返回现有值,然后就可以像任何其他Ruby Hash一样进行变异。