Loading cloudcontrol/node/host/__init__.py +34 −1 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import fcntl import subprocess import logging import os.path import stat import struct import socket import termios Loading @@ -15,13 +16,14 @@ from subprocess import Popen, PIPE, STDOUT from sjrpc.utils import pass_connection, threadless from sjrpc.core.protocols import TunnelProtocol from sjrpc.core.exceptions import RpcError from cloudcontrol.common.client.tags import Tag, tag_inspector from cloudcontrol.common.client.plugins import Base as BasePlugin from cloudcontrol.common.jobs import JobsManager, JobsStore from cloudcontrol.common.helpers.logger import patch_logging; patch_logging() from cloudcontrol.node.host import tags from cloudcontrol.node.host.jobs import NodeJobsManagerInterface from cloudcontrol.node.host.jobs import NodeJobsManagerInterface, ScriptJob logger = logging.getLogger(__name__) Loading Loading @@ -181,6 +183,7 @@ class Handler(BasePlugin): job_cancel=self.job_cancel, job_purge=self.job_purge, job_attachment=self.job_attachment, script_run=self.script_run, )) # running shells self.shells = dict() Loading Loading @@ -278,6 +281,36 @@ class Handler(BasePlugin): # create tunnel conn.create_tunnel(label=label, endpoint=sock) @pass_connection def script_run(self, conn, sha1, script, owner, *args): # retrive script if not here filename = '/tmp/cc-node-scripts/' + sha1 if not os.access(filename, os.X_OK): try: sha1, content = conn.call('script_get', script) except RpcError: logger.error('Error while retrieving script: %s', script) raise with open(filename, "w") as f: try: f.write(content) os.chmod(filename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC) except OSError: logger.error( 'Could not set execution permission to script: %s', script) raise except IOError: logger.error( 'Could not write script to repository: %s', script) raise return self.jobs_manager.spawn(ScriptJob, owner, settings=dict( script=script, filename=filename, args=args, )).id def job_cancel(self, job_id): self.jobs_manager.get(job_id).cancel() Loading Loading
cloudcontrol/node/host/__init__.py +34 −1 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import fcntl import subprocess import logging import os.path import stat import struct import socket import termios Loading @@ -15,13 +16,14 @@ from subprocess import Popen, PIPE, STDOUT from sjrpc.utils import pass_connection, threadless from sjrpc.core.protocols import TunnelProtocol from sjrpc.core.exceptions import RpcError from cloudcontrol.common.client.tags import Tag, tag_inspector from cloudcontrol.common.client.plugins import Base as BasePlugin from cloudcontrol.common.jobs import JobsManager, JobsStore from cloudcontrol.common.helpers.logger import patch_logging; patch_logging() from cloudcontrol.node.host import tags from cloudcontrol.node.host.jobs import NodeJobsManagerInterface from cloudcontrol.node.host.jobs import NodeJobsManagerInterface, ScriptJob logger = logging.getLogger(__name__) Loading Loading @@ -181,6 +183,7 @@ class Handler(BasePlugin): job_cancel=self.job_cancel, job_purge=self.job_purge, job_attachment=self.job_attachment, script_run=self.script_run, )) # running shells self.shells = dict() Loading Loading @@ -278,6 +281,36 @@ class Handler(BasePlugin): # create tunnel conn.create_tunnel(label=label, endpoint=sock) @pass_connection def script_run(self, conn, sha1, script, owner, *args): # retrive script if not here filename = '/tmp/cc-node-scripts/' + sha1 if not os.access(filename, os.X_OK): try: sha1, content = conn.call('script_get', script) except RpcError: logger.error('Error while retrieving script: %s', script) raise with open(filename, "w") as f: try: f.write(content) os.chmod(filename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC) except OSError: logger.error( 'Could not set execution permission to script: %s', script) raise except IOError: logger.error( 'Could not write script to repository: %s', script) raise return self.jobs_manager.spawn(ScriptJob, owner, settings=dict( script=script, filename=filename, args=args, )).id def job_cancel(self, job_id): self.jobs_manager.get(job_id).cancel() Loading