[chef] Concurrency node creation issue

Chronological Thread 
  • From: Daniel Cukier < >
  • To:
  • Subject: [chef] Concurrency node creation issue
  • Date: Sun, 4 Sep 2011 18:57:12 -0300


I have in my infrastructure a topology where there's one master node and many slave nodes.
What I want to do is to automatically detect if a node is a master or a slave. The rule is:
 1) If there is no master node yet, the next node will be the master
 2) If there is a master, the next node will be slave and its master will be the already existing master.

The problem occurs when I have an empty infrastructure (zero nodes) and I try to create the first 2 nodes simultaneously.
When both nodes get provisioned, both check that there is no master and both are set to be master, which is a wrong configuration.
This is a very common synchronization problem, but I don't know how to deal with it in the Chef environment. 

Here's the recipe to configure a node:

@@master = node

search(:node, 'role:myrole') do |n|
  if n['myrole']['container_type'] == "master"
    @@master = n
    if n.name != node.name
      node.set['myrole']['container_type'] = "slave"

if @@master == node
  node.set['myrole']['container_type'] = "master"

template "#{node['myrole']['install_dir']}/#{ZIP_FILE.gsub('.zip', '')}/conf/topology.xml" do
  source "topology.xml.erb"
  owner "root"
  group "root"
  mode "0644"
  variables({:master => @@master})

How can I avoid this problem? 

Thanks a lot

Daniel Cukier

Archive powered by MHonArc 2.6.16.