コード例 #1
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)

        if not parsed_args.yes:
            confirm = utils.prompt_user_for_confirmation(
                    message=_("Are you sure you want to delete this image "
                              "[y/N]? "),
                    logger=self.log)
            if not confirm:
                raise oscexc.CommandError("Action not confirmed, exiting.")

        lock = processlock.ProcessLock()
        manager = image_uploader.ImageUploadManager(lock=lock)
        uploader = manager.uploader('python')
        registry_url_arg = parsed_args.registry_url
        if registry_url_arg is None:
            registry_url_arg = image_uploader.get_undercloud_registry()
        url = uploader._image_to_url(registry_url_arg)
        session = uploader.authenticate(url, parsed_args.username,
                                        parsed_args.password)

        try:
            uploader.delete(parsed_args.image_to_delete, session=session)
        except OSError as e:
            self.log.error("Unable to remove due to permissions. "
                           "Please prefix command with sudo.")
            raise oscexc.CommandError(e)
コード例 #2
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)

        if parsed_args.cleanup not in image_uploader.CLEANUP:
            raise oscexc.CommandError('--cleanup must be one of: %s' %
                                      ', '.join(image_uploader.CLEANUP))

        roles_data = utils.fetch_roles_file(parsed_args.roles_file)

        env = utils.build_prepare_env(
            parsed_args.environment_files,
            parsed_args.environment_directories
        )

        lock = processlock.ProcessLock()
        params = kolla_builder.container_images_prepare_multi(
            env, roles_data, dry_run=parsed_args.dry_run,
            cleanup=parsed_args.cleanup, lock=lock)
        env_data = build_env_file(params, self.app.command_options)
        if parsed_args.output_env_file:
            if os.path.exists(parsed_args.output_env_file):
                self.log.warning("Output env file exists, "
                                 "moving it to backup.")
                shutil.move(parsed_args.output_env_file,
                            parsed_args.output_env_file + ".backup")
            utils.safe_write(parsed_args.output_env_file, env_data)
        else:
            self.app.stdout.write(env_data)
コード例 #3
0
 def take_action(self, parsed_args):
     self.log.debug("take_action(%s)" % parsed_args)
     if parsed_args.cleanup not in image_uploader.CLEANUP:
         raise oscexc.CommandError('--cleanup must be one of: %s' %
                                   ', '.join(image_uploader.CLEANUP))
     lock = processlock.ProcessLock()
     uploader = image_uploader.ImageUploadManager(
         parsed_args.config_files, cleanup=parsed_args.cleanup, lock=lock)
     try:
         uploader.upload()
     except KeyboardInterrupt:  # ctrl-c
         self.log.warning('Upload was interrupted by ctrl-c.')
コード例 #4
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)
        self.log.warning("[DEPRECATED] This command has been deprecated and "
                         "replaced by the 'openstack tripleo container image "
                         "prepare' command.")

        lock = processlock.ProcessLock()
        uploader = image_uploader.ImageUploadManager([], lock=lock)
        print(uploader.discover_image_tag(
            image=parsed_args.image,
            tag_from_label=parsed_args.tag_from_label
        ))
コード例 #5
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)

        lock = processlock.ProcessLock()
        manager = image_uploader.ImageUploadManager(lock=lock)
        uploader = manager.uploader('python')
        url = uploader._image_to_url(parsed_args.image_to_inspect)
        session = uploader.authenticate(url, parsed_args.username,
                                        parsed_args.password)

        image_inspect_result = uploader.inspect(parsed_args.image_to_inspect,
                                                session=session)

        return self.format_image_inspect(image_inspect_result)
コード例 #6
0
def run_module():
    result = dict(success=False, changed=False, error="", params={})

    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
        result['params'] = {"parameter_defaults": params}
    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)
コード例 #7
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)

        lock = processlock.ProcessLock()
        manager = image_uploader.ImageUploadManager(lock=lock)
        uploader = manager.uploader('python')
        registry_url_arg = parsed_args.registry_url
        if registry_url_arg is None:
            registry_url_arg = image_uploader.get_undercloud_registry()
        url = uploader._image_to_url(registry_url_arg)
        session = uploader.authenticate(url, parsed_args.username,
                                        parsed_args.password)
        results = uploader.list(url.geturl(), session=session)
        cliff_results = []
        for r in results:
            cliff_results.append((r,))
        return (("Image Name",), cliff_results)
コード例 #8
0
    def take_action(self, parsed_args):
        self.log.debug("take_action(%s)" % parsed_args)

        lock = processlock.ProcessLock()
        manager = image_uploader.ImageUploadManager(lock=lock)
        uploader = manager.uploader('python')

        source_image = parsed_args.image_to_push

        if parsed_args.local or source_image.startswith('containers-storage:'):
            storage = 'containers-storage:'
            if not source_image.startswith(storage):
                source_image = storage + source_image.replace('docker://', '')
            elif not parsed_args.local:
                self.log.warning('Assuming local container based on provided '
                                 'container path. (e.g. starts with '
                                 'containers-storage:)')
            source_url = parse.urlparse(source_image)
            image_name = source_url.geturl()
            image_source = None
            if parsed_args.source_username or parsed_args.source_password:
                self.log.warning('Source credentials ignored for local images')
        else:
            storage = 'docker://'
            if not source_image.startswith(storage):
                source_image = storage + source_image
            source_url = parse.urlparse(source_image)
            image_source = source_url.netloc
            image_name = source_url.path[1:]
            if len(image_name.split('/')) != 2:
                raise exceptions.DownloadError('Invalid container. Provided '
                                               'container image should be '
                                               '<registry>/<namespace>/<name>:'
                                               '<tag>')
            if parsed_args.source_username or parsed_args.source_password:
                if not parsed_args.source_username:
                    self.log.warning('Skipping authentication - missing source'
                                     ' username')
                elif not parsed_args.source_password:
                    self.log.warning('Skipping authentication - missing source'
                                     ' password')
                else:
                    uploader.authenticate(source_url,
                                          parsed_args.source_username,
                                          parsed_args.source_password)

        registry_url_arg = parsed_args.registry_url
        if registry_url_arg is None:
            registry_url_arg = image_uploader.get_undercloud_registry()
        if not registry_url_arg.startswith('docker://'):
            registry_url = 'docker://%s' % registry_url_arg
        else:
            registry_url = registry_url_arg
        reg_url = parse.urlparse(registry_url)

        uploader.authenticate(reg_url,
                              parsed_args.username,
                              parsed_args.password)

        task = image_uploader.UploadTask(
                image_name=image_name,
                pull_source=image_source,
                push_destination=registry_url_arg,
                append_tag=parsed_args.append_tag,
                modify_role=None,
                modify_vars=None,
                dry_run=parsed_args.dry_run,
                cleanup=parsed_args.cleanup,
                multi_arch=parsed_args.multi_arch)
        try:
            uploader.add_upload_task(task)
            uploader.run_tasks()
        except OSError as e:
            self.log.error("Unable to upload due to permissions. "
                           "Please prefix command with sudo.")
            raise oscexc.CommandError(e)