From b2d8530a4b7ad6b8ede165880ae73f2a43534337 Mon Sep 17 00:00:00 2001 From: Laurent Pouilloux <laurent.pouilloux@inria.fr> Date: Fri, 26 Jan 2024 08:04:34 +0100 Subject: [PATCH] [puppet][clusters] update values from hiera with value from refrepo --- lib/refrepo/gen/puppet/clusters.rb | 46 ++++++++++++++++++------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/lib/refrepo/gen/puppet/clusters.rb b/lib/refrepo/gen/puppet/clusters.rb index 5a76d4a10a2..d75dfcf55f1 100644 --- a/lib/refrepo/gen/puppet/clusters.rb +++ b/lib/refrepo/gen/puppet/clusters.rb @@ -1,39 +1,49 @@ require 'refrepo/data_loader' def generate_puppet_clusters(options) + if not options[:conf_dir] options[:conf_dir] = "#{options[:output_dir]}/platforms/production/hieradata/" end - - if options[:sites] != G5K_SITES - raise "SITE options is not valid as clusters.yaml contains all sites" - end - data = load_data_hierarchy - data.delete_if { |key| key != 'sites' } + # Loading current data from hiera + hiera = YAML.load_file("#{options[:conf_dir]}clusters.yaml")['grid5000::clusters'] - yaml_data = {} + # Updating data from refrepo + refrepo = load_data_hierarchy + refrepo.delete_if { |key| key != 'sites' } - data['sites'].sort.each do |s_uid, s_hash| - yaml_data[s_uid] = {} + refrepo['sites'].select{ |k, _v| options[:sites].include? k}.sort.each do |s_uid, s_hash| + if ! hiera.key? s_uid + puts "Add #{s_uid}" + hiera[s_uid] = {} + end s_hash['clusters'].sort_by{|c_uid, _c_hash| [c_uid[/(\D+)/, 1], c_uid[/(\d+)/, 1].to_i]}.each do |c_uid, c_hash| + if ! hiera[s_uid].key? c_uid + puts " Add #{s_uid}" + hiera[s_uid][c_uid] = {} + end _, f_node = c_hash["nodes"].first - queue = f_node['supported_job_types']['queues'].sort.reverse.first + queue = f_node['supported_job_types']['queues'].select{|q| q != 'admin'}[0] disk_reservation = f_node['storage_devices'].filter{|d| d.key?('reservation')}.length > 0 - gpu = f_node.key?('gpu_devices') + gpu = f_node.key?('gpu_devices') if ! f_node.key?('chassis') - puts "no chassis field for #{f_node['uid']}, setting warranty to false" + puts "no chassis field for #{f_node['uid']}, has g5k-checks data been imported ?" warrantied = false else warrantied = f_node['chassis'].key?('warranty_end') ? DateTime.parse(f_node['chassis']['warranty_end']) > DateTime.now : false end - - yaml_data[s_uid][c_uid] = {"queue" => queue, - "disk_reservation" => disk_reservation, - "gpu" => gpu, - "warrantied" => warrantied} + c_data = {"queue" => queue, + "disk_reservation" => disk_reservation, + "gpu" => gpu, + "warrantied" => warrantied} + if hiera[s_uid][c_uid] != c_data + diff = hiera[s_uid][c_uid].dup.delete_if { |k, v| c_data[k] == v }.merge!(c_data.dup.delete_if { |k, _v| hiera[s_uid][c_uid].has_key?(k) }) + puts "#{s_uid}-#{c_uid} Changes detected #{diff}" + hiera[s_uid][c_uid] = c_data + end end end outfile = File.open("#{options[:conf_dir]}clusters.yaml", "w") - outfile.write({'grid5000::clusters' => yaml_data}.to_yaml) + outfile.write({'grid5000::clusters' => hiera}.to_yaml) end \ No newline at end of file -- GitLab