From b47fa271d7b1dcff6b8aeb9fbb9502596ec1c859 Mon Sep 17 00:00:00 2001 From: Przemyslaw Kaminski Date: Fri, 15 May 2015 11:32:14 +0200 Subject: [PATCH] Rsync: rewrite to use raw commands, not fabric This is because we will be using SSH hops to rsync into slave nodes. Fabric doesn't seem to support this out of the box. Change-Id: Idf43d7b6c35324ade9be3467cee7c664833a38a8 --- fuel_dev_tools/cmd_parser.py | 22 ++++++++++++++++++++++ fuel_dev_tools/docker/__init__.py | 4 +++- fuel_dev_tools/docker/nginx.py | 6 +++++- fuel_dev_tools/docker/postgres.py | 3 --- fuel_dev_tools/rsync.py | 22 +++++++++++++++------- 5 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 fuel_dev_tools/cmd_parser.py diff --git a/fuel_dev_tools/cmd_parser.py b/fuel_dev_tools/cmd_parser.py new file mode 100644 index 0000000..eac979d --- /dev/null +++ b/fuel_dev_tools/cmd_parser.py @@ -0,0 +1,22 @@ +class CmdParserMixin(object): + """Mixin for parsing fuel CLI output.""" + + def parse_output(self, output): + ret = [] + header = [] + + lines = output.split('\n') + # brutal + lines = [line for line in lines + if not line.startswith('DEPRECATION WARNING')] + + for name in lines[0].split('|'): + header.append(name.strip()) + + # lines[1] is just '----' + + for line in lines[2:]: + values = [v.strip() for v in line.split('|')] + ret.append(dict(zip(header, values))) + + return ret \ No newline at end of file diff --git a/fuel_dev_tools/docker/__init__.py b/fuel_dev_tools/docker/__init__.py index d2b99a7..e007ba7 100644 --- a/fuel_dev_tools/docker/__init__.py +++ b/fuel_dev_tools/docker/__init__.py @@ -241,7 +241,9 @@ class RsyncCommand(DockerMixin, # target is on the remote target = os.path.join(base_target_dir, self.target_path) - self.rsync(source, target) + target, args = self.build_app_args_target(target) + + self.rsync(source, target, *args) self.post_sync(parsed_args) diff --git a/fuel_dev_tools/docker/nginx.py b/fuel_dev_tools/docker/nginx.py index 97d8755..bfd772d 100644 --- a/fuel_dev_tools/docker/nginx.py +++ b/fuel_dev_tools/docker/nginx.py @@ -57,7 +57,11 @@ class Rsync(DockerNginxMixin, docker.RsyncCommand): source = os.path.join(source_dir, source_path) - self.rsync(source, target_dir) + target, args = self.build_app_args_target(target_dir) + + self.rsync(source, target, *args) + + self.rsync(source, target) def build_gulp_static(self, source_dir): cwd = os.path.join(source_dir, 'nailgun') diff --git a/fuel_dev_tools/docker/postgres.py b/fuel_dev_tools/docker/postgres.py index 143c08f..9aa274e 100644 --- a/fuel_dev_tools/docker/postgres.py +++ b/fuel_dev_tools/docker/postgres.py @@ -12,9 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six -import subprocess - from fuel_dev_tools import docker from fuel_dev_tools import info diff --git a/fuel_dev_tools/rsync.py b/fuel_dev_tools/rsync.py index ad78ef1..ee915c6 100644 --- a/fuel_dev_tools/rsync.py +++ b/fuel_dev_tools/rsync.py @@ -12,18 +12,26 @@ # License for the specific language governing permissions and limitations # under the License. -import six - -from fabric.contrib import project +import subprocess class RsyncMixin(object): - def rsync(self, source, target): + def build_app_args_target(self, target): + target = '{}@{}:{}'.format(self.app_args.user, self.app_args.ip, target) + args = ['-e', 'ssh -p {}'.format(self.app_args.port)] + + return target, args + + def rsync(self, source, target, *args): self.print_debug('RSYNC: %s --> %s' % (source, target)) - result = project.rsync_project( - local_dir=source, - remote_dir=target + #result = project.rsync_project( + # local_dir=source, + # remote_dir=target + #) + + result = subprocess.check_output( + ['rsync', 'avz'] + list(args) + [source, target] ) self.print_debug(result.decode('utf-8'))