From 17e76426158069ab4ba16d765f4b988d64dedb4f Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Fri, 21 Oct 2011 15:17:19 +0200
Subject: [PATCH] implement: export __target_host in remote exec

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 lib/cdist/exec/remote.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/lib/cdist/exec/remote.py b/lib/cdist/exec/remote.py
index 2847d89c..259f72d8 100644
--- a/lib/cdist/exec/remote.py
+++ b/lib/cdist/exec/remote.py
@@ -111,6 +111,10 @@ class Remote(object):
         """
         assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: %s" % command
 
+        # export target_host for use in __remote_{exec,copy} scripts
+        os_environ = os.environ.copy()
+        os_environ['__target_host'] = self.target_host
+
         # can't pass environment to remote side, so prepend command with
         # variable declarations
         if env:
@@ -122,7 +126,7 @@ class Remote(object):
         self.log.debug("Remote run: %s", command)
         try:
             if return_output:
-                return subprocess.check_output(command).decode()
+                return subprocess.check_output(command, env=os_environ).decode()
             else:
                 subprocess.check_call(command)
         except subprocess.CalledProcessError:
@@ -140,6 +144,10 @@ class Remote(object):
         command = self._exec.split()
         command.append(self.target_host)
 
+        # export target_host for use in __remote_{exec,copy} scripts
+        os_environ = os.environ.copy()
+        os_environ['__target_host'] = self.target_host
+
         # can't pass environment to remote side, so prepend command with
         # variable declarations
         if env:
@@ -154,7 +162,7 @@ class Remote(object):
 
         try:
             if return_output:
-                return subprocess.check_output(command).decode()
+                return subprocess.check_output(command, env=os_environ).decode()
             else:
                 subprocess.check_call(command)
         except subprocess.CalledProcessError as error: