How to pass value from one resource to another resource in chef recipe?

前端 未结 2 1307
独厮守ぢ
独厮守ぢ 2021-01-21 01:15

I am trying to change an attribute in one resource and want to use updated value in another resource but updated value is not getting reflected in another resources. please help

2条回答
  •  情深已故
    2021-01-21 01:50

    Your problem is that the code variable is set during the compile phase of chef, before the ruby block has changed the value of your attribute. You need to add a lazy initializer around your code block.

    Chef::Log.info("I am in #{cookbook_name}::#{recipe_name} and current disk count #{node[:oracle][:asm][:test]}") 
    
    bash "beforeTest" do
      code lazy{ "echo #{node[:oracle][:asm][:test]}" }
    end
    
    ruby_block "test current disk count" do
      block do
        node.set[:oracle][:asm][:test] = "#{node[:oracle][:asm][:test]}".to_i+1
      end
    end
    
    bash "test" do
      code lazy{ "echo #{node[:oracle][:asm][:test]}" }
    end
    

    The first block doesn't really need the lazy, but I threw it in there just in case the value is changing elsewhere too.

提交回复
热议问题