openstack-ansible/tests/get-ansible-role-requirements.yml
Jesse Pretorius (odyssey4me) 4338a648d3 Revert "Async clone for git roles"
This reverts commit 7a1e46b2c5.

Tasks executed asynchronously do not implement retries
like normal tasks do. As the role clones are failing quite
often due to TLS failures we need the retries.

Change-Id: Iac4167a63387f645e91d4529218c9d2de87ea5a7
2017-12-15 18:11:36 +00:00

87 lines
3.3 KiB
YAML

---
# Copyright 2016, 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: Clone the role ansible-role-requirements
hosts: localhost
connection: local
user: root
tasks:
- name: Remove target directory if required
shell: |
if [[ ! -d "{{ item.path | default(role_path_default) }}/{{ item.name | default(item.src | basename) }}/.git" ]]; then
rm -rf "{{ item.path | default(role_path_default) }}/{{ item.name | default(item.src | basename) }}"
fi
args:
executable: /bin/bash
when:
- item.scm == "git" or item.scm is undefined
with_items: "{{ required_roles }}"
- name: Ensure the default roles directory exists
file:
path: "{{ role_path_default }}"
state: directory
- name: Use Zuul provided sources in Zuul environment
block:
- name: Check the Zuul src dir for cloned roles
stat:
path: "/home/zuul/src/{{ item.src.split('/')[-3:] | join('/') }}"
register: zuul_roles
when:
- item.scm == "git" or item.scm is undefined
with_items: "{{ required_roles }}"
- name: Link the Zuul provided roles
file:
src: "/home/zuul/src/{{ item.item.src.split('/')[-3:] | join('/') }}"
dest: "{{ item.item.path | default(role_path_default) }}/{{ item.item.name | default(item.item.src | basename) }}"
state: link
owner: root
group: root
with_items: "{{ zuul_roles.results
| selectattr('stat.exists')
| list }}"
when:
- "lookup('env', 'ZUUL_PROJECT') != ''"
- name: Clone git repos (with git)
git:
repo: "{{ item.src }}"
dest: "{{ item.path | default(role_path_default) }}/{{ item.name | default(item.src | basename) }}"
version: "{{ item.version | default('master') }}"
refspec: "{{ item.refspec | default(omit) }}"
depth: "{{ item.depth | default('10') }}"
update: true
force: true
when:
- item.scm == "git" or item.scm is undefined
with_items: "{{ (zuul_roles.results | default([]) |
selectattr('stat', 'defined') |
rejectattr('stat.exists') |
map(attribute='item') | list)
| default(required_roles, True) }}"
register: git_clone
until: git_clone | success
retries: "{{ git_clone_retries }}"
delay: "{{ git_clone_retry_delay }}"
vars:
ansible_python_interpreter: "/usr/bin/python"
required_roles: "{{ lookup('file', role_file) | from_yaml }}"
role_file: '../ansible-role-requirements.yml'
role_path_default: '/etc/ansible/roles'
git_clone_retries: 2
git_clone_retry_delay: 5