diff --git a/xos/configurations/common/cloudlab.yaml b/xos/configurations/common/cloudlab.yaml
index b044acd..de614dc 100644
--- a/xos/configurations/common/cloudlab.yaml
+++ b/xos/configurations/common/cloudlab.yaml
@@ -2,9 +2,7 @@
 
 # Note:
 #   assumes the following have been created and filled with appropriate data:
-#       /root/setup/auth_url
-#       /root/setup/admin_user
-#       /root/setup/admin_password
+#       /root/setup/admin_openrc
 #       /root/setup/flat_net_name
 #       /root/setup/pubkey
 
@@ -40,14 +38,12 @@
       properties:
           backend_type: OpenStack
           version: Juno
-          auth_url: { get_artifact: [ SELF, auth_url, LOCAL_FILE] }
-          admin_user: { get_artifact: [ SELF, os_username, LOCAL_FILE] }
-          admin_password: { get_artifact: [ SELF, os_password, LOCAL_FILE] }
+          auth_url: { get_script_env: [ SELF, adminrc, OS_AUTH_URL, LOCAL_FILE] }
+          admin_user: { get_script_env: [ SELF, adminrc, OS_USERNAME, LOCAL_FILE] }
+          admin_password: { get_script_env: [ SELF, adminrc, OS_PASSWORD, LOCAL_FILE] }
           domain: Default
       artifacts:
-          auth_url: /root/setup/auth_url
-          admin_user: /root/setup/admin_user
-          admin_password: /root/setup/admin_password
+          adminrc: /root/setup/admin-openrc.sh
 
     mysite:
       type: tosca.nodes.Site
diff --git a/xos/tosca/resources/xosresource.py b/xos/tosca/resources/xosresource.py
index 989f3a8..62f18db 100644
--- a/xos/tosca/resources/xosresource.py
+++ b/xos/tosca/resources/xosresource.py
@@ -1,6 +1,7 @@
 import os
 import pdb
 import json
+import subprocess
 
 from core.models import User
 
@@ -114,6 +115,20 @@
 
         raise Exception("artifact %s not found" % name)
 
+    def intrinsic_get_script_env(self, obj=None, name=None, varname=None, method=None):
+        if obj!="SELF":
+            raise Exception("only SELF is supported for get_artifact first arg")
+        if method!="LOCAL_FILE":
+            raise Exception("only LOCAL_FILE is supported for get_artifact fourth arg")
+
+        for (k,v) in self.nodetemplate.entity_tpl.get("artifacts", {}).items():
+            if k == name:
+                if not os.path.exists(v):
+                    raise Exception("Artifact local file %s for artifact %s does not exist" % (v, k))
+                return subprocess.Popen('/bin/bash -c "source %s &> /dev/null; echo \\$%s"' % (v, varname), shell=True, stdout=subprocess.PIPE).stdout.read().strip()
+
+        raise Exception("artifact %s not found" % name)
+
     def try_intrinsic_function(self, v):
         try:
             jsv = v.replace("'", '"')
@@ -128,6 +143,8 @@
 
         if "get_artifact" in jsv:
             return self.intrinsic_get_artifact(*jsv["get_artifact"])
+        elif "get_script_env" in jsv:
+            return self.intrinsic_get_script_env(*jsv["get_script_env"])
 
         return v
 
diff --git a/xos/tosca/tests/alltests.py b/xos/tosca/tests/alltests.py
index 0ce55c4..13dfeb8 100644
--- a/xos/tosca/tests/alltests.py
+++ b/xos/tosca/tests/alltests.py
@@ -1,3 +1,4 @@
+from enginetest import EngineTest
 from coarsetenancytest import CoarseTenancyTest
 from porttest import PortTest
 from networktest import NetworkTest
@@ -12,6 +13,7 @@
 from imagetest import ImageTest
 
 if __name__ == "__main__":
+    EngineTest()
     SiteTest()
     DeploymentTest()
     ControllerTest()
diff --git a/xos/tosca/tests/enginetest.py b/xos/tosca/tests/enginetest.py
new file mode 100644
index 0000000..ed3d51e
--- /dev/null
+++ b/xos/tosca/tests/enginetest.py
@@ -0,0 +1,53 @@
+from basetest import BaseToscaTest
+
+from core.models import Service
+
+class EngineTest(BaseToscaTest):
+    tests = ["intrinsic_get_artifact",
+             "intrinsic_get_script_env",
+             "intrinsic_get_script_env_noisy" ]
+
+    def cleanup(self):
+        self.try_to_delete(Service, name="testservice")
+
+    def intrinsic_get_artifact(self):
+        self.assert_noobj(Service, "testservice")
+        file("/tmp/somevar","w").write("somevalue")
+        self.execute(self.make_nodetemplate("testservice", "tosca.nodes.Service",
+                                            props={"public_key": "{ get_artifact: [ SELF, somevar, LOCAL_FILE] }"},
+                                            artifacts={"somevar": "/tmp/somevar"}))
+        self.assert_obj(Service, "test_svc", public_key="somevalue")
+
+    def intrinsic_get_script_env(self):
+        self.assert_noobj(Service, "testservice")
+        file("/tmp/somescript","w").write( \
+"""#! /bin/bash
+FOO=123
+BAR=456
+JUNK=789
+""")
+        self.execute(self.make_nodetemplate("testservice", "tosca.nodes.Service",
+                                            props={"public_key": "{ get_script_env: [ SELF, somescript, BAR, LOCAL_FILE] }"},
+                                            artifacts={"somescript": "/tmp/somescript"}))
+        self.assert_obj(Service, "testservice", public_key="456")
+
+    def intrinsic_get_script_env_noisy(self):
+        self.assert_noobj(Service, "testservice")
+        file("/tmp/somescript","w").write( \
+"""#! /bin/bash
+echo "junk"
+echo "oh no! something got written to stderr! This always breaks stuff!" >&2
+FOO=123
+echo "more junk"
+BAR=456
+echo "even more junk"
+JUNK=789
+echo "BAR=oops"
+""")
+        self.execute(self.make_nodetemplate("testservice", "tosca.nodes.Service",
+                                            props={"public_key": "{ get_script_env: [ SELF, somescript, BAR, LOCAL_FILE] }"},
+                                            artifacts={"somescript": "/tmp/somescript"}))
+        self.assert_obj(Service, "testservice", public_key="456")
+
+if __name__ == "__main__":
+    EngineTest()
