diff --git a/setup/library/act_cachenode.py b/setup/library/act_cachenode.py
new file mode 100644
index 0000000..03a5690
--- /dev/null
+++ b/setup/library/act_cachenode.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            name      = dict(required=True, type='str'),
+            site      = dict(required=True, type='str'),
+            dns       = dict(required=True, type='list'),
+            interfaces= dict(required=True, type='list'),
+            license   = dict(required=True, type='str'),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+
+            remote_hostname = dict(default=None, type="str"),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    node_hostname = module.params["name"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials)
+
+    nodes = api.ListAll("Node", {"hostname": node_hostname})
+
+    if (nodes or force) and (state=="absent"):
+        api.deleteCache(node_hostname)
+        module.exit_json(changed=True, msg="cachenode deleted")
+    elif ((not nodes) or force) and (state=="present"):
+        if nodes:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.deleteCache(node_hostname)
+
+        hpc = {"hostname": node_hostname,
+               "site": module.params["site"],
+               "dns": module.params["dns"],
+               "Interfaces": module.params["interfaces"],
+               "license": module.params["license"]}
+        ret = api.createCache(**hpc)
+        setupscript=ret["setupscript"]
+
+        if module.params["remote_hostname"]:
+            setupscript = setupscript.replace(module.params["hostname"], module.params["remote_hostname"])
+
+        module.exit_json(changed=True, msg="cachenode created", setupscript=setupscript)
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_cdnprefix.py b/setup/library/act_cdnprefix.py
new file mode 100644
index 0000000..8c050d0
--- /dev/null
+++ b/setup/library/act_cdnprefix.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            cdn_prefix= dict(required=True, type='str'),
+            enabled   = dict(required=True, type="bool"),
+            service   = dict(default="HyperCache", type="str"),
+            content_provider=dict(required=True, type="str"),
+            default_origin_server = dict(required=True, type="str"),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    cdn_prefix = module.params["cdn_prefix"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    content_providers = api.onevapi.ListAll("ContentProvider", {"name": module.params["content_provider"]})
+    if not content_providers:
+        raise Exception("Unable to find %s" % module.params["content_provider"])
+    content_provider = content_providers[0]
+
+    prefixes = api.onevapi.ListAll("CDNPrefix", {"cdn_prefix": cdn_prefix})
+
+    if (prefixes or force) and (state=="absent"):
+        api.Delete("CDNPrefix", prefixes[0]["cdn_prefix_id"])
+        module.exit_json(changed=True, msg="cdn prefix deleted")
+    elif ((not prefixes) or force) and (state=="present"):
+        if prefixes:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.onevapi.Delete("CDNPrefix", prefixes[0]["cdn_prefix_id"])
+
+        cdn_prefix = {"cdn_prefix": cdn_prefix,
+                      "enabled": module.params["enabled"],
+                      "service": module.params["service"],
+                      "content_provider_id": content_provider["content_provider_id"],
+                      "default_origin_server": module.params["default_origin_server"]}
+        ret = api.onevapi.Create("CDNPrefix", cdn_prefix)
+
+        module.exit_json(changed=True, msg="sp created")
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_cp.py b/setup/library/act_cp.py
new file mode 100644
index 0000000..465c760
--- /dev/null
+++ b/setup/library/act_cp.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            name      = dict(required=True, type='str'),
+            account   = dict(required=True, type='str'),
+            enabled   = dict(required=True, type="bool"),
+            service_provider = dict(required=True, type="str"),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    cp_name = module.params["name"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    service_providers = api.onevapi.ListAll("ServiceProvider", {"name": module.params["service_provider"]})
+    if not service_providers:
+        raise Exception("Unable to find %s" % module.params["service_provider"])
+    service_provider = service_providers[0]
+
+    cps = api.onevapi.ListAll("ContentProvider", {"name": cp_name})
+
+    if (cps or force) and (state=="absent"):
+        api.Delete("ContentProvider", cps[0].id)
+        module.exit_json(changed=True, msg="cp deleted")
+    elif ((not cps) or force) and (state=="present"):
+        if cps:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.onevapi.Delete("ContentProvider", cps[0]["content_provider_id"])
+
+        sp = {"account": module.params["account"],
+              "name": cp_name,
+              "enabled": module.params["enabled"],
+              "service_provider_id": service_provider["service_provider_id"]}
+        ret = api.onevapi.Create("ContentProvider", sp)
+
+        module.exit_json(changed=True, msg="cp created")
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_origin.py b/setup/library/act_origin.py
new file mode 100644
index 0000000..4fdf224
--- /dev/null
+++ b/setup/library/act_origin.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            url       = dict(required=True, type='str'),
+            service_type = dict(default="HyperCache", type="str"),
+            content_provider = dict(required=True, type="str"),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    origin_url = module.params["url"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    content_providers = api.onevapi.ListAll("ContentProvider", {"name": module.params["content_provider"]})
+    if not content_providers:
+        raise Exception("Unable to find %s" % module.params["content_provider"])
+    content_provider = content_providers[0]
+
+    origins = api.onevapi.ListAll("OriginServer", {"url": origin_url})
+
+    if (origins or force) and (state=="absent"):
+        api.Delete("OriginServer", origins[0]["origin_servier_id"])
+        module.exit_json(changed=True, msg="origin server deleted")
+    elif ((not origins) or force) and (state=="present"):
+        if origins:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.onevapi.Delete("OriginServer", origins[0]["origin_server_id"])
+
+        origin = {"url": origin_url,
+              "service_type": module.params["service_type"],
+              "content_provider_id": content_provider["content_provider_id"]}
+        ret = api.onevapi.Create("OriginServer", origin)
+
+        module.exit_json(changed=True, msg="origin server created")
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_rr.py b/setup/library/act_rr.py
new file mode 100644
index 0000000..75b37e2
--- /dev/null
+++ b/setup/library/act_rr.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            name      = dict(required=True, type='str'),
+            site      = dict(required=True, type='str'),
+            dns       = dict(required=True, type='list'),
+            interfaces= dict(required=True, type='list'),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+
+            remote_hostname = dict(default=None, type="str"),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    node_hostname = module.params["name"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    nodes = api.ListAll("Node", {"hostname": node_hostname})
+
+    if (nodes or force) and (state=="absent"):
+        api.deleteRR(node_hostname)
+        module.exit_json(changed=True, msg="cachenode deleted")
+    elif ((not nodes) or force) and (state=="present"):
+        if nodes:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.deleteRR(node_hostname)
+
+        rr = {"hostname": node_hostname,
+               "site": module.params["site"],
+               "dns": module.params["dns"],
+               "Interfaces": module.params["interfaces"]}
+        ret = api.createRR(**rr)
+        setupscript=ret["setupscript"]
+
+        if module.params["remote_hostname"]:
+            setupscript = setupscript.replace(module.params["hostname"], module.params["remote_hostname"])
+
+        module.exit_json(changed=True, msg="rr created", setupscript=setupscript)
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_site.py b/setup/library/act_site.py
new file mode 100644
index 0000000..0894649
--- /dev/null
+++ b/setup/library/act_site.py
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            name      = dict(required=True, type='str'),
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    siteName = module.params["name"]
+
+    api = LCDNAPI(credentials)
+
+    sites = api.ListAll("Site", {"name": siteName})
+
+    if sites and (state=="absent"):
+        api.deleteSite(siteName)
+        module.exit_json(changed=True, msg="site deleted")
+    elif (not sites) and (state=="present"):
+        api.createSite(siteName)
+        module.exit_json(changed=True, msg="site created")
+    else:
+        module.exit_json(changed=False)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/setup/library/act_sp.py b/setup/library/act_sp.py
new file mode 100644
index 0000000..e683218
--- /dev/null
+++ b/setup/library/act_sp.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            name      = dict(required=True, type='str'),
+            account   = dict(required=True, type='str'),
+            enabled   = dict(required=True, type="bool"),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    sp_name = module.params["name"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    sps = api.onevapi.ListAll("ServiceProvider", {"name": sp_name})
+
+    if (sps or force) and (state=="absent"):
+        api.Delete("ServiceProvider", sps[0].id)
+        module.exit_json(changed=True, msg="sp deleted")
+    elif ((not sps) or force) and (state=="present"):
+        if sps:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.onevapi.Delete("ServiceProvider", sps[0]["service_provider_id"])
+
+        sp = {"account": module.params["account"],
+              "name": sp_name,
+              "enabled": module.params["enabled"]}
+        ret = api.onevapi.Create("ServiceProvider", sp)
+
+        module.exit_json(changed=True, msg="sp created")
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
