diff --git a/generators/puppet/bindg5k.rb b/generators/puppet/bindg5k.rb index c93301057b379106eeadfa54eca51faae20391dd..5aa027f05bb1c9d3b36e08d2da301afb14c05b6e 100644 --- a/generators/puppet/bindg5k.rb +++ b/generators/puppet/bindg5k.rb @@ -22,14 +22,14 @@ refapi = load_yaml_file_hierarchy(File.expand_path(input_data_dir, File.dirname( $options = {} $options[:sites] = %w{grenoble lille luxembourg lyon nancy nantes rennes sophia} -$options[:output_dir] = "/tmp/puppet-repo" +$options[:output_dir] = "/tmp/puppet" $options[:verbose] = false OptionParser.new do |opts| opts.banner = "Usage: bindg5k.rb [options]" opts.separator "" - opts.separator "Example: ruby bindg5k.rb -s nancy -o /tmp/puppet-repo" + opts.separator "Example: ruby bindg5k.rb -s nancy -o /tmp/puppet" opts.on('-o', '--output-dir dir', String, 'Select the puppet repo path', "Default: " + $options[:output_dir]) do |d| $options[:output_dir] = d @@ -448,13 +448,18 @@ def get_orphan_reverse_manual_zones(zones_dir, site_uid, site) return zones end -def write_global_site_conf(site_uid, dest_dir, zones_dir) - ['global', 'site'].each { |dir| - conf_file = File.join(dest_dir, "#{dir}/conf", "global-#{site_uid}.conf") +def write_site_conf(site_uid, dest_dir, zones_dir) + conf_file = File.join(dest_dir, "#{site_uid}-zones.conf") FileUtils.mkdir_p(File.dirname(conf_file)) - conf_content = ERB.new(File.read(File.expand_path('templates/bind-global-site.conf.erb', File.dirname(__FILE__)))).result(binding) + conf_content = ERB.new(File.read(File.expand_path('templates/bind-site.conf.erb', File.dirname(__FILE__)))).result(binding) + File.write(conf_file, conf_content) +end + +def write_site_local_conf(site_uid, dest_dir, zones_dir) + conf_file = File.join(dest_dir, "#{site_uid}-localzones.conf") + FileUtils.mkdir_p(File.dirname(conf_file)) + conf_content = ERB.new(File.read(File.expand_path('templates/bind-site-local.conf.erb', File.dirname(__FILE__)))).result(binding) File.write(conf_file, conf_content) - } end def write_zone(zone) @@ -474,7 +479,7 @@ refapi["sites"].each { |site_uid, site| next unless $options[:sites].include?(site_uid) - dest_dir = "#{$options[:output_dir]}/modules/bindg5k/files/" + dest_dir = "#{$options[:output_dir]}/platforms/production/modules/generated/files/bind/" zones_dir = File.join(dest_dir, "zones/#{site_uid}") site_records = {} @@ -590,6 +595,7 @@ refapi["sites"].each { |site_uid, site| write_zone(zone) } - write_global_site_conf(site_uid, dest_dir, zones_dir) + write_site_conf(site_uid, dest_dir, zones_dir) + write_site_local_conf(site_uid, dest_dir, zones_dir) } # each sites diff --git a/generators/puppet/templates/bind-site-local.conf.erb b/generators/puppet/templates/bind-site-local.conf.erb new file mode 100644 index 0000000000000000000000000000000000000000..f3fa5bb645649087730a612e678926492467305a --- /dev/null +++ b/generators/puppet/templates/bind-site-local.conf.erb @@ -0,0 +1,22 @@ +<% +# List file in the directory instead of using the 'reverse' variable as some files might be set manually +Dir.entries(File.join(zones_dir, "local")).sort.each { |file| + next unless /.*.db$/.match(file) + + comment = '' + zone = '' + + if file == "#{site_uid}.db" + zone = "#{site_uid}.grid5000.fr" + elsif /^reverse-(.*).db$/.match(file) + zone = "#{$1}.in-addr.arpa" + else + puts "Error: unknown zone for '#{file}' in '#{zones_dir}'" + next + end +%> + zone "<%= zone %>" { + type master; + file "/etc/bind/zones/<%= site_uid %>/local/<%= file %>"; + }; +<% } %> diff --git a/generators/puppet/templates/bind-global-site.conf.erb b/generators/puppet/templates/bind-site.conf.erb similarity index 80% rename from generators/puppet/templates/bind-global-site.conf.erb rename to generators/puppet/templates/bind-site.conf.erb index f4ab07e98e2107be9b67e24e2399b4297842f252..0049a3b6b4a1a93abbc29bd1b9b46420b6278603 100644 --- a/generators/puppet/templates/bind-global-site.conf.erb +++ b/generators/puppet/templates/bind-site.conf.erb @@ -1,12 +1,4 @@ <% - if dir == 'global' - type = 'master' - elsif dir == 'site' - type = 'slave' - else - raise "'dir' undefined" - end - # List file in the directory instead of using the 'reverse' variable as some files might be set manually Dir.entries(zones_dir).sort.each { |file| next unless /.*.db$/.match(file) @@ -27,8 +19,7 @@ Dir.entries(zones_dir).sort.each { |file| end %> zone "<%= zone %>" { - type <%= type %>; + type master; file "/etc/bind/zones/<%= site_uid %>/<%= file %>"; - <%= type == 'slave' ? 'masters { master-ns-global; };' : '' %> }; <% } %>