refactored to improve readability and troubleshooting
diff --git a/tasks/install-mirror.yml b/tasks/install-mirror.yml
new file mode 100644
index 0000000..ce8a2ef
--- /dev/null
+++ b/tasks/install-mirror.yml
@@ -0,0 +1,15 @@
+---
+- name: Install bootstrap from local repository for 4.16.01
+  no_log: True
+  shell: "bash {{ archive_folder }}/repos/bootstrap.sh apigeeprotocol='file://' apigeerepobasepath={{ archive_folder }}/repos JAVA_FIX=C"
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  when: opdk_version | version_compare('4.16.01', '==')
+
+- name: Install bootstrap from local repository for greater than 4.16.01
+  no_log: True
+  shell: "bash {{ archive_folder }}/repos/bootstrap_{{ opdk_version }}.sh apigeeprotocol='file://' apigeerepobasepath={{ archive_folder }}/repos JAVA_FIX=C"
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  when: opdk_version | version_compare('4.16.01', '>')
+
diff --git a/tasks/install-online.yml b/tasks/install-online.yml
new file mode 100644
index 0000000..aee5f3d
--- /dev/null
+++ b/tasks/install-online.yml
@@ -0,0 +1,47 @@
+---
+- name: Create installer path
+  file:
+    path: "{{ opdk_installer_path }}"
+    owner: "{{ opdk_user_name }}"
+    group: "{{ opdk_group_name }}"
+
+- include: online/download-bootstrap-with-no-proxy.yml
+  when: http_proxy is not defined and https_proxy is not defined
+
+- include: online/download-bootstrap-with-proxy.yml
+  when: http_proxy is defined and https_proxy is defined
+
+- name: Bootstrap script exists
+  stat:
+    path: '{{ bootstrap_script }}'
+  register: bootstrap_exists
+
+- name: Cache bootstrap script state
+  cache:
+    key: bootstrap_script_exists
+    value: '{{ bootstrap_exists.stat.exists }}'
+
+- name: Fail the playbook if bootstrap fails to install
+  fail:
+    msg: 'Bootstrap installation failed, no point in letting this go further'
+  when: not bootstrap_exists.stat.exists
+
+- name: Yum clean all
+  shell: "yum clean all"
+
+- block:
+  - include: online/install-bootstrap-with-no-proxy.yml
+    when: http_proxy is not defined and https_proxy is not defined
+
+  - include: online/install-bootstrap-with-proxy.yml
+    when: http_proxy is defined and https_proxy is defined
+
+  rescue:
+    - name: Yum failed to update, let's clean yum
+      shell: 'yum clean all'
+
+    - include: online/install-bootstrap-with-no-proxy.yml
+      when: http_proxy is not defined and https_proxy is not defined
+
+    - include: online/install-bootstrap-with-proxy.yml
+      when: http_proxy is defined and https_proxy is defined
diff --git a/tasks/main.yml b/tasks/main.yml
index 36c9556..fa8c1b3 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -8,7 +8,6 @@
     group: "{{ opdk_group_name }}"
 
 - block:
-
   - name: Find available epel repos
     find:
       pattern: "epel*"
@@ -25,169 +24,10 @@
 
   when: opdk_version | version_compare('4.17.01', '>=')
 
