From 5ca971e0c8d34eade80cf3e32b471657838b112d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Le=20Ninivin?= <cedric.leninivin@tiolive.com>
Date: Mon, 10 Sep 2012 13:30:28 +0200
Subject: [PATCH] Register now use slapos.cfg.example from master

---
 slapos/register/register.py             | 137 ++++++++++++++--------
 slapos/register/templates/slapos.cfg.in | 147 ------------------------
 2 files changed, 86 insertions(+), 198 deletions(-)
 delete mode 100644 slapos/register/templates/slapos.cfg.in

diff --git a/slapos/register/register.py b/slapos/register/register.py
index 7ea67ac75..c07db8662 100644
--- a/slapos/register/register.py
+++ b/slapos/register/register.py
@@ -28,13 +28,14 @@
 
 
 import base64
+import ConfigParser
 from getpass import getpass
 import logging
 from optparse import OptionParser, Option
 import os
-import pkg_resources
 import shutil
 import sys
+import tempfile
 import urllib2
 
 
@@ -111,8 +112,6 @@ class Parser(OptionParser):
     if options.password != None and options.login == None :
       self.error("Please enter your login with your password")
 
-    if options.ipv6_interface != '' :
-      options.ipv6_interface = ('ipv6_interface = ' + options.ipv6_interface)
 
     return options, node_name
 
@@ -183,62 +182,98 @@ def save_former_config(config):
       else: break
     config.logger.info( "Former slapos configuration detected in %s moving to %s" % (former_slapos_configuration,saved_slapos_configuration))
     shutil.move(former_slapos_configuration,saved_slapos_configuration)
+
+def get_slapos_conf_example():
+  """
+  Get slapos.cfg.example and return its path
+  """
+  register_server_url = "http://git.erp5.org/gitweb/slapos.core.git/blob_plain/HEAD:/slapos.cfg.example"
+  request = urllib2.Request(register_server_url)
+  url = urllib2.urlopen(request)  
+  page = url.read()
+  info, path = tempfile.mkstemp()
+  slapos_cfg_example = open(path,'w')
+  slapos_cfg_example.write(page)
+  slapos_cfg_example.close()
+  return path
     
 
 
 def slapconfig(config):
   """Base Function to configure slapos in /etc/opt/slapos"""
   dry_run = config.dry_run
-  try:    
-    # Create slapos configuration directory if needed
-    slap_configuration_directory = os.path.normpath(config.slapos_configuration)
-    slap_configuration_file = os.path.join(slap_configuration_directory, 'slapos.cfg')
-    if not os.path.exists(slap_configuration_directory):
-      config.logger.info ("Creating directory: %s" % slap_configuration_directory)
-      if not dry_run:
-        os.mkdir(slap_configuration_directory, 0711)
-    
-    user_certificate_repository_path = os.path.join(slap_configuration_directory,'ssl')
-    if not os.path.exists(user_certificate_repository_path):
-      config.logger.info ("Creating directory: %s" % user_certificate_repository_path)
-      if not dry_run:
-        os.mkdir(user_certificate_repository_path, 0711)
+  # Create slapos configuration directory if needed
+  slap_configuration_directory = os.path.normpath(config.slapos_configuration)
+
+  if not os.path.exists(slap_configuration_directory):
+    config.logger.info ("Creating directory: %s" % slap_configuration_directory)
+    if not dry_run:
+      os.mkdir(slap_configuration_directory, 0711)
+  
+  user_certificate_repository_path = os.path.join(slap_configuration_directory,'ssl')
+  if not os.path.exists(user_certificate_repository_path):
+    config.logger.info ("Creating directory: %s" % user_certificate_repository_path)
+    if not dry_run:
+      os.mkdir(user_certificate_repository_path, 0711)
  
