diff --git a/common/onos_attribute.py b/common/onos_attribute.py
new file mode 100644
index 0000000..35f5443
--- /dev/null
+++ b/common/onos_attribute.py
@@ -0,0 +1,62 @@
+#! /usr/bin/env python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+def check_status(r):
+    if (r.status_code != 200):
+        print >> sys.stderr, "ERR: recieved status %d" % r.status_code
+        print >> sys.stderr, r.text
+        sys.exit(-1)
+
+def main():
+    global opencloud_auth
+
+    if len(sys.argv)!=7:
+        print >> sys.stderr, "syntax: run_tosca.py <port> <username> <password> [get | set] app attribute"
+        print >> sys.stderr, "   'get' will print attribute to stdout"
+        print >> sys.stderr, "   'set' will read attribute from stdin"
+        print >> sys.stderr, "example: onos_attribute.py 80 padmin@vicci.org letmein get VTN_ONOS_app rest_onos/v1/network/configuration/"
+        sys.exit(-1)
+
+    port = int(sys.argv[1])
+    username = sys.argv[2]
+    password = sys.argv[3]
+    operation = sys.argv[4]
+    app_name = sys.argv[5]
+    attr_name = sys.argv[6]
+
+    xos_auth=(username, password)
+    hostname = "127.0.0.1"
+
+    url = "http://%s:%d/api/tenant/onos/app/?name=%s" % (hostname, port, app_name)
+    r = requests.get(url, auth=xos_auth)
+    check_status(r)
+
+    app_id = r.json()[0]["id"]
+
+    url = "http://%s:%d/api/tenant/onos/app/%s/attributes/?attribute_name=%s" % (hostname, port, app_id, attr_name)
+    r = requests.get(url, auth=xos_auth)
+    check_status(r)
+
+    if operation == "get":
+        if r.json() != []:
+            print r.json()[0]["value"]
+
+    elif operation == "set":
+        if r.json() == []:
+            url = "http://%s:%d/api/tenant/onos/app/%s/attributes/" % (hostname, port, app_id)
+            r = requests.post(url, data={"name": attr_name, "value": sys.stdin.read()}, auth=xos_auth)
+            check_status(r)
+        else:
+            attr_id = r.json()[0]["id"]
+            url = "http://%s:%d/api/tenant/onos/app/%s/attributes/%s/" % (hostname, port, app_id, attr_id)
+            r = requests.put(url, data={"value": sys.stdin.read()}, auth=xos_auth)
+            check_status(r)
+
+if __name__ == "__main__":
+    main()
+
