Added SolarRunResult to wrap all Run transports results
This commit is contained in:
parent
247777891c
commit
2103f8f606
@ -20,7 +20,6 @@ from solar.core.log import log
|
|||||||
from solar.core.handlers.base import TempFileHandler
|
from solar.core.handlers.base import TempFileHandler
|
||||||
from solar import errors
|
from solar import errors
|
||||||
|
|
||||||
|
|
||||||
# otherwise fabric will sys.exit(1) in case of errors
|
# otherwise fabric will sys.exit(1) in case of errors
|
||||||
env.warn_only = True
|
env.warn_only = True
|
||||||
|
|
||||||
@ -29,6 +28,7 @@ env.warn_only = True
|
|||||||
# we would not need to render it there
|
# we would not need to render it there
|
||||||
# for now we redender it locally, sync to remote, run ansible on remote host as local
|
# for now we redender it locally, sync to remote, run ansible on remote host as local
|
||||||
class AnsibleTemplate(TempFileHandler):
|
class AnsibleTemplate(TempFileHandler):
|
||||||
|
|
||||||
def action(self, resource, action_name):
|
def action(self, resource, action_name):
|
||||||
inventory_file = self._create_inventory(resource)
|
inventory_file = self._create_inventory(resource)
|
||||||
playbook_file = self._create_playbook(resource, action_name)
|
playbook_file = self._create_playbook(resource, action_name)
|
||||||
|
@ -58,6 +58,21 @@ class SolarTransport(object):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SolarRunResult(object):
|
||||||
|
|
||||||
|
def __init__(self, result, failed=False):
|
||||||
|
self._result = result
|
||||||
|
self._failed = failed
|
||||||
|
|
||||||
|
@property
|
||||||
|
def failed(self):
|
||||||
|
return self._failed
|
||||||
|
|
||||||
|
@property
|
||||||
|
def result(self):
|
||||||
|
return self._result
|
||||||
|
|
||||||
|
|
||||||
class SyncTransport(SolarTransport):
|
class SyncTransport(SolarTransport):
|
||||||
"""
|
"""
|
||||||
Transport that is responsible for file / directory syncing.
|
Transport that is responsible for file / directory syncing.
|
||||||
@ -116,6 +131,9 @@ class RunTransport(SolarTransport):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(RunTransport, self).__init__()
|
super(RunTransport, self).__init__()
|
||||||
|
|
||||||
|
def get_result(self, *args, **kwargs):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
def bind_with(self, other):
|
def bind_with(self, other):
|
||||||
# we migth add there something later
|
# we migth add there something later
|
||||||
# like compat checking etc
|
# like compat checking etc
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
from solard.client import SolardClient
|
from solard.client import SolardClient
|
||||||
|
|
||||||
from solar.core.transports.base import RunTransport, SyncTransport, Executor
|
from solar.core.transports.base import RunTransport, SyncTransport, Executor, SolarRunResult
|
||||||
from solar.core.log import log
|
from solar.core.log import log
|
||||||
|
|
||||||
|
|
||||||
@ -50,13 +50,19 @@ class SolardSyncTransport(SyncTransport, SolardTransport):
|
|||||||
self.executors.append(executor)
|
self.executors.append(executor)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SolardRunTransport(RunTransport, SolardTransport):
|
class SolardRunTransport(RunTransport, SolardTransport):
|
||||||
|
|
||||||
preffered_transport_name = 'solard'
|
preffered_transport_name = 'solard'
|
||||||
|
|
||||||
|
def get_result(self, result, failed=False):
|
||||||
|
return SolarRunResult(result, failed)
|
||||||
|
|
||||||
def run(self, resource, *args, **kwargs):
|
def run(self, resource, *args, **kwargs):
|
||||||
log.debug("Solard run: %s", args)
|
log.debug("Solard run: %s", args)
|
||||||
client = self.get_client(resource)
|
client = self.get_client(resource)
|
||||||
return client.run(' '.join(args), **kwargs)
|
try:
|
||||||
|
res = client.run(' '.join(args), **kwargs)
|
||||||
|
return self.get_result(res, failed=False)
|
||||||
|
except Exception as ex:
|
||||||
|
return self.get_result(ex, failed=True)
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ from fabric.contrib import project as fabric_project
|
|||||||
|
|
||||||
from solar.core.log import log
|
from solar.core.log import log
|
||||||
from solar.core.transports.base import RunTransport, SyncTransport, Executor
|
from solar.core.transports.base import RunTransport, SyncTransport, Executor
|
||||||
|
from solar.core.transports.base import SolarRunResult
|
||||||
|
|
||||||
|
|
||||||
class _SSHTransport(object):
|
class _SSHTransport(object):
|
||||||
@ -86,6 +87,15 @@ class SSHRunTransport(RunTransport, _SSHTransport):
|
|||||||
|
|
||||||
preffered_transport_name = 'ssh'
|
preffered_transport_name = 'ssh'
|
||||||
|
|
||||||
|
def get_result(self, output):
|
||||||
|
"""
|
||||||
|
Needed for compatibility with other handlers / transports
|
||||||
|
"""
|
||||||
|
if output.failed:
|
||||||
|
return SolarRunResult(output, failed=True)
|
||||||
|
return SolarRunResult(output, failed=False)
|
||||||
|
|
||||||
|
|
||||||
def run(self, resource, *args, **kwargs):
|
def run(self, resource, *args, **kwargs):
|
||||||
log.debug('SSH: %s', args)
|
log.debug('SSH: %s', args)
|
||||||
|
|
||||||
@ -109,4 +119,5 @@ class SSHRunTransport(RunTransport, _SSHTransport):
|
|||||||
managers.append(fabric_api.warn_only())
|
managers.append(fabric_api.warn_only())
|
||||||
|
|
||||||
with nested(*managers):
|
with nested(*managers):
|
||||||
return executor(' '.join(args))
|
res = executor(' '.join(args))
|
||||||
|
return self.get_result(res)
|
||||||
|
@ -3,6 +3,8 @@ import os
|
|||||||
|
|
||||||
# TODO: handle errors
|
# TODO: handle errors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SolardClient(object):
|
class SolardClient(object):
|
||||||
|
|
||||||
read_buffer = 4096
|
read_buffer = 4096
|
||||||
|
Loading…
x
Reference in New Issue
Block a user