def create_nodes(cluster, facet): """Initialize Chef nodes""" instances = create_instances(cluster, facet) for nodename, ipaddress in instances: node = Node(nodename) if node.exists: node_ipaddress = node.get('ipaddress') if ipaddress is None and node_ipaddress: ipaddress = node_ipaddress elif node_ipaddress and node_ipaddress != ipaddress: raise Exception('The remote IP address is different: %s' % node_ipaddress) if ipaddress is None: raise Exception('Can not determine the IP address for %s' % nodename) node['ipaddress'] = ipaddress # update environment and run_list node.chef_environment = cluster.environment run_list = list(cluster.run_list) run_list.extend(facet.run_list) # tagging the cluster run_list.append(u'role[%s_cluster]' % cluster.name) run_list.append(u'role[%s_%s]'% (cluster.name, facet.name)) for role in run_list: if role not in node.run_list: node.run_list.append(role) facet.nodes[ipaddress] = node