From a9ae6a3af2e621decec9abbe779034f08fa79262 Mon Sep 17 00:00:00 2001 From: antonc42 Date: Thu, 7 Jul 2022 14:49:10 -0500 Subject: [PATCH] fix lxd connection plugin inventory_hostname (#4912) * fixes lxd connection plugin issue #4886 remote_addr value was set to literal string 'inventory_hostname' instead of the value for inventory_hostname variable. solution found in PR ansible/ansible#77894 * changelog fragment - bugfix - lxd connection plugin * correct changelog fragment * Update changelogs/fragments/4886-fix-lxd-inventory-hostname.yml Co-authored-by: Felix Fontein * replace _host instance variable with calls to get 'remote_addr' option suggested by felixfontein Co-authored-by: Felix Fontein --- .../fragments/4886-fix-lxd-inventory-hostname.yml | 2 ++ plugins/connection/lxd.py | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/4886-fix-lxd-inventory-hostname.yml diff --git a/changelogs/fragments/4886-fix-lxd-inventory-hostname.yml b/changelogs/fragments/4886-fix-lxd-inventory-hostname.yml new file mode 100644 index 00000000000..c4faa085eb7 --- /dev/null +++ b/changelogs/fragments/4886-fix-lxd-inventory-hostname.yml @@ -0,0 +1,2 @@ +bugfixes: + - "lxd connection plugin - fix incorrect ``inventory_hostname`` in ``remote_addr``. This is needed for compatibility with ansible-core 2.13 (https://github.com/ansible-collections/community.general/issues/4886)." diff --git a/plugins/connection/lxd.py b/plugins/connection/lxd.py index f3b06e6e39f..0e93b32a639 100644 --- a/plugins/connection/lxd.py +++ b/plugins/connection/lxd.py @@ -18,6 +18,7 @@ - Container identifier. default: inventory_hostname vars: + - name: inventory_hostname - name: ansible_host - name: ansible_lxd_host executable: @@ -61,7 +62,6 @@ class Connection(ConnectionBase): def __init__(self, play_context, new_stdin, *args, **kwargs): super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs) - self._host = self._play_context.remote_addr try: self._lxc_cmd = get_bin_path("lxc") except ValueError: @@ -75,14 +75,14 @@ def _connect(self): super(Connection, self)._connect() if not self._connected: - self._display.vvv(u"ESTABLISH LXD CONNECTION FOR USER: root", host=self._host) + self._display.vvv(u"ESTABLISH LXD CONNECTION FOR USER: root", host=self.get_option('remote_addr')) self._connected = True def exec_command(self, cmd, in_data=None, sudoable=True): """ execute a command on the lxd host """ super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable) - self._display.vvv(u"EXEC {0}".format(cmd), host=self._host) + self._display.vvv(u"EXEC {0}".format(cmd), host=self.get_option('remote_addr')) local_cmd = [self._lxc_cmd] if self.get_option("project"): @@ -104,10 +104,10 @@ def exec_command(self, cmd, in_data=None, sudoable=True): stderr = to_text(stderr) if stderr == "error: Container is not running.\n": - raise AnsibleConnectionFailure("container not running: %s" % self._host) + raise AnsibleConnectionFailure("container not running: %s" % self.get_option('remote_addr')) if stderr == "error: not found\n": - raise AnsibleConnectionFailure("container not found: %s" % self._host) + raise AnsibleConnectionFailure("container not found: %s" % self.get_option('remote_addr')) return process.returncode, stdout, stderr @@ -115,7 +115,7 @@ def put_file(self, in_path, out_path): """ put a file from local to lxd """ super(Connection, self).put_file(in_path, out_path) - self._display.vvv(u"PUT {0} TO {1}".format(in_path, out_path), host=self._host) + self._display.vvv(u"PUT {0} TO {1}".format(in_path, out_path), host=self.get_option('remote_addr')) if not os.path.isfile(to_bytes(in_path, errors='surrogate_or_strict')): raise AnsibleFileNotFound("input path is not a file: %s" % in_path) @@ -138,7 +138,7 @@ def fetch_file(self, in_path, out_path): """ fetch a file from lxd to local """ super(Connection, self).fetch_file(in_path, out_path) - self._display.vvv(u"FETCH {0} TO {1}".format(in_path, out_path), host=self._host) + self._display.vvv(u"FETCH {0} TO {1}".format(in_path, out_path), host=self.get_option('remote_addr')) local_cmd = [self._lxc_cmd] if self.get_option("project"):