--- # Copyright 2015, Rackspace US, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Group repo servers by architecture hosts: repo_all # Serial 1 avoids race conditions, and makes sures the repo_servers # are added in the same order as the repo_all inventory serial: 1 tasks: - name: Group repo servers by architecture and os version group_by: key: repo_servers_{{ ansible_distribution_version }}_{{ ansible_architecture }} tags: - always - repo-build # Use the 'add_host' module to create the repo_masters group which consists of a # single host in each distribution/architecture combination. This ensures that # the repo build happens per architecture and per distribution, covering the needs # of each of these combinations when deploying. - name: Prepare group of master repo servers hosts: localhost tasks: - name: Prepare group of master repo servers add_host: name: "{{ groups[item][0] }}" groups: repo_masters with_items: "{{ groups | select('match', '^repo_servers_') | list }}" tags: - always - repo-build - name: Build new repo packages for a given release hosts: repo_masters gather_facts: "{{ osa_gather_facts | default(True) }}" any_errors_fatal: true user: root serial: 1 pre_tasks: - include: common-tasks/set-upper-constraints.yml - include: common-tasks/set-pip-upstream-url.yml - name: Load local packages debug: msg: "Loading Packages" with_py_pkgs: "{{ pkg_locations }}" register: local_packages tags: - always - name: Check if the git cache exists on deployment host local_action: module: stat path: "{{ repo_build_git_cache }}" register: _local_git_cache when: repo_build_git_cache is defined - name: Check if deployment host has the bind mount for the master repo container local_action: module: stat path: "{{ repo_build_git_bind_mount }}" register: _local_repo_bind_mount when: - inventory_hostname == groups['repo_all'][0] - _local_git_cache.stat is defined - _local_git_cache.stat.exists - name: Check if the repo container bind mount is empty local_action: command ls -1A {{ repo_build_git_bind_mount }} register: _local_repo_bind_mount_contents when: - _local_repo_bind_mount.stat is defined - _local_repo_bind_mount.stat.exists - not _local_repo_bind_mount.stat.islnk - name: Remove the bind mounted git directory so we can symlink the cache folder to replace it local_action: module: file path: "{{ repo_build_git_bind_mount }}" state: absent register: _local_repo_bind_mount_dir_remove when: - _local_repo_bind_mount.stat is defined - _local_repo_bind_mount.stat.exists - not _local_repo_bind_mount.stat.islnk - _local_repo_bind_mount_contents.stdout_lines | length == 0 - name: Symlink the git cache into the repo container bind mount local_action: module: file src: "{{ repo_build_git_cache }}" dest: "{{ repo_build_git_bind_mount }}" state: link when: - _local_git_cache.stat is defined - _local_git_cache.stat.exists - _local_repo_bind_mount.stat is defined - _local_repo_bind_mount.stat.exists - name: Synchronise the contents of the git cache to the repo server synchronize: src: "{{ repo_build_git_cache }}" dest: "{{ repo_build_git_dir }}" when: - _local_git_cache.stat is defined - _local_git_cache.stat.exists - _local_repo_bind_mount.stat is defined - not _local_repo_bind_mount.stat.exists roles: - role: "repo_build" vars_files: - defaults/repo_packages/openstack_services.yml environment: "{{ deployment_environment_variables | default({}) }}" tags: - repo-build