mirror of
https://bitbucket.org/atlassian/dc-deployments-automation.git
synced 2025-12-13 16:33:08 -06:00
ITOPSENG-164 Save the binary to shared home adding a locking mechanism to avoid potential race condition. This also allows downloading of old binaries once no longer available to download
This commit is contained in:
@@ -22,6 +22,10 @@ atl_product_download_filename: "{{ atl_download_edition | default(atl_product_ed
|
|||||||
atl_product_download: "{{ atl_installer_temp }}/{{ atl_product_download_filename }}"
|
atl_product_download: "{{ atl_installer_temp }}/{{ atl_product_download_filename }}"
|
||||||
atl_product_varfile: "{{ atl_installer_temp }}/{{ atl_product_family }}.varfile"
|
atl_product_varfile: "{{ atl_installer_temp }}/{{ atl_product_family }}.varfile"
|
||||||
|
|
||||||
|
atl_product_home_shared_download_dir: "{{ atl_product_home_shared }}/downloads"
|
||||||
|
atl_product_home_shared_download: "{{ atl_product_home_shared_download_dir }}/{{ atl_product_download_filename }}"
|
||||||
|
atl_product_home_shared_download_lockdir: "{{ atl_product_home_shared_download }}_downloaded"
|
||||||
|
|
||||||
atl_marketplace_base: "https://marketplace.atlassian.com"
|
atl_marketplace_base: "https://marketplace.atlassian.com"
|
||||||
atl_servicedesk_latest_url: "https://marketplace.atlassian.com/rest/2/products/key/jira-servicedesk/versions/latest"
|
atl_servicedesk_latest_url: "https://marketplace.atlassian.com/rest/2/products/key/jira-servicedesk/versions/latest"
|
||||||
atl_servicedesk_versioned_url: "https://marketplace.atlassian.com/rest/2/products/key/jira-servicedesk/versions/name/{{ atl_product_version }}"
|
atl_servicedesk_versioned_url: "https://marketplace.atlassian.com/rest/2/products/key/jira-servicedesk/versions/name/{{ atl_product_version }}"
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
- "{{ atl_product_home }}"
|
- "{{ atl_product_home }}"
|
||||||
- "{{ atl_product_installation_versioned }}"
|
- "{{ atl_product_installation_versioned }}"
|
||||||
- "{{ atl_product_version_cache_dir }}"
|
- "{{ atl_product_version_cache_dir }}"
|
||||||
|
- "{{ atl_product_home_shared_download_dir }}"
|
||||||
changed_when: false # For Molecule idempotence check
|
changed_when: false # For Molecule idempotence check
|
||||||
|
|
||||||
# At this point atl_product_version should be set, cache if necessary.
|
# At this point atl_product_version should be set, cache if necessary.
|
||||||
@@ -125,17 +126,75 @@
|
|||||||
dest: "{{ atl_product_version_cache }}"
|
dest: "{{ atl_product_version_cache }}"
|
||||||
force: true
|
force: true
|
||||||
|
|
||||||
|
# For the first run a temp binary 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).
|
||||||
|
|
||||||
# Note: We don't the cache binary in the shared drive to the complexity
|
- name: Assume temp binary should be downloaded
|
||||||
# around download race-conditions if multiple nodes are starting at
|
set_fact:
|
||||||
# the same time. When downloading from product-downloads.atlassian.com
|
download_binary: yes
|
||||||
# (which is a CDN) takes seconds anyway.
|
|
||||||
- name: Fetch product installer
|
# Check for product installer in home_shared and lockdir to determine if it needs to be downloaded again.
|
||||||
get_url:
|
- name: Check download lock directory exists
|
||||||
url: "{{ atl_product_download_url }}"
|
stat:
|
||||||
dest: "{{ atl_product_download }}"
|
path: "{{ atl_product_home_shared_download_lockdir }}"
|
||||||
mode: 0755
|
register: download_lockdir
|
||||||
force: false
|
|
||||||
|
- name: Check for presence of product installer in home_shared
|
||||||
|
stat:
|
||||||
|
path: "{{ atl_product_home_shared_download }}"
|
||||||
|
register: home_shared_downloaded
|
||||||
|
|
||||||
|
# If binary exists and lockdir exists use this binary instead
|
||||||
|
- name: Check Lock Directory and binary exists on shared_home
|
||||||
|
set_fact:
|
||||||
|
download_binary: no
|
||||||
|
when:
|
||||||
|
- home_shared_downloaded.stat.exists
|
||||||
|
- download_lockdir.stat.isdir is defined
|
||||||
|
- download_lockdir.stat.isdir
|
||||||
|
|
||||||
|
# If the binary was never installed, download it
|
||||||
|
- name: "Download product installer and move to shared directory"
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: Fetch product installer
|
||||||
|
get_url:
|
||||||
|
url: "{{ atl_product_download_url }}"
|
||||||
|
dest: "{{ atl_product_download }}"
|
||||||
|
mode: 0755
|
||||||
|
force: false
|
||||||
|
register: atl_product_downloaded
|
||||||
|
|
||||||
|
- name: Remove lockdir to prevent nodes relying on binary when copying
|
||||||
|
file:
|
||||||
|
path: "{{ atl_product_home_shared_download_lockdir }}"
|
||||||
|
state: absent
|
||||||
|
when: atl_product_downloaded is succeeded
|
||||||
|
register: lockdir_removed
|
||||||
|
|
||||||
|
- name: Copy temp installer to home_shared
|
||||||
|
copy:
|
||||||
|
src: "{{ atl_product_download }}"
|
||||||
|
dest: "{{ atl_product_home_shared_download }}"
|
||||||
|
remote_src: yes
|
||||||
|
when: lockdir_removed is succeeded
|
||||||
|
register: copied
|
||||||
|
|
||||||
|
- name: Delete old temp installer
|
||||||
|
file:
|
||||||
|
path: "{{ atl_product_download }}"
|
||||||
|
state: absent
|
||||||
|
when: copied is succeeded
|
||||||
|
register: temp_deleted
|
||||||
|
|
||||||
|
- name: Create lockdir once product installer downloaded and moved
|
||||||
|
file:
|
||||||
|
path: "{{ atl_product_home_shared_download_lockdir }}"
|
||||||
|
state: directory
|
||||||
|
when: temp_deleted is succeeded
|
||||||
|
|
||||||
|
when: download_binary
|
||||||
|
|
||||||
- name: Unpack the downloaded application depending on format
|
- name: Unpack the downloaded application depending on format
|
||||||
include_tasks: "unpack_{{ atl_download_format }}.yml"
|
include_tasks: "unpack_{{ atl_download_format }}.yml"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
# will create 'jira1'; this potentially creates idempotency/upgrade
|
# will create 'jira1'; this potentially creates idempotency/upgrade
|
||||||
# issues down the line.
|
# issues down the line.
|
||||||
- name: Run the installer
|
- name: Run the installer
|
||||||
command: /bin/sh "{{ atl_product_download }}" -q -varfile "{{ atl_product_varfile }}"
|
command: /bin/sh "{{ atl_product_home_shared_download }}" -q -varfile "{{ atl_product_varfile }}"
|
||||||
args:
|
args:
|
||||||
creates: "{{ atl_product_installation_versioned }}/.install4j/"
|
creates: "{{ atl_product_installation_versioned }}/.install4j/"
|
||||||
become: true
|
become: true
|
||||||
|
|||||||
Reference in New Issue
Block a user