def do_output_show(hc, args): '''Show a specific stack output.''' if (not args.all and args.output is None or args.all and args.output is not None): raise exc.CommandError( _('Error: either %(output)s or %(all)s argument is needed.') % {'output': '<OUTPUT NAME>', 'all': '--all'}) try: stack = hc.stacks.get(stack_id=args.id) except exc.HTTPNotFound: raise exc.CommandError(_('Stack not found: %s') % args.id) else: if args.all: print(utils.json_formatter(stack.to_dict().get('outputs', []))) else: for output in stack.to_dict().get('outputs', []): if output['output_key'] == args.output: if 'output_error' in output: msg = _("Error: %s") % output['output_error'] raise exc.CommandError(msg) else: value = output['output_value'] break else: return if (args.format == 'json' or isinstance(value, dict) or isinstance(value, list)): print(utils.json_formatter(value)) else: print(value)
def test_json_formatter(self): self.assertEqual('null', utils.json_formatter(None)) self.assertEqual('{}', utils.json_formatter({})) self.assertEqual('{\n "foo": "bar"\n}', utils.json_formatter({"foo": "bar"})) self.assertEqual(u'{\n "Uni": "test\u2665"\n}', utils.json_formatter({"Uni": u"test\u2665"}))
def test_json_formatter(self): self.assertEqual('null', utils.json_formatter(None)) self.assertEqual('{}', utils.json_formatter({})) self.assertEqual('{\n "foo": "bar"\n}', utils.json_formatter({"foo": "bar"})) self.assertEqual(u'{\n "Uni": "test\u2665"\n}', utils.json_formatter({"Uni": u"test\u2665"}))
def do_deployment_output_show(hc, args): '''Show a specific stack output.''' if (not args.all and args.output is None or args.all and args.output is not None): raise exc.CommandError( _('Error: either %(output)s or %(all)s argument is needed.') % {'output': '<OUTPUT NAME>', 'all': '--all'}) try: sd = hc.software_deployments.get(deployment_id=args.id) except exc.HTTPNotFound: raise exc.CommandError(_('Deployment not found: %s') % args.id) outputs = sd.to_dict().get('output_values', {}) if args.all: print(utils.json_formatter(outputs)) else: for output_key, value in outputs.items(): if output_key == args.output: break else: return if (args.format == 'json' or isinstance(value, dict) or isinstance(value, list)): print(utils.json_formatter(value)) else: print(value)
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) client = self.app.client_manager.orchestration if not parsed_args.all and parsed_args.output is None: msg = _('Either <OUTPUT NAME> or --all must be specified.') raise exc.CommandError(msg) if parsed_args.all and parsed_args.output is not None: msg = _('Cannot specify both <OUTPUT NAME> and --all.') raise exc.CommandError(msg) if parsed_args.all: try: stack = client.stacks.get(parsed_args.stack) except heat_exc.HTTPNotFound: msg = _('Stack not found: %s') % parsed_args.stack raise exc.CommandError(msg) outputs = stack.to_dict().get('outputs', []) columns = [] values = [] for output in outputs: columns.append(output['output_key']) values.append(heat_utils.json_formatter(output)) return columns, values try: output = client.stacks.output_show(parsed_args.stack, parsed_args.output)['output'] except heat_exc.HTTPNotFound: msg = _('Stack %(id)s or output %(out)s not found.') % { 'id': parsed_args.stack, 'out': parsed_args.output } try: output = None stack = client.stacks.get(parsed_args.stack).to_dict() for o in stack.get('outputs', []): if o['output_key'] == parsed_args.output: output = o break if output is None: raise exc.CommandError(msg) except heat_exc.HTTPNotFound: raise exc.CommandError(msg) if 'output_error' in output: msg = _('Output error: %s') % output['output_error'] raise exc.CommandError(msg) if (isinstance(output['output_value'], list) or isinstance(output['output_value'], dict)): output['output_value'] = heat_utils.json_formatter( output['output_value']) return self.dict2columns(output)
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) client = self.app.client_manager.orchestration if not parsed_args.all and parsed_args.output is None: msg = _('Either <OUTPUT NAME> or --all must be specified.') raise exc.CommandError(msg) if parsed_args.all and parsed_args.output is not None: msg = _('Cannot specify both <OUTPUT NAME> and --all.') raise exc.CommandError(msg) if parsed_args.all: try: stack = client.stacks.get(parsed_args.stack) except heat_exc.HTTPNotFound: msg = _('Stack not found: %s') % parsed_args.stack raise exc.CommandError(msg) outputs = stack.to_dict().get('outputs', []) columns = [] values = [] for output in outputs: columns.append(output['output_key']) values.append(heat_utils.json_formatter(output)) return columns, values try: output = client.stacks.output_show(parsed_args.stack, parsed_args.output)['output'] except heat_exc.HTTPNotFound: msg = _('Stack %(id)s or output %(out)s not found.') % { 'id': parsed_args.stack, 'out': parsed_args.output} try: output = None stack = client.stacks.get(parsed_args.stack).to_dict() for o in stack.get('outputs', []): if o['output_key'] == parsed_args.output: output = o break if output is None: raise exc.CommandError(msg) except heat_exc.HTTPNotFound: raise exc.CommandError(msg) if 'output_error' in output: msg = _('Output error: %s') % output['output_error'] raise exc.CommandError(msg) if (isinstance(output['output_value'], list) or isinstance(output['output_value'], dict)): output['output_value'] = heat_utils.json_formatter( output['output_value']) return self.dict2columns(output)
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) client = self.app.client_manager.orchestration tpl_files, template = template_utils.process_template_path( parsed_args.template, object_request=http.authenticated_fetcher(client), existing=parsed_args.existing, fetch_child=parsed_args.files_container is None) env_files_list = [] env_files, env = ( template_utils.process_multiple_environments_and_files( env_paths=parsed_args.environment, env_list_tracker=env_files_list, fetch_env_files=parsed_args.files_container is None)) parameters = heat_utils.format_all_parameters( parsed_args.parameter, parsed_args.parameter_file, parsed_args.template) if parsed_args.pre_update: template_utils.hooks_to_env(env, parsed_args.pre_update, 'pre-update') fields = { 'stack_id': parsed_args.stack, 'parameters': parameters, 'existing': parsed_args.existing, 'template': template, 'files': dict(list(tpl_files.items()) + list(env_files.items())), 'environment': env } # If one or more environments is found, pass the listing to the server if env_files_list: fields['environment_files'] = env_files_list if parsed_args.files_container: fields['files_container'] = parsed_args.files_container if parsed_args.tags: fields['tags'] = parsed_args.tags if parsed_args.timeout: fields['timeout_mins'] = parsed_args.timeout if parsed_args.clear_parameter: fields['clear_parameters'] = list(parsed_args.clear_parameter) if parsed_args.rollback: rollback = parsed_args.rollback.strip().lower() if rollback not in ('enabled', 'disabled', 'keep'): msg = _('--rollback invalid value: %s') % parsed_args.rollback raise exc.CommandError(msg) if rollback != 'keep': fields['disable_rollback'] = rollback == 'disabled' if parsed_args.dry_run: if parsed_args.show_nested: fields['show_nested'] = parsed_args.show_nested changes = client.stacks.preview_update(**fields) fields = [ 'state', 'resource_name', 'resource_type', 'resource_identity' ] columns = sorted(changes.get("resource_changes", {}).keys()) data = [ heat_utils.json_formatter(changes["resource_changes"][key]) for key in columns ] return columns, data if parsed_args.wait: # find the last event to use as the marker events = event_utils.get_events(client, stack_id=parsed_args.stack, event_args={'sort_dir': 'desc'}, limit=1) marker = events[0].id if events else None if parsed_args.converge: fields['converge'] = True client.stacks.update(**fields) if parsed_args.wait: stack = client.stacks.get(parsed_args.stack) stack_status, msg = event_utils.poll_for_events(client, stack.stack_name, action='UPDATE', marker=marker) if stack_status == 'UPDATE_FAILED': raise exc.CommandError(msg) return _show_stack(client, parsed_args.stack, format='table', short=True)
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) client = self.app.client_manager.orchestration tpl_files, template = template_utils.process_template_path( parsed_args.template, object_request=http.authenticated_fetcher(client), existing=parsed_args.existing) env_files, env = ( template_utils.process_multiple_environments_and_files( env_paths=parsed_args.environment)) parameters = heat_utils.format_all_parameters( parsed_args.parameter, parsed_args.parameter_file, parsed_args.template) if parsed_args.pre_update: template_utils.hooks_to_env(env, parsed_args.pre_update, 'pre-update') fields = { 'stack_id': parsed_args.stack, 'parameters': parameters, 'existing': parsed_args.existing, 'template': template, 'files': dict(list(tpl_files.items()) + list(env_files.items())), 'environment': env } if parsed_args.tags: fields['tags'] = parsed_args.tags if parsed_args.timeout: fields['timeout_mins'] = parsed_args.timeout if parsed_args.clear_parameter: fields['clear_parameters'] = list(parsed_args.clear_parameter) if parsed_args.rollback: rollback = parsed_args.rollback.strip().lower() if rollback not in ('enabled', 'disabled', 'keep'): msg = _('--rollback invalid value: %s') % parsed_args.rollback raise exc.CommandError(msg) if rollback != 'keep': fields['disable_rollback'] = rollback == 'disabled' if parsed_args.dry_run: changes = client.stacks.preview_update(**fields) fields = ['state', 'resource_name', 'resource_type', 'resource_identity'] columns = sorted(changes.get("resource_changes", {}).keys()) data = [heat_utils.json_formatter(changes["resource_changes"][key]) for key in columns] return columns, data if parsed_args.wait: # find the last event to use as the marker events = event_utils.get_events(client, stack_id=parsed_args.stack, event_args={'sort_dir': 'desc', 'limit': 1}) marker = events[0].id if events else None client.stacks.update(**fields) if parsed_args.wait: stack = client.stacks.get(parsed_args.stack) stack_status, msg = event_utils.poll_for_events( client, stack.stack_name, action='UPDATE', marker=marker) if stack_status == 'UPDATE_FAILED': raise exc.CommandError(msg) return _show_stack(client, parsed_args.stack, format='table', short=True)
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) client = self.app.client_manager.orchestration tpl_files, template = template_utils.process_template_path( parsed_args.template, object_request=_authenticated_fetcher(client), existing=parsed_args.existing) env_files, env = ( template_utils.process_multiple_environments_and_files( env_paths=parsed_args.environment)) parameters = heat_utils.format_all_parameters( parsed_args.parameter, parsed_args.parameter_file, parsed_args.template) if parsed_args.pre_update: template_utils.hooks_to_env(env, parsed_args.pre_update, 'pre-update') fields = { 'stack_id': parsed_args.stack, 'parameters': parameters, 'existing': parsed_args.existing, 'template': template, 'files': dict(list(tpl_files.items()) + list(env_files.items())), 'environment': env } if parsed_args.tags: fields['tags'] = parsed_args.tags if parsed_args.timeout: fields['timeout_mins'] = parsed_args.timeout if parsed_args.clear_parameter: fields['clear_parameters'] = list(parsed_args.clear_parameter) if parsed_args.rollback: rollback = parsed_args.rollback.strip().lower() if rollback not in ('enabled', 'disabled', 'keep'): msg = _('--rollback invalid value: %s') % parsed_args.rollback raise exc.CommandError(msg) if rollback != 'keep': fields['disable_rollback'] = rollback == 'disabled' if parsed_args.dry_run: changes = client.stacks.preview_update(**fields) fields = ['state', 'resource_name', 'resource_type', 'resource_identity'] columns = sorted(changes.get("resource_changes", {}).keys()) data = [heat_utils.json_formatter(changes["resource_changes"][key]) for key in columns] return columns, data client.stacks.update(**fields) if parsed_args.wait: if not utils.wait_for_status(client.stacks.get, parsed_args.stack, status_field='stack_status', success_status='update_complete', error_status='update_failed'): msg = _('Stack %s failed to update.') % parsed_args.stack raise exc.CommandError(msg) return _show_stack(client, parsed_args.stack, format='table', short=True)