mirror of
https://github.com/ZwareBear/awx.git
synced 2026-04-30 11:51:48 -05:00
"check" runs check out the version that is saved in the database, so for git repos, any subsequent "checkout" run on the same node would always report that we have the proper version, and we would not properly force a role update when requiremets.yml changes. Also, don't use `scm_result` for all SCMs, as the skipped tasks will overwrite earlier `scm_result` variables.
157 lines
5.1 KiB
YAML
157 lines
5.1 KiB
YAML
---
|
|
# The following variables will be set by the runner of this playbook:
|
|
# project_path: PROJECTS_DIR/_local_path_
|
|
# scm_type: git|hg|svn|insights
|
|
# scm_url: https://server/repo
|
|
# insights_url: Insights service URL (from configuration)
|
|
# scm_branch: branch/tag/revision (HEAD if unset)
|
|
# scm_clean: true/false
|
|
# scm_delete_on_update: true/false
|
|
# scm_full_checkout: true (if for a job template run), false (if retrieving revision)
|
|
# scm_username: username (only for svn/insights)
|
|
# scm_password: password (only for svn/insights)
|
|
# scm_accept_hostkey: true/false (only for git, set automatically)
|
|
# scm_revision: current revision in tower
|
|
# scm_revision_output: where to store gathered revision (temporary file)
|
|
# roles_enabled: Allow us to pull roles from a requirements.yml file
|
|
|
|
- hosts: all
|
|
connection: local
|
|
gather_facts: false
|
|
tasks:
|
|
|
|
- name: delete project directory before update
|
|
file:
|
|
path: "{{project_path|quote}}"
|
|
state: absent
|
|
when: scm_delete_on_update|default('')
|
|
|
|
- block:
|
|
- name: check repo using git
|
|
git:
|
|
dest: "{{project_path|quote}}"
|
|
repo: "{{scm_url}}"
|
|
version: "{{scm_branch|quote}}"
|
|
force: "{{scm_clean}}"
|
|
update: false
|
|
clone: false
|
|
register: repo_check
|
|
when: scm_full_checkout|default('')
|
|
ignore_errors: true
|
|
|
|
- name: break if already checked out
|
|
meta: end_play
|
|
when: scm_full_checkout|default('') and repo_check is succeeded and repo_check.before == scm_branch
|
|
|
|
- name: update project using git
|
|
git:
|
|
dest: "{{project_path|quote}}"
|
|
repo: "{{scm_url}}"
|
|
version: "{{scm_branch|quote}}"
|
|
force: "{{scm_clean}}"
|
|
accept_hostkey: "{{scm_accept_hostkey|default(omit)}}"
|
|
register: git_result
|
|
|
|
- name: Set the git repository version
|
|
set_fact:
|
|
scm_version: "{{ git_result['after'] }}"
|
|
when: "'after' in git_result"
|
|
when: scm_type == 'git'
|
|
|
|
- block:
|
|
- name: update project using hg
|
|
hg:
|
|
dest: "{{project_path|quote}}"
|
|
repo: "{{scm_url|quote}}"
|
|
revision: "{{scm_branch|quote}}"
|
|
force: "{{scm_clean}}"
|
|
register: hg_result
|
|
|
|
- name: Set the hg repository version
|
|
set_fact:
|
|
scm_version: "{{ hg_result['after'] }}"
|
|
when: "'after' in hg_result"
|
|
|
|
- name: parse hg version string properly
|
|
set_fact:
|
|
scm_version: "{{scm_version|regex_replace('^([A-Za-z0-9]+).*$', '\\1')}}"
|
|
when: scm_type == 'hg'
|
|
|
|
- block:
|
|
- name: update project using svn
|
|
subversion:
|
|
dest: "{{project_path|quote}}"
|
|
repo: "{{scm_url|quote}}"
|
|
revision: "{{scm_branch|quote}}"
|
|
force: "{{scm_clean}}"
|
|
username: "{{scm_username|default(omit)}}"
|
|
password: "{{scm_password|default(omit)}}"
|
|
register: svn_result
|
|
|
|
- name: Set the svn repository version
|
|
set_fact:
|
|
scm_version: "{{ svn_result['after'] }}"
|
|
when: "'after' in svn_result"
|
|
|
|
- name: parse subversion version string properly
|
|
set_fact:
|
|
scm_version: "{{scm_version|regex_replace('^.*Revision: ([0-9]+).*$', '\\1')}}"
|
|
when: scm_type == 'svn'
|
|
|
|
- block:
|
|
- name: Ensure the project directory is present
|
|
file:
|
|
dest: "{{project_path|quote}}"
|
|
state: directory
|
|
|
|
- name: Fetch Insights Playbook(s)
|
|
insights:
|
|
insights_url: "{{insights_url}}"
|
|
username: "{{scm_username}}"
|
|
password: "{{scm_password}}"
|
|
project_path: "{{project_path}}"
|
|
register: results
|
|
|
|
- name: Save Insights Version
|
|
set_fact:
|
|
scm_version: "{{results.version}}"
|
|
when: results is defined
|
|
when: scm_type == 'insights'
|
|
|
|
|
|
- name: Repository Version
|
|
debug: msg="Repository Version {{ scm_version }}"
|
|
when: scm_version is defined
|
|
|
|
- name: Write Repository Version
|
|
copy:
|
|
dest: "{{ scm_revision_output }}"
|
|
content: "{{ scm_version }}"
|
|
when: scm_version is defined and scm_revision_output is defined
|
|
|
|
- hosts: all
|
|
connection: local
|
|
gather_facts: false
|
|
tasks:
|
|
|
|
- block:
|
|
- name: detect requirements.yml
|
|
stat: path={{project_path|quote}}/roles/requirements.yml
|
|
register: doesRequirementsExist
|
|
|
|
- name: fetch galaxy roles from requirements.yml
|
|
command: ansible-galaxy install -r requirements.yml -p {{project_path|quote}}/roles/
|
|
args:
|
|
chdir: "{{project_path|quote}}/roles"
|
|
register: galaxy_result
|
|
when: doesRequirementsExist.stat.exists and (scm_version is undefined or (git_result is defined and git_result['before'] == git_result['after']))
|
|
changed_when: "'was installed successfully' in galaxy_result.stdout"
|
|
|
|
- name: fetch galaxy roles from requirements.yml (forced update)
|
|
command: ansible-galaxy install -r requirements.yml -p {{project_path|quote}}/roles/ --force
|
|
args:
|
|
chdir: "{{project_path|quote}}/roles"
|
|
when: doesRequirementsExist.stat.exists and galaxy_result is skipped
|
|
|
|
when: roles_enabled|bool
|