From 5c67bf96bb9abfc27538c8f92e701bcd07858d3d Mon Sep 17 00:00:00 2001 From: surakula Date: Wed, 24 Sep 2014 12:45:52 -0700 Subject: [PATCH] Bug #1366210 1. Provision storage webui pkgs in all nodes defined in webui role 2. Added storage webui related files 3. Decoupled storage webui provision from ceph installation provision. 4. Removed Extra white space characters 5. fixed alignment for variables Change-Id: I4ba5e9dabd3ce0d6664dd52fb75e5a304dea72ff --- contrail_setup_utils/setup.py | 69 +++++---- contrail_setup_utils/storage-ceph-setup.py | 46 +----- contrail_setup_utils/storage-webui-setup.py | 147 ++++++++++++++++++++ setup-vnc-storage-webui.py | 95 +++++++++++++ 4 files changed, 286 insertions(+), 71 deletions(-) create mode 100755 contrail_setup_utils/storage-webui-setup.py create mode 100755 setup-vnc-storage-webui.py diff --git a/contrail_setup_utils/setup.py b/contrail_setup_utils/setup.py index 0b18724c..4c0859c3 100755 --- a/contrail_setup_utils/setup.py +++ b/contrail_setup_utils/setup.py @@ -325,6 +325,9 @@ def _parse_args(self, args_str): parser.add_argument("--nfs-livem-image", help = "Image for NFS for Live migration VM", nargs="+", type=str) parser.add_argument("--nfs-livem-host", help = "Image for NFS for Live migration VM", nargs="+", type=str) parser.add_argument("--add-storage-node", help = "Dynamic addition of storage node") + parser.add_argument("--storage-webui-ip", help = "IP Address of storage webui node") + parser.add_argument("--storage-webui-mode", help = "Config mode Storage WebUI Status") + parser.add_argument("--storage-master-ip", help = "IP Address of storage master node") parser.add_argument("--storage-setup-mode", help = "Storage configuration mode") parser.add_argument("--vmware", help = "Vmware ESXI IP", type=str) parser.add_argument("--vmware_username", help = "Vmware ESXI Username", type=str) @@ -1792,36 +1795,48 @@ def run_services(self): run("python /opt/contrail/contrail_installer/contrail_setup_utils/livemnfs-ceph-setup.py %s" %(storage_setup_args)) else: # Storage Configurations - # Setup Ceph services - storage_setup_args = " --storage-master %s" %(self._args.storage_master) - storage_setup_args = storage_setup_args + " --storage-setup-mode %s" % (self._args.storage_setup_mode) - if self._args.add_storage_node: - storage_setup_args = storage_setup_args + " --add-storage-node %s" % (self._args.add_storage_node) - storage_setup_args = storage_setup_args + " --storage-hostnames %s" %(' '.join(self._args.storage_hostnames)) - storage_setup_args = storage_setup_args + " --storage-hosts %s" %(' '.join(self._args.storage_hosts)) - storage_setup_args = storage_setup_args + " --storage-host-tokens %s" %(' '.join(self._args.storage_host_tokens)) - storage_setup_args = storage_setup_args + " --storage-disk-config %s" %(' '.join(self._args.storage_disk_config)) - storage_setup_args = storage_setup_args + " --storage-ssd-disk-config %s" %(' '.join(self._args.storage_ssd_disk_config)) - storage_setup_args = storage_setup_args + " --storage-journal-config %s" %(' '.join(self._args.storage_journal_config)) - storage_setup_args = storage_setup_args + " --storage-local-disk-config %s" %(' '.join(self._args.storage_local_disk_config)) - storage_setup_args = storage_setup_args + " --storage-local-ssd-disk-config %s" %(' '.join(self._args.storage_local_ssd_disk_config)) - storage_setup_args = storage_setup_args + " --storage-nfs-disk-config %s" %(' '.join(self._args.storage_nfs_disk_config)) - storage_setup_args = storage_setup_args + " --storage-directory-config %s" %(' '.join(self._args.storage_directory_config)) - with settings(host_string=self._args.storage_master): - run("python /opt/contrail/contrail_installer/contrail_setup_utils/storage-ceph-setup.py %s" %(storage_setup_args)) - - # Setup Live migration services - live_migration_status = self._args.live_migration - if live_migration_status == 'enabled': + # Storage WebUI + storage_webui_mode = self._args.storage_webui_mode + if storage_webui_mode == 'enabled': + storage_setup_args = " --storage-webui-ip %s" %(self._args.storage_webui_ip) + storage_setup_args = storage_setup_args + " --storage-setup-mode %s" % (self._args.storage_setup_mode) + with settings(host_string=self._args.storage_webui_ip): + storage_master_ip = self._args.storage_master_ip + # Configuring the ceph rest server ip to storage webui config + local("sudo sed \"s/config.ceph.server_ip.*/config.ceph.server_ip = '%s';/g\" /usr/src/contrail/contrail-web-storage/webroot/common/config/storage.config.global.js > storage.config.global.js.new" %(storage_master_ip)) + local("sudo mv storage.config.global.js.new /usr/src/contrail/contrail-web-storage/webroot/common/config/storage.config.global.js") + run("python /opt/contrail/contrail_installer/contrail_setup_utils/storage-webui-setup.py %s" %(storage_setup_args)) + else: + # Setup Ceph services storage_setup_args = " --storage-master %s" %(self._args.storage_master) - storage_setup_args = storage_setup_args + " --storage-setup-mode %s" % (self._args.storage_setup_mode) - storage_setup_args = storage_setup_args + " --storage-hostnames %s" %(' '.join(self._args.storage_hostnames)) - storage_setup_args = storage_setup_args + " --storage-hosts %s" %(' '.join(self._args.storage_hosts)) - storage_setup_args = storage_setup_args + " --storage-host-tokens %s" %(' '.join(self._args.storage_host_tokens)) + storage_setup_args = storage_setup_args + " --storage-setup-mode %s" % (self._args.storage_setup_mode) if self._args.add_storage_node: - storage_setup_args = storage_setup_args + " --add-storage-node %s" % (self._args.add_storage_node) + storage_setup_args = storage_setup_args + " --add-storage-node %s" % (self._args.add_storage_node) + storage_setup_args = storage_setup_args + " --storage-hostnames %s" %(' '.join(self._args.storage_hostnames)) + storage_setup_args = storage_setup_args + " --storage-hosts %s" %(' '.join(self._args.storage_hosts)) + storage_setup_args = storage_setup_args + " --storage-host-tokens %s" %(' '.join(self._args.storage_host_tokens)) + storage_setup_args = storage_setup_args + " --storage-disk-config %s" %(' '.join(self._args.storage_disk_config)) + storage_setup_args = storage_setup_args + " --storage-ssd-disk-config %s" %(' '.join(self._args.storage_ssd_disk_config)) + storage_setup_args = storage_setup_args + " --storage-journal-config %s" %(' '.join(self._args.storage_journal_config)) + storage_setup_args = storage_setup_args + " --storage-local-disk-config %s" %(' '.join(self._args.storage_local_disk_config)) + storage_setup_args = storage_setup_args + " --storage-local-ssd-disk-config %s" %(' '.join(self._args.storage_local_ssd_disk_config)) + storage_setup_args = storage_setup_args + " --storage-nfs-disk-config %s" %(' '.join(self._args.storage_nfs_disk_config)) + storage_setup_args = storage_setup_args + " --storage-directory-config %s" %(' '.join(self._args.storage_directory_config)) with settings(host_string=self._args.storage_master): - run("python /opt/contrail/contrail_installer/contrail_setup_utils/compute-live-migration-setup.py %s" %(storage_setup_args)) + run("python /opt/contrail/contrail_installer/contrail_setup_utils/storage-ceph-setup.py %s" %(storage_setup_args)) + + # Setup Live migration services + live_migration_status = self._args.live_migration + if live_migration_status == 'enabled': + storage_setup_args = " --storage-master %s" %(self._args.storage_master) + storage_setup_args = storage_setup_args + " --storage-setup-mode %s" % (self._args.storage_setup_mode) + storage_setup_args = storage_setup_args + " --storage-hostnames %s" %(' '.join(self._args.storage_hostnames)) + storage_setup_args = storage_setup_args + " --storage-hosts %s" %(' '.join(self._args.storage_hosts)) + storage_setup_args = storage_setup_args + " --storage-host-tokens %s" %(' '.join(self._args.storage_host_tokens)) + if self._args.add_storage_node: + storage_setup_args = storage_setup_args + " --add-storage-node %s" % (self._args.add_storage_node) + with settings(host_string=self._args.storage_master): + run("python /opt/contrail/contrail_installer/contrail_setup_utils/compute-live-migration-setup.py %s" %(storage_setup_args)) #end run_services diff --git a/contrail_setup_utils/storage-ceph-setup.py b/contrail_setup_utils/storage-ceph-setup.py index 6d5ed578..7ce59e48 100755 --- a/contrail_setup_utils/storage-ceph-setup.py +++ b/contrail_setup_utils/storage-ceph-setup.py @@ -101,40 +101,6 @@ def reset_osd_remote_list(self): run('chmod a+x /tmp/osd_local_list.sh') run('/tmp/osd_local_list.sh') - def contrail_storage_ui_add(self): - if self._args.storage_disk_config[0] != 'none' or self._args.storage_ssd_disk_config[0] != 'none': - # enable Contrail Web Storage feature - with settings(warn_only=True): - storage_enable_variable = local('cat /etc/contrail/config.global.js | grep config.featurePkg.webStorage', capture=True); - if storage_enable_variable: - print 'Re-enable Contrail Web Storage feature' - local('sudo sed "s/config.featurePkg.webStorage.enable = *;/config.featurePkg.webStorage.enable = true;/g" /etc/contrail/config.global.js > config.global.js.new') - local('sudo cp config.global.js.new /etc/contrail/config.global.js') - else: - print 'Enable Contrail Web Storage feature' - local('sudo cp /etc/contrail/config.global.js /usr/src/contrail/contrail-web-storage/config.global.js.org') - local('sudo sed "/config.featurePkg.webController.enable/ a config.featurePkg.webStorage = {};\\nconfig.featurePkg.webStorage.path=\'\/usr\/src\/contrail\/contrail-web-storage\';\\nconfig.featurePkg.webStorage.enable = true;" /etc/contrail/config.global.js > config.global.js.new') - local('sudo cp config.global.js.new /etc/contrail/config.global.js') - - #restart the webui server - time.sleep(5); - print 'restarting... supervisor-webui service' - local('sudo service supervisor-webui restart') - - def contrail_storage_ui_remove(self): - if self._args.storage_disk_config[0] != 'none' or self._args.storage_ssd_disk_config[0] != 'none': - #disable Contrail Web Storage feature - with settings(warn_only=True): - storage_enable_variable = local('cat /etc/contrail/config.global.js | grep config.featurePkg.webStorage', capture=True); - if storage_enable_variable: - print 'Disable Contrail Web Storage feature' - local('sudo sed "/config.featurePkg.webStorage = {}/,/config.featurePkg.webStorage.enable = true;/d" /etc/contrail/config.global.js > config.global.js.new') - local('sudo cp config.global.js.new /etc/contrail/config.global.js') - #restart the webui server - time.sleep(5); - print 'restarting... supervisor-webui service' - local('sudo service supervisor-webui restart') - def ceph_rest_api_service_add(self): # check for ceph-rest-api.conf # write /etc/init conf for service upstrart @@ -1140,14 +1106,8 @@ def __init__(self, args_str = None): time.sleep(2) local('sudo ceph-deploy purgedata %s <<< \"y\"' % (ceph_mon_hosts), capture=False, shell='/bin/bash') - # Whenever Storage setup mode is reconfigure or unconfigure needs to remove below service and a feature - # 1. remove the ceph-rest-api service - # 2. remove the Storage UI feature - if self._args.storage_setup_mode == 'reconfigure' or self._args.storage_setup_mode == 'unconfigure': - if pdist == 'Ubuntu': - self.contrail_storage_ui_remove() - time.sleep(5) - self.ceph_rest_api_service_remove() + if pdist == 'Ubuntu': + self.ceph_rest_api_service_remove() if self._args.storage_setup_mode == 'unconfigure': print 'Storage configuration removed' @@ -1770,8 +1730,6 @@ def __init__(self, args_str = None): if pdist == 'Ubuntu': self.ceph_rest_api_service_add() - time.sleep(5) - self.contrail_storage_ui_add() #end __init__ diff --git a/contrail_setup_utils/storage-webui-setup.py b/contrail_setup_utils/storage-webui-setup.py new file mode 100755 index 00000000..10519c10 --- /dev/null +++ b/contrail_setup_utils/storage-webui-setup.py @@ -0,0 +1,147 @@ +#!/usr/bin/python + +import argparse +import ConfigParser + +import platform +import os +import sys +import time +import re +import string +import socket +import netifaces, netaddr +import subprocess +import fnmatch +import struct +import shutil +import json +from pprint import pformat +import xml.etree.ElementTree as ET +import platform +import pdb + +import tempfile +from fabric.api import local, env, run, settings +from fabric.operations import get, put +from fabric.context_managers import lcd, settings +from fabric.api import local, env, run +from fabric.operations import get, put +from fabric.context_managers import lcd, settings +sys.path.insert(0, os.getcwd()) + +class SetupStorageWebUI(object): + # Enable the Storage feature to Contrail WebUI + def contrail_storage_ui_add(self): + print 'stopping... supervisor-webui service' + local('sudo service supervisor-webui stop') + time.sleep(5); + # enable Contrail Web Storage feature + with settings(warn_only=True): + storage_enable_variable = local('cat /etc/contrail/config.global.js | grep config.featurePkg.webStorage', capture=True); + if storage_enable_variable: + print 'Re-enable Contrail Web Storage feature' + local('sudo sed "s/config.featurePkg.webStorage.enable = *;/config.featurePkg.webStorage.enable = true;/g" /etc/contrail/config.global.js > config.global.js.new') + local('sudo cp config.global.js.new /etc/contrail/config.global.js') + else: + print 'Enable Contrail Web Storage feature' + local('sudo cp /etc/contrail/config.global.js /usr/src/contrail/contrail-web-storage/config.global.js.org') + local('sudo sed "/config.featurePkg.webController.enable/ a config.featurePkg.webStorage = {};\\nconfig.featurePkg.webStorage.path=\'\/usr\/src\/contrail\/contrail-web-storage\';\\nconfig.featurePkg.webStorage.enable = true;" /etc/contrail/config.global.js > config.global.js.new') + local('sudo cp config.global.js.new /etc/contrail/config.global.js') + + #restart the webui server + time.sleep(5); + print 'starting... supervisor-webui service' + local('sudo service supervisor-webui start') + + # Disable the Storage feature to Contrail WebUI + def contrail_storage_ui_remove(self): + #disable Contrail Web Storage feature + with settings(warn_only=True): + storage_enable_variable = local('cat /etc/contrail/config.global.js | grep config.featurePkg.webStorage', capture=True); + if storage_enable_variable: + print 'stopping... supervisor-webui service' + local('sudo service supervisor-webui stop') + print 'Disable Contrail Web Storage feature' + local('sudo sed "/config.featurePkg.webStorage = {}/,/config.featurePkg.webStorage.enable = true;/d" /etc/contrail/config.global.js > config.global.js.new') + local('sudo cp config.global.js.new /etc/contrail/config.global.js') + #restart the webui server + time.sleep(5); + print 'starting... supervisor-webui service' + local('sudo service supervisor-webui start') + + def __init__(self, args_str = None): + #print sys.argv[1:] + self._args = None + if not args_str: + args_str = ' '.join(sys.argv[1:]) + self._parse_args(args_str) + + pdist = platform.dist()[0] + + # Whenever Storage setup mode is reconfigure or unconfigure needs to remove below service and a feature + # remove the Storage UI feature + if self._args.storage_setup_mode == 'reconfigure' or self._args.storage_setup_mode == 'unconfigure': + if pdist == 'Ubuntu': + self.contrail_storage_ui_remove() + print 'Storage WebUI configuration removed' + + if self._args.storage_setup_mode == 'unconfigure': + return + + # Enable the Storage feature to Contrail WebUI + if pdist == 'Ubuntu': + self.contrail_storage_ui_add() + + #end __init__ + + def _parse_args(self, args_str): + ''' + Eg. python storage-webui-setup.py --storage-webui-ip 10.157.43.171 --storage-setup-mode setup + ''' + + # Source any specified config/ini file + # Turn off help, so we print all options in response to -h + conf_parser = argparse.ArgumentParser(add_help = False) + + conf_parser.add_argument("-c", "--conf_file", + help="Specify config file", metavar="FILE") + args, remaining_argv = conf_parser.parse_known_args(args_str.split()) + + global_defaults = { + 'storage-webui-ip': '127.0.0.1', + } + + if args.conf_file: + config = ConfigParser.SafeConfigParser() + config.read([args.conf_file]) + global_defaults.update(dict(config.items("GLOBAL"))) + + # Override with CLI options + # Don't surpress add_help here so it will handle -h + parser = argparse.ArgumentParser( + # Inherit options from config_parser + parents = [conf_parser], + # print script description with -h/--help + description =__doc__, + # Don't mess with format of description + formatter_class = argparse.RawDescriptionHelpFormatter, + ) + + all_defaults = {'global': global_defaults} + parser.set_defaults(**all_defaults) + parser.add_argument("--storage-webui-ip", help = "IP Address of storage webui node") + parser.add_argument("--storage-setup-mode", help = "Configuration mode") + + self._args = parser.parse_args(remaining_argv) + + #end _parse_args + +#end class SetupStorageWebUI + +def main(args_str = None): + SetupStorageWebUI(args_str) +#end main + +if __name__ == "__main__": + main() diff --git a/setup-vnc-storage-webui.py b/setup-vnc-storage-webui.py new file mode 100755 index 00000000..27822a86 --- /dev/null +++ b/setup-vnc-storage-webui.py @@ -0,0 +1,95 @@ +#!/usr/bin/python + +import argparse +import ConfigParser + +import os +import sys + +sys.path.insert(0, os.getcwd()) +from contrail_setup_utils.setup import Setup + +class SetupVncStorageWebUI(object): + def __init__(self, args_str = None): + #print sys.argv[1:] + self._args = None + if not args_str: + args_str = ' '.join(sys.argv[1:]) + self._parse_args(args_str) + + storage_master_ip = self._args.storage_master_ip + storage_webui_ip = self._args.storage_webui_ip + storage_webui_mode = 'enabled' + storage_setup_mode = self._args.storage_setup_mode + + setup_args_str = "--role storage" + setup_args_str = setup_args_str + " --storage-webui-ip %s" % (storage_webui_ip) + setup_args_str = setup_args_str + " --storage-webui-mode %s" % (storage_webui_mode) + setup_args_str = setup_args_str + " --storage-setup-mode %s" % (storage_setup_mode) + setup_args_str = setup_args_str + " --storage-master-ip %s" % (storage_master_ip) + + if self._args.storage_disk_config[0] != 'none' or self._args.storage_ssd_disk_config[0] != 'none': + #Setup storage WebUI + setup_obj = Setup(setup_args_str) + setup_obj.do_setup() + setup_obj.run_services() + #end __init__ + + def _parse_args(self, args_str): + ''' + Eg. python setup-vnc-storage-webui.py --storage-master-ip 10.157.43.171 + --storage-webui-ip 10.157.43.171 --storage-setup-mode setup + ''' + + # Source any specified config/ini file + # Turn off help, so we print all options in response to -h + conf_parser = argparse.ArgumentParser(add_help = False) + + conf_parser.add_argument("-c", "--conf_file", + help="Specify config file", metavar="FILE") + args, remaining_argv = conf_parser.parse_known_args(args_str.split()) + + global_defaults = { + 'storage_master_ip': '127.0.0.1', + 'storage_webui_ip': '127.0.0.1', + 'storage_webui':'enabled' + } + + if args.conf_file: + config = ConfigParser.SafeConfigParser() + config.read([args.conf_file]) + global_defaults.update(dict(config.items("GLOBAL"))) + + # Override with CLI options + # Don't surpress add_help here so it will handle -h + parser = argparse.ArgumentParser( + # Inherit options from config_parser + parents=[conf_parser], + # print script description with -h/--help + description=__doc__, + # Don't mess with format of description + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + + all_defaults = {'global': global_defaults} + parser.set_defaults(**all_defaults) + + parser.add_argument("--storage-master-ip", help = "IP Address of storage master node") + parser.add_argument("--storage-webui-ip", help = "IP Address of storage webui node") + parser.add_argument("--storage-webui-mode", help = "Config mode Storage WebUI Status") + parser.add_argument("--storage-setup-mode", help = "Configuration mode") + parser.add_argument("--storage-disk-config", help = "Disk list to be used for distributed storage", nargs="+", type=str) + parser.add_argument("--storage-ssd-disk-config", help = "SSD Disk list to be used for distributed storage", nargs="+", type=str) + + self._args = parser.parse_args(remaining_argv) + + #end _parse_args + +#end class SetupVncStorageWebUI + +def main(args_str = None): + SetupVncStorageWebUI(args_str) +#end main + +if __name__ == "__main__": + main()