From bc8fbc1b32fc6d650927ff02ba887260e49a956b Mon Sep 17 00:00:00 2001
From: Simon Delamare <simon.delamare@ens-lyon.fr>
Date: Thu, 28 Jun 2018 13:57:24 +0200
Subject: [PATCH] [generator] Support for sites without cluster

---
 generators/input-validators/schema-site.yaml     | 4 ++--
 generators/puppet/bindg5k.rb                     | 6 +++---
 generators/puppet/templates/kavlan-dhcp.conf.erb | 2 +-
 generators/reference-api/reference-api.rb        | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/generators/input-validators/schema-site.yaml b/generators/input-validators/schema-site.yaml
index 3c58fd8e575..789dcd07c4e 100644
--- a/generators/input-validators/schema-site.yaml
+++ b/generators/input-validators/schema-site.yaml
@@ -1,6 +1,6 @@
 ---
-clusters: required_hash
-networks: required_hash
+clusters: optional_hash
+networks: optional_hash
 servers:
   <optional_hash>:
     <multi>:
diff --git a/generators/puppet/bindg5k.rb b/generators/puppet/bindg5k.rb
index 5aa027f05bb..de8172161b8 100644
--- a/generators/puppet/bindg5k.rb
+++ b/generators/puppet/bindg5k.rb
@@ -21,7 +21,7 @@ input_data_dir = "../../input/grid5000/"
 refapi = load_yaml_file_hierarchy(File.expand_path(input_data_dir, File.dirname(__FILE__)))
 
 $options = {}
-$options[:sites] = %w{grenoble lille luxembourg lyon nancy nantes rennes sophia}
+$options[:sites] = %w{grenoble lille luxembourg lyon nancy nantes rennes sophia toulouse}
 $options[:output_dir] = "/tmp/puppet"
 $options[:verbose] = false
 
@@ -388,7 +388,7 @@ def set_zone_header_records(zone, site)
   zone.mx = DNS::Zone::RR::MX.new
   zone.mx.priority = 10
   zone.mx.exchange = "mail.#{zone.site_uid}.grid5000.fr."
-  if (File.basename(zone.file_path) == "#{zone.site_uid}.db")
+  if (File.basename(zone.file_path) == "#{zone.site_uid}.db" && site['frontend_ip'])
     zone.at = DNS::Zone::RR::A.new
     zone.at.address = site['frontend_ip']
   end
@@ -494,7 +494,7 @@ refapi["sites"].each { |site_uid, site|
   site_records['networks'] = get_networks_records(site, 'networks') unless site['networks'].nil?
   site_records['laptops'] = get_networks_records(site, 'laptops') unless site['laptops'].nil?
 
-  site.fetch("clusters").sort.each { |cluster_uid, cluster|
+  site.fetch("clusters", []).sort.each { |cluster_uid, cluster|
 
     cluster.fetch('nodes').select { |node_uid, node|
       node != nil && node["status"] != "retired" && node.has_key?('network_adapters')
diff --git a/generators/puppet/templates/kavlan-dhcp.conf.erb b/generators/puppet/templates/kavlan-dhcp.conf.erb
index 927c48c9740..ca8fddf9de3 100644
--- a/generators/puppet/templates/kavlan-dhcp.conf.erb
+++ b/generators/puppet/templates/kavlan-dhcp.conf.erb
@@ -30,7 +30,7 @@ subnet <%= kavlan_ip.network.to_addr %> netmask <%= kavlan_ip.netmask.to_addr %>
 <%
 refapi['sites'].sort.to_h.each_key do |site|
   next if kavlan_id.to_i.between?(1, 9) and site != site_uid
-  refapi['sites'][site]['clusters'].sort.to_h.each do |cluster_uid, cluster|
+  refapi['sites'][site].fetch('clusters', []).sort.to_h.each do |cluster_uid, cluster|
     cluster['nodes'].sort.to_h.each do |node_uid, node|
       next if node['status'] and node['status'] == 'retired'
       node['network_adapters'].each do |interface_uid, interface|
diff --git a/generators/reference-api/reference-api.rb b/generators/reference-api/reference-api.rb
index f6c9fe86418..291e81a00dd 100644
--- a/generators/reference-api/reference-api.rb
+++ b/generators/reference-api/reference-api.rb
@@ -185,11 +185,11 @@ global_hash["sites"].each do |site_uid, site|
   # Write network info
   #
 
-  site["networks"].sort.each do |network_uid, network|
+  site.fetch("networks", []).sort.each do |network_uid, network|
     create_network_equipment(network_uid, network, refapi_path, site_uid)
   end
 
-  site["clusters"].sort.each do |cluster_uid, cluster|
+  site.fetch("clusters", []).sort.each do |cluster_uid, cluster|
     puts "  #{cluster_uid}"
 
     #
-- 
GitLab