-    key_file = os.path.join(user_certificate_repository_path, 'key') 
-    cert_file = os.path.join(user_certificate_repository_path, 'certificate')
-    for (src, dst) in [(config.key, key_file), (config.certificate,
-        cert_file)]:
-      config.logger.info ("Copying to %r, and setting minimum privileges" % dst)
-      if not dry_run:
-        destination = open(dst,'w')
-        destination.write(''.join(src))
-        destination.close()
-        os.chmod(dst, 0600)
-        os.chown(dst, 0, 0)
-
-    certificate_repository_path = os.path.join(slap_configuration_directory,'ssl','partition_pki')
-    if not os.path.exists(certificate_repository_path):
-      config.logger.info ("Creating directory: %s" % certificate_repository_path)
-      if not dry_run:
-        os.mkdir(certificate_repository_path, 0711)
-    
-    # Put slapgrid configuration file
-    config.logger.info ("Creating slap configuration: %s" % slap_configuration_file)
+  key_file = os.path.join(user_certificate_repository_path, 'key') 
+  cert_file = os.path.join(user_certificate_repository_path, 'certificate')
+  for (src, dst) in [(config.key, key_file), (config.certificate,
+      cert_file)]:
+    config.logger.info ("Copying to %r, and setting minimum privileges" % dst)
+    if not dry_run:
+      destination = open(dst,'w')
+      destination.write(''.join(src))
+      destination.close()
+      os.chmod(dst, 0600)
+      os.chown(dst, 0, 0)
+
+  certificate_repository_path = os.path.join(slap_configuration_directory,'ssl','partition_pki')
+  if not os.path.exists(certificate_repository_path):
+    config.logger.info ("Creating directory: %s" % certificate_repository_path)
     if not dry_run:
-      open(slap_configuration_file, 'w').write(
-        pkg_resources.resource_stream(__name__,
-                                      'templates/slapos.cfg.in').read() % dict(
-          computer_id=config.computer_id, master_url=config.master_url,
-          key_file=key_file, cert_file=cert_file,
-          certificate_repository_path=certificate_repository_path,
-          partition_amount=config.partition_number,
-          interface=config.interface_name,
-          ipv4_network=config.ipv4_local_network,
-          ipv6_interface=config.ipv6_interface
-          ))
-    config.logger.info ("SlapOS configuration: DONE")
-  finally:
-    return 0
+      os.mkdir(certificate_repository_path, 0711)
+  
+  # Put slapos configuration file
+  slap_configuration_file = os.path.join(slap_configuration_directory, 
+                                           'slapos.cfg')
+  config.logger.info ("Creating slap configuration: %s" 
+                      % slap_configuration_file)
+
+  # Get example configuration file
+  slapos_cfg_example = get_slapos_conf_example()
+  configuration_example_parser = ConfigParser.RawConfigParser()
+  configuration_example_parser.read(slapos_cfg_example)  
+  os.remove(slapos_cfg_example)
+
+  # prepare slapos section
+  slaposconfig = dict(
+    computer_id=config.computer_id, master_url=config.master_url,
+    key_file=key_file, cert_file=cert_file,
+    certificate_repository_path=certificate_repository_path)
+  for key in slaposconfig :
+    configuration_example_parser.set('slapos',key,slaposconfig[key])
+
+  # prepare slapformat
+  slapformatconfig = dict(
+    interface_name=config.interface_name,
+    ipv4_local_network=config.ipv4_local_network,
+    partition_amount=config.partition_number
+    )
+  for key in slapformatconfig :
+    configuration_example_parser.set('slapformat',key,slapformatconfig[key])
+  
+  if not config.ipv6_interface == '':
+    configuration_example_parser.set('slapformat','ipv6_interface'
+                                     ,config.ipv6_interface)
+
+  if not dry_run:
+    file = open(slap_configuration_file,"w")
+    configuration_example_parser.write(file)
+    file.close()
+   
+  config.logger.info ("SlapOS configuration: DONE")
+
 
 # Class containing all parameters needed for configuration
 class Config:
