
We are creating the proper groups, assigning hosts to the proper groups, but then we are not creating the group of the master servers properly, because only the nodes that look like the localhost would be matching the when clause. Change-Id: I99d279dae5dc3f73b3a337ed70e25877a8995cc0
138 lines
4.5 KiB
YAML
138 lines
4.5 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
|
|
# 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
|
|
when:
|
|
- "item.find('repo_servers_') != -1"
|
|
with_items: "{{ groups }}"
|
|
tags:
|
|
- always
|
|
- repo-build
|
|
|
|
- name: Build new repo packages for a given release
|
|
hosts: repo_masters
|
|
gather_facts: "{{ 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
|
|
vars:
|
|
pkg_locations:
|
|
- "{{ playbook_dir }}/../"
|
|
- /etc/ansible/roles
|
|
- /etc/openstack_deploy
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- repo-build
|