![Jesse Pretorius](/assets/img/avatar_default.png)
When the upper constraints are not applied, the resulting build for the same tag may be different from one day to the next. This results in an inconsistent experience for deployers. This patch sets the upper constraints to be used by the following: - https://review.openstack.org/388159 (lxc hosts) - https://review.openstack.org/388072 (pip install) - https://review.openstack.org/388230 (keystone install) This is a pattern to establish across other roles. As some pip installs happen before the repo server is up a common set of tasks is added to a few of the plays to verify if there is a local copy of constraints available. If not it will then source the upstream constraints based on the OpenStack requirements SHA that's been pinned. Change-Id: I7ddd44be30c610609c1429147646dcb1d3e6ca59
123 lines
4.0 KiB
YAML
123 lines
4.0 KiB
YAML
---
|
|
# 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
|
|
tasks:
|
|
- name: Group repo servers by architecture
|
|
group_by:
|
|
key: repo_servers_{{ ansible_architecture }}
|
|
tags:
|
|
- always
|
|
tags:
|
|
- repo-build
|
|
|
|
# repo_all[0] is built last to ensure it has all build artifacts for final indexing
|
|
- name: Build new repo packages for a given release
|
|
hosts: repo_all[1:],repo_all[0]
|
|
gather_facts: "{{ gather_facts | default(True) }}"
|
|
user: root
|
|
serial: 1
|
|
pre_tasks:
|
|
|
|
- include: common-tasks/set-upper-constraints.yml
|
|
|
|
- name: Load local packages
|
|
debug:
|
|
msg: "Loading Packages"
|
|
when:
|
|
- "groups['repo_servers_{{ ansible_architecture }}'] | length > 0"
|
|
- "inventory_hostname == groups['repo_servers_{{ ansible_architecture }}'][0]"
|
|
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: shell
|
|
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"
|
|
repo_build_release_tag: "{{ openstack_release }}"
|
|
when:
|
|
- "groups['repo_servers_{{ ansible_architecture }}'] | length > 0"
|
|
- "inventory_hostname == groups['repo_servers_{{ ansible_architecture }}'][0]"
|
|
vars_files:
|
|
- defaults/repo_packages/openstack_services.yml
|
|
vars:
|
|
pkg_locations:
|
|
- ../
|
|
- /etc/ansible/roles
|
|
- /etc/openstack_deploy
|
|
tags:
|
|
- repo-build
|