diff --git a/library/opdk_server_self.py b/library/opdk_server_self.py
new file mode 100644
index 0000000..1684390
--- /dev/null
+++ b/library/opdk_server_self.py
@@ -0,0 +1,76 @@
+import requests
+from requests import ConnectionError
+from requests.exceptions import RequestException
+import sys
+from requests.auth import HTTPBasicAuth
+from ansible.module_utils.basic import *
+
+BASE_SERVER_URL = 'http://localhost'
+SERVER_SELF_URI = '/v1/servers/self'
+SERVER_PORTS = {'ms': '8080',
+                'router': '8081',
+                'r': '8081',
+                'mp': '8082',
+                'rmp': '8082',
+                'qs': '8083',
+                'ps': '8084'}
+
+
+def get_server_self(server_type, username, password):
+    auth = HTTPBasicAuth(username, password)
+    url = BASE_SERVER_URL + ':' + SERVER_PORTS[server_type] + SERVER_SELF_URI
+    resp = requests.get(url, auth=auth)
+    return resp
+
+
+def map_server_self(server_self):
+    reported = server_self.json()
+    for p in reported['tags']['property']:
+        name = p['name']
+        value = p['value']
+        reported[name] = value
+    del reported['tags']
+    return reported
+
+
+def main():
+    module = AnsibleModule(
+            argument_spec=dict(
+                    username=dict(required=True, type='str', no_log=True),
+                    password=dict(required=True, type='str', no_log=True),
+                    server_type=dict(required=True, type='str', choices=['ms', 'router', 'r', 'mp', 'qs', 'ps', 'rmp'])
+            )
+    )
+
+    username = module.params['username']
+    password = module.params['password']
+    server_type = module.params['server_type']
+    try:
+        resp = get_server_self(server_type, username, password)
+        status_code = resp.status_code
+    except RequestException as ex:
+        status_code = 500
+        msg = str(ex) + " Did you run on the correct server?"
+        print(msg)
+
+    if status_code >= 200 and status_code < 300:
+        server_self = map_server_self(resp)
+        facts = {}
+        facts['edge_' + server_type + '_self'] = server_self
+        module.exit_json(
+                changed=True,
+                ansible_facts=facts
+        )
+    elif status_code > 400:
+        err_msg = "Error status code returned: ["
+        if 'msg' in globals():
+            err_msg += msg
+        module.fail_json(
+                changed=False,
+                msg=err_msg,
+                status_code=status_code,
+        )
+
+
+if __name__ == '__main__':
+    main()
