Remember previous config, use them as defaults - closes #6
diff --git a/gstack/__init__.py b/gstack/__init__.py
index 276ebbf..bc6b8ed 100644
--- a/gstack/__init__.py
+++ b/gstack/__init__.py
@@ -21,6 +21,8 @@
import sys
from flask import Flask
+from ConfigParser import SafeConfigParser
+
from gstack.core import db
@@ -47,6 +49,14 @@
return 'sqlite:///' + database_file
+def _config_from_config_profile(config_file, profile='initial'):
+ config = SafeConfigParser()
+ config.read(config_file)
+
+ for attribute in config.options(profile):
+ app.config[attribute.upper()] = config.get(profile, attribute)
+
+
def configure_app(settings=None):
app.config['DATA'] = os.path.abspath(os.path.dirname(__file__)) + '/data'
@@ -57,7 +67,7 @@
else:
config_file = _load_config_file()
database_uri = _load_database()
- app.config.from_pyfile(config_file)
+ _config_from_config_profile(config_file)
app.config['SQLALCHEMY_DATABASE_URI'] = database_uri
diff --git a/gstack/configure.py b/gstack/configure.py
index e4d042b..82f3f02 100644
--- a/gstack/configure.py
+++ b/gstack/configure.py
@@ -18,6 +18,7 @@
import os
+import ConfigParser
from alembic import command
from alembic.config import Config as AlembicConfig
@@ -38,48 +39,64 @@
def _create_config_file(config_folder):
- config_file = open(config_folder + '/gstack.conf', 'w+')
+ config_file_path = config_folder + '/gstack.conf'
+ config = _modify_config_profile(config_file_path)
+ config_file = open(config_file_path, 'w+')
+ config.write(config_file)
- config_file.write('PATH = \'%s\'\n' % 'compute/v1/projects/')
- gstack_address = raw_input('gstack bind address [0.0.0.0]: ')
- if gstack_address == '':
- gstack_address = '0.0.0.0'
- config_file.write('GSTACK_BIND_ADDRESS = \'%s\'\n' % gstack_address)
+def _modify_config_profile(config_file, profile='initial'):
+ config = ConfigParser.SafeConfigParser()
+ config.read(config_file)
- gstack_port = raw_input('gstack bind port [5000]: ')
- if gstack_port == '':
- gstack_port = '5000'
- config_file.write('GSTACK_PORT = \'%s\'\n' % gstack_port)
+ if not config.has_section(profile):
+ config.add_section(profile)
- cloudstack_host = raw_input('Cloudstack host [localhost]: ')
- if cloudstack_host == '':
- cloudstack_host = 'localhost'
- config_file.write('CLOUDSTACK_HOST = \'%s\'\n' % cloudstack_host)
+ config = _set_attribute_of_profile(
+ config, profile, 'gstack_bind_address', 'gstack bind address', 'localhost'
+ )
+ config = _set_attribute_of_profile(
+ config, profile, 'gstack_port', 'gstack bind port', '5000'
+ )
+ config = _set_attribute_of_profile(
+ config, profile, 'cloudstack_host', 'Cloudstack host', 'localhost'
+ )
+ config = _set_attribute_of_profile(
+ config, profile, 'cloudstack_port', 'Cloudstack port', '8080'
+ )
+ config = _set_attribute_of_profile(
+ config, profile, 'cloudstack_protocol', 'Cloudstack protocol', 'http'
+ )
+ config = _set_attribute_of_profile(
+ config, profile, 'cloudstack_path', 'Cloudstack path', '/client/api'
+ )
- cloudstack_port = raw_input('Cloudstack port [8080]: ')
- if cloudstack_port == '':
- cloudstack_port = '8080'
- config_file.write('CLOUDSTACK_PORT = \'%s\'\n' % cloudstack_port)
+ return config
- cloudstack_protocol = raw_input('Cloudstack protocol [http]: ')
- if cloudstack_protocol == '':
- cloudstack_protocol = 'http'
- config_file.write('CLOUDSTACK_PROTOCOL = \'%s\'\n' % cloudstack_protocol)
- cloudstack_path = raw_input('Cloudstack path [/client/api]: ')
- if cloudstack_path == '':
- cloudstack_path = '/client/api'
- config_file.write('CLOUDSTACK_PATH = \'%s\'\n' % cloudstack_path)
+def _set_attribute_of_profile(config, profile, attribute, message, default):
+ if config.has_option(profile, attribute):
+ default = config.get(profile, attribute)
- config_file.close()
+ attribute_value = _read_in_config_attribute_or_use_default(message, default)
+
+ config.set(profile, attribute, attribute_value)
+ return config
+
+
+def _read_in_config_attribute_or_use_default(message, default):
+ attribute = raw_input(message + ' [' + default + ']: ')
+ if attribute == '':
+ attribute = default
+
+ return attribute
def _create_database():
directory = os.path.join(os.path.dirname(__file__), '../migrations')
- config = AlembicConfig(os.path.join(
+ database_config = AlembicConfig(os.path.join(
directory,
'alembic.ini'
))
- config.set_main_option('script_location', directory)
- command.upgrade(config, 'head', sql=False, tag=None)
+ database_config.set_main_option('script_location', directory)
+ command.upgrade(database_config, 'head', sql=False, tag=None)