215 lines
7.3 KiB
YAML
215 lines
7.3 KiB
YAML
---
|
|
# The following variables will be set by the runner of this playbook:
|
|
# projects_root: Global location for caching project checkouts and roles and collections
|
|
# should not have trailing slash on end
|
|
# local_path: Path within projects_root to use for this project
|
|
# project_path: A simple join of projects_root/local_path folders
|
|
# 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_username: username (only for svn/insights)
|
|
# scm_password: password (only for svn/insights)
|
|
# scm_accept_hostkey: true/false (only for git, set automatically)
|
|
# scm_refspec: a refspec to fetch in addition to obtaining version
|
|
# roles_enabled: Value of the global setting to enable roles downloading
|
|
# collections_enabled: Value of the global setting to enable collections downloading
|
|
# awx_version: Current running version of the awx or tower as a string
|
|
# awx_license_type: "open" for AWX; else presume Tower
|
|
|
|
- hosts: localhost
|
|
gather_facts: false
|
|
connection: local
|
|
name: Update source tree if necessary
|
|
tasks:
|
|
|
|
- name: delete project directory before update
|
|
file:
|
|
path: "{{project_path|quote}}"
|
|
state: absent
|
|
tags:
|
|
- delete
|
|
|
|
- block:
|
|
- name: update project using git
|
|
git:
|
|
dest: "{{project_path|quote}}"
|
|
repo: "{{scm_url}}"
|
|
version: "{{scm_branch|quote}}"
|
|
refspec: "{{scm_refspec|default(omit)}}"
|
|
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"
|
|
tags:
|
|
- update_git
|
|
|
|
- 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)}}"
|
|
environment:
|
|
LC_ALL: 'en_US.UTF-8'
|
|
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')}}"
|
|
tags:
|
|
- update_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}}"
|
|
awx_license_type: "{{awx_license_type}}"
|
|
awx_version: "{{awx_version}}"
|
|
register: results
|
|
|
|
- name: Save Insights Version
|
|
set_fact:
|
|
scm_version: "{{results.version}}"
|
|
when: results is defined
|
|
tags:
|
|
- update_insights
|
|
|
|
- block:
|
|
- name: Ensure the project archive directory is present
|
|
file:
|
|
dest: "{{ project_path|quote }}/.archive"
|
|
state: directory
|
|
|
|
- name: Get archive from url
|
|
get_url:
|
|
url: "{{ scm_url|quote }}"
|
|
dest: "{{ project_path|quote }}/.archive/"
|
|
url_username: "{{ scm_username|default(omit) }}"
|
|
url_password: "{{ scm_password|default(omit) }}"
|
|
force_basic_auth: true
|
|
register: get_archive
|
|
|
|
- name: Unpack archive
|
|
project_archive:
|
|
src: "{{ get_archive.dest }}"
|
|
project_path: "{{ project_path|quote }}"
|
|
force: "{{ scm_clean }}"
|
|
when: get_archive.changed or scm_clean
|
|
register: unarchived
|
|
|
|
- name: Find previous archives
|
|
find:
|
|
paths: "{{ project_path|quote }}/.archive/"
|
|
excludes:
|
|
- "{{ get_archive.dest|basename }}"
|
|
when: unarchived.changed
|
|
register: previous_archive
|
|
|
|
- name: Remove previous archives
|
|
file:
|
|
path: "{{ item.path }}"
|
|
state: absent
|
|
loop: "{{ previous_archive.files }}"
|
|
when: previous_archive.files|default([])
|
|
|
|
- name: Set scm_version to archive sha1 checksum
|
|
set_fact:
|
|
scm_version: "{{ get_archive.checksum_src }}"
|
|
tags:
|
|
- update_archive
|
|
|
|
- name: Repository Version
|
|
debug:
|
|
msg: "Repository Version {{ scm_version }}"
|
|
tags:
|
|
- update_git
|
|
- update_svn
|
|
- update_insights
|
|
- update_archive
|
|
|
|
- hosts: localhost
|
|
gather_facts: false
|
|
connection: local
|
|
name: Install content with ansible-galaxy command if necessary
|
|
vars:
|
|
yaml_exts:
|
|
- {ext: .yml}
|
|
- {ext: .yaml}
|
|
tasks:
|
|
|
|
- block:
|
|
- name: detect roles/requirements.(yml/yaml)
|
|
stat:
|
|
path: "{{project_path|quote}}/roles/requirements{{ item.ext }}"
|
|
with_items: "{{ yaml_exts }}"
|
|
register: doesRequirementsExist
|
|
|
|
- name: fetch galaxy roles from requirements.(yml/yaml)
|
|
command: >
|
|
ansible-galaxy role install -r {{ item.stat.path }}
|
|
--roles-path {{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_roles
|
|
{{ ' -' + 'v' * ansible_verbosity if ansible_verbosity else '' }}
|
|
args:
|
|
chdir: "{{project_path|quote}}"
|
|
register: galaxy_result
|
|
with_items: "{{ doesRequirementsExist.results }}"
|
|
when: item.stat.exists
|
|
changed_when: "'was installed successfully' in galaxy_result.stdout"
|
|
environment:
|
|
ANSIBLE_FORCE_COLOR: false
|
|
GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no"
|
|
|
|
when: roles_enabled|bool
|
|
tags:
|
|
- install_roles
|
|
|
|
- block:
|
|
- name: detect collections/requirements.(yml/yaml)
|
|
stat:
|
|
path: "{{project_path|quote}}/collections/requirements{{ item.ext }}"
|
|
with_items: "{{ yaml_exts }}"
|
|
register: doesCollectionRequirementsExist
|
|
|
|
- name: fetch galaxy collections from collections/requirements.(yml/yaml)
|
|
command: >
|
|
ansible-galaxy collection install -r {{ item.stat.path }}
|
|
--collections-path {{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_collections
|
|
{{ ' -' + 'v' * ansible_verbosity if ansible_verbosity else '' }}
|
|
args:
|
|
chdir: "{{project_path|quote}}"
|
|
register: galaxy_collection_result
|
|
with_items: "{{ doesCollectionRequirementsExist.results }}"
|
|
when: item.stat.exists
|
|
changed_when: "'Installing ' in galaxy_collection_result.stdout"
|
|
environment:
|
|
ANSIBLE_FORCE_COLOR: false
|
|
ANSIBLE_COLLECTIONS_PATHS: "{{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_collections"
|
|
GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no"
|
|
|
|
when:
|
|
- "ansible_version.full is version_compare('2.9', '>=')"
|
|
- collections_enabled|bool
|
|
tags:
|
|
- install_collections
|