tripleo-ansible/tripleo_ansible/ansible_plugins/modules/tripleo_container_image_pre...

172 lines
4.5 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2018 OpenStack Foundation
# 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 yaml
import logging
import os
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.openstack import openstack_full_argument_spec
from ansible.module_utils.openstack import openstack_module_kwargs
from tripleo_common import constants
from tripleo_common.image import image_uploader
from tripleo_common.image import kolla_builder
from tripleo_common.utils.locks import processlock
ANSIBLE_METADATA = {
'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'
}
DOCUMENTATION = '''
---
module: tripleo_container_image_prepare
short_description: Container Image Prepare
version_added: "2.8"
description:
- "Container Image Prepare."
options:
roles_data:
description:
- Roles data to filter images
default: []
type: list
environment:
description:
- Stack environment containing ContainerImagePrepare parameter
type: dict
default: {}
cleanup:
description:
- Cleanup behaviour
type: str
default: full
dry_run:
description:
- Flag for dry run
type: bool
default: false
log_file:
description:
- Log file
type: str
debug:
description:
- Flag to enable debug logging
type: bool
default: false
author:
- Rabi Mishra (@ramishra)
'''
EXAMPLES = '''
- name: Container image prepare
tripleo_container_image_prepare:
roles_data: {}
environment: {}
cleanup: full
dry_run: False
'''
def setup_logging(log_file, debug):
# Implements own logging
log_format = ('%(asctime)s %(process)d %(levelname)s '
'%(name)s [ ] %(message)s')
logging.basicConfig(
datefmt='%Y-%m-%d %H:%M:%S',
format=log_format
)
log = logging.getLogger()
if log_file:
formatter = logging.Formatter(log_format)
fh = logging.FileHandler(filename=log_file)
fh.setFormatter(formatter)
log.addHandler(fh)
if debug:
log_level = logging.DEBUG
else:
log_level = logging.INFO
log.setLevel(log_level)
return log
def run_module():
result = dict(
success=False,
changed=False,
error="",
)
argument_spec = openstack_full_argument_spec(
**yaml.safe_load(DOCUMENTATION)['options']
)
module = AnsibleModule(
argument_spec,
supports_check_mode=False,
**openstack_module_kwargs()
)
log_file = module.params.get('log_file')
debug = module.params.get('debug')
if not module.no_log:
log = setup_logging(log_file, debug)
cleanup = module.params.get('cleanup')
dry_run = module.params.get('dry_run')
if cleanup not in image_uploader.CLEANUP:
raise RuntimeError('--cleanup must be one of: %s' %
', '.join(image_uploader.CLEANUP))
roles_data = module.params.get('roles_data')
env = module.params.get('environment')
try:
lock = processlock.ProcessLock()
params = kolla_builder.container_images_prepare_multi(
env, roles_data, cleanup=cleanup, dry_run=dry_run,
lock=lock)
if not module.no_log:
output = yaml.safe_dump(params, default_flow_style=False)
log.info(output)
result['success'] = True
result['changed'] = True
except Exception as err:
result['error'] = str(err)
result['msg'] = ("Error running container image prepare: %s" % (err))
module.fail_json(**result)
# in the event of a successful module execution, you will want to
# simple AnsibleModule.exit_json(), passing the key/value results
module.exit_json(**result)
def main():
run_module()
if __name__ == '__main__':
main()