--- - name: Check for alternate obr download url set_fact: atl_source_obr_from_marketplace: false when: - atl_obr_download_url is defined - name: Source jira-servicedesk obr from marketplace block: - name: Marketplace OBR - Get the installer product version info uri: url: "{{ atl_mpac_products }}/key/jira/versions/name/{{ atl_product_version }}" return_content: yes register: atl_product_version_info - name: Marketplace OBR - Show the returned build number debug: msg="buildNumber={{ atl_product_version_info.json.buildNumber }}" - name: Marketplace OBR - Get the JSD build version info uri: url: "{{ atl_mpac_products }}/key/jira-servicedesk/versions/latest?application=\ jira&applicationBuild={{ atl_product_version_info.json.buildNumber }}" return_content: yes register: atl_jsd_build_info - name: Marketplace OBR - Show the returned obr binary href debug: msg="obr_ref={{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}" - name: Marketplace OBR - Set atl_obr_download_url set_fact: atl_obr_download_url: "{{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}" - name: Marketplace OBR - Set atl_jsd_build set_fact: atl_jsd_build: "{{ atl_jsd_build_info.json.name }}" - name: Marketplace OBR - Show the obr filename debug: msg="obr_name=jira-servicedesk-application-{{ atl_jsd_build }}.obr" - name: Marketplace OBR - Set the obr filename set_fact: atl_obr_filename: "jira-servicedesk-application-{{ atl_jsd_build }}.obr" when: - atl_source_obr_from_marketplace | bool - name: Source jira-servicedesk obr from alternate url block: - name: Alternate URL OBR - Show the obr filename debug: msg="obr_name={{ atl_obr_download_url | basename }}" - name: Alternate URL OBR - Set the obr filename set_fact: atl_obr_filename: "{{ atl_obr_download_url | basename }}" - name: Alternate URL OBR - Show atl_jsd_build (manual) debug: msg="atl_jsd_build={{ atl_jsd_build }}" when: - not atl_source_obr_from_marketplace | bool - name: is shared_home set ? debug: msg="atl_product_home_shared_download_dir={{ atl_product_home_shared_download_dir }}" # For the first run a temp obr should be downloaded but moved to # shared home to ensure all subsequent nodes have access # to the same specific version binary. # To prevent a race condition with multiple downloads at the same time # a directory is used as a lockfile (atomic operation) when moving obr. - name: Set assumptions to avoid race condition set_fact: download_obr: true move_obr: false atl_obr_download: "{{ atl_installer_temp }}/{{ atl_obr_filename }}" atl_obr_shared_download: "{{ atl_product_home_shared_download_dir }}/{{ atl_obr_filename }}" atl_obr_moving_lock: "{{ atl_product_home_shared_download_dir }}/{{ atl_obr_filename }}_moving" atl_obr_completed_lock: "{{ atl_product_home_shared_download_dir }}/{{ atl_obr_filename }}_completed" # Check for pre-downloaded obr on shared_home and completed lock dir. - name: Check for completed lock directory stat: path: "{{ atl_obr_completed_lock }}" register: completed_lock - name: Check for obr in home_shared stat: path: "{{ atl_obr_shared_download }}" register: home_shared_download # If obr exists and lockdir exists use this obr instead - name: Check lock directory and obr exists on shared_home set_fact: download_obr: false atl_obr_download: "{{ atl_obr_shared_download }}" when: - home_shared_download.stat.exists - completed_lock.stat.isdir is defined - completed_lock.stat.isdir # Fetch obr if required - name: download_obr is true so fetch and do all the things block: # Fetch obr and copy to temp - name: Fetch obr get_url: url: "{{ atl_obr_download_url }}" dest: "{{ atl_obr_download }}" mode: 0755 force: false register: atl_obr_completed # If obr was fetched make the lock directory - name: Create moving_lock. file: path: "{{ atl_obr_moving_lock }}" state: directory when: - atl_obr_completed is succeeded register: moving_lock_created # Directory lock was created by this run? # If so, then set a fact intending to move obr - name: Move obr Scenario - lock created by this run set_fact: move_obr: true when: - moving_lock_created is succeeded - moving_lock_created.changed # Otherwise directory lock was either already created or # could not be created. Fall back is to continue and install from temp when: download_obr # If the intention is to move obr to home_shared - name: Move obr to home_shared block: - name: Copy temp installer to home_shared copy: src: "{{ atl_obr_download }}" dest: "{{ atl_obr_shared_download }}" remote_src: true register: copied - name: Create completed_lock once obr downloaded and copied file: path: "{{ atl_obr_completed_lock }}" state: directory when: copied is succeeded register: completed_lock_created - name: Remove moving_lock to show that obr is completed file: path: "{{ atl_obr_moving_lock }}" state: absent when: - completed_lock_created is succeeded - copied is succeeded register: moving_lock_removed - name: Delete old temp installer file: path: "{{ atl_obr_download }}" state: absent when: moving_lock_removed is succeeded register: temp_deleted - name: Set install to home_shared location set_fact: atl_obr_download: "{{ atl_obr_shared_download }}" when: temp_deleted is succeeded when: move_obr # At this point the binary is in {{ atl_obr_download }} # (which is either on home_shared or temp) - name: Ensure instaled-plugins dir exists file: path: "{{ atl_product_home_shared }}/plugins/installed-plugins" state: directory mode: 0750 owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" # Note as ansible unarchive cant handle "-j junk paths" we need to ignore errors to bypass the path verify - name: Unpack the obr into the installed-plugins dir unarchive: remote_src: true src: "{{ atl_obr_download }}" dest: "{{ atl_product_home_shared }}/plugins/installed-plugins" creates: "{{ atl_product_home_shared }}/plugins/installed-plugins/jira-servicedesk-application-{{ atl_jsd_build }}.jar" list_files: no exclude: - M* owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" mode: 0750 register: obr_unpack ignore_errors: yes - name: Move JSD dependency jars into the installed-plugins dir # noqa 503 - ignore lint info about when changed shell: cmd: "mv {{ atl_product_home_shared }}/plugins/installed-plugins/dependencies/*.jar {{ atl_product_home_shared }}/plugins/installed-plugins" creates: "{{ atl_product_home_shared }}/plugins/installed-plugins/servicedesk-core-ui-plugin-{{ atl_jsd_build }}-*.jar" when: obr_unpack.changed