From 303c1b3bbf97189388f49e0a5a5ddc98a6b88439 Mon Sep 17 00:00:00 2001 From: Myron Sosyak Date: Mon, 2 Dec 2019 05:46:43 -0800 Subject: [PATCH 1/4] [ansible] Fix docker shell plugin --- ansible/shell_plugins/docker.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/ansible/shell_plugins/docker.py b/ansible/shell_plugins/docker.py index 5977ae518f..8ea856b445 100644 --- a/ansible/shell_plugins/docker.py +++ b/ansible/shell_plugins/docker.py @@ -1,6 +1,17 @@ from __future__ import (absolute_import, division) __metaclass__ = type +DOCUMENTATION = ''' +name: sh +plugin_type: shell +short_description: "docker shell plugin" +version_added: historical +description: + - This module allows you to execute commands directly in docker on the remote host +extends_documentation_fragment: + - shell_common +''' + import os import re import pipes @@ -29,7 +40,7 @@ def join_path(self, *args): return super(ShellModule, self).join_path(*args) - def build_module_command(self, env_string, shebang, cmd, arg_path=None, rm_tmp=None): + def build_module_command(self, env_string, shebang, cmd, arg_path=None): # assert(self.container_name) argv = shlex.split(shebang.replace("#!", "")) assert(argv[0] == 'docker') @@ -51,13 +62,7 @@ def build_module_command(self, env_string, shebang, cmd, arg_path=None, rm_tmp=N pre = ''.join('docker exec {1} mkdir -p {0}; docker cp {0}/. {1}:{0}; ' .format(dtemp, self.container_name) for dtemp in self.dtemps) - if rm_tmp: - post = ''.join('docker exec {1} rm -rf {0}; ' - .format(dtemp, self.container_name) for dtemp in self.dtemps) - else: - post = '' - - return pre + super(ShellModule, self).build_module_command('', shebang_env, cmd, arg_path, rm_tmp) + '; ' + post + return pre + super(ShellModule, self).build_module_command('', shebang_env, cmd, arg_path) def checksum(self, path, python_interp): """ From f6799da36cd3a2d7783ca6c822a15cf9d454a147 Mon Sep 17 00:00:00 2001 From: Myron Sosyak Date: Tue, 3 Dec 2019 04:41:32 -0800 Subject: [PATCH 2/4] Fix remove in shell docker --- ansible/shell_plugins/docker.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ansible/shell_plugins/docker.py b/ansible/shell_plugins/docker.py index 8ea856b445..ee78ca4a5a 100644 --- a/ansible/shell_plugins/docker.py +++ b/ansible/shell_plugins/docker.py @@ -29,6 +29,8 @@ class ShellModule(sh): def __init__(self, *args, **kwargs): super(ShellModule, self).__init__(*args, **kwargs) self.dtemps = [] + self.container = None + def join_path(self, *args): ## HACK! HACK! HACK! @@ -40,6 +42,21 @@ def join_path(self, *args): return super(ShellModule, self).join_path(*args) + def remove(self, path, recurse=False): + if not self.container: + self.container = self.get_option('ansible_python_interpreter').split()[3] + + remove_files_on_host_cmd = super(ShellModule, self).remove(path, recurse) + + cmd = remove_files_on_host_cmd + "; docker exec -i " + cmd += self.container + " " + cmd += 'rm -f ' + if recurse: + cmd += '-r ' + cmd += " ".join(self.dtemps) + + return cmd + def build_module_command(self, env_string, shebang, cmd, arg_path=None): # assert(self.container_name) argv = shlex.split(shebang.replace("#!", "")) From d4968fb3fda7e519f3d29cf2bb6cf3b844d94793 Mon Sep 17 00:00:00 2001 From: Myron Sosyak <49795530+msosyak@users.noreply.github.com> Date: Mon, 2 Dec 2019 22:04:00 +0200 Subject: [PATCH 3/4] Fix typo --- ansible/shell_plugins/docker.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ansible/shell_plugins/docker.py b/ansible/shell_plugins/docker.py index ee78ca4a5a..309e8a7cf8 100644 --- a/ansible/shell_plugins/docker.py +++ b/ansible/shell_plugins/docker.py @@ -2,7 +2,7 @@ __metaclass__ = type DOCUMENTATION = ''' -name: sh +name: docker plugin_type: shell short_description: "docker shell plugin" version_added: historical @@ -31,7 +31,6 @@ def __init__(self, *args, **kwargs): self.dtemps = [] self.container = None - def join_path(self, *args): ## HACK! HACK! HACK! ## We observe the interactions between ShellModule and ActionModule, and From ae10aa35bbb21c8a0ad266caf89186d47d602b69 Mon Sep 17 00:00:00 2001 From: Myron Sosyak Date: Tue, 3 Dec 2019 14:34:12 -0800 Subject: [PATCH 4/4] Fix review comments --- ansible/shell_plugins/docker.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ansible/shell_plugins/docker.py b/ansible/shell_plugins/docker.py index 309e8a7cf8..022eed32c3 100644 --- a/ansible/shell_plugins/docker.py +++ b/ansible/shell_plugins/docker.py @@ -29,7 +29,6 @@ class ShellModule(sh): def __init__(self, *args, **kwargs): super(ShellModule, self).__init__(*args, **kwargs) self.dtemps = [] - self.container = None def join_path(self, *args): ## HACK! HACK! HACK! @@ -42,14 +41,16 @@ def join_path(self, *args): return super(ShellModule, self).join_path(*args) def remove(self, path, recurse=False): - if not self.container: - self.container = self.get_option('ansible_python_interpreter').split()[3] + argv = self.get_option('ansible_python_interpreter').split() + assert(argv[0] == 'docker') + assert(argv[1] == 'exec') + opts, args = getopt.getopt(argv[2:], 'i') + self.container_name = args[0] remove_files_on_host_cmd = super(ShellModule, self).remove(path, recurse) cmd = remove_files_on_host_cmd + "; docker exec -i " - cmd += self.container + " " - cmd += 'rm -f ' + cmd += self.container_name + " rm -f " if recurse: cmd += '-r ' cmd += " ".join(self.dtemps)