
Iec6b3c56d464d26e4f1fc143e6a7804add67a35d I3f2d3a12fcb53759a906fcbae6fae768833d325e I566811521da16055a73c73052ffcd497aaa8e475 I2ee04b6d5aaa26d49243cf7e0b6045026f052625 I329620f3c8aa7e7f1bdd658cbaa8ea20d9aa4ba5 I5ff3d9146b4fbec74d8d65de84d7ab61d869725c Ib38fd52811812170bdd9bf9df90a66f1a2e6c8d9 I64ce3efaec6df2e402ca2acf6a3cf1a6f2bb1909 I66c3659ab0f33772d7a51c8961a37e32c65354c2 I29ce4a6ef165daa0fe60003301a0d807fd1cce42 Ibd2a4f55e2a64d9a992833200a791dbb20c41eca I16133a213ef25a1b374f10fa80cd5a03d1f40753 Ie09f32fcacfe70f436cad71e5749edf94be038ed Iaba6a6bf07ff223e41f705f0f1db5688a5290f5c I64a0474ecfe5ea38393fe681d520a7b6ce00d959 I270b3ce5ef776522a62d9622b36f0d6b50b9cc57 Ic5f6849ea166bb0295f84685b0a2b5c4701f972a I51190cb02255254a888f66404ecdc3dfc5be0386 I0c2180c603cd09e29d4e6c5e592b987e2b447972 Iae1cdbeb7fa3e49c2cb5cac7c92eceffef477e7e I6c643f58aada0a8525711bc452d0c581625f3d26 I9c4f999b1b3006b8ae5f18a030d5b30c7e85e03b I32eaad36edcb889b448c45ba36f4e97f7c87d1e5 I8c91c40a922690b475aac1c0a3b2c0c28274b130 I574fd1dbeea58dbf41f77d295dc03c23d2feaf96 Change-Id: I0ffb3c38c0c1b3aafa8617364e22036c47aaef76
96 lines
3.4 KiB
Python
96 lines
3.4 KiB
Python
# Copyright (c) 2013 Mirantis Inc.
|
|
#
|
|
# 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 os.path
|
|
from muranoconductor.commands.windows_agent import AgentTimeoutException
|
|
from muranoconductor.commands.windows_agent import UnhandledAgentException
|
|
|
|
import xml_code_engine
|
|
|
|
from openstack.common import log as logging
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def send_command(engine, context, body, template, service, unit,
|
|
mappings=None, result=None, error=None, timeout=None,
|
|
osVersion=None, **kwargs):
|
|
if not mappings:
|
|
mappings = {}
|
|
if osVersion:
|
|
template = os.path.join(osVersion, template)
|
|
command_dispatcher = context['/commandDispatcher']
|
|
if timeout:
|
|
timeout = int(timeout)
|
|
|
|
def callback(result_value):
|
|
log.info(
|
|
'Received result from {2} for {0}: {1}'.format(
|
|
template, result_value, unit))
|
|
ok = []
|
|
errors = []
|
|
if isinstance(result_value, AgentTimeoutException):
|
|
errors.append({
|
|
'type': "timeout",
|
|
'messages': [result_value.message],
|
|
'timeout': result_value.timeout
|
|
})
|
|
else:
|
|
if result_value['IsException']:
|
|
msg = "A general exception has occurred in the Agent: " + \
|
|
result_value['Result']
|
|
errors.append({
|
|
'type': "general",
|
|
'messages': [msg],
|
|
})
|
|
|
|
else:
|
|
for res in result_value['Result']:
|
|
if res['IsException']:
|
|
errors.append({
|
|
'type': 'inner',
|
|
'messages': res['Result']
|
|
})
|
|
else:
|
|
ok.append(res)
|
|
|
|
if ok:
|
|
if result is not None:
|
|
context[result] = ok
|
|
success_handler = body.find('success')
|
|
if success_handler is not None:
|
|
engine.evaluate_content(success_handler, context)
|
|
if errors:
|
|
if error is not None:
|
|
context[error] = errors
|
|
failure_handler = body.find('failure')
|
|
if failure_handler is not None:
|
|
log.warning(
|
|
"Handling errors ({0}) in failure block".format(errors),
|
|
exc_info=True)
|
|
engine.evaluate_content(failure_handler, context)
|
|
else:
|
|
log.error("No failure block found for errors", exc_info=True)
|
|
if isinstance(result_value, AgentTimeoutException):
|
|
raise result_value
|
|
else:
|
|
raise UnhandledAgentException(errors)
|
|
|
|
command_dispatcher.execute(
|
|
name='agent', template=template, mappings=mappings,
|
|
unit=unit, service=service, callback=callback, timeout=timeout)
|
|
|
|
|
|
xml_code_engine.XmlCodeEngine.register_function(send_command, "send-command")
|