diff --git a/library/bootstrap.py b/library/bootstrap.py
new file mode 100644
index 0000000..976206c
--- /dev/null
+++ b/library/bootstrap.py
@@ -0,0 +1,81 @@
+import requests
+from requests.auth import HTTPBasicAuth
+from ansible.module_utils.basic import *
+
+bootstrap_filename = None
+url = None
+
+def store_bootstrap_script(filename, dest_directory, text):
+    global file_path
+
+    try:
+        os.mkdir(dest_directory)
+    except OSError:
+        pass
+
+    file_path = dest_directory + '/' + filename
+    script_file = open(file_path, 'w')
+    script_file.write(text)
+    script_file.close()
+
+
+def set_bootstrap_filename(version=None):
+    global bootstrap_filename
+    if version == '4.16.01' or version is None:
+        bootstrap_filename = 'bootstrap.sh'
+    else:
+        bootstrap_filename = 'bootstrap_' + version + '.sh'
+
+
+def download_bootstrap(uri, dest_directory, user_name=None, password=None):
+    auth = None
+    if user_name is not None and password is not None:
+        auth = HTTPBasicAuth(user_name, password)
+    url = uri + '/' + bootstrap_filename
+    resp = requests.get(url, auth=auth)
+    store_bootstrap_script(bootstrap_filename, dest_directory, resp.text)
+    return resp.status_code
+
+
+def main():
+    module = AnsibleModule(
+            argument_spec=dict(
+                    url=dict(required=False, type='str', default='http://software.apigee.com'),
+                    version=dict(required=False, type='str', choices=['4.16.01', '4.16.05', '4.16.09'], default='4.16.01'),
+                    dest_dir=dict(required=False, type='str', default='/tmp'),
+                    user_name = dict(required=False, type='str'),
+                    password = dict(required=False, type='str')
+            )
+    )
+
+    bootstrap_uri = module.params['url']
+    version = module.params['version']
+    dest = module.params['dest_dir']
+    user_name = module.params['user_name']
+    password = module.params['password']
+
+    set_bootstrap_filename(version)
+
+    status_code = download_bootstrap(bootstrap_uri, dest, user_name, password)
+
+    if status_code >= 200 and status_code < 300:
+        module.exit_json(changed=True,
+                         ansible_facts=dict(
+                                 rc=0,
+                                 bootstrap_request_status_code=status_code,
+                                 bootstrap_script=file_path,
+                                 bootstrap_filename=bootstrap_filename,
+                                 bootstrap_version=version
+                         )
+                         )
+    elif status_code >= 400:
+        module.fail_json(changed=False,
+                         msg="Failed to retrieve bootstrap script",
+                         rc=1,
+                         bootstrap_request_status_code=status_code,
+                         bootstrap_version=version
+                         )
+
+
+if __name__ == '__main__':
+    main()
