diff options
| author | Zuul <zuul@review.openstack.org> | 2018-01-22 09:02:23 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2018-01-22 09:02:23 +0000 |
| commit | efe314b992fc3b2bf5fc4f379db00c65ad766b68 (patch) | |
| tree | 8658b8e009bedd964d7088eb0318d75b93a54a38 /kolla/common/utils.py | |
| parent | e2666505a68875856c1785a5a7e18480c75eebc3 (diff) | |
| parent | d98a102162ff76b09771585ec21ca23415335b90 (diff) | |
| download | kolla-efe314b992fc3b2bf5fc4f379db00c65ad766b68.tar.gz kolla-efe314b992fc3b2bf5fc4f379db00c65ad766b68.zip | |
Merge "Support squash docker images layers"
Diffstat (limited to 'kolla/common/utils.py')
| -rw-r--r-- | kolla/common/utils.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/kolla/common/utils.py b/kolla/common/utils.py new file mode 100644 index 000000000..bb499dfe5 --- /dev/null +++ b/kolla/common/utils.py @@ -0,0 +1,73 @@ +# 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 logging +import os +import subprocess # nosec +import sys + + +def make_a_logger(conf=None, image_name=None): + if image_name: + log = logging.getLogger(".".join([__name__, image_name])) + else: + log = logging.getLogger(__name__) + if not log.handlers: + if conf is None or not conf.logs_dir or not image_name: + handler = logging.StreamHandler(sys.stderr) + log.propagate = False + else: + filename = os.path.join(conf.logs_dir, "%s.log" % image_name) + handler = logging.FileHandler(filename, delay=True) + handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) + log.addHandler(handler) + if conf is not None and conf.debug: + log.setLevel(logging.DEBUG) + else: + log.setLevel(logging.INFO) + return log + + +LOG = make_a_logger() + + +def get_docker_squash_version(): + + try: + stdout = subprocess.check_output( # nosec + ['docker-squash', '--version'], stderr=subprocess.STDOUT) + return stdout.split()[0] + except OSError as ex: + if ex.errno == 2: + LOG.error(('"docker-squash" command is not found.' + ' try to install it by "pip install docker-squash"')) + raise + + +def squash(old_image, new_image, + from_layer=None, + cleanup=False, + tmp_dir=None): + + cmds = ['docker-squash', '--tag', new_image, old_image] + if cleanup: + cmds += ['--cleanup'] + if from_layer: + cmds += ['--from-layer', from_layer] + if tmp_dir: + cmds += ['--tmp-dir', tmp_dir] + try: + subprocess.check_output(cmds, stderr=subprocess.STDOUT) # nosec + except subprocess.CalledProcessError as ex: + LOG.exception('Get error during squashing image: %s', + ex.stdout) + raise |
