astute and cobbler can use one file

doesn't break backward comparbility
This commit is contained in:
Ivan Bondar 2013-03-01 20:46:58 +04:00 committed by Gerrit Code Review
parent 0864741608
commit 68f5d9dcb4
3 changed files with 25 additions and 13 deletions

View File

@ -79,32 +79,37 @@ end
nodes_raw = YAML.load_file( opts[:filename] ) nodes_raw = YAML.load_file( opts[:filename] )
nodes = Array.new nodes = Array.new
domain_name = '' domain_name = ''
use_case = ''
nodes_raw.each do |key, value| if nodes_raw.has_key?('common')
domain_name = value if key =='domain_name' if nodes_raw['common'].has_key?('orchestrator_common')
common = nodes_raw['common']['orchestrator_common']
domain_name = common['domain_name'] if common.has_key?('domain_name')
use_case = common['use_case'] if common.has_key?('use_case')
end
end end
nodes_raw.each do |key, value| nodes_raw.each do |key, value|
next if (key == 'use_case') or (key =='domain_name') next if (key == 'common')
if /^\/.*\/$/.match(key) # if name stats and ends with '/' then it's regexp if /^\/.*\/$/.match(key) # if name stats and ends with '/' then it's regexp
name_regexp = Regexp.new(key.slice(1..-2)) name_regexp = Regexp.new(key.slice(1..-2))
name_with_domain_regexp = Regexp.new(key.slice(1..-2) + '.' + domain_name) name_with_domain_regexp = Regexp.new(key.slice(1..-2) + '.' + domain_name)
pinged_nodes_list.each do |name| pinged_nodes_list.each do |name|
if name_regexp.match(name) or name_with_domain_regexp.match(name) if name_regexp.match(name) or name_with_domain_regexp.match(name)
hash_element = value.clone hash_element = { 'role' => value['role'] }
hash_element['uid'] = name hash_element['uid'] = name
nodes += [hash_element] nodes += [hash_element]
end end
end end
else else
if pinged_nodes_list.include? key if pinged_nodes_list.include? key
hash_element = value.clone hash_element = { 'role' => value['role'] }
hash_element['uid'] = key hash_element['uid'] = key
nodes += [hash_element] nodes += [hash_element]
elsif pinged_nodes_list.include?(key + '.' + domain_name) elsif pinged_nodes_list.include?(key + '.' + domain_name)
# check if we can find this name after appending domain name # check if we can find this name after appending domain name
hash_element = value.clone hash_element = { 'role' => value['role'] }
hash_element['uid'] = key + '.' + domain_name hash_element['uid'] = key + '.' + domain_name
nodes += [hash_element] nodes += [hash_element]
else # coudn't ping this node or wrong name else # coudn't ping this node or wrong name
@ -118,17 +123,17 @@ ctrl_nodes = ctrl_nodes.sort{|x,y| x['uid'] <=> y['uid']}
compute_nodes = nodes.select {|n| n['role'] == 'compute'} compute_nodes = nodes.select {|n| n['role'] == 'compute'}
compute_nodes = compute_nodes.sort{|x,y| x['uid'] <=> y['uid']} compute_nodes = compute_nodes.sort{|x,y| x['uid'] <=> y['uid']}
if nodes_raw['use_case'] == "minimal" or if use_case == "minimal" or
nodes_raw['use_case'] == "simple" use_case == "simple"
puppet_consecutive_call(context, ctrl_nodes) puppet_consecutive_call(context, ctrl_nodes)
puppet_parallel_call(context, compute_nodes) puppet_parallel_call(context, compute_nodes)
elsif nodes_raw['use_case'] == "compact" elsif use_case == "compact"
puppet_consecutive_call(context, ctrl_nodes[0]) puppet_consecutive_call(context, ctrl_nodes[0])
puppet_parallel_call(context, ctrl_nodes[1..2]) puppet_parallel_call(context, ctrl_nodes[1..2])
puppet_parallel_call(context, ctrl_nodes) puppet_parallel_call(context, ctrl_nodes)
puppet_consecutive_call(context, ctrl_nodes[0]) puppet_consecutive_call(context, ctrl_nodes[0])
puppet_parallel_call(context, ctrl_nodes[1..2] + compute_nodes) puppet_parallel_call(context, ctrl_nodes[1..2] + compute_nodes)
elsif nodes_raw['use_case'] == "full" elsif use_case == "full"
storage_nodes = nodes.select {|n| n['role'] == 'storage'} storage_nodes = nodes.select {|n| n['role'] == 'storage'}
storage_nodes = storage_nodes.sort{|x,y| x['uid'] <=> y['uid']} storage_nodes = storage_nodes.sort{|x,y| x['uid'] <=> y['uid']}
proxy_nodes = nodes.select {|n| n['role'] == 'proxy'} proxy_nodes = nodes.select {|n| n['role'] == 'proxy'}
@ -142,5 +147,5 @@ elsif nodes_raw['use_case'] == "full"
puppet_parallel_call(context, storage_nodes) puppet_parallel_call(context, storage_nodes)
puppet_parallel_call(context, proxy_nodes[1]) puppet_parallel_call(context, proxy_nodes[1])
else else
puts "Use case " + nodes_raw['use_case'] + " is not supported!" puts "Use case " + use_case + " is not supported!"
end end

View File

@ -137,6 +137,12 @@ def main():
with open(params.file, 'r') as file: with open(params.file, 'r') as file:
nodes = yaml.load(file.read()) nodes = yaml.load(file.read())
common = nodes.pop('common') if 'common' in nodes.keys() else {}
cobbler_common = common.pop('cobbler_common') if 'cobbler_common' in common.keys() else {}
for x in nodes:
if "role" in nodes[x].keys(): nodes[x].pop("role")
nodes[x].update(cobbler_common)
for name in nodes: for name in nodes:
logger.info("====== Defining node ======: %s" % name) logger.info("====== Defining node ======: %s" % name)
update_system(name, nodes[name]) update_system(name, nodes[name])

View File

@ -11,8 +11,9 @@ class Astute(object):
if not storages: storages = [] if not storages: storages = []
if not computes: computes = [] if not computes: computes = []
config = { config = {
'use_case': use_case, 'common' : {
'domain_name': 'your-domain-name.com' 'orchestrator_common' : { 'use_case': use_case, 'domain_name': 'your-domain-name.com' }
}
} }
map(lambda x: config.update({str(x.name): {'role': 'controller'}}), controllers) map(lambda x: config.update({str(x.name): {'role': 'controller'}}), controllers)
map(lambda x: config.update({str(x.name): {'role': 'compute'}}), computes) map(lambda x: config.update({str(x.name): {'role': 'compute'}}), computes)