Ensure that repo checks use the right values

When executing the check for the appropriate files on
the repo host and then overriding the group_vars to
cater for when the repo is not present, we need to make
sure that we're doing the checks against the right URL.

In this patch we backup the default URL so that it can
be used when re-executing the check later in the same
playbook.

Also, given that the set-pip-upstream-url.yml and
set-upper-constraints.yml task sets are always used
together, we combine them into one task set.

Depends-On: https://review.openstack.org/563578
Change-Id: I040c4f5b6e96c85c68beb975f7b80d1edf42276d
This commit is contained in:
Jesse Pretorius 2018-04-23 10:51:44 +01:00 committed by Jesse Pretorius (odyssey4me)
parent be3d4bb3b3
commit 792c753354
9 changed files with 119 additions and 131 deletions

View File

@ -1,40 +0,0 @@
---
# 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.
# This set of tasks checks whether the repo is up yet. If it is it
# will use the get-pip.py script available there. If it is not yet
# up, then it will use the standard upstream get-pip.py script URL.
- name: Test internal repo URL for the current get-pip.py script
uri:
url: "{{ pip_upstream_url }}"
method: "HEAD"
timeout: 3
register: _repo_data_check
failed_when: false
when: pip_upstream_url != "https://bootstrap.pypa.io/get-pip.py"
tags:
- common-pip
# If we can't reach the internal repo, we need to ensure
# pip isn't locked to it.
- name: Set pip upstream URL
set_fact:
pip_upstream_url: "https://bootstrap.pypa.io/get-pip.py"
when:
- pip_upstream_url != "https://bootstrap.pypa.io/get-pip.py"
- (_repo_data_check.status | default(503)) != 200
tags:
- common-pip

View File

@ -0,0 +1,113 @@
---
# 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.
# This set of tasks checks whether the repo is up yet. If it is it
# will use it as the source for constraints and as the default index.
# If it is not yet up, then it will use the upstream upper constraints
# for the SHA currently pinned and will set the default index to pypi.
- name: Backup the default pip_upstream_url
set_fact:
__pip_upstream_url: "{{ pip_upstream_url }}"
when:
- __pip_upstream_url is not defined
- name: Backup the default pip_install_upper_constraints
set_fact:
__pip_install_upper_constraints: "{{ pip_install_upper_constraints }}"
when:
- __pip_install_upper_constraints is not defined
- name: Backup the default pip_default_index
set_fact:
__pip_default_index: "{{ pip_default_index }}"
when:
- __pip_default_index is not defined
- name: Test internal repo URL for the current get-pip.py script
uri:
url: "{{ __pip_upstream_url }}"
method: "HEAD"
timeout: 3
register: _repo_data_check
failed_when: false
tags:
- common-pip
- name: Test internal repo URL for the current upper constraints file
uri:
url: "{{ __pip_install_upper_constraints }}"
method: "HEAD"
timeout: 3
register: upper_constraints_check
failed_when: false
tags:
- common-constraints
- name: Test internal repo URL for the availability of the pypi index
uri:
url: "{{ __pip_default_index }}"
method: "HEAD"
timeout: 3
register: pip_default_index_check
failed_when: false
tags:
- common-constraints
- name: Remove global requirement pins file from host
file:
path: "/opt/global-requirement-pins.txt"
state: absent
when: (upper_constraints_check.status | default(503)) == 200
tags:
- common-constraints
- name: Copy global requirement pins file to host
copy:
src: "../global-requirement-pins.txt"
dest: "/opt/global-requirement-pins.txt"
when: (upper_constraints_check.status | default(503)) != 200
tags:
- common-constraints
# If we can't reach the internal repo, we need to ensure
# pip isn't locked to it.
- name: Set pip upstream URL
set_fact:
pip_upstream_url: >-
{{ ((_repo_data_check.status | default(503)) != 200) | ternary('https://bootstrap.pypa.io/get-pip.py', __pip_upstream_url) }}
tags:
- common-pip
- name: Set pip install upper constraints
set_fact:
pip_install_upper_constraints: >-
{{ ((upper_constraints_check.status | default(503)) != 200) | ternary(__upstream_constraints, __pip_install_upper_constraints) }}
vars:
# Use https when Python with native SNI support is available
__pip_install_upper_constraints_proto: "{{ ansible_python_version | version_compare('2.7.9', '>=') | ternary('https','http') }}"
__upstream_constraints: >-
/opt/global-requirement-pins.txt
--constraint {{ __pip_install_upper_constraints_proto }}://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?id={{ requirements_git_install_branch | regex_replace(' #.*$','') }}
tags:
- common-constraints
- name: Fallback to PyPI
set_fact:
pip_default_index: >-
{{ ((pip_default_index_check.status | default(503)) != 200) | ternary('https://pypi.python.org/simple', __pip_default_index) }}
tags:
- common-constraints

