diff --git a/Rakefile b/Rakefile index da0d0a622e4c4181890aaae4a53f713ffb76ece3..1f4fd9ff6d715ef63c74d56c5eb0ebcb0975d91f 100644 --- a/Rakefile +++ b/Rakefile @@ -203,10 +203,11 @@ namespace :gen do namespace :puppet do - all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k, :network_monitoring] + all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k, :network_monitoring, :'refapi-subset'] all_puppet_tasks.each { |t| - desc "Generate #{t} configuration -- parameters: [SITE={grenoble,...}] [OUTPUTDIR=(default: #{PUPPET_ODIR})] [CONFDIR=...] [VERBOSE=1]" + generated_desc = (t == :'refapi-subset') ? 'description' : 'configuration' + desc "Generate #{t} #{generated_desc} -- parameters: [SITE={grenoble,...}] [OUTPUTDIR=(default: #{PUPPET_ODIR})] [CONFDIR=...] [VERBOSE=1]" task t do require "refrepo/gen/puppet/#{t}" options = {} @@ -214,7 +215,7 @@ namespace :gen do options[:output_dir] = ENV['OUTPUTDIR'] || PUPPET_ODIR options[:verbose] = true if ENV['VERBOSE'] options[:conf_dir] = ENV['CONFDIR'] if ENV['CONFDIR'] - send("generate_puppet_#{t}", options) + send("generate_puppet_#{t}".gsub(/-/, '_'), options) end } diff --git a/lib/refrepo/gen/puppet/refapi-subset.rb b/lib/refrepo/gen/puppet/refapi-subset.rb new file mode 100644 index 0000000000000000000000000000000000000000..e63082962de3767d35399ef90c6926585d525e87 --- /dev/null +++ b/lib/refrepo/gen/puppet/refapi-subset.rb @@ -0,0 +1,31 @@ +# coding: utf-8 + +require 'refrepo/data_loader' + +def generate_puppet_refapi_subset(options) + if not options[:conf_dir] + options[:conf_dir] = "#{options[:output_dir]}/platforms/production/generators/refapi" + end + + options[:sites].each do |site| + output_file = "#{options[:output_dir]}/platforms/production/modules/generated/files/grid5000/refapi/#{site}.json" + gen_json(site, output_file) + end +end + +# For now, we only put software key in the generated JSON +def gen_json(site, output_path) + site_data_hierarchy = load_data_hierarchy + site_data_hierarchy.delete_if { |key| key != 'sites' } + site_data_hierarchy['sites'].delete_if { |key| key != site } + site_data_hierarchy['sites'][site].delete_if { |key| key != 'clusters' } + site_data_hierarchy['sites'][site]['clusters'].to_h.each do |cluster_uid, cluster_hash| + cluster_hash.delete_if { |key| key != 'nodes' } + cluster_hash['nodes'].to_h.each do |node_uid, node_hash| + node_hash.delete_if { |key| key != 'software' } + end + end + + output_file = File.new(output_path, 'w') + output_file.write(JSON.pretty_generate(site_data_hierarchy)) +end