Files
dc-deployments-automation/roles/product_install/tasks/jira-servicedesk_as_obr.yml
2022-06-14 16:35:55 +10:00

211 lines
6.8 KiB
YAML

---
- name: Check for alternate obr download url
set_fact:
atl_source_obr_from_marketplace: false
atl_source_obr_from_url: true
when:
- atl_obr_download_url is defined
- name: Source jira-servicedesk obr from marketplace
block:
- name: 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: Show the returned build number
debug:
msg="buildNumber={{ atl_product_version_info.json.buildNumber }}"
- name: 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: Show the returned obr binary href
debug:
msg="obr_ref={{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}"
- name: Set atl_obr_download_url
set_fact:
atl_obr_download_url: "{{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}"
- name: Show the obr filename
debug:
msg="obr_name=jira-servicedesk-application-{{ atl_jsd_build_info.json.name }}.obr"
- name: Set the obr filename
set_fact:
atl_obr_filename: "jira-servicedesk-application-{{ atl_jsd_build_info.json.name }}.obr"
when:
- atl_source_obr_from_marketplace
- name: Source jira-servicedesk obr from alternate url
block:
- name: Show the obr filename
debug:
msg="obr_name={{ atl_obr_download_url | basename }}"
- name: Set the obr filename
set_fact:
atl_obr_filename: "{{ atl_obr_download_url | basename }}"
when:
- atl_source_obr_from_url
- 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_info.json.name }}.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_info.json.name }}-*.jar"
when: obr_unpack.changed