View File

@ -1,79 +0,0 @@
---
# 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.
# This set of tasks checks whether the repo is up yet. If it is it
# will use the compiled upper constraints available there. If it
# is not yet up, then it will use the upstream upper constraints
# for the SHA currently pinned.
- name: Test internal repo URL for the current upper constraints file
uri:
url: "{{ pip_install_upper_constraints }}"
method: "HEAD"
timeout: 3
register: upper_constraints_check
failed_when: false
tags:
- common-constraints
- name: Test internal repo URL for the availability of the pypi index
uri:
url: "{{ pip_default_index }}"
method: "HEAD"
timeout: 3
register: pip_default_index_check
failed_when: false
tags:
- common-constraints
- name: Remove global requirement pins file from host
file:
path: "/opt/global-requirement-pins.txt"
state: absent
when: (upper_constraints_check.status | default(503)) == 200
tags:
- common-constraints
- name: Copy global requirement pins file to host
copy:
src: "../global-requirement-pins.txt"
dest: "/opt/global-requirement-pins.txt"
when: (upper_constraints_check.status | default(503)) != 200
tags:
- common-constraints
# Use https when Python with native SNI support is available
- name: Set pip install upper constraints protocol
set_fact:
pip_install_upper_constraints_proto: "{{ ansible_python_version | version_compare('2.7.9', '>=') | ternary('https','http') }}"
when: (upper_constraints_check.status | default(503)) != 200
tags:
- common-constraints
- name: Set pip install upper constraints
set_fact:
pip_install_upper_constraints: >-
/opt/global-requirement-pins.txt
--constraint {{ pip_install_upper_constraints_proto }}://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?id={{ requirements_git_install_branch | regex_replace(' #.*$','') }}
when: (upper_constraints_check.status | default(503)) != 200
tags:
- common-constraints
- name: Fallback to PyPI
set_fact:
pip_default_index: "https://pypi.python.org/simple"
when: (pip_default_index_check.status | default(503)) != 200
tags:
- common-constraints

View File

@ -54,8 +54,7 @@
user: root
pre_tasks:
- include: common-tasks/package-cache-proxy.yml
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
roles:
- role: "openstack_hosts"
is_container: true

View File

@ -18,8 +18,7 @@
gather_facts: "{{ osa_gather_facts | default(True) }}"
user: root
pre_tasks:
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
- name: Check the state of the default LXC service log directory
stat:
path: "/var/log/lxc"

View File

@ -47,8 +47,7 @@
user: root
pre_tasks:
- include: common-tasks/package-cache-proxy.yml
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
roles:
- role: "openstack_hosts"
is_container: true

View File

@ -50,8 +50,7 @@
msg: "The only supported platforms for this release are Ubuntu 16.04 LTS (Xenial), CentOS 7 (WIP) and openSUSE Leap 42.X (WIP)"
- include: common-tasks/package-cache-proxy.yml
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
roles:
- role: "openstack_hosts"
vars_files:

View File

@ -50,8 +50,7 @@
serial: 1
pre_tasks:
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
- name: Load local packages
debug:

View File

@ -19,8 +19,7 @@
user: root
pre_tasks:
- include: common-tasks/set-upper-constraints.yml
- include: common-tasks/set-pip-upstream-url.yml
- include: common-tasks/set-pip-vars.yml
- name: Check if the git cache exists on deployment host
local_action: