From db6a7152acc875124c1275768d27bee945ee5a86 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 21 Mar 2022 21:27:16 +0100 Subject: [PATCH 1/2] Simplify actual_user handling code. --- .../fragments/311-docker-actual_user.yml | 2 ++ plugins/connection/docker.py | 30 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 changelogs/fragments/311-docker-actual_user.yml diff --git a/changelogs/fragments/311-docker-actual_user.yml b/changelogs/fragments/311-docker-actual_user.yml new file mode 100644 index 000000000..26a9f3436 --- /dev/null +++ b/changelogs/fragments/311-docker-actual_user.yml @@ -0,0 +1,2 @@ +minor_changes: + - "docker connection plugin - simplify ``actual_user`` handling code (https://github.com/ansible-collections/community.docker/pull/311)." diff --git a/plugins/connection/docker.py b/plugins/connection/docker.py index 96d1b46f4..eeccecc60 100644 --- a/plugins/connection/docker.py +++ b/plugins/connection/docker.py @@ -234,37 +234,41 @@ def _set_conn_data(self): self.remote_user = self.get_option('remote_user') if self.remote_user is None and self._play_context.remote_user is not None: self.remote_user = self._play_context.remote_user - # The actual user which will execute commands in docker (if known) - self.actual_user = None + # timeout, use unless default and pc is different, backwards compat + self.timeout = self.get_option('container_timeout') + if self.timeout == 10 and self.timeout != self._play_context.timeout: + self.timeout = self._play_context.timeout + + def _get_actual_user(): if self.remote_user is not None: + # An explicit user is provided if self.docker_version == u'dev' or LooseVersion(self.docker_version) >= LooseVersion(u'1.7'): # Support for specifying the exec user was added in docker 1.7 - self.actual_user = self.remote_user + return self.remote_user else: self.remote_user = None - self.actual_user = self._get_docker_remote_user() - if self.actual_user != self.get_option('remote_user'): + actual_user = self._get_docker_remote_user() + if actual_user != self.get_option('remote_user'): display.warning(u'docker {0} does not support remote_user, using container default: {1}' .format(self.docker_version, self.actual_user or u'?')) + return actual_user elif self._display.verbosity > 2: # Since we're not setting the actual_user, look it up so we have it for logging later # Only do this if display verbosity is high enough that we'll need the value - # This saves overhead from calling into docker when we don't need to - self.actual_user = self._get_docker_remote_user() - - # timeout, use unless default and pc is different, backwards compat - self.timeout = self.get_option('container_timeout') - if self.timeout == 10 and self.timeout != self._play_context.timeout: - self.timeout = self._play_context.timeout + # This saves overhead from calling into docker when we don't need to. + return self._get_docker_remote_user() + else: + return None def _connect(self, port=None): """ Connect to the container. Nothing to do """ super(Connection, self)._connect() if not self._connected: self._set_conn_data() + actual_user = self._get_actual_user() display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format( - self.actual_user or u'?'), host=self.get_option('remote_addr') + actual_user or u'?'), host=self.get_option('remote_addr') ) self._connected = True From 801b904d42c92b74930859e74df8a2d3017b1ee1 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 21 Mar 2022 21:34:40 +0100 Subject: [PATCH 2/2] Forgot self. --- plugins/connection/docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/connection/docker.py b/plugins/connection/docker.py index eeccecc60..e786e9314 100644 --- a/plugins/connection/docker.py +++ b/plugins/connection/docker.py @@ -240,7 +240,7 @@ def _set_conn_data(self): if self.timeout == 10 and self.timeout != self._play_context.timeout: self.timeout = self._play_context.timeout - def _get_actual_user(): + def _get_actual_user(self): if self.remote_user is not None: # An explicit user is provided if self.docker_version == u'dev' or LooseVersion(self.docker_version) >= LooseVersion(u'1.7'):