diff --git a/slapos/register/templates/slapos.cfg.in b/slapos/register/templates/slapos.cfg.in
deleted file mode 100644
index 7fb36c32a..000000000
--- a/slapos/register/templates/slapos.cfg.in
+++ /dev/null
@@ -1,147 +0,0 @@
-[slapos]
-software_root = /opt/slapgrid
-instance_root = /srv/slapgrid
-master_url = %(master_url)s
-computer_id = %(computer_id)s
-key_file = %(key_file)s
-cert_file = %(cert_file)s
-certificate_repository_path = %(certificate_repository_path)s
-
-[slapformat]
-interface_name = %(interface)s
-computer_xml = /opt/slapos/slapos.xml
-log_file = /opt/slapos/slapformat.log
-create_tap = false
-partition_amount = %(partition_amount)s
-partition_base_name = slappart
-user_base_name = slapuser
-tap_base_name = slaptap
-# You can choose any other local network which does not conflict with your
-# current machine configuration
-ipv4_local_network = %(ipv4_network)s
-%(ipv6_interface)s
-
-[networkcache]
-# Define options for binary cache, used to download already compiled software.
-download-binary-cache-url = http://www.shacache.org/shacache
-download-cache-url = https://www.shacache.org/shacache
-download-binary-dir-url = http://www.shacache.org/shadir
-# List of signatures of uploaders we trust:
-#   Romain Courteaud
-#   Sebastien Robin
-#   Kazuhiko Shiozaki
-#   Cedric de Saint Martin
-#   Yingjie Xu
-#   Gabriel Monnerat
-#   艁ukasz Nowak
-#   Test Agent Signature
-signature-certificate-list =
-  -----BEGIN CERTIFICATE-----
-  MIIB4DCCAUkCADANBgkqhkiG9w0BAQsFADA5MQswCQYDVQQGEwJGUjEZMBcGA1UE
-  CBMQRGVmYXVsdCBQcm92aW5jZTEPMA0GA1UEChMGTmV4ZWRpMB4XDTExMDkxNTA5
-  MDAwMloXDTEyMDkxNTA5MDAwMlowOTELMAkGA1UEBhMCRlIxGTAXBgNVBAgTEERl
-  ZmF1bHQgUHJvdmluY2UxDzANBgNVBAoTBk5leGVkaTCBnzANBgkqhkiG9w0BAQEF
-  AAOBjQAwgYkCgYEApYZv6OstoqNzxG1KI6iE5U4Ts2Xx9lgLeUGAMyfJLyMmRLhw
-  boKOyJ9Xke4dncoBAyNPokUR6iWOcnPHtMvNOsBFZ2f7VA28em3+E1JRYdeNUEtX
-  Z0s3HjcouaNAnPfjFTXHYj4um1wOw2cURSPuU5dpzKBbV+/QCb5DLheynisCAwEA
-  ATANBgkqhkiG9w0BAQsFAAOBgQBCZLbTVdrw3RZlVVMFezSHrhBYKAukTwZrNmJX
-  mHqi2tN8tNo6FX+wmxUUAf3e8R2Ymbdbn2bfbPpcKQ2fG7PuKGvhwMG3BlF9paEC
-  q7jdfWO18Zp/BG7tagz0jmmC4y/8akzHsVlruo2+2du2freE8dK746uoMlXlP93g
-  QUUGLQ==
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB8jCCAVugAwIBAgIJAPu2zchZ2BxoMA0GCSqGSIb3DQEBBQUAMBIxEDAOBgNV
-  BAMMB3RzeGRldjMwHhcNMTExMDE0MTIxNjIzWhcNMTIxMDEzMTIxNjIzWjASMRAw
-  DgYDVQQDDAd0c3hkZXYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrPbh+
-  YGmo6mWmhVb1vTqX0BbeU0jCTB8TK3i6ep3tzSw2rkUGSx3niXn9LNTFNcIn3MZN
-  XHqbb4AS2Zxyk/2tr3939qqOrS4YRCtXBwTCuFY6r+a7pZsjiTNddPsEhuj4lEnR
-  L8Ax5mmzoi9nE+hiPSwqjRwWRU1+182rzXmN4QIDAQABo1AwTjAdBgNVHQ4EFgQU
-  /4XXREzqBbBNJvX5gU8tLWxZaeQwHwYDVR0jBBgwFoAU/4XXREzqBbBNJvX5gU8t
-  LWxZaeQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQA07q/rKoE7fAda
-  FED57/SR00OvY9wLlFEF2QJ5OLu+O33YUXDDbGpfUSF9R8l0g9dix1JbWK9nQ6Yd
-  R/KCo6D0sw0ZgeQv1aUXbl/xJ9k4jlTxmWbPeiiPZEqU1W9wN5lkGuLxV4CEGTKU
-  hJA/yXa1wbwIPGvX3tVKdOEWPRXZLg==
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB7jCCAVegAwIBAgIJAJWA0jQ4o9DGMA0GCSqGSIb3DQEBBQUAMA8xDTALBgNV
-  BAMMBHg2MXMwIBcNMTExMTI0MTAyNDQzWhgPMjExMTEwMzExMDI0NDNaMA8xDTAL
-  BgNVBAMMBHg2MXMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANdJNiFsRlkH
-  vq2kHP2zdxEyzPAWZH3CQ3Myb3F8hERXTIFSUqntPXDKXDb7Y/laqjMXdj+vptKk
-  3Q36J+8VnJbSwjGwmEG6tym9qMSGIPPNw1JXY1R29eF3o4aj21o7DHAkhuNc5Tso
-  67fUSKgvyVnyH4G6ShQUAtghPaAwS0KvAgMBAAGjUDBOMB0GA1UdDgQWBBSjxFUE
-  RfnTvABRLAa34Ytkhz5vPzAfBgNVHSMEGDAWgBSjxFUERfnTvABRLAa34Ytkhz5v
-  PzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAFLDS7zNhlrQYSQO5KIj
-  z2RJe3fj4rLPklo3TmP5KLvendG+LErE2cbKPqnhQ2oVoj6u9tWVwo/g03PMrrnL
-  KrDm39slYD/1KoE5kB4l/p6KVOdeJ4I6xcgu9rnkqqHzDwI4v7e8/D3WZbpiFUsY
-  vaZhjNYKWQf79l6zXfOvphzJ
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB9jCCAV+gAwIBAgIJAO4V/jiMoICoMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
-  BAMMCENPTVAtMjMyMCAXDTEyMDIxNjExMTAyM1oYDzIxMTIwMTIzMTExMDIzWjAT
-  MREwDwYDVQQDDAhDT01QLTIzMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-  wi/3Z8W9pUiegUXIk/AiFDQ0UJ4JFAwjqr+HSRUirlUsHHT+8DzH/hfcTDX1I5BB
-  D1ADk+ydXjMm3OZrQcXjn29OUfM5C+g+oqeMnYQImN0DDQIOcUyr7AJc4xhvuXQ1
-  P2pJ5NOd3tbd0kexETa1LVhR6EgBC25LyRBRae76qosCAwEAAaNQME4wHQYDVR0O
-  BBYEFMDmW9aFy1sKTfCpcRkYnP6zUd1cMB8GA1UdIwQYMBaAFMDmW9aFy1sKTfCp
-  cRkYnP6zUd1cMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAskbFizHr
-  b6d3iIyN+wffxz/V9epbKIZVEGJd/6LrTdLiUfJPec7FaxVCWNyKBlCpINBM7cEV
-  Gn9t8mdVQflNqOlAMkOlUv1ZugCt9rXYQOV7rrEYJBWirn43BOMn9Flp2nibblby
-  If1a2ZoqHRxoNo2yTmm7TSYRORWVS+vvfjY=
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB9jCCAV+gAwIBAgIJAIlBksrZVkK8MA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
-  BAMMCENPTVAtMzU3MCAXDTEyMDEyNjEwNTUyOFoYDzIxMTIwMTAyMTA1NTI4WjAT
-  MREwDwYDVQQDDAhDT01QLTM1NzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-  ts+iGUwi44vtIfwXR8DCnLtHV4ydl0YTK2joJflj0/Ws7mz5BYkxIU4fea/6+VF3
-  i11nwBgYgxQyjNztgc9u9O71k1W5tU95yO7U7bFdYd5uxYA9/22fjObaTQoC4Nc9
-  mTu6r/VHyJ1yRsunBZXvnk/XaKp7gGE9vNEyJvPn2bkCAwEAAaNQME4wHQYDVR0O
-  BBYEFKuGIYu8+6aEkTVg62BRYaD11PILMB8GA1UdIwQYMBaAFKuGIYu8+6aEkTVg
-  62BRYaD11PILMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAMoTRpBxK
-  YLEZJbofF7gSrRIcrlUJYXfTfw1QUBOKkGFFDsiJpEg4y5pUk1s5Jq9K3SDzNq/W
-  it1oYjOhuGg3al8OOeKFrU6nvNTF1BAvJCl0tr3POai5yXyN5jlK/zPfypmQYxE+
-  TaqQSGBJPVXYt6lrq/PRD9ciZgKLOwEqK8w=
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB9jCCAV+gAwIBAgIJAPHoWu90gbsgMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
-  BAMMCXZpZmlibm9kZTAeFw0xMjAzMTkyMzIwNTVaFw0xMzAzMTkyMzIwNTVaMBQx
-  EjAQBgNVBAMMCXZpZmlibm9kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-  ozBijpO8PS5RTeKTzA90vi9ezvv4vVjNaguqT4UwP9+O1+i6yq1Y2W5zZxw/Klbn
-  oudyNzie3/wqs9VfPmcyU9ajFzBv/Tobm3obmOqBN0GSYs5fyGw+O9G3//6ZEhf0
-  NinwdKmrRX+d0P5bHewadZWIvlmOupcnVJmkks852BECAwEAAaNQME4wHQYDVR0O
-  BBYEFF9EtgfZZs8L2ZxBJxSiY6eTsTEwMB8GA1UdIwQYMBaAFF9EtgfZZs8L2ZxB
-  JxSiY6eTsTEwMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAc43YTfc6
-  baSemaMAc/jz8LNLhRE5dLfLOcRSoHda8y0lOrfe4lHT6yP5l8uyWAzLW+g6s3DA
-  Yme/bhX0g51BmI6gjKJo5DoPtiXk/Y9lxwD3p7PWi+RhN+AZQ5rpo8UfwnnN059n
-  yDuimQfvJjBFMVrdn9iP6SfMjxKaGk6gVmI=
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB9jCCAV+gAwIBAgIJAMNZBmoIOXPBMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
-  BAMMCENPTVAtMTMyMCAXDTEyMDUwMjEyMDQyNloYDzIxMTIwNDA4MTIwNDI2WjAT
-  MREwDwYDVQQDDAhDT01QLTEzMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-  6peZQt1sAmMAmSG9BVxxcXm8x15kE9iAplmANYNQ7z2YO57c10jDtlYlwVfi/rct
-  xNUOKQtc8UQtV/fJWP0QT0GITdRz5X/TkWiojiFgkopza9/b1hXs5rltYByUGLhg
-  7JZ9dZGBihzPfn6U8ESAKiJzQP8Hyz/o81FPfuHCftsCAwEAAaNQME4wHQYDVR0O
-  BBYEFNuxsc77Z6/JSKPoyloHNm9zF9yqMB8GA1UdIwQYMBaAFNuxsc77Z6/JSKPo
-  yloHNm9zF9yqMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAl4hBaJy1
-  cgiNV2+Z5oNTrHgmzWvSY4duECOTBxeuIOnhql3vLlaQmo0p8Z4c13kTZq2s3nhd
-  Loe5mIHsjRVKvzB6SvIaFUYq/EzmHnqNdpIGkT/Mj7r/iUs61btTcGUCLsUiUeci
-  Vd0Ozh79JSRpkrdI8R/NRQ2XPHAo+29TT70=
-  -----END CERTIFICATE-----
-  -----BEGIN CERTIFICATE-----
-  MIIB9jCCAV+gAwIBAgIJAKRvzcy7OH0UMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
-  BAMMCENPTVAtNzcyMCAXDTEyMDgxMDE1NDI1MVoYDzIxMTIwNzE3MTU0MjUxWjAT
-  MREwDwYDVQQDDAhDT01QLTc3MjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-  o7aipd6MbnuGDeR1UJUjuMLQUariAyQ2l2ZDS6TfOwjHiPw/mhzkielgk73kqN7A
-  sUREx41eTcYCXzTq3WP3xCLE4LxLg1eIhd4nwNHj8H18xR9aP0AGjo4UFl5BOMa1
-  mwoyBt3VtfGtUmb8whpeJgHhqrPPxLoON+i6fIbXDaUCAwEAAaNQME4wHQYDVR0O
-  BBYEFEfjy3OopT2lOksKmKBNHTJE2hFlMB8GA1UdIwQYMBaAFEfjy3OopT2lOksK
-  mKBNHTJE2hFlMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAaNRx6YN2
-  M/p3R8/xS6zvH1EqJ3FFD7XeAQ52WuQnKSREzuw0dsw12ClxjcHiQEFioyTiTtjs
-  5pW18Ry5Ie7iFK4cQMerZwWPxBodEbAteYlRsI6kePV7Gf735Y1RpuN8qZ2sYL6e
-  x2IMeSwJ82BpdEI5niXxB+iT0HxhmR+XaMI=
-  -----END CERTIFICATE-----
-# List of URL(s) which shouldn't be installed from binary cache, separated by
-# commas. Any URL beginning by a blacklisted URL will be blacklisted as well.
-binary-cache-url-blacklist =
-  http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD
-  http://git.erp5.org/gitweb/slapos.core.git/blob_plain/refs/heads
-- 
2.30.9