-- block:
-  - name: Create installer path
-    file:
-      path: "{{ opdk_installer_path }}"
-      owner: "{{ opdk_user_name }}"
-      group: "{{ opdk_group_name }}"
-
-  - name: Download bootstrap with no proxy use
-    no_log: True
-    bootstrap:
-      dest_dir: '{{ opdk_installer_path }}'
-      version: '{{ opdk_version }}'
-      url: '{{ apigee_repo_url }}'
-      user_name: '{{ apigee_repo_user }}'
-      password: '{{ apigee_repo_password }}'
-    register: results
-    when: http_proxy is not defined and https_proxy is not defined
-
-  - name: Download bootstrap with proxy
-    no_log: True
-    bootstrap:
-      dest_dir: '{{ opdk_installer_path }}'
-      version: '{{ opdk_version }}'
-      url: '{{ apigee_repo_url }}'
-      user_name: '{{ apigee_repo_user }}'
-      password: '{{ apigee_repo_password }}'
-    register: results
-    when: http_proxy is defined and https_proxy is defined
-    environment:
-      http_proxy: "{{ http_proxy }}"
-      https_proxy: "{{ https_proxy }}"
-
-  - name: Bootstrap script exists
-    stat:
-      path: '{{ bootstrap_script }}'
-    register: bootstrap_exists
-
-  - name: Cache bootstrap script state
-    cache:
-      key: bootstrap_script_exists
-      value: '{{ bootstrap_exists.stat.exists }}'
-
-  - name: Fail the playbook if bootstrap fails to install
-    fail:
-      msg: 'Bootstrap installation failed, no point in letting this go further'
-    when: not bootstrap_exists.stat.exists
-
-  - name: Yum clean all
-    shell: "yum clean all"
-
-  - block:
-    - name: Update apigee-service if upgrade_edge is set as part of an upgrade
-      shell: "bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword='{{ apigee_repo_password }}' JAVA_FIX=C"
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      when: upgrade_edge is defined and upgrade_edge | bool == True and http_proxy is not defined and https_proxy is not defined
-
-    - name: Install bootstrap from the provided apigee_repo_uri and apigee_repo_protocol with no proxy
-      shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-      args:
-        creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-      when: apigee_stage is not defined
-      register: results
-      when: http_proxy is not defined and https_proxy is not defined
-
-    - name: Install bootstrap from development repositories
-      shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeestage={{ apigee_stage }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-      args:
-        creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-      register: results
-      when: apigee_stage is defined and http_proxy is not defined and https_proxy is not defined
-
-    - name: Update apigee-service if upgrade_edge is set as part of an upgrade
-      shell: "bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword='{{ apigee_repo_password }}' JAVA_FIX=C"
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      when: upgrade_edge is defined and upgrade_edge | bool == True
-      environment:
-        http_proxy: "{{ http_proxy }}"
-        https_proxy: "{{ https_proxy }}"
-      when: http_proxy is defined and https_proxy is defined
-
-    - name: Install bootstrap from the provided apigee_repo_uri and apigee_repo_protocol with proxy
-      shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-      args:
-        creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-      register: results
-      when: apigee_stage is not defined
-      environment:
-        http_proxy: "{{ http_proxy }}"
-        https_proxy: "{{ https_proxy }}"
-      when: http_proxy is defined and https_proxy is defined
-
-    - name: Install bootstrap from development repositories
-      shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeestage={{ apigee_stage }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-      args:
-        creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-      env:
-        JAVA_HOME: '{{ java_home }}'
-      failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-      register: results
-      when: apigee_stage is defined
-      environment:
-        http_proxy: "{{ http_proxy }}"
-        https_proxy: "{{ https_proxy }}"
-      when: http_proxy is defined and https_proxy is defined
-
-    rescue:
-      - name: Yum failed to update, let's clean yum
-        shell: 'yum clean all'
-
-      - name: Update apigee-service if upgrade_edge is set as part of an upgrade
-        shell: "bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword='{{ apigee_repo_password }}' JAVA_FIX=C"
-        env:
-          JAVA_HOME: '{{ java_home }}'
-        when: upgrade_edge is defined and upgrade_edge | bool == True
-
-      - name: Install bootstrap from the provided apigee_repo_uri and apigee_repo_protocol
-        no_log: True
-        shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-        args:
-          creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-        env:
-          JAVA_HOME: '{{ java_home }}'
-        failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-        when: apigee_stage is not defined
-
-      - name: Install bootstrap from development repositories
-        no_log: True
-        shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeestage={{ apigee_stage }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
-        args:
-          creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
-        env:
-          JAVA_HOME: '{{ java_home }}'
-        failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
-        when: apigee_stage is defined
-
+- include: install-online.yml
   when: archive_folder is not defined
 
-- block:
-  - name: Install bootstrap from local repository for 4.16.01
-    no_log: True
-    shell: "bash {{ archive_folder }}/repos/bootstrap.sh apigeeprotocol='file://' apigeerepobasepath={{ archive_folder }}/repos JAVA_FIX=C"
-    env:
-      JAVA_HOME: '{{ java_home }}'
-    when: opdk_version | version_compare('4.16.01', '==')
-
-  - name: Install bootstrap from local repository for greater than 4.16.01
-    no_log: True
-    shell: "bash {{ archive_folder }}/repos/bootstrap_{{ opdk_version }}.sh apigeeprotocol='file://' apigeerepobasepath={{ archive_folder }}/repos JAVA_FIX=C"
-    env:
-      JAVA_HOME: '{{ java_home }}'
-    when: opdk_version | version_compare('4.16.01', '>')
-
+- include: install-mirror.yml
   when: archive_folder is defined and not archive_folder == ''
 
 - name: Validate that apigee-service exists
diff --git a/tasks/online/download-bootstrap-with-no-proxy.yml b/tasks/online/download-bootstrap-with-no-proxy.yml
new file mode 100644
index 0000000..5743143
--- /dev/null
+++ b/tasks/online/download-bootstrap-with-no-proxy.yml
@@ -0,0 +1,11 @@
+---
+- name: Download bootstrap with no proxy use
+  no_log: True
+  bootstrap:
+    dest_dir: '{{ opdk_installer_path }}'
+    version: '{{ opdk_version }}'
+    url: '{{ apigee_repo_url }}'
+    user_name: '{{ apigee_repo_user }}'
+    password: '{{ apigee_repo_password }}'
+  register: results
+
diff --git a/tasks/online/download-bootstrap-with-proxy.yml b/tasks/online/download-bootstrap-with-proxy.yml
new file mode 100644
index 0000000..65c4b9e
--- /dev/null
+++ b/tasks/online/download-bootstrap-with-proxy.yml
@@ -0,0 +1,13 @@
+---
+- name: Download bootstrap with proxy
+  no_log: True
+  bootstrap:
+    dest_dir: '{{ opdk_installer_path }}'
+    version: '{{ opdk_version }}'
+    url: '{{ apigee_repo_url }}'
+    user_name: '{{ apigee_repo_user }}'
+    password: '{{ apigee_repo_password }}'
+  register: results
+  environment:
+    http_proxy: "{{ http_proxy }}"
+    https_proxy: "{{ https_proxy }}"
diff --git a/tasks/online/install-bootstrap-with-no-proxy.yml b/tasks/online/install-bootstrap-with-no-proxy.yml
new file mode 100644
index 0000000..d82a19b
--- /dev/null
+++ b/tasks/online/install-bootstrap-with-no-proxy.yml
@@ -0,0 +1,26 @@
+---
+- name: Update apigee-service if upgrade_edge is set as part of an upgrade
+  shell: "bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword='{{ apigee_repo_password }}' JAVA_FIX=C"
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  when: upgrade_edge is defined and upgrade_edge | bool == True
+
+- name: Install bootstrap from the provided apigee_repo_uri and apigee_repo_protocol with no proxy
+  shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
+  args:
+    creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
+  when: apigee_stage is not defined
+  register: results
+
+- name: Install bootstrap from development repositories with no proxy
+  shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeestage={{ apigee_stage }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
+  args:
+    creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
+  register: results
+  when: apigee_stage is defined
diff --git a/tasks/online/install-bootstrap-with-proxy.yml b/tasks/online/install-bootstrap-with-proxy.yml
new file mode 100644
index 0000000..e9758f3
--- /dev/null
+++ b/tasks/online/install-bootstrap-with-proxy.yml
@@ -0,0 +1,35 @@
+---
+- name: Update apigee-service if upgrade_edge is set as part of an upgrade with proxy
+  shell: "bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword='{{ apigee_repo_password }}' JAVA_FIX=C"
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  when: upgrade_edge is defined and upgrade_edge | bool == True
+  environment:
+    http_proxy: "{{ http_proxy }}"
+    https_proxy: "{{ https_proxy }}"
+
+- name: Install bootstrap from the provided apigee_repo_uri and apigee_repo_protocol with proxy
+  shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
+  args:
+    creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
+  register: results
+  when: apigee_stage is not defined
+  environment:
+    http_proxy: "{{ http_proxy }}"
+    https_proxy: "{{ https_proxy }}"
+
+- name: Install bootstrap from development repositories with proxy
+  shell: 'bash {{ bootstrap_script }} apigeeuser={{ apigee_repo_user }} apigeepassword={{ apigee_repo_password }} apigeestage={{ apigee_stage }} apigeerepohost={{ apigee_repo_uri }} apigeeprotocol={{ apigee_repo_protocol }}:// JAVA_FIX=C'
+  args:
+    creates: '{{ apigee_installation_home }}/apigee-service/bin/apigee-service'
+  env:
+    JAVA_HOME: '{{ java_home }}'
+  failed_when: results is defined and results.rc is defined and results.rc > 0 or results | failed
+  register: results
+  when: apigee_stage is defined
+  environment:
+    http_proxy: "{{ http_proxy }}"
+    https_proxy: "{{ https_proxy }}"