diff --git a/generators/input/environments.rb b/generators/input/environments.rb index 90c12aca57763dfccafc32f76a74f19848fa9167..4073e59ab5729cf7199d7ddb9c669f87e7296186 100755 --- a/generators/input/environments.rb +++ b/generators/input/environments.rb @@ -602,6 +602,7 @@ environment 'squeeze-x64-xen-0.8' do state "stable" file({:path => "/grid5000/images/squeeze-x64-xen-0.8.tgz", :md5 => "243961b600246379b1257b57c5905c68"}) kernel "2.6.26.2" + available_on %w{bordeaux grenoble lille lyon nancy orsay rennes sophia toulouse} valid_on "bordeplage , bordereau , borderline , adonis , edel , genepi , chicon , chimint , chinqchint , chirloute , capricorne , sagittaire , graphene , griffon , gdx , netgdx , paradent , paramount , parapide , parapluie , helios , sol , suno, pastel , violette" based_on "Debian version lenny for amd64" consoles [{:port => "ttyS0", :bps => 34800}] diff --git a/generators/lib/g5k_generator.rb b/generators/lib/g5k_generator.rb index 0dc161aedc774f50a1ff33420ca583e9ac8a1f88..21eab7af9d058dbafb71943ac69112021e2b200b 100755 --- a/generators/lib/g5k_generator.rb +++ b/generators/lib/g5k_generator.rb @@ -63,49 +63,7 @@ module G5K def dns_lookup(network_address) Resolv.getaddress(network_address) end - - # Remotly execute commands, and retrieve stdout, stderr and exit code. - def ssh_exec!(ssh, command) - stdout_data = "" - stderr_data = "" - exit_code = nil - exit_signal = nil - ssh.open_channel do |channel| - channel.exec(command) do |ch, success| - unless success - abort "FAILED: couldn't execute command (ssh.channel.exec)" - end - channel.on_data do |ch,data| - stdout_data+=data - end - - channel.on_extended_data do |ch,type,data| - stderr_data+=data - end - - channel.on_request("exit-status") do |ch,data| - exit_code = data.read_long - end - - channel.on_request("exit-signal") do |ch, data| - exit_signal = data.read_long - end - end - end - ssh.loop - [stdout_data, stderr_data, exit_code, exit_signal] - end - # Get the IP address corresponding to the host fqdn throught ssh channel - def dns_lookup_through_ssh(ssh,fqdn) - results = ssh_exec! ssh, "host #{fqdn}" - if results[2] == 0 - results[0].split(" ").reverse[0] - else - fail "Failed to get ip address of '#{fqdn}' : #{results[1]}" - end - end - # Lookup a key in one of the configuration files passed to the generator # # Usage: @@ -178,6 +136,17 @@ module G5K def service(uid, *options, &block) build_context(:services, uid, *options, &block) end + def available_on(sites_uid) + env_uid = @context[:uid] + old_context = @context + @context = @data + sites_uid.each{|site_uid| + site site_uid.to_sym, {:discard_content => true} do + environment "#{env_uid}", :refer_to => "grid5000/environments/#{env_uid}" + end + } + @context = old_context + end def build_context(key, uid, *options, &block) type = key.to_s.chop uid = uid.to_s @@ -191,7 +160,7 @@ module G5K if (same_trees = @context[key].select{|tree| tree[:uid] == uid}).size > 0 @context = same_trees.first else - @context[key] << G5K::Tree.new.replace({:uid => uid, :type => type}) + @context[key] << G5K::Tree.new.replace({:uid => uid, :type => type}.merge((options[:discard_content]) ? {:discard_content => true} : {})) @context = @context[key].last end block.call(uid) if block @@ -234,8 +203,10 @@ module G5K new_content = JSON.pretty_generate(file.contents) existing_content = File.exists?(full_path) ? File.open(full_path, "r").read : "" if new_content.hash != existing_content.hash - puts "File to be written = \t#{full_path}" - File.open(full_path, "w+"){ |f| f << new_content } unless options[:simulate] + unless file.has_key? :discard_content and file[:discard_content] + puts "File to be written = \t#{full_path}" + File.open(full_path, "w+"){ |f| f << new_content } unless options[:simulate] + end end end groups.has_key?(G5K::Link) and groups[G5K::Link].each do |link|