From ef4a3c549707a89b9a19b0c69e75db1701cd622f Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 14:53:32 -0700 Subject: [PATCH 01/20] Adding in of component options and using in glance to stop image loading. Fixing license for pkglist.py. --- conf/personas/devstack.sh.yaml | 2 -- devstack/components/glance.py | 14 +++++++++----- devstack/components/pkglist.py | 17 +++++++++++++++++ devstack/progs/actions.py | 2 ++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/conf/personas/devstack.sh.yaml b/conf/personas/devstack.sh.yaml index cb28547b..ed299ec7 100644 --- a/conf/personas/devstack.sh.yaml +++ b/conf/personas/devstack.sh.yaml @@ -5,8 +5,6 @@ supports: - ubuntu-oneiric - fedora-16 options: - glance: - - load-images components: - db - rabbit-mq diff --git a/devstack/components/glance.py b/devstack/components/glance.py index cb31cc3c..539b64ba 100644 --- a/devstack/components/glance.py +++ b/devstack/components/glance.py @@ -187,6 +187,7 @@ class GlanceRuntime(comp.PythonRuntime): comp.PythonRuntime.__init__(self, *args, **kargs) self.cfg_dir = sh.joinpths(self.app_dir, CONFIG_DIR) self.bin_dir = sh.joinpths(self.app_dir, BIN_DIR) + self.options = kargs.get('options', set()) def known_subsystems(self): return SUB_TO_APP.keys() @@ -205,8 +206,11 @@ class GlanceRuntime(comp.PythonRuntime): def post_start(self): comp.PythonRuntime.post_start(self) - # Install any images that need activating... - # TODO: make this less cheesy - need to wait till glance goes online - LOG.info("Waiting %s seconds so that glance can start up before image install." % (WAIT_ONLINE_TO)) - sh.sleep(WAIT_ONLINE_TO) - creator.ImageCreationService(self.cfg, self.pw_gen).install() + if 'no-load-images' in self.options: + pass + else: + # Install any images that need activating... + # TODO: make this less cheesy - need to wait till glance goes online + LOG.info("Waiting %s seconds so that glance can start up before image install." % (WAIT_ONLINE_TO)) + sh.sleep(WAIT_ONLINE_TO) + creator.ImageCreationService(self.cfg, self.pw_gen).install() diff --git a/devstack/components/pkglist.py b/devstack/components/pkglist.py index 95581592..b2548a97 100644 --- a/devstack/components/pkglist.py +++ b/devstack/components/pkglist.py @@ -1,3 +1,20 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved. +# Copyright (C) 2012 New Dream Network, LLC (DreamHost) All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + from devstack import component diff --git a/devstack/progs/actions.py b/devstack/progs/actions.py index a4bcd242..1bf6d543 100644 --- a/devstack/progs/actions.py +++ b/devstack/progs/actions.py @@ -155,6 +155,7 @@ class ActionRunner(object): def _construct_instances(self, persona, action, root_dir): components = persona.wanted_components desired_subsystems = persona.wanted_subsystems or dict() + component_opts = persona.component_options or dict() instances = dict() for c in components: (cls, my_info) = self.distro.extract_component(c, action) @@ -167,6 +168,7 @@ class ActionRunner(object): cls_kvs['name'] = c cls_kvs['keep_old'] = self.keep_old cls_kvs['desired_subsystems'] = set(desired_subsystems.get(c, list())) + cls_kvs['options'] = set(component_opts.get(c, list())) # The above is not overrideable... for (k, v) in my_info.items(): if k not in cls_kvs: From 86520a047041e43bfbeb50f77d2deb63693c2c3e Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 15:00:43 -0700 Subject: [PATCH 02/20] Updating to have a decorator module that has any decorators we decide are good --- devstack/decorators.py | 35 +++++++++++++++++++++++++++++++++++ devstack/distro.py | 3 ++- devstack/log.py | 13 ------------- devstack/packager.py | 3 ++- devstack/persona.py | 3 ++- 5 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 devstack/decorators.py diff --git a/devstack/decorators.py b/devstack/decorators.py new file mode 100644 index 00000000..aba4a5e9 --- /dev/null +++ b/devstack/decorators.py @@ -0,0 +1,35 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import functools +import pprint + +from devstack import log as logging + +# Very useful example ones... +# See: http://wiki.python.org/moin/PythonDecoratorLibrary + +LOG = logging.getLogger("devstack.decorators") + + +def log_debug(f): + @functools.wraps(f) + def wrapper(*args, **kargs): + LOG.debug('%s(%s, %s) ->', f.func_name, str(args), str(kargs)) + rv = f(*args, **kargs) + LOG.debug("<- %s" % (pprint.pformat(rv, indent=2))) + return rv + return wrapper diff --git a/devstack/distro.py b/devstack/distro.py index df282b4a..4761f766 100644 --- a/devstack/distro.py +++ b/devstack/distro.py @@ -21,6 +21,7 @@ import re import yaml +from devstack import decorators from devstack import importer from devstack import log as logging from devstack import settings @@ -75,7 +76,7 @@ class Distro(object): 'No platform configuration data for %s (%s)' % (plt, distname)) - @logging.log_debug + @decorators.log_debug def __init__(self, name, distro_pattern, packager_name, commands, components): self.name = name self._distro_pattern = re.compile(distro_pattern, re.IGNORECASE) diff --git a/devstack/log.py b/devstack/log.py index 807ea542..b8082403 100644 --- a/devstack/log.py +++ b/devstack/log.py @@ -17,9 +17,7 @@ # License for the specific language governing permissions and limitations # under the License. -import functools import logging -import pprint from logging.handlers import SysLogHandler from logging.handlers import WatchedFileHandler @@ -76,14 +74,3 @@ class AuditAdapter(logging.LoggerAdapter): def getLogger(name='devstack'): return AuditAdapter(logging.getLogger(name)) - - -def log_debug(f): - @functools.wraps(f) - def wrapper(*args, **kargs): - logger = getLogger() - logger.debug('%s(%s, %s) ->', f.func_name, str(args), str(kargs)) - rv = f(*args, **kargs) - logger.debug("<- %s" % (pprint.pformat(rv, indent=2))) - return rv - return wrapper diff --git a/devstack/packager.py b/devstack/packager.py index c2822216..d2052bce 100644 --- a/devstack/packager.py +++ b/devstack/packager.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +from devstack import decorators from devstack import log as logging from devstack import utils @@ -22,7 +23,7 @@ LOG = logging.getLogger("devstack.packager") class Packager(object): - @logging.log_debug + @decorators.log_debug def __init__(self, distro, keep_packages): self.distro = distro self.keep_packages = keep_packages diff --git a/devstack/persona.py b/devstack/persona.py index c4403789..9c2041fb 100644 --- a/devstack/persona.py +++ b/devstack/persona.py @@ -16,6 +16,7 @@ import yaml +from devstack import decorators from devstack import exceptions as excp from devstack import log as logging from devstack import shell as sh @@ -46,7 +47,7 @@ class Persona(object): cls, cls_kvs, err) return instance - @logging.log_debug + @decorators.log_debug def __init__(self, description, supports, components, From 3be9e66d2d9b72bc58ada65e0989d376ffa0d162 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 15:32:39 -0700 Subject: [PATCH 03/20] Added yaml prettifer and using on initial persona --- conf/personas/devstack.sh.yaml | 40 +++++++++++++++++++--------------- tools/yamlpretty.py | 24 ++++++++++++++++++++ 2 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 tools/yamlpretty.py diff --git a/conf/personas/devstack.sh.yaml b/conf/personas/devstack.sh.yaml index ed299ec7..76a7ef65 100644 --- a/conf/personas/devstack.sh.yaml +++ b/conf/personas/devstack.sh.yaml @@ -1,11 +1,7 @@ --- -description: Devstack.sh matching component installation. -supports: -- rhel-6 -- ubuntu-oneiric -- fedora-16 -options: components: +# Order matters here! +- general - db - rabbit-mq - keystone-client @@ -16,16 +12,24 @@ components: - quantum-client - nova-client - horizon +description: Devstack.sh matching component installation. +options: null subsystems: - glance: - - api - - reg - nova: - - api - - cauth - - cert - - cpu - - net - - sched - - vol - - xvnc + glance: + - api + - reg + nova: + - api + - cauth + - cert + - cpu + - net + - sched + - vol + - xvnc +supports: +- rhel-6 +- ubuntu-oneiric +- fedora-16 +... + diff --git a/tools/yamlpretty.py b/tools/yamlpretty.py new file mode 100644 index 00000000..da4e5fbd --- /dev/null +++ b/tools/yamlpretty.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import yaml +import os +import sys + +# See: http://pyyaml.org/wiki/PyYAMLDocumentation + +if __name__ == "__main__": + args = list(sys.argv) + args = args[1:] + for fn in args: + data = None + with open(fn, 'r') as fh: + data = yaml.load(fh.read()) + fh.close() + formatted = yaml.dump(data, + line_break="\n", + indent=4, + explicit_start=True, + explicit_end=True, + default_flow_style=False, + ) + print formatted From 2483eaa8a8b51676e6d616851e808f26e3af9b1a Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 15:33:13 -0700 Subject: [PATCH 04/20] Enabling +x --- tools/yamlpretty.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/yamlpretty.py diff --git a/tools/yamlpretty.py b/tools/yamlpretty.py old mode 100644 new mode 100755 From 184b211af0a5e4cdfcee5782323d5e76d6182e5e Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 15:33:30 -0700 Subject: [PATCH 05/20] Removing json files not needed anymore --- tools/extract_json.py | 28 --------- tools/json2yaml.py | 31 ---------- tools/validate_json.py | 126 ----------------------------------------- 3 files changed, 185 deletions(-) delete mode 100644 tools/extract_json.py delete mode 100755 tools/json2yaml.py delete mode 100644 tools/validate_json.py diff --git a/tools/extract_json.py b/tools/extract_json.py deleted file mode 100644 index 784b2cce..00000000 --- a/tools/extract_json.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -import os -import sys - - -def clean_file(name): - with open(name, "r") as f: - contents = f.read() - lines = contents.splitlines() - cleaned_up = list() - for line in lines: - if line.lstrip().startswith('#'): - continue - else: - cleaned_up.append(line) - cleaned_lines = os.linesep.join(cleaned_up) - data = json.loads(cleaned_lines) - output = json.dumps(data, indent=4, sort_keys=True) - print(output) - - -if __name__ == "__main__": - ME = os.path.basename(sys.argv[0]) - if len(sys.argv) == 1: - print("%s filename filename filename..." % (ME)) - sys.exit(0) - clean_file(sys.argv[1]) - sys.exit(0) diff --git a/tools/json2yaml.py b/tools/json2yaml.py deleted file mode 100755 index ad6f378f..00000000 --- a/tools/json2yaml.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python - -import glob -import json -import os -import sys - - -def load_json(fn): - with open(fn, 'r') as f: - lines = f.readlines() - data = os.linesep.join( - l - for l in lines - if not l.lstrip().startswith('#') - ) - return json.loads(data) - -inputdir = sys.argv[1] -distro = sys.argv[2] - -for input_file in glob.glob('%s/*.json' % inputdir): - data = load_json(input_file) - - print - print ' - name: %s' % os.path.splitext(os.path.basename(input_file))[0] - print ' packages:' - for pkg, info in sorted(data.get(distro, {}).items()): - print ' - name: %s' % pkg - for n, v in sorted(info.items()): - print ' %s: %s' % (n, v) diff --git a/tools/validate_json.py b/tools/validate_json.py deleted file mode 100644 index b85c0ad2..00000000 --- a/tools/validate_json.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -Searches the given path for JSON files, and validates their contents. - -""" - -import errno -import json -import logging -import optparse -import os -import re - - -# Configure logging -logging.basicConfig(format='%(levelname)s: %(message)s') -ROOT_LOGGER = logging.getLogger("") -ROOT_LOGGER.setLevel(logging.WARNING) -LOGGER = logging.getLogger(__name__) - -# Configure commandlineability -parser = optparse.OptionParser() -parser.add_option('-p', type="string", default=os.getcwd(), - help='the path to search for JSON files', dest='path') -parser.add_option('-r', type="string", default='.json$', - help='the regular expression to match filenames against ' \ - '(not absolute paths)', dest='regexp') -(args, _) = parser.parse_args() - - -def main(): - files = find_matching_files(args.path, args.regexp) - results = True - print("Validating %s json files (found using regex [%s] in path [%s])" % (len(files), args.regexp, args.path)) - for path in files: - pres = validate_json(path) - if not pres: - print("Failed at validating [%s]" % (path)) - results = False - else: - print("Validated [%s]" % (path)) - # Invert our test results to produce a status code - if results: - exit(0) - else: - exit(1) - - -def validate_json(path): - """Open a file and validate it's contents as JSON""" - try: - LOGGER.info("Validating %s" % (path)) - contents = read_file(path) - if contents is False: - logging.warning('Insufficient permissions to open: %s' % path) - return False - except: - LOGGER.warning('Unable to open: %s' % path) - return False - - #knock off comments - ncontents = list() - for line in contents.splitlines(): - tmp_line = line.strip() - if tmp_line.startswith("#"): - continue - else: - ncontents.append(line) - - contents = os.linesep.join(ncontents) - try: - jdict = json.loads(contents) - if not type(jdict) is dict: - LOGGER.error('Root element in %s is not a dictionary!' % path) - return False - except Exception: - LOGGER.exception('Unable to parse: %s' % path) - return False - - return True - - -def find_matching_files(path, pattern): - """Search the given path for files matching the given pattern""" - - regex = re.compile(pattern) - json_files = [] - for root, dirs, files in os.walk(path): - for name in files: - if regex.search(name): - full_name = os.path.join(root, name) - json_files.append(full_name) - return json_files - - -def read_file(path): - """Attempt to read a file safely - - Returns the contents of the file as a string on success, False otherwise""" - try: - fp = open(path) - except IOError as e: - if e.errno == errno.EACCES: - # permission error - return False - raise - else: - with fp: - return fp.read() - - -def replace_file(path, new_contents): - """Overwrite the file at the given path with the new contents - - Returns True on success, False otherwise.""" - try: - f = open(path, 'w') - f.write(new_contents) - f.close() - except: - LOGGER.error('Unable to write: %s' % f) - return False - return True - - -if __name__ == "__main__": - main() From 1e39dc1dc2733d035872515313a562dabe952db5 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 15:38:31 -0700 Subject: [PATCH 06/20] Ran through pretty --- conf/distros/rhel-6.yaml | 1010 ++++++++++++++++++++------------------ 1 file changed, 519 insertions(+), 491 deletions(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 29a8dff2..43e91a5d 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -1,497 +1,525 @@ +--- # RedHat Enterprise Linux 6 - -name: rhel-6 distro_pattern: redhat-6\\.2 - +name: rhel-6 packager_name: devstack.packaging.yum:YumPackager - commands: - - pip: python-pip - - apache: - restart: ["service", "httpd", "restart"] - start: ["service", "httpd", "start"] - stop: ["service", "httpd", "stop"] - status: ["service", "httpd", "status"] - settings: - #ensure runs after wsgi.conf (naming wise) - conf-link-target: /etc/httpd/conf.d/wsgi-horizon-000-default.conf - - mysql: - start: ["service", "mysql", 'start'] - stop: ["service", 'mysql', "stop"] - status: ["service", 'mysql', "status"] - restart: ["service", 'mysql', "restart"] - #NOTE: we aren't stopping any sql injection... - set_pwd: ['mysql', '--user=%USER%', '--password=%OLD_PASSWORD%', '-e', - "\"USE mysql; UPDATE user SET password=PASSWORD('%NEW_PASSWORD%') WHERE User='%USER%'; FLUSH PRIVILEGES;\""] - create_db: ['mysql', '--user=%USER%', '--password=%PASSWORD%', '-e', 'CREATE DATABASE %DB%;'] - drop_db: ['mysql', '--user=%USER%', '--password=%PASSWORD%', '-e', 'DROP DATABASE IF EXISTS %DB%;'] - grant_all: ["mysql", "--user=%USER%", "--password=%PASSWORD%", '-e', - "\"GRANT ALL PRIVILEGES ON *.* TO '%USER%'@'%' IDENTIFIED BY '%PASSWORD%'; FLUSH PRIVILEGES;\""] - + apache: + restart: + - service + - httpd + - restart + settings: + # Ensure runs after wsgi.conf (naming wise) + conf-link-target: /etc/httpd/conf.d/wsgi-horizon-000-default.conf + start: + - service + - httpd + - start + status: + - service + - httpd + - status + stop: + - service + - httpd + - stop + mysql: + # NOTE: we aren't stopping any sql injection... + create_db: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - CREATE DATABASE %DB%; + drop_db: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - DROP DATABASE IF EXISTS %DB%; + grant_all: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - '"GRANT ALL PRIVILEGES ON *.* TO ''%USER%''@''%'' IDENTIFIED BY ''%PASSWORD%''; + FLUSH PRIVILEGES;"' + restart: + - service + - mysql + - restart + set_pwd: + - mysql + - --user=%USER% + - --password=%OLD_PASSWORD% + - -e + - '"USE mysql; UPDATE user SET password=PASSWORD(''%NEW_PASSWORD%'') WHERE + User=''%USER%''; FLUSH PRIVILEGES;"' + start: + - service + - mysql + - start + status: + - service + - mysql + - status + stop: + - service + - mysql + - stop + pip: python-pip components: + db: + install: devstack.distros.rhel6:DBInstaller + packages: + - name: mysql + removable: true + version: 5.1* + - name: mysql-server + removable: true + version: 5.1* + start: devstack.components.db:DBRuntime + stop: devstack.components.db:DBRuntime + uninstall: devstack.components.db:DBUninstaller + general: + packages: + - name: coreutils + removable: false + version: 8.4* + - name: curl + removable: false + version: 7.19.7* + - meta: + epel: true + name: euca2ools + removable: false + version: 1.3.1* + - name: gawk + removable: false + version: 3.1* + - name: git + removable: false + version: 1.7* + - name: iputils + removable: false + version: 20071127* + - name: libxml2-devel + removable: false + version: 2.7* + - name: libxslt-devel + removable: false + version: 1.1.26* + - name: lsof + removable: false + version: 4.82* + - name: mlocate + removable: false + version: 0.22* + - name: openssh-server + removable: false + version: 5.3* + - name: psmisc + removable: false + version: 22.6* + - meta: + epel: true + name: pylint + removable: false + version: 0.21* + - name: python + removable: false + version: 2.6* + - name: python-devel + removable: false + version: 2.6* + - meta: + epel: true + name: python-distutils-extra + removable: false + version: 2.29* + - meta: + epel: true + name: python-mox + removable: false + version: 0.5.3* + - meta: + epel: true + name: python-pep8 + removable: false + version: 0.6* + - meta: + epel: true + name: python-pip + removable: false + version: 0.8* + - name: python-setuptools + removable: false + version: 0.6.10* + - meta: + epel: true + name: python-unittest2 + removable: false + version: 0.5.1* + - meta: + epel: true + name: python-virtualenv + removable: false + version: 1.7* + - name: screen + removable: false + version: 4.0.3* + - name: sudo + removable: false + version: 1.7.4* + - name: tcpdump + removable: false + version: 4.0* + - name: unzip + removable: false + version: 6.0* + - name: wget + removable: false + version: 1.12* + glance: + packages: + - name: MySQL-python + removable: true + version: 1.2* + - meta: + epel: true + name: python-argparse + removable: true + version: 1.2* + - name: python-dateutil + removable: true + version: 1.4* + - meta: + epel: true + name: python-eventlet + removable: true + version: 0.9* + - meta: + epel: true + name: python-greenlet + removable: true + version: 0.3.1* + - meta: + epel: true + name: python-httplib2 + removable: true + version: 0.4* + - meta: + epel: true + name: python-prettytable + removable: true + version: 0.5* + - meta: + epel: true + name: pyxattr + removable: true + version: 0.5* + horizon: + packages: + - name: httpd + removable: true + version: 2.2* + - name: mod_wsgi + removable: true + version: 3.2* + - name: python-dateutil + removable: true + version: 1.4* + - meta: + epel: true + name: python-eventlet + removable: true + version: 0.9* + - meta: + epel: true + name: python-kombu + removable: true + version: 1.1* + - meta: + epel: true + name: python-webob1.0 + removable: true + version: 1.0* + keystone: + packages: + - name: MySQL-python + removable: true + version: 1.2* + - name: cyrus-sasl-lib + removable: false + version: 2.1* + - name: openldap + removable: false + version: 2.4* + - name: openldap-devel + removable: true + version: 2.4* + - meta: + epel: true + name: python-argparse + removable: true + version: 1.2* + - meta: + epel: true + name: python-eventlet + removable: true + version: 0.9* + - meta: + epel: true + name: python-greenlet + removable: true + version: 0.3.1* + - name: python-lxml + removable: true + version: 2.2* + - meta: + epel: true + name: python-passlib + removable: true + version: 1.5* + - meta: + epel: true + name: python-prettytable + removable: true + version: 0.5* + - meta: + epel: true + name: python-sqlite2 + removable: true + version: 2.3* + - meta: + epel: true + name: python-webob1.0 + removable: true + version: 1.0* + - name: sqlite + removable: false + version: 3.6* + keystone-client: + packages: + - meta: + epel: true + name: python-argparse + removable: true + version: 1.2* + - meta: + epel: true + name: python-prettytable + removable: true + version: 0.5* + melange: + packages: null + n-api: + packages: + - name: python-dateutil + removable: false + version: 1.4* + n-cpu: + packages: + - name: iscsi-initiator-utils + removable: true + version: 6.2* + - name: libguestfs + removable: true + version: 1.2.7* + - name: libguestfs-mount + removable: true + version: 1.7.17* + - name: libguestfs-tools + removable: true + version: 1.7.17* + - name: libvirt + removable: true + version: 0.9.4* + - name: libvirt-client + removable: true + version: 0.9.4* + - name: libvirt-python + removable: true + version: 0.9.4* + - name: lvm2 + removable: true + version: 2.02* + - name: qemu-img + removable: true + version: 0.12* + - name: qemu-kvm + removable: true + version: 2* + n-vnc: + packages: null + n-vol: + packages: + - name: iscsi-initiator-utils + removable: true + version: 6.2* + - name: lvm2 + removable: true + version: 2.02* + - name: scsi-target-utils + removable: true + version: 1.0* + nova: + packages: + - name: MySQL-python + removable: true + version: 1.2* + - name: dnsmasq + removable: false + version: 2.48* + - name: ebtables + removable: false + version: 2.0* + - name: iptables + removable: false + version: 1.4* + - name: iputils + removable: false + version: 20071127* + - name: kpartx + removable: false + version: 0.4* + - name: libxml2-python + removable: false + version: 2.7* + - name: parted + removable: false + version: 2.1* + - meta: + epel: true + name: python-boto + removable: true + version: 2.0* + - meta: + epel: true + name: python-carrot + removable: true + version: 0.10* + - name: python-cheetah + removable: true + version: 2.4* + - name: python-crypto + removable: false + version: 2.0* + - meta: + epel: true + name: python-eventlet + removable: true + version: 0.9* + - meta: + epel: true + name: python-feedparser + removable: true + version: 5.0* + - meta: + epel: true + name: python-gflags + removable: true + version: 1.4* + - meta: + epel: true + name: python-greenlet + removable: true + version: 0.3.1* + - meta: + epel: true + name: python-kombu + removable: true + version: 1.1* + - meta: + epel: true + name: python-lockfile + removable: true + version: 0.8* + - name: python-lxml + removable: true + version: 2.2* + - name: python-netaddr + removable: true + version: 0.7* + - name: python-suds + removable: true + version: 0.4* + - meta: + epel: true + name: pyxattr + removable: true + version: 0.5* + - meta: + epel: true + name: socat + removable: true + version: 1.7* + - name: sqlite + removable: false + version: 3.6* + nova-client: + packages: + - meta: + epel: true + name: python-argparse + removable: true + version: 1.2* + - meta: + epel: true + name: python-prettytable + removable: true + version: 0.5* + quantum: + packages: + - name: libxml2-python + removable: false + version: 2.7* + - meta: + epel: true + name: python-eventlet + removable: true + version: 0.9* + - meta: + epel: true + name: python-gflags + removable: true + version: 1.4* + - meta: + epel: true + name: python-greenlet + removable: true + version: 0.3.1* + quantum-client: + packages: + - meta: + epel: true + name: python-gflags + removable: true + version: 1.4* + quantum-openvswitch: + packages: null + rabbitmq: + packages: + - meta: + epel: true + name: rabbitmq-server + pre-install: + - cmd: + - service + - qpidd + - stop + ignore_failure: true + run_as_root: true + - cmd: + - chkconfig + - qpidd + - 'off' + ignore_failure: true + run_as_root: true + removable: true + version: 2.6* + swift: + packages: null +... - db: - install: devstack.distros.rhel6:DBInstaller - uninstall: devstack.components.db:DBUninstaller - start: devstack.components.db:DBRuntime - stop: devstack.components.db:DBRuntime - packages: - - name: mysql - removable: True - version: 5.1* - - name: mysql-server - removable: True - version: 5.1* - - general: - packages: - - name: coreutils - removable: False - version: 8.4* - - name: curl - removable: False - version: 7.19.7* - - name: euca2ools - meta: - epel: True - removable: False - version: 1.3.1* - - name: gawk - removable: False - version: 3.1* - - name: git - removable: False - version: 1.7* - - name: iputils - removable: False - version: 20071127* - - name: libxml2-devel - removable: False - version: 2.7* - - name: libxslt-devel - removable: False - version: 1.1.26* - - name: lsof - removable: False - version: 4.82* - - name: mlocate - removable: False - version: 0.22* - - name: openssh-server - removable: False - version: 5.3* - - name: psmisc - removable: False - version: 22.6* - - name: pylint - meta: - epel: True - removable: False - version: 0.21* - - name: python - removable: False - version: 2.6* - - name: python-devel - removable: False - version: 2.6* - - name: python-distutils-extra - meta: - epel: True - removable: False - version: 2.29* - - name: python-mox - meta: - epel: True - removable: False - version: 0.5.3* - - name: python-pep8 - meta: - epel: True - removable: False - version: 0.6* - - name: python-pip - meta: - epel: True - removable: False - version: 0.8* - - name: python-setuptools - removable: False - version: 0.6.10* - - name: python-unittest2 - meta: - epel: True - removable: False - version: 0.5.1* - - name: python-virtualenv - meta: - epel: True - removable: False - version: 1.7* - - name: screen - removable: False - version: 4.0.3* - - name: sudo - removable: False - version: 1.7.4* - - name: tcpdump - removable: False - version: 4.0* - - name: unzip - removable: False - version: 6.0* - - name: wget - removable: False - version: 1.12* - - glance: - packages: - - name: MySQL-python - removable: True - version: 1.2* - - name: python-argparse - meta: - epel: True - removable: True - version: 1.2* - - name: python-dateutil - removable: True - version: 1.4* - - name: python-eventlet - meta: - epel: True - removable: True - version: 0.9* - - name: python-greenlet - meta: - epel: True - removable: True - version: 0.3.1* - - name: python-httplib2 - meta: - epel: True - removable: True - version: 0.4* - - name: python-prettytable - meta: - epel: True - removable: True - version: 0.5* - - name: pyxattr - meta: - epel: True - removable: True - version: 0.5* - - horizon: - packages: - - name: httpd - removable: True - version: 2.2* - - name: mod_wsgi - removable: True - version: 3.2* - - name: python-dateutil - removable: True - version: 1.4* - - name: python-eventlet - meta: - epel: True - removable: True - version: 0.9* - - name: python-kombu - meta: - epel: True - removable: True - version: 1.1* - - name: python-webob1.0 - meta: - epel: True - removable: True - version: 1.0* - - keystone-client: - packages: - - name: python-argparse - meta: - epel: True - removable: True - version: 1.2* - - name: python-prettytable - meta: - epel: True - removable: True - version: 0.5* - - keystone: - packages: - - name: MySQL-python - removable: True - version: 1.2* - - name: cyrus-sasl-lib - removable: False - version: 2.1* - - name: openldap - removable: False - version: 2.4* - - name: openldap-devel - removable: True - version: 2.4* - - name: python-argparse - meta: - epel: True - removable: True - version: 1.2* - - name: python-eventlet - meta: - epel: True - removable: True - version: 0.9* - - name: python-greenlet - meta: - epel: True - removable: True - version: 0.3.1* - - name: python-lxml - removable: True - version: 2.2* - - name: python-passlib - meta: - epel: True - removable: True - version: 1.5* - - name: python-prettytable - meta: - epel: True - removable: True - version: 0.5* - - name: python-sqlite2 - meta: - epel: True - removable: True - version: 2.3* - - name: python-webob1.0 - meta: - epel: True - removable: True - version: 1.0* - - name: sqlite - removable: False - version: 3.6* - - melange: - packages: - - n-api: - packages: - - name: python-dateutil - removable: False - version: 1.4* - - n-cpu: - packages: - - name: iscsi-initiator-utils - removable: True - version: 6.2* - - name: libguestfs - removable: True - version: 1.2.7* - - name: libguestfs-mount - removable: True - version: 1.7.17* - - name: libguestfs-tools - removable: True - version: 1.7.17* - - name: libvirt - removable: True - version: 0.9.4* - - name: libvirt-client - removable: True - version: 0.9.4* - - name: libvirt-python - removable: True - version: 0.9.4* - - name: lvm2 - removable: True - version: 2.02* - - name: qemu-img - removable: True - version: 0.12* - - name: qemu-kvm - removable: True - version: 2* - - n-vnc: - packages: - - n-vol: - packages: - - name: iscsi-initiator-utils - removable: True - version: 6.2* - - name: lvm2 - removable: True - version: 2.02* - - name: scsi-target-utils - removable: True - version: 1.0* - - nova-client: - packages: - - name: python-argparse - meta: - epel: True - removable: True - version: 1.2* - - name: python-prettytable - meta: - epel: True - removable: True - version: 0.5* - - nova: - packages: - - name: MySQL-python - removable: True - version: 1.2* - - name: dnsmasq - removable: False - version: 2.48* - - name: ebtables - removable: False - version: 2.0* - - name: iptables - removable: False - version: 1.4* - - name: iputils - removable: False - version: 20071127* - - name: kpartx - removable: False - version: 0.4* - - name: libxml2-python - removable: False - version: 2.7* - - name: parted - removable: False - version: 2.1* - - name: python-boto - meta: - epel: True - removable: True - version: 2.0* - - name: python-carrot - meta: - epel: True - removable: True - version: 0.10* - - name: python-cheetah - removable: True - version: 2.4* - - name: python-crypto - removable: False - version: 2.0* - - name: python-eventlet - meta: - epel: True - removable: True - version: 0.9* - - name: python-feedparser - meta: - epel: True - removable: True - version: 5.0* - - name: python-gflags - meta: - epel: True - removable: True - version: 1.4* - - name: python-greenlet - meta: - epel: True - removable: True - version: 0.3.1* - - name: python-kombu - meta: - epel: True - removable: True - version: 1.1* - - name: python-lockfile - meta: - epel: True - removable: True - version: 0.8* - - name: python-lxml - removable: True - version: 2.2* - - name: python-netaddr - removable: True - version: 0.7* - - name: python-suds - removable: True - version: 0.4* - - name: pyxattr - meta: - epel: True - removable: True - version: 0.5* - - name: socat - meta: - epel: True - removable: True - version: 1.7* - - name: sqlite - removable: False - version: 3.6* - - quantum-client: - packages: - - name: python-gflags - meta: - epel: True - removable: True - version: 1.4* - - quantum-openvswitch: - packages: - - quantum: - packages: - - name: libxml2-python - removable: False - version: 2.7* - - name: python-eventlet - meta: - epel: True - removable: True - version: 0.9* - - name: python-gflags - meta: - epel: True - removable: True - version: 1.4* - - name: python-greenlet - meta: - epel: True - removable: True - version: 0.3.1* - - rabbitmq: - packages: - - name: rabbitmq-server - meta: - epel: True - pre-install: - - cmd: ['service', 'qpidd', 'stop'] - run_as_root: True - ignore_failure: True - - cmd: ['chkconfig', 'qpidd', 'off'] - run_as_root: True - ignore_failure: True - removable: True - version: 2.6* - - swift: - packages: From 2a30054978cf64fa5936a3ad08381b754f8e5667 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 16:51:10 -0700 Subject: [PATCH 07/20] More fixups for rhel6 + some ubuntu class name cleanups --- conf/distros/rhel-6.yaml | 270 ++++++++++++++++++++++++------- conf/distros/ubuntu-oneiric.yaml | 2 +- devstack/distros/oneiric.py | 16 +- devstack/distros/rhel6.py | 44 ++++- devstack/packaging/apt.py | 31 ++-- devstack/packaging/yum.py | 72 ++------- devstack/persona.py | 4 +- stack | 6 +- tools/validate_yaml.py | 6 +- tools/yamlpretty.py | 3 +- 10 files changed, 306 insertions(+), 148 deletions(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 43e91a5d..d0ce1f50 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -1,8 +1,8 @@ --- # RedHat Enterprise Linux 6 -distro_pattern: redhat-6\\.2 +distro_pattern: redhat-6(.*) name: rhel-6 -packager_name: devstack.packaging.yum:YumPackager +packager_name: devstack.distros.rhel6:YumPackager commands: apache: restart: @@ -10,7 +10,7 @@ commands: - httpd - restart settings: - # Ensure runs after wsgi.conf (naming wise) + # Ensure runs after wsgi.conf (file naming wise) conf-link-target: /etc/httpd/conf.d/wsgi-horizon-000-default.conf start: - service @@ -83,6 +83,7 @@ components: stop: devstack.components.db:DBRuntime uninstall: devstack.components.db:DBUninstaller general: + install: devstack.components.pkglist:Installer packages: - name: coreutils removable: false @@ -181,7 +182,18 @@ components: - name: wget removable: false version: 1.12* + pips: + - name: coverage + version: 3.5.1 + - name: mock + version: 0.8.0 + - name: nose + version: 1.1.2 + start: devstack.component:EmptyRuntime + stop: devstack.component:EmptyRuntime + uninstall: devstack.components.pkglist:Uninstaller glance: + install: devstack.components.glance:GlanceInstaller packages: - name: MySQL-python removable: true @@ -219,7 +231,23 @@ components: name: pyxattr removable: true version: 0.5* + pips: + - name: PasteDeploy + version: 1.5.0 + - name: Routes + version: 1.12.3 + - name: SQLAlchemy + version: 0.7.5 + - name: iso8601 + version: 0.1.4 + - name: pycrypto + options: --upgrade + version: '2.5' + start: devstack.components.glance:GlanceRuntime + stop: devstack.components.glance:GlanceRuntime + uninstall: devstack.components.glance:GlanceUninstaller horizon: + install: devstack.distros.rhel6:HorizonInstaller packages: - name: httpd removable: true @@ -245,7 +273,43 @@ components: name: python-webob1.0 removable: true version: 1.0* + pips: + - name: CherryPy + version: 3.2.2 + - name: Paste + version: 1.7.5.1 + - name: PasteDeploy + version: '1.5' + - name: PasteScript + version: 1.7.5 + - name: Routes + version: 1.12.3 + - name: SQLAlchemy + version: 0.7.5 + - name: django + version: 1.3.1 + - name: django-mailer + version: 0.1.0 + - name: django-nose + version: 0.1.3 + - name: django-nose-selenium + version: 0.7.3 + - name: django-registration + version: '0.7' + - name: django-staticfiles + version: 1.1.2 + - name: pycrypto + options: --upgrade + version: '2.5' + - name: python-cloudfiles + version: 1.7.9.3 + - name: sqlalchemy-migrate + version: 0.7.2 + start: devstack.components.horizon:HorizonRuntime + stop: devstack.components.horizon:HorizonRuntime + uninstall: devstack.components.horizon:HorizonUninstaller keystone: + install: devstack.components.keystone:KeystoneInstaller packages: - name: MySQL-python removable: true @@ -300,7 +364,29 @@ components: - name: sqlite removable: false version: 3.6* + pips: + - name: Paste + version: 1.7.5.1 + - name: PasteDeploy + version: '1.5' + - name: PasteScript + version: 1.7.5 + - name: Routes + version: 1.12.3 + - name: SQLAlchemy + version: 0.7.5 + - name: py-bcrypt + version: '0.2' + - name: pycrypto + options: --upgrade + version: '2.5' + - name: sqlalchemy-migrate + version: 0.7.2 + start: devstack.components.keystone:KeystoneRuntime + stop: devstack.components.keystone:KeystoneRuntime + uninstall: devstack.components.keystone:KeystoneUninstaller keystone-client: + install: devstack.components.keystone_client:KeyStoneClientInstaller packages: - meta: epel: true @@ -312,59 +398,24 @@ components: name: python-prettytable removable: true version: 0.5* + start: devstack.components.keystone_client:KeyStoneClientRuntime + stop: devstack.components.keystone_client:KeyStoneClientRuntime + uninstall: devstack.components.keystone_client:KeyStoneClientUninstaller melange: - packages: null - n-api: - packages: - - name: python-dateutil - removable: false - version: 1.4* - n-cpu: - packages: - - name: iscsi-initiator-utils - removable: true - version: 6.2* - - name: libguestfs - removable: true - version: 1.2.7* - - name: libguestfs-mount - removable: true - version: 1.7.17* - - name: libguestfs-tools - removable: true - version: 1.7.17* - - name: libvirt - removable: true - version: 0.9.4* - - name: libvirt-client - removable: true - version: 0.9.4* - - name: libvirt-python - removable: true - version: 0.9.4* - - name: lvm2 - removable: true - version: 2.02* - - name: qemu-img - removable: true - version: 0.12* - - name: qemu-kvm - removable: true - version: 2* - n-vnc: - packages: null - n-vol: - packages: - - name: iscsi-initiator-utils - removable: true - version: 6.2* - - name: lvm2 - removable: true - version: 2.02* - - name: scsi-target-utils - removable: true - version: 1.0* + install: devstack.components.melange:MelangeInstaller + start: devstack.components.melange:MelangeRuntime + stop: devstack.components.melange:MelangeRuntime + uninstall: devstack.components.melange:MelangeUninstaller + no-vnc: + install: devstack.components.novnc:NoVNCInstaller + pips: + - name: numpy + version: '1.5' + start: devstack.components.novnc:NoVNCRuntime + stop: devstack.components.novnc:NoVNCRuntime + uninstall: devstack.components.novnc:NoVNCUninstaller nova: + install: devstack.components.nova:NovaInstaller packages: - name: MySQL-python removable: true @@ -458,7 +509,81 @@ components: - name: sqlite removable: false version: 3.6* + pips: + - name: Paste + version: 1.7.5.1 + - name: PasteDeploy + version: '1.5' + - name: PasteScript + version: 1.7.5 + - name: Routes + version: 1.12.3 + - name: SQLAlchemy + version: 0.7.5 + - name: Tempita + options: --upgrade + version: 0.5dev + - name: iso8601 + version: 0.1.4 + - name: pycrypto + options: --upgrade + version: '2.5' + - name: sqlalchemy-migrate + version: 0.7.2 + start: devstack.components.nova:NovaRuntime + stop: devstack.components.nova:NovaRuntime + subsystems: + api: + packages: + - name: python-dateutil + removable: false + version: 1.4* + cpu: + packages: + - name: iscsi-initiator-utils + removable: true + version: 6.2* + - name: libguestfs + removable: true + version: 1.2.7* + - name: libguestfs-mount + removable: true + version: 1.7.17* + - name: libguestfs-tools + removable: true + version: 1.7.17* + - name: libvirt + removable: true + version: 0.9.4* + - name: libvirt-client + removable: true + version: 0.9.4* + - name: libvirt-python + removable: true + version: 0.9.4* + - name: lvm2 + removable: true + version: 2.02* + - name: qemu-img + removable: true + version: 0.12* + - name: qemu-kvm + removable: true + version: 2* + vol: + packages: + - name: iscsi-initiator-utils + removable: true + version: 6.2* + - name: lvm2 + removable: true + version: 2.02* + - name: scsi-target-utils + removable: true + version: 1.0* + uninstall: devstack.components.nova:NovaUninstaller nova-client: + install: devstack.components.nova_client:NovaClientInstaller packages: - meta: epel: true @@ -470,7 +595,11 @@ components: name: python-prettytable removable: true version: 0.5* + start: devstack.components.nova_client:NovaClientRuntime + stop: devstack.components.nova_client:NovaClientRuntime + uninstall: devstack.components.nova_client:NovaClientUninstaller quantum: + install: devstack.components.quantum:QuantumInstaller packages: - name: libxml2-python removable: false @@ -490,16 +619,35 @@ components: name: python-greenlet removable: true version: 0.3.1* + pips: + - name: Paste + version: 1.7.5.1 + - name: PasteDeploy + version: '1.5' + - name: PasteScript + version: 1.7.5 + - name: Routes + version: 1.12.3 + - name: SQLAlchemy + version: 0.7.5 + - name: sqlalchemy-migrate + version: 0.7.2 + start: devstack.components.quantum:QuantumRuntime + stop: devstack.components.quantum:QuantumRuntime + uninstall: devstack.components.quantum:QuantumUninstaller quantum-client: + install: devstack.components.quantum_client:QuantumClientInstaller packages: - meta: epel: true name: python-gflags removable: true version: 1.4* - quantum-openvswitch: - packages: null - rabbitmq: + start: devstack.components.quantum_client:QuantumClientRuntime + stop: devstack.components.quantum_client:QuantumClientRuntime + uninstall: devstack.components.quantum_client:QuantumClientUninstaller + rabbit-mq: + install: devstack.components.rabbit:RabbitInstaller packages: - meta: epel: true @@ -519,7 +667,13 @@ components: run_as_root: true removable: true version: 2.6* + start: devstack.components.rabbit:RabbitRuntime + stop: devstack.components.rabbit:RabbitRuntime + uninstall: devstack.components.rabbit:RabbitUninstaller swift: - packages: null + install: devstack.components.swift:SwiftInstaller + start: devstack.components.swift:SwiftRuntime + stop: devstack.components.swift:SwiftRuntime + uninstall: devstack.components.swift:SwiftUninstaller ... diff --git a/conf/distros/ubuntu-oneiric.yaml b/conf/distros/ubuntu-oneiric.yaml index ed6455f6..f67ab36f 100644 --- a/conf/distros/ubuntu-oneiric.yaml +++ b/conf/distros/ubuntu-oneiric.yaml @@ -3,7 +3,7 @@ name: ubuntu-oneiric distro_pattern: Ubuntu(.*)oneiric -packager_name: devstack.distros.oneiric:OneiricAptPackager +packager_name: devstack.distros.oneiric:AptPackager commands: diff --git a/devstack/distros/oneiric.py b/devstack/distros/oneiric.py index 8209b54a..88ca1623 100644 --- a/devstack/distros/oneiric.py +++ b/devstack/distros/oneiric.py @@ -46,33 +46,33 @@ class DBInstaller(db.DBInstaller): sh.write_file('/etc/mysql/my.cnf', fc) -class OneiricAptPackager(apt.AptPackager): +class AptPackager(apt.AptPackager): - def _pkg_remove_special(self, name, pkginfo): + def _remove_special(self, name, info): if name == 'rabbitmq-server': #https://bugs.launchpad.net/ubuntu/+source/rabbitmq-server/+bug/878597 #https://bugs.launchpad.net/ubuntu/+source/rabbitmq-server/+bug/878600 LOG.info("Handling special remove of %s." % (name)) - pkg_full = self._format_pkg(name, pkginfo.get("version")) - cmd = apt.APT_GET + apt.APT_REMOVE + [pkg_full] + pkg_full = self._format_pkg_name(name, info.get("version")) + cmd = apt.APT_REMOVE + [pkg_full] self._execute_apt(cmd) #probably useful to do this time.sleep(1) #purge - cmd = apt.APT_GET + apt.APT_PURGE + [pkg_full] + cmd = apt.APT_PURGE + [pkg_full] self._execute_apt(cmd) return True return False - def _pkg_install_special(self, name, pkginfo): + def _install_special(self, name, info): if name == 'rabbitmq-server': #https://bugs.launchpad.net/ubuntu/+source/rabbitmq-server/+bug/878597 #https://bugs.launchpad.net/ubuntu/+source/rabbitmq-server/+bug/878600 LOG.info("Handling special install of %s." % (name)) #this seems to be a temporary fix for that bug with tempfile.TemporaryFile() as f: - pkg_full = self._format_pkg(name, pkginfo.get("version")) - cmd = apt.APT_GET + apt.APT_INSTALL + [pkg_full] + pkg_full = self._format_pkg_name(name, info.get("version")) + cmd = apt.APT_INSTALL + [pkg_full] self._execute_apt(cmd, stdout_fh=f, stderr_fh=f) return True return False diff --git a/devstack/distros/rhel6.py b/devstack/distros/rhel6.py index 1338d2da..86546cc8 100644 --- a/devstack/distros/rhel6.py +++ b/devstack/distros/rhel6.py @@ -25,11 +25,25 @@ from devstack import utils from devstack.components import db from devstack.components import horizon +from devstack.packaging import yum + LOG = logging.getLogger(__name__) SOCKET_CONF = "/etc/httpd/conf.d/wsgi-socket-prefix.conf" HTTPD_CONF = '/etc/httpd/conf/httpd.conf' +# Need to relink for rhel (not a bug!) +RHEL_RELINKS = { + 'python-webob1.0': { + "src": '/usr/lib/python2.6/site-packages/WebOb-1.0.8-py2.6.egg/webob/', + 'tgt': '/usr/lib/python2.6/site-packages/webob', + }, + 'python-nose1.1': { + "src": '/usr/lib/python2.6/site-packages/nose-1.1.2-py2.6.egg/nose/', + 'tgt': '/usr/lib/python2.6/site-packages/nose', + }, +} + class DBInstaller(db.DBInstaller): @@ -47,12 +61,12 @@ class DBInstaller(db.DBInstaller): sh.write_file('/etc/my.cnf', fc) -class Rhel6HorizonInstaller(horizon.HorizonInstaller): +class HorizonInstaller(horizon.HorizonInstaller): def _config_fixups(self): (user, group) = self._get_apache_user_group() + # This is recorded so it gets cleaned up during uninstall self.tracewriter.file_touched(SOCKET_CONF) - # Not recorded since we aren't really creating this LOG.info("Fixing up %s and %s files" % (SOCKET_CONF, HTTPD_CONF)) with sh.Rooted(True): # Fix the socket prefix to someplace we can use @@ -67,3 +81,29 @@ class Rhel6HorizonInstaller(horizon.HorizonInstaller): line = "Group %s" % (group) new_lines.append(line) sh.write_file(HTTPD_CONF, utils.joinlinesep(*new_lines)) + + +class YumPackager(yum.YumPackager): + + def _remove_special(self, name, info): + if name in RHEL_RELINKS: + # Note: we don't return true here so that + # the normal package cleanup happens... + sh.unlink(RHEL_RELINKS.get(name).get("tgt")) + return False + + def _install_special(self, name, info): + if name in RHEL_RELINKS: + full_pkg_name = self._format_pkg_name(name, info.get("version")) + install_cmd = yum.YUM_INSTALL + [full_pkg_name] + self._execute_yum(install_cmd) + tgt = RHEL_RELINKS.get(pkgname).get("tgt") + src = RHEL_RELINKS.get(pkgname).get("src") + if not sh.islink(tgt): + # This is actually a feature, EPEL must not conflict with RHEL, so X pkg installs newer version in parallel. + # + # This of course doesn't work when running from git like devstack does.... + sh.symlink(src, tgt) + return True + else: + return False diff --git a/devstack/packaging/apt.py b/devstack/packaging/apt.py index 6bb2054b..7522540a 100644 --- a/devstack/packaging/apt.py +++ b/devstack/packaging/apt.py @@ -44,15 +44,15 @@ class AptPackager(pack.Packager): pack.Packager.__init__(self, distro, keep_packages) self.auto_remove = True - def _format_pkg(self, name, version): + def _format_pkg_name(self, name, version): if version: - pkg_full_name = VERSION_TEMPL % (name, version) + return VERSION_TEMPL % (name, version) else: - pkg_full_name = name - return pkg_full_name + return name def _execute_apt(self, cmd, **kargs): - return sh.execute(*cmd, run_as_root=True, + full_cmd = APT_GET + cmd + return sh.execute(*full_cmd, run_as_root=True, check_exit_code=True, env_overrides=ENV_ADDITIONS, **kargs) @@ -65,32 +65,33 @@ class AptPackager(pack.Packager): removable = info.get('removable', True) if not removable: continue - if self._pkg_remove_special(name, info): + if self._remove_special(name, info): which_removed.append(name) continue - pkg_full = self._format_pkg(name, info.get("version")) + pkg_full = self._format_pkg_name(name, info.get("version")) if pkg_full: cmds.append(pkg_full) which_removed.append(name) if cmds: - cmd = APT_GET + APT_DO_REMOVE + cmds + cmd = APT_DO_REMOVE + cmds self._execute_apt(cmd) if which_removed and self.auto_remove: - cmd = APT_GET + APT_AUTOREMOVE + cmd = APT_AUTOREMOVE self._execute_apt(cmd) return which_removed def install(self, pkg): name = pkg['name'] - if self._pkg_install_special(name, pkg): + if self._install_special(name, pkg): return else: - pkg_full = self._format_pkg(name, pkg.get("version")) - cmd = APT_GET + APT_INSTALL + [pkg_full] - self._execute_apt(cmd) + pkg_full = self._format_pkg_name(name, pkg.get("version")) + if pkg_full: + cmd = APT_INSTALL + [pkg_full] + self._execute_apt(cmd) - def _pkg_remove_special(self, name, info): + def _remove_special(self, name, info): return False - def _pkg_install_special(self, name, info): + def _install_special(self, name, info): return False diff --git a/devstack/packaging/yum.py b/devstack/packaging/yum.py index c71ce617..6148fa1d 100644 --- a/devstack/packaging/yum.py +++ b/devstack/packaging/yum.py @@ -30,74 +30,36 @@ YUM_REMOVE = ['erase', '-y', "-t"] # Yum separates its pkg names and versions with a dash VERSION_TEMPL = "%s-%s" -# Need to relink for rhel (not a bug!) -# TODO: maybe this should be a subclass that handles these differences -RHEL_RELINKS = { - 'python-webob1.0': { - "src": '/usr/lib/python2.6/site-packages/WebOb-1.0.8-py2.6.egg/webob/', - 'tgt': '/usr/lib/python2.6/site-packages/webob', - }, - 'python-nose1.1': { - "src": '/usr/lib/python2.6/site-packages/nose-1.1.2-py2.6.egg/nose/', - 'tgt': '/usr/lib/python2.6/site-packages/nose', - }, -} - class YumPackager(pack.Packager): def __init__(self, distro, keep_packages): pack.Packager.__init__(self, distro, keep_packages) def _format_pkg_name(self, name, version): - if version is not None and len(version): + if version: return VERSION_TEMPL % (name, version) else: return name def _execute_yum(self, cmd, **kargs): - return sh.execute(*cmd, run_as_root=True, + full_cmd = YUM_CMD + cmd + return sh.execute(*full_cmd, run_as_root=True, check_exit_code=True, **kargs) - def _remove_special(self, pkgname, pkginfo): - # TODO: maybe this should be a subclass that handles these differences - # if self.distro.name == settings.RHEL6 and pkgname in RHEL_RELINKS: - # #we don't return true here so that - # #the normal package cleanup happens - # sh.unlink(RHEL_RELINKS.get(pkgname).get("tgt")) + def _remove_special(self, name, info): return False - # TODO: maybe this should be a subclass that handles these differences - def _install_rhel_relinks(self, pkgname, pkginfo): - full_pkg_name = self._format_pkg_name(pkgname, pkginfo.get("version")) - install_cmd = YUM_CMD + YUM_INSTALL + [full_pkg_name] - self._execute_yum(install_cmd) - tgt = RHEL_RELINKS.get(pkgname).get("tgt") - src = RHEL_RELINKS.get(pkgname).get("src") - if not sh.islink(tgt): - # This is actually a feature, EPEL must not conflict with RHEL, so X pkg installs newer version in parallel. - # - # This of course doesn't work when running from git like devstack does.... - sh.symlink(src, tgt) - return True - - # TODO: maybe this should be a subclass that handles these differences - def _install_special(self, pkgname, pkginfo): - # FIXME: - # if self.distro.name == settings.RHEL6 and pkgname in RHEL_RELINKS: - # return self._install_rhel_relinks(pkgname, pkginfo) + def _install_special(self, name, info): return False - def install_batch(self, pkgs): - pkg_full_names = [] - for info in pkgs: - name = info['name'] - if self._install_special(name, info): - continue - full_pkg_name = self._format_pkg_name(name, info.get("version")) - pkg_full_names.append(full_pkg_name) - if pkg_full_names: - cmd = YUM_CMD + YUM_INSTALL + pkg_full_names + def install(self, pkg): + name = pkg['name'] + if self._install_special(name, pkg): + return + else: + full_pkg_name = self._format_pkg_name(name, pkg.get("version")) + cmd = YUM_INSTALL + [full_pkg_name] self._execute_yum(cmd) def _remove_batch(self, pkgs): @@ -111,11 +73,11 @@ class YumPackager(pack.Packager): continue if self._remove_special(name, info): which_removed.append(name) - continue - full_pkg_name = self._format_pkg_name(name, info.get("version")) - pkg_full_names.append(full_pkg_name) - which_removed.append(name) + else: + full_pkg_name = self._format_pkg_name(name, info.get("version")) + pkg_full_names.append(full_pkg_name) + which_removed.append(name) if pkg_full_names: - cmd = YUM_CMD + YUM_REMOVE + pkg_full_names + cmd = YUM_REMOVE + pkg_full_names self._execute_yum(cmd) return which_removed diff --git a/devstack/persona.py b/devstack/persona.py index 9c2041fb..066c2931 100644 --- a/devstack/persona.py +++ b/devstack/persona.py @@ -79,9 +79,9 @@ class Persona(object): # Some sanity checks against the given distro d_name = distro.name if d_name not in self.distro_support: - msg = "Distro %s not supported" % (d_name) + msg = "Distro %r not supported" % (d_name) raise excp.ConfigException(msg) for c in self.wanted_components: if not distro.known_component(c): - raise RuntimeError("Distro %s does not support component %s" % + raise RuntimeError("Distro %r does not support component %r" % (d_name, c)) diff --git a/stack b/stack index 8ded902d..a9a37cc1 100755 --- a/stack +++ b/stack @@ -166,9 +166,9 @@ def run(args): pkg_manager, **args) - LOG.info("Starting action [%s] on %s for distro: %s" % (action, date.rcf8222date(), dist.name)) - LOG.info("Using persona: %s" % (persona_inst)) - LOG.info("In root directory: %s" % (root_dir)) + LOG.info("Starting action %r on %s for distro: %r" % (action, date.rcf8222date(), dist.name)) + LOG.info("Using persona: %r" % (persona_fn)) + LOG.info("In root directory: %r" % (root_dir)) start_time = time.time() runner.run(persona_inst, root_dir) diff --git a/tools/validate_yaml.py b/tools/validate_yaml.py index b925c75c..75432398 100755 --- a/tools/validate_yaml.py +++ b/tools/validate_yaml.py @@ -7,6 +7,6 @@ import sys import yaml - -with open(sys.argv[1], 'r') as f: - yaml.load(f) +if __name__ == "__main__": + with open(sys.argv[1], 'r') as f: + yaml.load(f) diff --git a/tools/yamlpretty.py b/tools/yamlpretty.py index da4e5fbd..1355e9be 100755 --- a/tools/yamlpretty.py +++ b/tools/yamlpretty.py @@ -1,9 +1,10 @@ #!/usr/bin/env python -import yaml import os import sys +import yaml + # See: http://pyyaml.org/wiki/PyYAMLDocumentation if __name__ == "__main__": From 8f113a77bcd73d69d6cf482313a0279a4162f21c Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:17:47 -0700 Subject: [PATCH 08/20] Fixed rhel linking --- devstack/distros/rhel6.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/devstack/distros/rhel6.py b/devstack/distros/rhel6.py index 86546cc8..068c007e 100644 --- a/devstack/distros/rhel6.py +++ b/devstack/distros/rhel6.py @@ -34,14 +34,14 @@ HTTPD_CONF = '/etc/httpd/conf/httpd.conf' # Need to relink for rhel (not a bug!) RHEL_RELINKS = { - 'python-webob1.0': { - "src": '/usr/lib/python2.6/site-packages/WebOb-1.0.8-py2.6.egg/webob/', - 'tgt': '/usr/lib/python2.6/site-packages/webob', - }, - 'python-nose1.1': { - "src": '/usr/lib/python2.6/site-packages/nose-1.1.2-py2.6.egg/nose/', - 'tgt': '/usr/lib/python2.6/site-packages/nose', - }, + 'python-webob1.0': ( + '/usr/lib/python2.6/site-packages/WebOb-1.0.8-py2.6.egg/webob/', + '/usr/lib/python2.6/site-packages/webob' + ), + 'python-nose1.1': ( + '/usr/lib/python2.6/site-packages/nose-1.1.2-py2.6.egg/nose/', + '/usr/lib/python2.6/site-packages/nose', + ) } @@ -89,7 +89,9 @@ class YumPackager(yum.YumPackager): if name in RHEL_RELINKS: # Note: we don't return true here so that # the normal package cleanup happens... - sh.unlink(RHEL_RELINKS.get(name).get("tgt")) + (_, tgt) = RHEL_RELINKS.get(name) + if sh.islink(tgt): + sh.unlink(tgt) return False def _install_special(self, name, info): @@ -97,8 +99,7 @@ class YumPackager(yum.YumPackager): full_pkg_name = self._format_pkg_name(name, info.get("version")) install_cmd = yum.YUM_INSTALL + [full_pkg_name] self._execute_yum(install_cmd) - tgt = RHEL_RELINKS.get(pkgname).get("tgt") - src = RHEL_RELINKS.get(pkgname).get("src") + (src, tgt) = RHEL_RELINKS.get(name) if not sh.islink(tgt): # This is actually a feature, EPEL must not conflict with RHEL, so X pkg installs newer version in parallel. # From 7087cd6ce4111381de69884e06b349d0102bf519 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:20:41 -0700 Subject: [PATCH 09/20] Fixed variable naming --- devstack/packaging/yum.py | 1 - 1 file changed, 1 deletion(-) diff --git a/devstack/packaging/yum.py b/devstack/packaging/yum.py index 6148fa1d..40c92f12 100644 --- a/devstack/packaging/yum.py +++ b/devstack/packaging/yum.py @@ -67,7 +67,6 @@ class YumPackager(pack.Packager): which_removed = [] for info in pkgs: name = info['name'] - info = pkgs.get(name) or {} removable = info.get('removable', True) if not removable: continue From 235b33eb205a1219e41320c7349bc08e4ad74732 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:27:30 -0700 Subject: [PATCH 10/20] Make persona fn have its absolute path --- stack | 1 + 1 file changed, 1 insertion(+) diff --git a/stack b/stack index a9a37cc1..fe63ab91 100755 --- a/stack +++ b/stack @@ -136,6 +136,7 @@ def run(args): if not persona_fn or not sh.isfile(persona_fn): print(utils.color_text("No valid persona file name specified!", "red")) return False + persona_fn = sh.abspth(persona_fn) # Welcome! (repeat_string, line_max_len) = utils.welcome(_WELCOME_MAP.get(action)) From 40511fe6f06d57fec7a5f22526b91ae0402e4c2f Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:41:27 -0700 Subject: [PATCH 11/20] Fixed pip command name, arg... --- conf/distros/rhel-6.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index d0ce1f50..53db813c 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -68,7 +68,7 @@ commands: - service - mysql - stop - pip: python-pip + pip: pip-python components: db: install: devstack.distros.rhel6:DBInstaller From 45446dfb441632b5a340f6c2821cb6d8460e1b69 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:43:31 -0700 Subject: [PATCH 12/20] Show which package names are going to be removed --- devstack/component.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/devstack/component.py b/devstack/component.py index 6235f50f..c48521dc 100644 --- a/devstack/component.py +++ b/devstack/component.py @@ -377,8 +377,9 @@ class PkgUninstallComponent(ComponentBase): def _uninstall_pkgs(self): pkgsfull = self.tracereader.packages_installed() if pkgsfull: - LOG.info("Potentially removing %s packages", - len(pkgsfull)) + pkg_names = set([p['name'] for p in pkgsfull]) + LOG.info("Potentially removing %s packages (%s)", + len(pkg_names), ", ".join(pkg_names)) which_removed = self.packager.remove_batch(pkgsfull) LOG.info("Actually removed %s packages (%s)", len(which_removed), ", ".join(which_removed)) From 28c645421eb224d831d0980dd92b617eb085cd8f Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:47:42 -0700 Subject: [PATCH 13/20] Ran ubuntu distro through yaml cleaner --- conf/distros/ubuntu-oneiric.yaml | 1344 +++++++++++++++--------------- 1 file changed, 694 insertions(+), 650 deletions(-) diff --git a/conf/distros/ubuntu-oneiric.yaml b/conf/distros/ubuntu-oneiric.yaml index f67ab36f..ef1643fb 100644 --- a/conf/distros/ubuntu-oneiric.yaml +++ b/conf/distros/ubuntu-oneiric.yaml @@ -1,662 +1,706 @@ +--- # Ubuntu 11 (Oneiric) - -name: ubuntu-oneiric distro_pattern: Ubuntu(.*)oneiric - +name: ubuntu-oneiric packager_name: devstack.distros.oneiric:AptPackager - commands: - - pip: pip - - apache: - restart: ["service", "apache2", "restart"] - start: ["service", "apache2", "start"] - stop: ["service", "apache2", "stop"] - status: ["service", "apache2", "status"] - settings: - conf-link-target: /etc/apache2/sites-enabled/000-default - - libvirt-daemon: 'libvirt-bin' - - mysql: - start: ["service", "mysql", 'start'] - stop: ["service", 'mysql', "stop"] - status: ["service", 'mysql', "status"] - restart: ["service", 'mysql', "restart"] - # NOTE: we aren't stopping any sql injection... - set_pwd: ['mysql', '--user=%USER%', '--password=%OLD_PASSWORD%', '-e', - "\"USE mysql; UPDATE user SET password=PASSWORD('%NEW_PASSWORD%') WHERE User='%USER%'; FLUSH PRIVILEGES;\""] - create_db: ['mysql', '--user=%USER%', '--password=%PASSWORD%', '-e', 'CREATE DATABASE %DB%;'] - drop_db: ['mysql', '--user=%USER%', '--password=%PASSWORD%', '-e', 'DROP DATABASE IF EXISTS %DB%;'] - grant_all: ["mysql", "--user=%USER%", "--password=%PASSWORD%", '-e', - "\"GRANT ALL PRIVILEGES ON *.* TO '%USER%'@'%' IDENTIFIED BY '%PASSWORD%'; FLUSH PRIVILEGES;\""] - - iscsi: - start: ['service', 'tgt', 'start'] - stop: ['service', 'tgt', 'stop'] - restart: ['service', 'tgt', 'restart'] - status: ['service', 'tgt', 'status'] - - tgt: - restart: - - cmd: ['stop', 'tgt'] - run_as_root: true - - cmd: ['start', 'tgt'] - run_as_root: true - - libvirt: - restart: ['service', 'libvirt-bin', 'restart'] - status: ['service', 'libvirt-bin', 'status'] - + apache: + restart: + - service + - apache2 + - restart + settings: + conf-link-target: /etc/apache2/sites-enabled/000-default + start: + - service + - apache2 + - start + status: + - service + - apache2 + - status + stop: + - service + - apache2 + - stop + iscsi: + restart: + - service + - tgt + - restart + start: + - service + - tgt + - start + status: + - service + - tgt + - status + stop: + - service + - tgt + - stop + libvirt: + restart: + - service + - libvirt-bin + - restart + status: + - service + - libvirt-bin + - status + libvirt-daemon: libvirt-bin + mysql: + # NOTE: we aren't stopping any sql injection... + create_db: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - CREATE DATABASE %DB%; + drop_db: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - DROP DATABASE IF EXISTS %DB%; + grant_all: + - mysql + - --user=%USER% + - --password=%PASSWORD% + - -e + - '"GRANT ALL PRIVILEGES ON *.* TO ''%USER%''@''%'' IDENTIFIED BY ''%PASSWORD%''; + FLUSH PRIVILEGES;"' + restart: + - service + - mysql + - restart + set_pwd: + - mysql + - --user=%USER% + - --password=%OLD_PASSWORD% + - -e + - '"USE mysql; UPDATE user SET password=PASSWORD(''%NEW_PASSWORD%'') WHERE + User=''%USER%''; FLUSH PRIVILEGES;"' + start: + - service + - mysql + - start + status: + - service + - mysql + - status + stop: + - service + - mysql + - stop + pip: pip + tgt: + restart: + - cmd: + - stop + - tgt + run_as_root: true + - cmd: + - start + - tgt + run_as_root: true components: - - db: - install: devstack.distros.oneiric:DBInstaller - uninstall: devstack.components.db:DBUninstaller - start: devstack.components.db:DBRuntime - stop: devstack.components.db:DBRuntime - packages: - - name: mysql-client-5.1 - version: 5.1* - removable: true - - name: mysql-server-core-5.1 - version: 5.1* - removable: true - - name: mysql-common - version: 5.1* - removable: true - - name: mysql-server-5.1 - version: 5.1* - removable: true - pre-install: - # This apparently is a action needed for ubuntu/debian to set the password to something known.... - - run_as_root: true - cmd: ["debconf-set-selections"] - stdin: - - mysql-server-5.1 mysql-server/root_password password %PASSWORD% - - mysql-server-5.1 mysql-server/root_password_again password %PASSWORD% - - mysql-server-5.1 mysql-server/start_on_boot boolean %BOOT_START% - - general: - install: devstack.components.pkglist:Installer - uninstall: devstack.components.pkglist:Uninstaller - start: devstack.component:EmptyRuntime - stop: devstack.component:EmptyRuntime - packages: - - name: curl - removable: false - version: 7.21.6* - - name: euca2ools - removable: false - version: 2.0.0* - - name: git - removable: false - version: 1:1* - - name: gawk - version: 1:3* - removable: false - - name: iputils-ping - removable: false - version: 3:20101006* - - name: locate - removable: false - version: 4.4.2* - - name: lsof - removable: false - version: 4.81* - - name: openssh-server - removable: false - version: 1:5.8* - - name: pep8 - removable: false - version: 0.6.1* - - name: psmisc - removable: false - version: 22.14* - - name: pylint - removable: false - version: 0.23* - - name: python - removable: false - version: 2.7.2* - - name: python-coverage - removable: false - version: 3.4* - - name: python-pip - removable: false - version: 1.0* - - name: python-unittest2 - removable: false - version: 0.5.1* - - name: python-virtualenv - removable: false - version: 1.6.4* - - name: python-setuptools - version: 0.6.16* - removable: false - - name: python-dev - version: 2.7.2* - removable: false - - name: python-nose - version: 1.0.0* - removable: false - - name: python-mox - version: 0.5.3* - removable: false - - name: screen - removable: false - version: 4.0.3* - - name: sudo - removable: false - version : 1.7.4* - - name: tcpdump - removable: false - version: 4.1.1* - - name: unzip - removable: false - version: 6.0* - - name: wget - removable: false - version: 1.12* - pips: - - name: mock - version: 0.8.0 - - glance: - install: devstack.components.glance:GlanceInstaller - uninstall: devstack.components.glance:GlanceUninstaller - start: devstack.components.glance:GlanceRuntime - stop: devstack.components.glance:GlanceRuntime - packages: - - name: python-eventlet - version: 0.9* - removable: true - - name: python-routes - version: 1.12* - removable: true - - name: python-greenlet - version: 0.3.1* - removable: true - - name: python-argparse - version: 1.1* - removable: true - - name: python-prettytable - version: 0.5* - removable: true - - name: python-mysqldb - version: 1.2* - removable: true - - name: python-sqlalchemy - version: 0.6.8* - removable: true - - name: python-pastedeploy - version: 1.5.0* - removable: true - - name: python-xattr - version: 0.6* - removable: true - - name: python-dateutil - version: 1.4* - removable: true - - name: python-httplib2 - version: 0.7* - removable: true - pips: - - name: iso8601 - version: 0.1.4 - - horizon: - install: devstack.components.horizon:HorizonInstaller - uninstall: devstack.components.horizon:HorizonUninstaller - start: devstack.components.horizon:HorizonRuntime - stop: devstack.components.horizon:HorizonRuntime - packages: - - name: apache2 - removable: True - version: 2.2* - - name: apache2-mpm-worker - removable: True - version: 2.2* - - name: apache2-utils - removable: True - version: 2.2* - - name: apache2.2-bin - removable: True - version: 2.2* - - name: apache2.2-common - removable: True - version: 2.2* - - name: libapache2-mod-wsgi - removable: True - version: 3.3* - - name: python-cherrypy3 - removable: True - version: 3.1* - - name: python-dateutil - removable: True - version: 1.4* - - name: python-django - removable: True - version: 1.3* - - name: python-django-mailer - removable: True - version: 0.2* - - name: python-django-nose - removable: True - version: 0.1* - - name: python-django-registration - removable: True - version: 0.7* - - name: python-eventlet - removable: True - version: 0.9* - - name: python-kombu - removable: True - version: 1.0* - - name: python-migrate - removable: True - version: 0.7* - - name: python-paste - removable: True - version: 1.7.5* - - name: python-pastedeploy - removable: True - version: 1.5.0* - - name: python-routes - removable: True - version: 1.12* - - name: python-sqlalchemy - removable: True - version: 0.6* - - name: python-webob - removable: True - version: 1.0* - pips: - - name: django-nose-selenium - version: 0.7.3 - - name: pycrypto - version: 2.3 - - name: python-cloudfiles - version: 1.7.9.3 - - keystone-client: - install: devstack.components.keystone_client:KeyStoneClientInstaller - uninstall: devstack.components.keystone_client:KeyStoneClientUninstaller - start: devstack.components.keystone_client:KeyStoneClientRuntime - stop: devstack.components.keystone_client:KeyStoneClientRuntime - packages: - - name: python-argparse - removable: True - version: 1.1* - - name: python-prettytable - removable: True - version: 0.5* - - keystone: - install: devstack.components.keystone:KeystoneInstaller - uninstall: devstack.components.keystone:KeystoneUninstaller - start: devstack.components.keystone:KeystoneRuntime - stop: devstack.components.keystone:KeystoneRuntime - packages: - - name: libldap2-dev - removable: True - version: 2.4* - - name: libsasl2-dev - removable: True - version: 2.1* - - name: python-argparse - removable: True - version: 1.1* - - name: python-bcrypt - removable: True - version: 0.1* - - name: python-eventlet - removable: True - version: 0.9* - - name: python-greenlet - removable: True - version: 0.3* - - name: python-lxml - removable: True - version: 2.3* - - name: python-migrate - removable: True - version: 0.7* - - name: python-mysqldb - removable: True - version: 1.2* - - name: python-paste - removable: True - version: 1.7.5* - - name: python-pastedeploy - removable: True - version: 1.5* - - name: python-pastescript - removable: True - version: 1.7* - - name: python-prettytable - removable: True - version: 0.5* - - name: python-pysqlite2 - removable: True - version: 2.6* - - name: python-routes - removable: True - version: 1.12* - - name: python-sqlalchemy - removable: True - version: 0.6* - - name: python-webob - removable: True - version: 1.0* - - name: sqlite3 - removable: True - version: 3.7* - pips: - - name: passlib - version: 1.5.3 - - melange: - install: devstack.components.melange:MelangeInstaller - uninstall: devstack.components.melange:MelangeUninstaller - start: devstack.components.melange:MelangeRuntime - stop: devstack.components.melange:MelangeRuntime - packages: - - name: python-eventlet - removable: True - version: 0.9* - - name: python-greenlet - removable: True - version: 0.3.1* - - name: python-mysqldb - removable: True - version: 1.2* - - name: python-paste - removable: True - version: 1.7.5* - - name: python-pastedeploy - removable: True - version: 1.5* - - name: python-routes - removable: True - version: 1.12* - - name: python-sqlalchemy - removable: True - version: 0.6* - - name: python-webob - removable: True - version: 1.0* - - no-vnc: - install: devstack.components.novnc:NoVNCInstaller - uninstall: devstack.components.novnc:NoVNCUninstaller - start: devstack.components.novnc:NoVNCRuntime - stop: devstack.components.novnc:NoVNCRuntime - packages: - - name: python-numpy - removable: True - version: 1:1.5* - - nova-client: - install: devstack.components.nova_client:NovaClientInstaller - uninstall: devstack.components.nova_client:NovaClientUninstaller - start: devstack.components.nova_client:NovaClientRuntime - stop: devstack.components.nova_client:NovaClientRuntime - packages: - - name: python-argparse - removable: True - version: 1.1* - - name: python-prettytable - removable: True - version: 0.5* - - nova: - install: devstack.components.nova:NovaInstaller - uninstall: devstack.components.nova:NovaUninstaller - start: devstack.components.nova:NovaRuntime - stop: devstack.components.nova:NovaRuntime - packages: - - name: dnsmasq-base - removable: True - version: 2.57* - - name: dnsmasq-utils - removable: True - version: 2.57* - - name: ebtables - removable: True - version: 2.0* - - name: iptables - removable: False - version: 1.4* - - name: iputils-arping - removable: True - version: 3:20101006* - - name: kpartx - removable: True - version: 0.4* - - name: parted - removable: True - version: 2.3* - - name: python-boto - removable: True - version: 2.0* - - name: python-carrot - removable: True - version: 0.10* - - name: python-cheetah - removable: True - version: 2.4* - - name: python-crypto - removable: True - version: 2.3* - - name: python-eventlet - removable: True - version: 0.9* - - name: python-feedparser - removable: True - version: 5.0* - - name: python-gflags - removable: True - version: 1.5* - - name: python-greenlet - removable: True - version: 0.3* - - name: python-kombu - removable: True - version: 1.0* - - name: python-libxml2 - removable: True - version: 2.7* - - name: python-lockfile - removable: True - version: 1:0* - - name: python-lxml - removable: True - version: 2.3* - - name: python-migrate - removable: True - version: 0.7* - - name: python-mysqldb - removable: True - version: 1.2* - - name: python-netaddr - removable: True - version: 0.7* - - name: python-paste - removable: True - version: 1.7* - - name: python-pastedeploy - allowed: ">=" - removable: True - version: 1.5.0-2 - - name: python-routes - removable: True - version: 1.12* - - name: python-sqlalchemy - removable: True - version: 0.6* - - name: python-suds - removable: True - version: 0.4* - - name: python-tempita - removable: True - version: 0.5* - - name: python-xattr - removable: True - version: 0.6* - - name: socat - removable: True - version: 1.7* - - name: sqlite3 - removable: True - version: 3.7* - - name: vlan - removable: True - version: 1.9* - pips: - - name: iso8601 - version: 0.1.4 - subsystems: - vol: + db: + install: devstack.distros.oneiric:DBInstaller packages: - - name: iscsitarget - removable: True - version: 1.4* - - name: lvm2 - removable: True - version: 2.02* - - name: tgt - removable: True + - name: mysql-client-5.1 + removable: true + version: 5.1* + - name: mysql-server-core-5.1 + removable: true + version: 5.1* + - name: mysql-common + removable: true + version: 5.1* + - name: mysql-server-5.1 + pre-install: + # This apparently is a action needed for ubuntu/debian to set the password to something known.... + - cmd: + - debconf-set-selections + run_as_root: true + stdin: + - mysql-server-5.1 mysql-server/root_password password %PASSWORD% + - mysql-server-5.1 mysql-server/root_password_again password %PASSWORD% + - mysql-server-5.1 mysql-server/start_on_boot boolean %BOOT_START% + removable: true + version: 5.1* + start: devstack.components.db:DBRuntime + stop: devstack.components.db:DBRuntime + uninstall: devstack.components.db:DBUninstaller + general: + install: devstack.components.pkglist:Installer + packages: + - name: curl + removable: false + version: 7.21.6* + - name: euca2ools + removable: false + version: 2.0.0* + - name: git + removable: false version: 1:1* - api: + - name: gawk + removable: false + version: 1:3* + - name: iputils-ping + removable: false + version: 3:20101006* + - name: locate + removable: false + version: 4.4.2* + - name: lsof + removable: false + version: 4.81* + - name: openssh-server + removable: false + version: 1:5.8* + - name: pep8 + removable: false + version: 0.6.1* + - name: psmisc + removable: false + version: 22.14* + - name: pylint + removable: false + version: 0.23* + - name: python + removable: false + version: 2.7.2* + - name: python-coverage + removable: false + version: 3.4* + - name: python-pip + removable: false + version: 1.0* + - name: python-unittest2 + removable: false + version: 0.5.1* + - name: python-virtualenv + removable: false + version: 1.6.4* + - name: python-setuptools + removable: false + version: 0.6.16* + - name: python-dev + removable: false + version: 2.7.2* + - name: python-nose + removable: false + version: 1.0.0* + - name: python-mox + removable: false + version: 0.5.3* + - name: screen + removable: false + version: 4.0.3* + - name: sudo + removable: false + version: 1.7.4* + - name: tcpdump + removable: false + version: 4.1.1* + - name: unzip + removable: false + version: 6.0* + - name: wget + removable: false + version: 1.12* + pips: + - name: mock + version: 0.8.0 + start: devstack.component:EmptyRuntime + stop: devstack.component:EmptyRuntime + uninstall: devstack.components.pkglist:Uninstaller + glance: + install: devstack.components.glance:GlanceInstaller packages: - - name: python-dateutil - removable: True - version: 1.4* - cpu: - packages: - - name: kvm - removable: True - version: 1:84* - - name: libvirt-bin - removable: True + - name: python-eventlet + removable: true version: 0.9* - - name: libvirt0 - removable: True - version: 0.9* - - name: lvm2 - removable: True - version: 2.02* - - name: open-iscsi - removable: True - version: 2.0* - - name: open-iscsi-utils - removable: True - version: 2.0* - - name: python-libvirt - removable: True - version: 0.9.2* - - name: qemu-kvm - removable: True - version: 0.14.* - - quantum-client: - install: devstack.components.quantum_client:QuantumClientInstaller - uninstall: devstack.components.quantum_client:QuantumClientUninstaller - start: devstack.components.quantum_client:QuantumClientRuntime - stop: devstack.components.quantum_client:QuantumClientRuntime - packages: - - name: python-gflags - removable: True - version: 1.5* - - quantum: - install: devstack.components.quantum:QuantumInstaller - uninstall: devstack.components.quantum:QuantumUninstaller - start: devstack.components.quantum:QuantumRuntime - stop: devstack.components.quantum:QuantumRuntime - packages: - - name: python-eventlet - removable: True - version: 0.9* - - name: python-gflags - removable: True - version: 1.5* - - name: python-greenlet - removable: True - version: 0.3* - - name: python-lxml - removable: True - version: 2.3* - - name: python-paste - removable: True - version: 1.7* - - name: python-pastedeploy - removable: True - version: 1.5* - - name: python-routes - removable: True - version: 1.12* - subsystems: - openvswitch: - packages: - - name: openvswitch-datapath-dkms - removable: True + - name: python-routes + removable: true + version: 1.12* + - name: python-greenlet + removable: true + version: 0.3.1* + - name: python-argparse + removable: true + version: 1.1* + - name: python-prettytable + removable: true + version: 0.5* + - name: python-mysqldb + removable: true version: 1.2* - - name: openvswitch-switch - removable: True - version: 1.2* - - name: python-mysqldb - removable: True - version: 1.2* - - name: python-sqlalchemy - removable: True + - name: python-sqlalchemy + removable: true + version: 0.6.8* + - name: python-pastedeploy + removable: true + version: 1.5.0* + - name: python-xattr + removable: true version: 0.6* + - name: python-dateutil + removable: true + version: 1.4* + - name: python-httplib2 + removable: true + version: 0.7* + pips: + - name: iso8601 + version: 0.1.4 + start: devstack.components.glance:GlanceRuntime + stop: devstack.components.glance:GlanceRuntime + uninstall: devstack.components.glance:GlanceUninstaller + horizon: + install: devstack.components.horizon:HorizonInstaller + packages: + - name: apache2 + removable: true + version: 2.2* + - name: apache2-mpm-worker + removable: true + version: 2.2* + - name: apache2-utils + removable: true + version: 2.2* + - name: apache2.2-bin + removable: true + version: 2.2* + - name: apache2.2-common + removable: true + version: 2.2* + - name: libapache2-mod-wsgi + removable: true + version: 3.3* + - name: python-cherrypy3 + removable: true + version: 3.1* + - name: python-dateutil + removable: true + version: 1.4* + - name: python-django + removable: true + version: 1.3* + - name: python-django-mailer + removable: true + version: 0.2* + - name: python-django-nose + removable: true + version: 0.1* + - name: python-django-registration + removable: true + version: 0.7* + - name: python-eventlet + removable: true + version: 0.9* + - name: python-kombu + removable: true + version: 1.0* + - name: python-migrate + removable: true + version: 0.7* + - name: python-paste + removable: true + version: 1.7.5* + - name: python-pastedeploy + removable: true + version: 1.5.0* + - name: python-routes + removable: true + version: 1.12* + - name: python-sqlalchemy + removable: true + version: 0.6* + - name: python-webob + removable: true + version: 1.0* + pips: + - name: django-nose-selenium + version: 0.7.3 + - name: pycrypto + version: 2.3 + - name: python-cloudfiles + version: 1.7.9.3 + start: devstack.components.horizon:HorizonRuntime + stop: devstack.components.horizon:HorizonRuntime + uninstall: devstack.components.horizon:HorizonUninstaller + keystone: + install: devstack.components.keystone:KeystoneInstaller + packages: + - name: libldap2-dev + removable: true + version: 2.4* + - name: libsasl2-dev + removable: true + version: 2.1* + - name: python-argparse + removable: true + version: 1.1* + - name: python-bcrypt + removable: true + version: 0.1* + - name: python-eventlet + removable: true + version: 0.9* + - name: python-greenlet + removable: true + version: 0.3* + - name: python-lxml + removable: true + version: 2.3* + - name: python-migrate + removable: true + version: 0.7* + - name: python-mysqldb + removable: true + version: 1.2* + - name: python-paste + removable: true + version: 1.7.5* + - name: python-pastedeploy + removable: true + version: 1.5* + - name: python-pastescript + removable: true + version: 1.7* + - name: python-prettytable + removable: true + version: 0.5* + - name: python-pysqlite2 + removable: true + version: 2.6* + - name: python-routes + removable: true + version: 1.12* + - name: python-sqlalchemy + removable: true + version: 0.6* + - name: python-webob + removable: true + version: 1.0* + - name: sqlite3 + removable: true + version: 3.7* + pips: + - name: passlib + version: 1.5.3 + start: devstack.components.keystone:KeystoneRuntime + stop: devstack.components.keystone:KeystoneRuntime + uninstall: devstack.components.keystone:KeystoneUninstaller + keystone-client: + install: devstack.components.keystone_client:KeyStoneClientInstaller + packages: + - name: python-argparse + removable: true + version: 1.1* + - name: python-prettytable + removable: true + version: 0.5* + start: devstack.components.keystone_client:KeyStoneClientRuntime + stop: devstack.components.keystone_client:KeyStoneClientRuntime + uninstall: devstack.components.keystone_client:KeyStoneClientUninstaller + melange: + install: devstack.components.melange:MelangeInstaller + packages: + - name: python-eventlet + removable: true + version: 0.9* + - name: python-greenlet + removable: true + version: 0.3.1* + - name: python-mysqldb + removable: true + version: 1.2* + - name: python-paste + removable: true + version: 1.7.5* + - name: python-pastedeploy + removable: true + version: 1.5* + - name: python-routes + removable: true + version: 1.12* + - name: python-sqlalchemy + removable: true + version: 0.6* + - name: python-webob + removable: true + version: 1.0* + start: devstack.components.melange:MelangeRuntime + stop: devstack.components.melange:MelangeRuntime + uninstall: devstack.components.melange:MelangeUninstaller + no-vnc: + install: devstack.components.novnc:NoVNCInstaller + packages: + - name: python-numpy + removable: true + version: 1:1.5* + start: devstack.components.novnc:NoVNCRuntime + stop: devstack.components.novnc:NoVNCRuntime + uninstall: devstack.components.novnc:NoVNCUninstaller + nova: + install: devstack.components.nova:NovaInstaller + packages: + - name: dnsmasq-base + removable: true + version: 2.57* + - name: dnsmasq-utils + removable: true + version: 2.57* + - name: ebtables + removable: true + version: 2.0* + - name: iptables + removable: false + version: 1.4* + - name: iputils-arping + removable: true + version: 3:20101006* + - name: kpartx + removable: true + version: 0.4* + - name: parted + removable: true + version: 2.3* + - name: python-boto + removable: true + version: 2.0* + - name: python-carrot + removable: true + version: 0.10* + - name: python-cheetah + removable: true + version: 2.4* + - name: python-crypto + removable: true + version: 2.3* + - name: python-eventlet + removable: true + version: 0.9* + - name: python-feedparser + removable: true + version: 5.0* + - name: python-gflags + removable: true + version: 1.5* + - name: python-greenlet + removable: true + version: 0.3* + - name: python-kombu + removable: true + version: 1.0* + - name: python-libxml2 + removable: true + version: 2.7* + - name: python-lockfile + removable: true + version: 1:0* + - name: python-lxml + removable: true + version: 2.3* + - name: python-migrate + removable: true + version: 0.7* + - name: python-mysqldb + removable: true + version: 1.2* + - name: python-netaddr + removable: true + version: 0.7* + - name: python-paste + removable: true + version: 1.7* + - name: python-pastedeploy + removable: true + version: 1.5.0-2 + - name: python-routes + removable: true + version: 1.12* + - name: python-sqlalchemy + removable: true + version: 0.6* + - name: python-suds + removable: true + version: 0.4* + - name: python-tempita + removable: true + version: 0.5* + - name: python-xattr + removable: true + version: 0.6* + - name: socat + removable: true + version: 1.7* + - name: sqlite3 + removable: true + version: 3.7* + - name: vlan + removable: true + version: 1.9* + pips: + - name: iso8601 + version: 0.1.4 + start: devstack.components.nova:NovaRuntime + stop: devstack.components.nova:NovaRuntime + subsystems: + api: + packages: + - name: python-dateutil + removable: true + version: 1.4* + cpu: + packages: + - name: kvm + removable: true + version: 1:84* + - name: libvirt-bin + removable: true + version: 0.9* + - name: libvirt0 + removable: true + version: 0.9* + - name: lvm2 + removable: true + version: 2.02* + - name: open-iscsi + removable: true + version: 2.0* + - name: open-iscsi-utils + removable: true + version: 2.0* + - name: python-libvirt + removable: true + version: 0.9.2* + - name: qemu-kvm + removable: true + version: 0.14.* + vol: + packages: + - name: iscsitarget + removable: true + version: 1.4* + - name: lvm2 + removable: true + version: 2.02* + - name: tgt + removable: true + version: 1:1* + uninstall: devstack.components.nova:NovaUninstaller + nova-client: + install: devstack.components.nova_client:NovaClientInstaller + packages: + - name: python-argparse + removable: true + version: 1.1* + - name: python-prettytable + removable: true + version: 0.5* + start: devstack.components.nova_client:NovaClientRuntime + stop: devstack.components.nova_client:NovaClientRuntime + uninstall: devstack.components.nova_client:NovaClientUninstaller + quantum: + install: devstack.components.quantum:QuantumInstaller + packages: + - name: python-eventlet + removable: true + version: 0.9* + - name: python-gflags + removable: true + version: 1.5* + - name: python-greenlet + removable: true + version: 0.3* + - name: python-lxml + removable: true + version: 2.3* + - name: python-paste + removable: true + version: 1.7* + - name: python-pastedeploy + removable: true + version: 1.5* + - name: python-routes + removable: true + version: 1.12* + start: devstack.components.quantum:QuantumRuntime + stop: devstack.components.quantum:QuantumRuntime + subsystems: + openvswitch: + packages: + - name: openvswitch-datapath-dkms + removable: true + version: 1.2* + - name: openvswitch-switch + removable: true + version: 1.2* + - name: python-mysqldb + removable: true + version: 1.2* + - name: python-sqlalchemy + removable: true + version: 0.6* + uninstall: devstack.components.quantum:QuantumUninstaller + quantum-client: + install: devstack.components.quantum_client:QuantumClientInstaller + packages: + - name: python-gflags + removable: true + version: 1.5* + start: devstack.components.quantum_client:QuantumClientRuntime + stop: devstack.components.quantum_client:QuantumClientRuntime + uninstall: devstack.components.quantum_client:QuantumClientUninstaller + rabbit-mq: + install: devstack.components.rabbit:RabbitInstaller + packages: + - name: rabbitmq-server + removable: true + version: 2.5* + start: devstack.components.rabbit:RabbitRuntime + stop: devstack.components.rabbit:RabbitRuntime + uninstall: devstack.components.rabbit:RabbitUninstaller + swift: + install: devstack.components.swift:SwiftInstaller + packages: + - name: memcached + removable: true + version: 1.4* + - name: python-configobj + removable: true + version: 4.7* + - name: python-eventlet + removable: true + version: 0.9* + - name: python-greenlet + removable: true + version: 0.3* + - name: python-netifaces + removable: true + version: 0.5* + - name: python-pastedeploy + removable: true + version: 1.5* + - name: python-webob + removable: true + version: 1.0* + - name: python-xattr + removable: true + version: 0.6* + - name: sqlite3 + removable: true + version: 3.7* + - name: xfsprogs + removable: true + version: 3.1* + start: devstack.components.swift:SwiftRuntime + stop: devstack.components.swift:SwiftRuntime + uninstall: devstack.components.swift:SwiftUninstaller +... - rabbit-mq: - install: devstack.components.rabbit:RabbitInstaller - uninstall: devstack.components.rabbit:RabbitUninstaller - start: devstack.components.rabbit:RabbitRuntime - stop: devstack.components.rabbit:RabbitRuntime - packages: - - name: rabbitmq-server - removable: True - version: 2.5* - - swift: - install: devstack.components.swift:SwiftInstaller - uninstall: devstack.components.swift:SwiftUninstaller - start: devstack.components.swift:SwiftRuntime - stop: devstack.components.swift:SwiftRuntime - packages: - - name: memcached - removable: True - version: 1.4* - - name: python-configobj - removable: True - version: 4.7* - - name: python-eventlet - removable: True - version: 0.9* - - name: python-greenlet - removable: True - version: 0.3* - - name: python-netifaces - removable: True - version: 0.5* - - name: python-pastedeploy - removable: True - version: 1.5* - - name: python-webob - removable: True - version: 1.0* - - name: python-xattr - removable: True - version: 0.6* - - name: sqlite3 - removable: True - version: 3.7* - - name: xfsprogs - removable: True - version: 3.1* From 7ce87a126d1d8fea065bbd2d5e7a38f66e5da7b6 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:49:11 -0700 Subject: [PATCH 14/20] Removing since its renamed as iscsi --- conf/distros/ubuntu-oneiric.yaml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/conf/distros/ubuntu-oneiric.yaml b/conf/distros/ubuntu-oneiric.yaml index ef1643fb..b4093afa 100644 --- a/conf/distros/ubuntu-oneiric.yaml +++ b/conf/distros/ubuntu-oneiric.yaml @@ -95,16 +95,6 @@ commands: - mysql - stop pip: pip - tgt: - restart: - - cmd: - - stop - - tgt - run_as_root: true - - cmd: - - start - - tgt - run_as_root: true components: db: install: devstack.distros.oneiric:DBInstaller From 4fc748e3e43929c54b1bfbbde3816b6501665f72 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 17:57:16 -0700 Subject: [PATCH 15/20] Fixed pkg version for httplib2 --- conf/distros/rhel-6.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 53db813c..06f536fa 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -220,7 +220,7 @@ components: epel: true name: python-httplib2 removable: true - version: 0.4* + version: 0.7* - meta: epel: true name: python-prettytable From e41dc77c06c05246da9d50346868bb57609a7fdb Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 18:26:44 -0700 Subject: [PATCH 16/20] Fixed service names for mysql since they vary on rhel6 --- conf/distros/rhel-6.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 06f536fa..0699a57d 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -58,15 +58,15 @@ commands: User=''%USER%''; FLUSH PRIVILEGES;"' start: - service - - mysql + - mysqld - start status: - service - - mysql + - mysqld - status stop: - service - - mysql + - mysqld - stop pip: pip-python components: From a1b168ec07471b7f2697141707db55bf25d3dd49 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 18:28:06 -0700 Subject: [PATCH 17/20] Fixed service names for libvirt since they vary on rhel6 --- conf/distros/rhel-6.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 0699a57d..9abff24f 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -24,6 +24,16 @@ commands: - service - httpd - stop + libvirt: + restart: + - service + - libvirtd + - restart + status: + - service + - libvirtd + - status + libvirt-daemon: libvirtd mysql: # NOTE: we aren't stopping any sql injection... create_db: From d228e572d7f2cfa55eaf796a2e498e82a8aac294 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 18:58:03 -0700 Subject: [PATCH 18/20] Another mysqld found --- conf/distros/rhel-6.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distros/rhel-6.yaml b/conf/distros/rhel-6.yaml index 9abff24f..26d8854b 100644 --- a/conf/distros/rhel-6.yaml +++ b/conf/distros/rhel-6.yaml @@ -57,7 +57,7 @@ commands: FLUSH PRIVILEGES;"' restart: - service - - mysql + - mysqld - restart set_pwd: - mysql From bd62f8b7a9efa961dfe1f001ea87bb743d2f4309 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 19:16:03 -0700 Subject: [PATCH 19/20] Resync with devstack.sh --- conf/templates/keystone/keystone.conf | 4 ++-- conf/templates/keystone/keystone_init.sh | 29 ++++++++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/conf/templates/keystone/keystone.conf b/conf/templates/keystone/keystone.conf index cfa43722..f1198bbf 100644 --- a/conf/templates/keystone/keystone.conf +++ b/conf/templates/keystone/keystone.conf @@ -75,10 +75,10 @@ paste.app_factory = keystone.service:public_app_factory paste.app_factory = keystone.service:admin_app_factory [pipeline:public_api] -pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension s3_extension public_service +pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension public_service [pipeline:admin_api] -pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension crud_extension admin_service +pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension s3_extension crud_extension admin_service [app:public_version_service] paste.app_factory = keystone.service:public_version_app_factory diff --git a/conf/templates/keystone/keystone_init.sh b/conf/templates/keystone/keystone_init.sh index b8eddbf0..b51d7810 100644 --- a/conf/templates/keystone/keystone_init.sh +++ b/conf/templates/keystone/keystone_init.sh @@ -1,26 +1,26 @@ #!/bin/bash -# From devstack.sh commit edf59ca44331106ba895eee78ae1d8602764eb4c +# From devstack.sh commit 77b0e1d8ff9617dc71cf92a7a9d7fb850e2e5998 # # Initial data for Keystone using python-keystoneclient # # Tenant User Roles -# ------------------------------------------------------- +# ------------------------------------------------------------------ # admin admin admin # service glance admin -# service nova admin +# service nova admin, [ResellerAdmin (swift only)] # service quantum admin # if enabled # service swift admin # if enabled # demo admin admin -# demo demo Member,sysadmin,netadmin +# demo demo Member, anotherrole # invisible_to_admin demo Member # # Variables set before calling this script: # SERVICE_TOKEN - aka admin_token in keystone.conf # SERVICE_ENDPOINT - local Keystone admin endpoint # SERVICE_TENANT_NAME - name of tenant containing service accounts -# ENABLED_SERVICES - stack.sh's list of services to start +# ENABLED_SERVICES - stack's list of services to start set -e @@ -64,15 +64,15 @@ DEMO_USER=$(get_id keystone user-create --name=demo \ ADMIN_ROLE=$(get_id keystone role-create --name=admin) KEYSTONEADMIN_ROLE=$(get_id keystone role-create --name=KeystoneAdmin) KEYSTONESERVICE_ROLE=$(get_id keystone role-create --name=KeystoneServiceAdmin) -SYSADMIN_ROLE=$(get_id keystone role-create --name=sysadmin) -NETADMIN_ROLE=$(get_id keystone role-create --name=netadmin) +# ANOTHER_ROLE demonstrates that an arbitrary role may be created and used +# TODO(sleepsonthefloor): show how this can be used for rbac in the future! +ANOTHER_ROLE=$(get_id keystone role-create --name=anotherrole) # Add Roles to Users in Tenants keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $ADMIN_TENANT keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $DEMO_TENANT -keystone user-role-add --user $DEMO_USER --role $SYSADMIN_ROLE --tenant_id $DEMO_TENANT -keystone user-role-add --user $DEMO_USER --role $NETADMIN_ROLE --tenant_id $DEMO_TENANT +keystone user-role-add --user $DEMO_USER --role $ANOTHER_ROLE --tenant_id $DEMO_TENANT # TODO(termie): these two might be dubious keystone user-role-add --user $ADMIN_USER --role $KEYSTONEADMIN_ROLE --tenant_id $ADMIN_TENANT @@ -110,9 +110,18 @@ if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then keystone user-role-add --tenant_id $SERVICE_TENANT \ --user $SWIFT_USER \ --role $ADMIN_ROLE + # Nova needs ResellerAdmin role to download images when accessing + # swift through the s3 api. The admin role in swift allows a user + # to act as an admin for their tenant, but ResellerAdmin is needed + # for a user to act as any tenant. The name of this role is also + # configurable in swift-proxy.conf + RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin) + keystone user-role-add --tenant_id $SERVICE_TENANT \ + --user $NOVA_USER \ + --role $RESELLER_ROLE fi -if [[ "$ENABLED_SERVICES" =~ "quantum-server" ]]; then +if [[ "$ENABLED_SERVICES" =~ "quantum" ]]; then QUANTUM_USER=$(get_id keystone user-create --name=quantum \ --pass="$SERVICE_PASSWORD" \ --tenant_id $SERVICE_TENANT \ From 420e7dbc0f8351ba627746527cab8c733aedaf91 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 16 Mar 2012 19:16:58 -0700 Subject: [PATCH 20/20] Resync with devstack.sh --- conf/templates/keystone/keystone.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/templates/keystone/keystone.conf b/conf/templates/keystone/keystone.conf index f1198bbf..b525380d 100644 --- a/conf/templates/keystone/keystone.conf +++ b/conf/templates/keystone/keystone.conf @@ -1,4 +1,4 @@ -# From devstack commit f056b7d2d098361908df490e6683d26065a7cd3a with modifications to parametrize +# From devstack commit 77b0e1d8ff9617dc71cf92a7a9d7fb850e2e5998 with modifications to parametrize # certain variables (ports mainly). [DEFAULT]