Update gns3dms to support cloud.conf

This commit is contained in:
Michael 2014-09-06 20:46:06 -06:00
parent 36e539382c
commit ef492d4690
7 changed files with 54 additions and 40 deletions

View File

@ -146,7 +146,7 @@ def parse_cmd_line(argv):
cmd_line_option_list['syslog'] = ('localhost',514) cmd_line_option_list['syslog'] = ('localhost',514)
get_gns3secrets(cmd_line_option_list) get_gns3config(cmd_line_option_list)
for opt, val in opts: for opt, val in opts:
if (opt in ("-h", "--help")): if (opt in ("-h", "--help")):
@ -202,7 +202,7 @@ def parse_cmd_line(argv):
return cmd_line_option_list return cmd_line_option_list
def get_gns3secrets(cmd_line_option_list): def get_gns3config(cmd_line_option_list):
""" """
Load cloud credentials from .gns3secrets Load cloud credentials from .gns3secrets
""" """
@ -225,6 +225,15 @@ def get_gns3secrets(cmd_line_option_list):
except configparser.NoSectionError: except configparser.NoSectionError:
pass pass
cloud_config_file = "%s/.config/GNS3/cloud.conf"
if os.path.isfile(cloud_config_file)
config.read(cloud_config_file)
try:
for key, value in config.items("CLOUD_SERVER"):
cmd_line_option_list[key] = value.strip()
except configparser.NoSectionError:
pass
def set_logging(cmd_options): def set_logging(cmd_options):
""" """
@ -341,6 +350,7 @@ def main():
log.info("Received shutdown signal") log.info("Received shutdown signal")
options["shutdown"] = True options["shutdown"] = True
sys.exit(0)
pid_file = "%s/.gns3ias.pid" % (expanduser("~")) pid_file = "%s/.gns3ias.pid" % (expanduser("~"))

View File

@ -68,7 +68,7 @@ emailAddress=gns3cert@gns3.com
" "
# Generate the server private key # Generate the server private key
openssl genrsa -aes256 -out $DST_DIR/$DOMAIN.key -passout env:PASSPHRASE 2048 openssl genrsa -aes256 -out $DOMAIN.key -passout env:PASSPHRASE 2048
fail_if_error $? fail_if_error $?
#openssl rsa -outform der -in $DOMAIN.pem -out $DOMAIN.key -passin env:PASSPHRASE #openssl rsa -outform der -in $DOMAIN.pem -out $DOMAIN.key -passin env:PASSPHRASE
@ -93,4 +93,7 @@ fail_if_error $?
openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt
fail_if_error $? fail_if_error $?
echo "${DST_DIR}${DOMAIN}.key"
echo "${DST_DIR}${DOMAIN}.crt"
cd $OLD_DIR cd $OLD_DIR

View File

@ -62,16 +62,21 @@ class Config(object):
# 5: server.conf in the current working directory # 5: server.conf in the current working directory
home = os.path.expanduser("~") home = os.path.expanduser("~")
self._cloud_config = os.path.join(home, ".config", appname, "cloud.conf")
filename = "server.conf" filename = "server.conf"
self._files = [os.path.join(home, ".config", appname, filename), self._files = [os.path.join(home, ".config", appname, filename),
os.path.join(home, ".config", appname + ".conf"), os.path.join(home, ".config", appname + ".conf"),
os.path.join("/etc/xdg", appname, filename), os.path.join("/etc/xdg", appname, filename),
os.path.join("/etc/xdg", appname + ".conf"), os.path.join("/etc/xdg", appname + ".conf"),
filename] filename,
self._cloud_config]
self._config = configparser.ConfigParser() self._config = configparser.ConfigParser()
self.read_config() self.read_config()
def list_cloud_config_file(self):
return self._cloud_config
def read_config(self): def read_config(self):
""" """
Read the configuration files. Read the configuration files.

View File

@ -20,8 +20,9 @@ from .base import IModule
from .dynamips import Dynamips from .dynamips import Dynamips
from .vpcs import VPCS from .vpcs import VPCS
from .virtualbox import VirtualBox from .virtualbox import VirtualBox
from .deadman import DeadMan
MODULES = [Dynamips, VPCS, VirtualBox] MODULES = [Dynamips, VPCS, VirtualBox, DeadMan]
if sys.platform.startswith("linux"): if sys.platform.startswith("linux"):
# IOU runs only on Linux # IOU runs only on Linux

