components/openstack/common/files/openstack_common.py
author Drew Fisher <drew.fisher@oracle.com>
Tue, 26 May 2015 14:20:17 -0700
changeset 4351 c3f50d5f75d2
parent 4287 aba3ed31b37a
child 5405 66fd59fecd68
permissions -rw-r--r--
21150246 MySQL needs more time to come online
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4287
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     1
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
#
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     3
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     4
#    not use this file except in compliance with the License. You may obtain
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
#    a copy of the License at
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     6
#
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     7
#         http://www.apache.org/licenses/LICENSE-2.0
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
#
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#    Unless required by applicable law or agreed to in writing, software
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    10
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    12
#    License for the specific language governing permissions and limitations
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    13
#    under the License.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
""" openstack_upgrade - common functions used by the various OpenStack
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
components to facilitate upgrading of configuration files and MySQL
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
databases/tables (if in use)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    19
"""
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    21
from ConfigParser import NoOptionError
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
from datetime import datetime
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
import errno
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    24
import glob
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    25
import os
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    26
import shutil
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    27
import time
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    28
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    29
import iniparse
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    30
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    31
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    32
def create_backups(directory):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    33
    """ create backups of each configuration file which also has a .new file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
    from the upgrade.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    35
    """
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    36
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    37
    today = datetime.now().strftime("%Y%m%d%H%M%S")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    38
    cwd = os.getcwd()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    39
    os.chdir(directory)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    40
    for new_file in glob.glob('*.new'):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    41
        # copy the old conf file to a backup
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    42
        old_file = new_file.replace('.new', '')
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    43
        try:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    44
            shutil.copy2(old_file, old_file + '.' + today)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    45
        except (IOError, OSError):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    46
            print 'unable to create a backup of %s' % old_file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    47
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    48
    os.chdir(cwd)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    49
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    50
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    51
def update_mapping(section, key, mapping):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    52
    """ look for deprecated variables and, if found, convert it to the new
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    53
    section/key.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    54
    """
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    55
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    56
    if (section, key) in mapping:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    57
        print "Deprecated value found: [%s] %s" % (section, key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    58
        section, key = mapping[(section, key)]
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    59
        if section is None and key is None:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    60
            print "Removing from configuration"
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    61
        else:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    62
            print "Updating to: [%s] %s" % (section, key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
    return section, key
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    64
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    66
def alter_mysql_tables(engine):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
    """ Convert MySQL tables to use utf8
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    68
    """
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    69
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    70
    import MySQLdb
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    71
4351
c3f50d5f75d2 21150246 MySQL needs more time to come online
Drew Fisher <drew.fisher@oracle.com>
parents: 4287
diff changeset
    72
    for _none in range(60):
4287
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    73
        try:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    74
            db = MySQLdb.connect(host=engine.url.host,
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
                                 user=engine.url.username,
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    76
                                 passwd=engine.url.password,
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
                                 db=engine.url.database)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
            break
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    79
        except MySQLdb.OperationalError as err:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    80
            # mysql is not ready. sleep for 2 more seconds
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
            time.sleep(2)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    82
    else:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    83
        print "Unable to connect to MySQL:  %s" % err
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
        print ("Please verify MySQL is properly configured and online "
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    85
               "before using svcadm(1M) to clear this service.")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    86
        raise RuntimeError
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    87
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    88
    cursor = db.cursor()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    89
    cursor.execute("SHOW table status")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    90
    cursor.execute("ALTER DATABASE %s CHARACTER SET = 'utf8'" %
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    91
                   engine.url.database)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    92
    cursor.execute("ALTER DATABASE %s COLLATE = 'utf8_general_ci'" %
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
                   engine.url.database)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    94
    cursor.execute("SHOW tables")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    95
    res = cursor.fetchall()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    96
    if res:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    97
        cursor.execute("SET foreign_key_checks = 0")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    98
        for item in res:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    99
            cursor.execute("ALTER TABLE %s.%s CONVERT TO "
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   100
                           "CHARACTER SET 'utf8', COLLATE 'utf8_general_ci'"
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   101
                           % (engine.url.database, item[0]))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   102
        cursor.execute("SET foreign_key_checks = 1")
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   103
        db.commit()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   104
        db.close()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   105
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   106
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   107
def modify_conf(old_file, mapping=None, exception_list=None):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   108
    """ Copy over all uncommented options from the old configuration file.  In
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   109
    addition, look for deprecated section/keys and convert them to the new
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   110
    section/key.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   111
    """
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   112
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   113
    new_file = old_file + '.new'
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
    # open the previous version
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
    old = iniparse.ConfigParser()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
    old.readfp(open(old_file))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   118
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
    # open the new version
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   120
    new = iniparse.ConfigParser()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   121
    try:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   122
        new.readfp(open(new_file))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
    except IOError as err:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
        if err.errno == errno.ENOENT:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
            # The upgrade did not deliver a .new file so, return
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
            print "%s not found - continuing with %s" % (new_file, old_file)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   127
            return
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   128
        else:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   129
            raise
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   130
    print "\nupdating %s" % old_file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   131
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   132
    # walk every single section for uncommented options
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   133
    default_items = set(old.items('DEFAULT'))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   134
    for old_section in old.sections() + ['DEFAULT']:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   135
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   136
        # DEFAULT items show up in every section so remove them
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   137
        if old_section != 'DEFAULT':
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   138
            section_items = set(old.items(old_section)) - default_items
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   139
        else:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   140
            section_items = default_items
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   142
        for old_key, value in section_items:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   143
            # Look for deprecated section/keys
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   144
            if mapping is not None:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   145
                new_section, new_key = update_mapping(old_section, old_key,
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   146
                                                      mapping)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   147
                if new_section is None and new_key is None:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   148
                    # option is deprecated so continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   149
                    continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
            else:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
                # no deprecated values for this file so just copy the values
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
                # over
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   153
                new_section, new_key = old_section, old_key
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   155
            # Look for exceptions
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   156
            if exception_list is not None:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   157
                if (new_section, new_key) in exception_list:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   158
                    if (new_section != 'DEFAULT' and
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   159
                        not new.has_section(new_section)):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   160
                        new.add_section(new_section)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   161
                    print "Preserving [%s] %s = %s" % \
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   162
                        (new_section, new_key, value)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   163
                    new.set(new_section, new_key, value)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   164
                    continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   165
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   166
            if new_section != 'DEFAULT' and not new.has_section(new_section):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   167
                new.add_section(new_section)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   168
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   169
            # print to the log when a value for old_section.old_key is changing
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   170
            # to a new value
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   171
            try:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   172
                new_value = new.get(new_section, new_key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   173
                if new_value != value and '%SERVICE' not in new_value:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   174
                    print "Changing [%s] %s:\n- %s\n+ %s" % \
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   175
                        (old_section, old_key, value, new_value)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   176
                    print
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   177
            except NoOptionError:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   178
                # the new configuration file does not have this option set so
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   179
                # just continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   180
                pass
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   181
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   182
            # Only copy the old value to the new conf file if the entry doesn't
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   183
            # exist in the new file or if it contains '%SERVICE'
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   184
            if not new.has_option(new_section, new_key) or \
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   185
               '%SERVICE' in new.get(new_section, new_key):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   186
                new.set(new_section, new_key, value)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   187
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   188
    # copy the new conf file in place
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   189
    with open(old_file, 'wb+') as fh:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   190
        new.write(fh)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   191
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   192
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   193
def move_conf(original_file, new_file, mapping):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   194
    """ move each entry in mapping from the original file to the new file.
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   195
    """
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   196
    # open the original file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   197
    original = iniparse.ConfigParser()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   198
    original.readfp(open(original_file))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   199
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   200
    # open the new file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   201
    new = iniparse.ConfigParser()
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   202
    new.readfp(open(new_file))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   204
    # The mappings dictionary look similar to the deprecation mappings:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   205
    # (original_section, original_key): (new_section, new_key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   206
    for (original_section, original_key) in mapping:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   207
        try:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   208
            original_value = original.get(original_section, original_key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   209
        except NoOptionError:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   210
            # the original file does not contain this mapping so continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   211
            continue
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   212
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   213
        new_section, new_key = mapping.get((original_section, original_key))
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   214
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   215
        if new_section != 'DEFAULT' and not new.has_section(new_section):
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   216
            new.add_section(new_section)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   217
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   218
        print 'Moving [%s] %s from %s to [%s] %s in %s' % \
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   219
            (original_section, original_key, original_file,
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   220
             new_section, new_key, new_file)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   221
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   222
        # set the option in the new file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   223
        new.set(new_section, new_key, original_value)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   224
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   225
        # remove the option from the old file
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   226
        original.remove_option(original_section, original_key)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   227
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   228
    with open(original_file, 'wb+') as fh:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   229
        original.write(fh)
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   230
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   231
    with open(new_file, 'wb+') as fh:
aba3ed31b37a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   232
        new.write(fh)