Alvaro Lopez Garcia ef32ac6991 Use oslo.log for osc plugin
If we do not use oslo.log for logging in the openstackclient plugin, all
the errors and messages that are generated by other parts of the client
(cliff, openstackclient) may be lost.

Change-Id: Ie9aec900e477f3f319ee34873018c15e10dafb4a
2018-10-26 11:43:16 +02:00

110 lines
3.8 KiB
Python

# 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.
"""Translate action implementations"""
import os
import sys
from cliff import command
from oslo_log import log as logging
from toscaparser.tosca_template import ToscaTemplate
from toscaparser.utils.gettextutils import _
from translator.common import flavors
from translator.common import images
from translator.common.utils import UrlUtils
from translator.hot.tosca_translator import TOSCATranslator
from translator.osc import utils
LOG = logging.getLogger('heat-translator')
class TranslateTemplate(command.Command):
"""Translate a template"""
auth_required = True
def get_parser(self, prog_name):
parser = super(TranslateTemplate, self).get_parser(prog_name)
parser.add_argument(
'--template-file',
metavar='<template-file>',
required=True,
help='Path to the file that needs to be translated.')
parser.add_argument(
'--template-type',
metavar='<template-type>',
required=True,
choices=['tosca'],
help='Format of the template file.')
parser.add_argument(
'--output-file',
metavar='<output-file>',
help='Path to place the translated content.')
parser.add_argument(
'--parameter',
metavar='<key=value>',
action=utils.KeyValueAction,
help='Set a property for this template '
'(repeat option to set multiple properties)',
)
parser.add_argument(
'--validate-only',
metavar='<true or false>',
help='Set to true to only validate a template file.',
default='false')
return parser
def take_action(self, parsed_args):
LOG.debug(_('Translating the template with input parameters'
'(%s).'), parsed_args)
output = None
session = self.app.cloud.get_session()
flavors.SESSION = session
images.SESSION = session
if parsed_args.parameter:
parsed_params = parsed_args.parameter
else:
parsed_params = {}
if parsed_args.template_type == "tosca":
path = parsed_args.template_file
a_file = os.path.isfile(path)
a_url = UrlUtils.validate_url(path) if not a_file else False
if a_file or a_url:
validate = parsed_args.validate_only
if validate and validate.lower() == "true":
ToscaTemplate(path, parsed_params, a_file)
msg = (_('The input "%(path)s" successfully passed '
'validation.') % {'path': path})
print(msg)
else:
tosca = ToscaTemplate(path, parsed_params, a_file)
translator = TOSCATranslator(tosca, parsed_params)
output = translator.translate()
else:
msg = _('Could not find template file.\n')
LOG.error(msg)
sys.stdout.write(msg)
raise SystemExit
if output:
if parsed_args.output_file:
with open(parsed_args.output_file, 'w+') as f:
f.write(output)
else:
print(output)