diff --git a/awx/playbooks/project_update.yml b/awx/playbooks/project_update.yml index 125b5ef312..2067e76043 100644 --- a/awx/playbooks/project_update.yml +++ b/awx/playbooks/project_update.yml @@ -25,47 +25,42 @@ connection: local name: Update source tree if necessary tasks: - - name: Delete project directory before update - ansible.builtin.shell: set -o pipefail && find . -delete -print | tail -2 # volume mounted, cannot delete folder itself - register: reg - changed_when: reg.stdout_lines | length > 1 + + - name: delete project directory before update + command: "find -delete" # volume mounted, cannot delete folder itself args: chdir: "{{ project_path }}" tags: - delete - - name: Update project using git - tags: - - update_git - block: - - name: Update project using git - ansible.builtin.git: - dest: "{{ project_path | quote }}" - repo: "{{ scm_url }}" - version: "{{ scm_branch | quote }}" - refspec: "{{ scm_refspec | default(omit) }}" - force: "{{ scm_clean }}" - track_submodules: "{{ scm_track_submodules | default(omit) }}" - accept_hostkey: "{{ scm_accept_hostkey | default(omit) }}" + - 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}}" + track_submodules: "{{scm_track_submodules|default(omit)}}" + accept_hostkey: "{{scm_accept_hostkey|default(omit)}}" register: git_result - name: Set the git repository version - ansible.builtin.set_fact: + set_fact: scm_version: "{{ git_result['after'] }}" when: "'after' in git_result" - - - name: Update project using svn tags: - - update_svn - block: - - name: Update project using svn - ansible.builtin.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) }}" + - 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)}}" # must be in_place because folder pre-existing, because it is mounted in_place: true environment: @@ -73,90 +68,85 @@ register: svn_result - name: Set the svn repository version - ansible.builtin.set_fact: + set_fact: scm_version: "{{ svn_result['after'] }}" when: "'after' in svn_result" - - name: Parse subversion version string properly - ansible.builtin.set_fact: - scm_version: "{{ scm_version | regex_replace('^.*Revision: ([0-9]+).*$', '\\1') }}" - - - - name: Project update for Insights + - name: parse subversion version string properly + set_fact: + scm_version: "{{scm_version|regex_replace('^.*Revision: ([0-9]+).*$', '\\1')}}" tags: - - update_insights - block: + - update_svn + + - block: - name: Ensure the project directory is present - ansible.builtin.file: - dest: "{{ project_path | quote }}" + file: + dest: "{{project_path|quote}}" state: directory - mode: '0755' - 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 }}" + 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 - ansible.builtin.set_fact: - scm_version: "{{ results.version }}" + set_fact: + scm_version: "{{results.version}}" when: results is defined - - - - name: Update project using archive tags: - - update_archive - block: + - update_insights + + - block: - name: Ensure the project archive directory is present - ansible.builtin.file: - dest: "{{ project_path | quote }}/.archive" + file: + dest: "{{ project_path|quote }}/.archive" state: directory - mode: '0755' - name: Get archive from url - ansible.builtin.get_url: - url: "{{ scm_url | quote }}" - dest: "{{ project_path | quote }}/.archive/" - url_username: "{{ scm_username | default(omit) }}" - url_password: "{{ scm_password | default(omit) }}" + 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 - mode: '0755' register: get_archive - name: Unpack archive project_archive: src: "{{ get_archive.dest }}" - project_path: "{{ project_path | quote }}" + project_path: "{{ project_path|quote }}" force: "{{ scm_clean }}" when: get_archive.changed or scm_clean register: unarchived - name: Find previous archives - ansible.builtin.find: - paths: "{{ project_path | quote }}/.archive/" + find: + paths: "{{ project_path|quote }}/.archive/" excludes: - - "{{ get_archive.dest | basename }}" + - "{{ get_archive.dest|basename }}" when: unarchived.changed register: previous_archive - name: Remove previous archives - ansible.builtin.file: + file: path: "{{ item.path }}" state: absent loop: "{{ previous_archive.files }}" - when: previous_archive.files | default([]) + when: previous_archive.files|default([]) - name: Set scm_version to archive sha1 checksum - ansible.builtin.set_fact: + set_fact: scm_version: "{{ get_archive.checksum_src }}" + tags: + - update_archive - name: Repository Version - ansible.builtin.debug: + debug: msg: "Repository Version {{ scm_version }}" tags: - update_git @@ -193,59 +183,60 @@ additional_collections_env: # These environment variables are used for installing collections, in addition to galaxy_task_env # setting the collections paths silences warnings - ANSIBLE_COLLECTIONS_PATHS: "{{ projects_root }}/.__awx_cache/{{ local_path }}/stage/requirements_collections" + ANSIBLE_COLLECTIONS_PATHS: "{{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_collections" # Put the local tmp directory in same volume as collection destination # otherwise, files cannot be moved accross volumes and will cause error - ANSIBLE_LOCAL_TEMP: "{{ projects_root }}/.__awx_cache/{{ local_path }}/stage/tmp" + ANSIBLE_LOCAL_TEMP: "{{projects_root}}/.__awx_cache/{{local_path}}/stage/tmp" tasks: + - name: Check content sync settings - when: not roles_enabled | bool and not collections_enabled | bool - tags: - - install_roles - - install_collections block: - - name: Warn about disabled content sync - ansible.builtin.debug: + - debug: msg: > Collection and role syncing disabled. Check the AWX_ROLES_ENABLED and AWX_COLLECTIONS_ENABLED settings and Galaxy credentials on the project's organization. - - name: End play due to disabled content sync - ansible.builtin.meta: end_play - - name: Fetch galaxy roles from requirements.(yml/yaml) - ansible.builtin.command: > + - meta: end_play + + when: not roles_enabled|bool and not collections_enabled|bool + tags: + - install_roles + - install_collections + + - name: fetch galaxy roles from requirements.(yml/yaml) + command: > ansible-galaxy role install -r {{ item }} - --roles-path {{ projects_root }}/.__awx_cache/{{ local_path }}/stage/requirements_roles + --roles-path {{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_roles {{ ' -' + 'v' * ansible_verbosity if ansible_verbosity else '' }} args: - chdir: "{{ project_path | quote }}" + chdir: "{{project_path|quote}}" register: galaxy_result with_fileglob: - - "{{ project_path | quote }}/roles/requirements.yaml" - - "{{ project_path | quote }}/roles/requirements.yml" + - "{{project_path|quote}}/roles/requirements.yaml" + - "{{project_path|quote}}/roles/requirements.yml" changed_when: "'was installed successfully' in galaxy_result.stdout" environment: "{{ galaxy_task_env }}" - when: roles_enabled | bool + when: roles_enabled|bool tags: - install_roles - - name: Fetch galaxy collections from collections/requirements.(yml/yaml) - ansible.builtin.command: > + - name: fetch galaxy collections from collections/requirements.(yml/yaml) + command: > ansible-galaxy collection install -r {{ item }} - --collections-path {{ projects_root }}/.__awx_cache/{{ local_path }}/stage/requirements_collections + --collections-path {{projects_root}}/.__awx_cache/{{local_path}}/stage/requirements_collections {{ ' -' + 'v' * ansible_verbosity if ansible_verbosity else '' }} args: - chdir: "{{ project_path | quote }}" + chdir: "{{project_path|quote}}" register: galaxy_collection_result with_fileglob: - - "{{ project_path | quote }}/collections/requirements.yaml" - - "{{ project_path | quote }}/collections/requirements.yml" - - "{{ project_path | quote }}/requirements.yaml" - - "{{ project_path | quote }}/requirements.yml" + - "{{project_path|quote}}/collections/requirements.yaml" + - "{{project_path|quote}}/collections/requirements.yml" + - "{{project_path|quote}}/requirements.yaml" + - "{{project_path|quote}}/requirements.yml" changed_when: "'Installing ' in galaxy_collection_result.stdout" environment: "{{ additional_collections_env | combine(galaxy_task_env) }}" when: - "ansible_version.full is version_compare('2.9', '>=')" - - collections_enabled | bool + - collections_enabled|bool tags: - install_collections