View File

@ -30,7 +30,7 @@ from gns3server.config import Config
import logging import logging
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class DeadMan(): class DeadMan(IModule):
""" """
DeadMan module. DeadMan module.
@ -51,10 +51,12 @@ class DeadMan():
self._heartbeat_file = "%s/heartbeat_file_for_gnsdms" % ( self._heartbeat_file = "%s/heartbeat_file_for_gnsdms" % (
self._tempdir) self._tempdir)
self.cloud_config = Config.instance().get_section_config("CLOUD_SERVER")
self._heartbeat_file = self.cloud_config["heartbeat_file"]
if 'heartbeat_file' in kwargs: if 'heartbeat_file' in kwargs:
self._heartbeat_file = kwargs['heartbeat_file'] self._heartbeat_file = kwargs['heartbeat_file']
self._deadman_process = None self._deadman_process = None
self.start() self.start()
@ -63,8 +65,12 @@ class DeadMan():
Start a subprocess and return the object Start a subprocess and return the object
""" """
cmd = [] #gnsserver gets configuration options from cloud.conf. This is where
#the client adds specific cloud information.
#gns3dms also reads in cloud.conf. That is why we don't need to specific
#all the command line arguments here.
cmd = []
cmd.append("gns3dms") cmd.append("gns3dms")
cmd.append("--file %s" % (self._heartbeat_file)) cmd.append("--file %s" % (self._heartbeat_file))
cmd.append("--background") cmd.append("--background")

View File

@ -141,35 +141,20 @@ class Server(object):
instance.start() # starts the new process instance.start() # starts the new process
def _get_cert_info(self):
"""
Finds the cert and key file needed for SSL
"""
home = expanduser("~")
ssl_dir = "%s/.conf/GNS3Certs/" % (home)
log.debug("Looking for SSL certs in: %s" % (ssl_dir))
keyfile = "%s/gns3server.localdomain.com.key" % (ssl_dir)
certfile = "%s/gns3server.localdomain.com.crt" % (ssl_dir)
if os.path.isfile(keyfile) and os.path.isfile(certfile):
return { "certfile" : certfile,
"keyfile" : keyfile,
}
def run(self): def run(self):
""" """
Starts the Tornado web server and ZeroMQ server. Starts the Tornado web server and ZeroMQ server.
""" """
# FIXME: debug mode! # FIXME: debug mode!
cloud_config = Config.instance().get_section_config("CLOUD_SERVER")
settings = { settings = {
"debug":True, "debug":True,
"cookie_secret": base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes), "cookie_secret": base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes),
"login_url": "/login", "login_url": "/login",
"required_user" : "test123", "required_user" : cloud_config['WEB_USERNAME'],
"required_pass" : "test456", "required_pass" : cloud_config['WEB_PASSWORD'],
} }
router = self._create_zmq_router() router = self._create_zmq_router()
@ -191,11 +176,14 @@ class Server(object):
zmq.zmq_version())) zmq.zmq_version()))
kwargs = {"address": self._host} kwargs = {"address": self._host}
ssl_options = self._get_cert_info() if cloud_config["SSL_ENABLED"] == "yes":
ssl_options = {
"certfile" : cloud_config["SSL_CRT"],
"keyfile" : cloud_config["SSL_KEY"],
}
if ssl_options:
log.info("Certs found - starting in SSL mode") log.info("Certs found - starting in SSL mode")
kwargs['ssl_options'] = ssl_options kwargs["ssl_options"] = ssl_options
if parse_version(tornado.version) >= parse_version("3.1"): if parse_version(tornado.version) >= parse_version("3.1"):
kwargs["max_buffer_size"] = 524288000 # 500 MB file upload limit kwargs["max_buffer_size"] = 524288000 # 500 MB file upload limit

View File

@ -5,4 +5,5 @@ jsonschema
pycurl pycurl
python-dateutil python-dateutil
apache-libcloud apache-libcloud
requests