--- # 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 # awx_version: Current running version of the awx or tower as a string # awx_license_type: "open" for AWX; else presume Tower - hosts: all gather_facts: false tasks: - name: delete project directory before update file: path: "{{project_path|quote}}" state: absent when: scm_delete_on_update|default('') delegate_to: localhost - 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' delegate_to: localhost - 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' delegate_to: localhost - 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' delegate_to: localhost - 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 when: scm_type == 'insights' delegate_to: localhost - 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 delegate_to: localhost - hosts: all 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 delegate_to: localhost