diff --git a/Rakefile b/Rakefile index a7c8eb58ffffbc8788658710312a0d7e753c657f..d963e057c87ba7603f0a3ada6b243f5a21916171 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,10 @@ +if ENV['COV'] + require 'simplecov' + SimpleCov.start +end + +$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) +require 'refrepo' REFAPI_DIR = "./generators/reference-api" PUPPET_DIR = "./generators/puppet" @@ -5,6 +12,9 @@ OAR_DIR = "./generators/oar-properties" VALIDATORS_DIR = "./generators/input-validators" WIKI_DIR = "./generators/wiki" +# Get the list of sites as the list of directories in input/grid5000/sites +G5K_SITES = (Dir::entries('input/grid5000/sites') - ['.', '..']).sort + namespace :puppet do all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k] @@ -43,13 +53,36 @@ namespace :validators do end end -desc "See info about wiki generators" -task "wiki" do - puts "Wikigenerators are in generators/wiki. See the 'wikigen' script." - puts " => generators/wiki/wikigen -h" - puts "Examples:" - puts " generators/wiki/wiki -g cpu_parameters -s global -d" - puts " generators/wiki/wiki -g site_hardware -s nancy -d" +namespace :gen do + desc "Run wiki generator. Parameter: NAME={hardware,site_hardware,...} SITE={global,grenoble,...} DO={diff,print,update}" + task "wiki" do + options = {} + if ENV['SITE'] + options[:sites] = ENV['SITE'].split(',') + else + options[:sites] = ['global'] + G5K_SITES + end + if ENV['NAME'] + options[:generators] = ENV['NAME'].split(',') + else + puts "You must specify a generator name using NAME=" + exit(1) + end + options[:diff] = false + options[:print] = false + options[:update] = false + if ENV['DO'] + ENV['DO'].split(',').each do |t| + options[:diff] = true if t == 'diff' + options[:print] = true if t == 'print' + options[:update] = true if t == 'update' + end + else + puts "You must specify something to do using DO=" + exit(1) + end + RefRepo::Gen::Wiki::wikigen(options) + end end desc "Creates json data from inputs" diff --git a/generators/wiki/wikigen b/generators/wiki/wikigen deleted file mode 100755 index be61af1d3b7eb1d5a4106e70cbaa292d3fc86daa..0000000000000000000000000000000000000000 --- a/generators/wiki/wikigen +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env ruby - -=begin -require 'simplecov' -SimpleCov.start -=end - -$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' -require 'generators/cpu_parameters' -require 'generators/disk_reservation' -require 'generators/hardware' -require 'generators/oar_properties' -require 'generators/site_hardware' -require 'generators/site_network' - -GLOBAL_GENERATORS = { - 'cpu_parameters' => { - :gen => CPUParametersGenerator, - :page => "Generated/CPUParameters" - }, - 'disk_reservation' => { - :gen => DiskReservationGenerator, - :page => 'Generated/DiskReservation' - }, - 'hardware' => { - :gen => G5KHardwareGenerator, - :page => 'Hardware' - }, - 'oar_properties' => { - :gen => OarPropertiesGenerator, - :page => 'OAR_Properties' - } -} -SITE_GENERATORS = { - 'site_hardware' => { - :gen => SiteHardwareGenerator, - :page_suffix => ':Hardware' - }, - 'site_network' => { - :gen => SiteNetworkGenerator, - :page_suffix => ':GeneratedNetwork' - } -} -GENERATORS = GLOBAL_GENERATORS.merge(SITE_GENERATORS) - -ret = true -options = WikiGenerator::parse_options -myopts = options.clone -options[:generators].each do |g| - myopts[:generators] = [g] - options[:sites].each do |s| - myopts[:sites] = [s] - if GLOBAL_GENERATORS.has_key?(g) and s == 'global' - ret &= GLOBAL_GENERATORS[g][:gen].new(GLOBAL_GENERATORS[g][:page]).exec(myopts) - elsif SITE_GENERATORS.has_key?(g) and s != 'global' - ret &= SITE_GENERATORS[g][:gen].new(s.capitalize + SITE_GENERATORS[g][:page_suffix], s).exec(myopts) - else - puts "Nothing to do: #{g}/#{s}" - end - end -end -exit(ret) diff --git a/lib/refrepo.rb b/lib/refrepo.rb new file mode 100644 index 0000000000000000000000000000000000000000..3bd6df31bd2962fe5794538d499ea2ee1c466e25 --- /dev/null +++ b/lib/refrepo.rb @@ -0,0 +1,8 @@ +module RefRepo +end +module RefRepo::Gen +end + +require 'refrepo/gen/wiki' + + diff --git a/lib/refrepo/gen/wiki.rb b/lib/refrepo/gen/wiki.rb new file mode 100755 index 0000000000000000000000000000000000000000..663fe5798450d888431d028ff7088239d336120f --- /dev/null +++ b/lib/refrepo/gen/wiki.rb @@ -0,0 +1,62 @@ +#!/usr/bin/env ruby + +require 'refrepo/gen/wiki/wiki_generator' +require 'refrepo/gen/wiki/mw_utils' +require 'refrepo/gen/wiki/generators/cpu_parameters' +require 'refrepo/gen/wiki/generators/disk_reservation' +require 'refrepo/gen/wiki/generators/hardware' +require 'refrepo/gen/wiki/generators/oar_properties' +require 'refrepo/gen/wiki/generators/site_hardware' +require 'refrepo/gen/wiki/generators/site_network' + +module RefRepo::Gen::Wiki + + GLOBAL_GENERATORS = { + 'cpu_parameters' => { + :gen => CPUParametersGenerator, + :page => "Generated/CPUParameters" + }, + 'disk_reservation' => { + :gen => DiskReservationGenerator, + :page => 'Generated/DiskReservation' + }, + 'hardware' => { + :gen => G5KHardwareGenerator, + :page => 'Hardware' + }, + 'oar_properties' => { + :gen => OarPropertiesGenerator, + :page => 'OAR_Properties' + } + } + SITE_GENERATORS = { + 'site_hardware' => { + :gen => SiteHardwareGenerator, + :page_suffix => ':Hardware' + }, + 'site_network' => { + :gen => SiteNetworkGenerator, + :page_suffix => ':GeneratedNetwork' + } + } + GENERATORS = GLOBAL_GENERATORS.merge(SITE_GENERATORS) + + def self.wikigen(options) + ret = true + myopts = options.clone + options[:generators].each do |g| + myopts[:generators] = [g] + options[:sites].each do |s| + myopts[:sites] = [s] + if GLOBAL_GENERATORS.has_key?(g) and s == 'global' + ret &= GLOBAL_GENERATORS[g][:gen].new(GLOBAL_GENERATORS[g][:page]).exec(myopts) + elsif SITE_GENERATORS.has_key?(g) and s != 'global' + ret &= SITE_GENERATORS[g][:gen].new(s.capitalize + SITE_GENERATORS[g][:page_suffix], s).exec(myopts) + else + puts "Nothing to do: #{g}/#{s}" + end + end + end + return ret + end +end diff --git a/generators/wiki/lib/generators/cpu_parameters.rb b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb similarity index 95% rename from generators/wiki/lib/generators/cpu_parameters.rb rename to lib/refrepo/gen/wiki/generators/cpu_parameters.rb index 3d7b618ec69205aeb6499901c79130fc6d564cfa..45fa44575cf5b93e5a005e40de412a0c07f8e148 100644 --- a/generators/wiki/lib/generators/cpu_parameters.rb +++ b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb @@ -1,5 +1,4 @@ -$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' class CPUParametersGenerator < WikiGenerator diff --git a/generators/wiki/lib/generators/disk_reservation.rb b/lib/refrepo/gen/wiki/generators/disk_reservation.rb similarity index 98% rename from generators/wiki/lib/generators/disk_reservation.rb rename to lib/refrepo/gen/wiki/generators/disk_reservation.rb index dd5d4aef89daddd845bee21da3b30a26cccd93b6..fec0432168371f5d227aaf4270721be4b81eeb23 100644 --- a/generators/wiki/lib/generators/disk_reservation.rb +++ b/lib/refrepo/gen/wiki/generators/disk_reservation.rb @@ -1,6 +1,6 @@ # coding: utf-8 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' class DiskReservationGenerator < WikiGenerator diff --git a/generators/wiki/lib/generators/hardware.rb b/lib/refrepo/gen/wiki/generators/hardware.rb similarity index 99% rename from generators/wiki/lib/generators/hardware.rb rename to lib/refrepo/gen/wiki/generators/hardware.rb index bebe8d047550596b2a6e0db2f60c77ed4b3ad9ea..47c015d7fae721a60f0e87c44b38bb51f6811ddd 100644 --- a/generators/wiki/lib/generators/hardware.rb +++ b/lib/refrepo/gen/wiki/generators/hardware.rb @@ -1,6 +1,6 @@ # coding: utf-8 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' require_relative './site_hardware.rb' class G5KHardwareGenerator < WikiGenerator diff --git a/generators/wiki/lib/generators/oar_properties.rb b/lib/refrepo/gen/wiki/generators/oar_properties.rb similarity index 98% rename from generators/wiki/lib/generators/oar_properties.rb rename to lib/refrepo/gen/wiki/generators/oar_properties.rb index 3598d44aa8a6d52fe6887cc1fe1dc630bb33c9b7..fd95a35c1afb671b69bf4e4a91c7918005ec879d 100644 --- a/generators/wiki/lib/generators/oar_properties.rb +++ b/lib/refrepo/gen/wiki/generators/oar_properties.rb @@ -1,8 +1,8 @@ # coding: utf-8 -$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' -require_relative '../../../oar-properties/lib/lib-oar-properties' +$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators/oar-properties/lib'))) +require 'lib-oar-properties' class OarPropertiesGenerator < WikiGenerator diff --git a/generators/wiki/lib/generators/site_hardware.rb b/lib/refrepo/gen/wiki/generators/site_hardware.rb similarity index 99% rename from generators/wiki/lib/generators/site_hardware.rb rename to lib/refrepo/gen/wiki/generators/site_hardware.rb index a73d008656a18b6edb4673621d486d34c7cd52eb..c38b04d922919fc122ac5b2b398f286c71cfe410 100644 --- a/generators/wiki/lib/generators/site_hardware.rb +++ b/lib/refrepo/gen/wiki/generators/site_hardware.rb @@ -1,6 +1,6 @@ # coding: utf-8 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' class SiteHardwareGenerator < WikiGenerator diff --git a/generators/wiki/lib/generators/site_network.rb b/lib/refrepo/gen/wiki/generators/site_network.rb similarity index 90% rename from generators/wiki/lib/generators/site_network.rb rename to lib/refrepo/gen/wiki/generators/site_network.rb index 896741fb9ff34287bd72767460c90c2cf7234d49..4f0c222fcda1cfd5e47644bf2c9c4283d2c04d75 100644 --- a/generators/wiki/lib/generators/site_network.rb +++ b/lib/refrepo/gen/wiki/generators/site_network.rb @@ -1,8 +1,9 @@ # coding: utf-8 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib'))) -require 'wiki_generator' +require 'refrepo/gen/wiki/wiki_generator' -require_relative '../../../input-validators/check-network-description' +$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators'))) +require 'input-validators/check-network-description' # This class generates the network description of each site, in .dot # and .png format diff --git a/generators/wiki/lib/mw_utils.rb b/lib/refrepo/gen/wiki/mw_utils.rb similarity index 94% rename from generators/wiki/lib/mw_utils.rb rename to lib/refrepo/gen/wiki/mw_utils.rb index 7483bae108d07329497c85107b5c02cffca503de..519593f04798cf069f493509b178ce5279b7cde5 100644 --- a/generators/wiki/lib/mw_utils.rb +++ b/lib/refrepo/gen/wiki/mw_utils.rb @@ -1,3 +1,6 @@ +require 'active_support' +require 'active_support/core_ext/object/deep_dup' + require 'pp' require 'open-uri' require 'uri' @@ -5,11 +8,6 @@ require 'net/http' require 'net/https' require 'mediawiki_api' -# also add generators/lib to load path -$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))) -require 'input_loader' - - #Adding method to mediawiki_api client module MediawikiApi @@ -113,10 +111,10 @@ module G5K @@global_hash = nil def self.get_global_hash if @@global_hash.nil? - @@global_hash = load_yaml_file_hierarchy(File.expand_path("../../../input/grid5000/", File.dirname(__FILE__))) + @@global_hash = load_yaml_file_hierarchy end # return a deep copy of global_hash - return Marshal.load(Marshal.dump(@@global_hash)) + return @@global_hash.deep_dup end SITES = get_global_hash['sites'].keys.sort diff --git a/generators/wiki/lib/wiki_generator.rb b/lib/refrepo/gen/wiki/wiki_generator.rb similarity index 99% rename from generators/wiki/lib/wiki_generator.rb rename to lib/refrepo/gen/wiki/wiki_generator.rb index 7c234d261205fae3b0f58deb1237cd84d596e499..de6a61e1d7c10948204a9e786c0f21f45ac13972 100644 --- a/generators/wiki/lib/wiki_generator.rb +++ b/lib/refrepo/gen/wiki/wiki_generator.rb @@ -1,11 +1,10 @@ # also add generators/lib to load path $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))) -require 'input_loader' +require 'refrepo/input_loader' require "optparse" require "mediawiki_api" require "diffy" -require "mw_utils" require 'date' require 'pp' diff --git a/generators/lib/hash/hash.rb b/lib/refrepo/hash/hash.rb similarity index 100% rename from generators/lib/hash/hash.rb rename to lib/refrepo/hash/hash.rb diff --git a/generators/lib/input_loader.rb b/lib/refrepo/input_loader.rb similarity index 93% rename from generators/lib/input_loader.rb rename to lib/refrepo/input_loader.rb index 6fa356b512f54a8a4e19c82d51bd5cb58bd20023..af68108e24a7cd5f44511741dd7d10bfc18969ab 100755 --- a/generators/lib/input_loader.rb +++ b/lib/refrepo/input_loader.rb @@ -2,9 +2,9 @@ require 'yaml' require 'erb' -require_relative '../lib/hash/hash.rb' +require 'refrepo/hash/hash.rb' -def load_yaml_file_hierarchy(directory) +def load_yaml_file_hierarchy(directory = File.expand_path("../../input/grid5000/", File.dirname(__FILE__))) global_hash = {} # the global data structure