From 47d3f8733f76d567d2f578be20894bdfc5a6246c Mon Sep 17 00:00:00 2001 From: Jesse Pretorius Date: Tue, 22 Nov 2016 08:05:23 +0000 Subject: [PATCH] Use get-pip script from repo release folder This patch ensures that if the local repo server has a copy of the get-pip.py script then it will be used instead of reaching out to the default location on the internet. The tasks to set upper constraints are removed form the unbound and repo-server playbooks as those roles do not execute any form of pip installation. This approach is taken to ensure that: - Before the repo is built, the get-pip process in the pip_install role still has two chances to fetch the get-pip.py script. If we simply override the first URL option in group_vars then the initial task will fail before the repo is built for the release being executed and we would therefore only get one fallback. - After the repo is built, if the lxc-host-setup and other pre-repo playbooks are run, the plays will use the repo's get-pip script instead of reaching upstream to fetch a fresh one. This maintains a consistent get-pip script version within the same tag forever. If group_vars are set for the targets of these plays to use the upstream URL then the experience is not the same - the lxc_hosts group will always get the latest upstream get-pip script every time the playbook executes, resulting in the lxc hosts having a different copy of the script to other hosts and containers. Partial-Bug: #1633105 Depends-On: I3735ec50d51e10d0bc4a7f6677a800444fb33912 Depends-On: I4a2ff6c6e5cd40d87d4218f63c09e96da82da1aa Change-Id: I9b558a14e800bb77d78021f665173dcdfaf2f4aa --- .../common-tasks/set-pip-upstream-url.yml | 33 +++++++++++++++++++ playbooks/inventory/group_vars/all.yml | 3 ++ playbooks/lxc-hosts-setup.yml | 1 + playbooks/repo-build.yml | 1 + playbooks/repo-server.yml | 2 -- playbooks/unbound-install.yml | 2 -- 6 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 playbooks/common-tasks/set-pip-upstream-url.yml diff --git a/playbooks/common-tasks/set-pip-upstream-url.yml b/playbooks/common-tasks/set-pip-upstream-url.yml new file mode 100644 index 0000000000..04c9b49a1a --- /dev/null +++ b/playbooks/common-tasks/set-pip-upstream-url.yml @@ -0,0 +1,33 @@ +--- +# 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" + register: _repo_data_check + failed_when: false + when: pip_upstream_url != "https://bootstrap.pypa.io/get-pip.py" + +- 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 diff --git a/playbooks/inventory/group_vars/all.yml b/playbooks/inventory/group_vars/all.yml index 47a8242f2e..06f70c7bac 100644 --- a/playbooks/inventory/group_vars/all.yml +++ b/playbooks/inventory/group_vars/all.yml @@ -49,6 +49,9 @@ pip_lock_to_internal_repo: "{{ (pip_links | length) >= 1 }}" # The upper constraints to apply to all pip installations pip_install_upper_constraints: "{{ openstack_repo_url }}/os-releases/{{ openstack_release }}/requirements_absolute_requirements.txt" +# The URL to retrieve the get-pip.py installation script +pip_upstream_url: "{{ (pip_offline_install | bool) | ternary('https://bootstrap.pypa.io/get-pip.py', openstack_repo_url ~ '/os-releases/' ~ openstack_release ~ '/get-pip.py') }}" + ## OpenStack source options # URL for the frozen internal openstack repo. repo_server_port: 8181 diff --git a/playbooks/lxc-hosts-setup.yml b/playbooks/lxc-hosts-setup.yml index 4630ff8e8a..023da9a0b7 100644 --- a/playbooks/lxc-hosts-setup.yml +++ b/playbooks/lxc-hosts-setup.yml @@ -20,6 +20,7 @@ user: root pre_tasks: - include: common-tasks/set-upper-constraints.yml + - include: common-tasks/set-pip-upstream-url.yml - name: Check the state of the default LXC service log directory stat: path: "/var/log/lxc" diff --git a/playbooks/repo-build.yml b/playbooks/repo-build.yml index fc57ae3a40..29a15e00a3 100644 --- a/playbooks/repo-build.yml +++ b/playbooks/repo-build.yml @@ -51,6 +51,7 @@ pre_tasks: - include: common-tasks/set-upper-constraints.yml + - include: common-tasks/set-pip-upstream-url.yml - name: Load local packages debug: diff --git a/playbooks/repo-server.yml b/playbooks/repo-server.yml index 267d334cd4..a34b11bdb7 100644 --- a/playbooks/repo-server.yml +++ b/playbooks/repo-server.yml @@ -20,8 +20,6 @@ user: root pre_tasks: - - include: common-tasks/set-upper-constraints.yml - - name: Check if the git cache exists on deployment host local_action: module: stat diff --git a/playbooks/unbound-install.yml b/playbooks/unbound-install.yml index dcf3398dbf..d6d8c92415 100644 --- a/playbooks/unbound-install.yml +++ b/playbooks/unbound-install.yml @@ -18,8 +18,6 @@ - unbound_all gather_facts: "{{ gather_facts | default(True) }}" user: root - pre_tasks: - - include: common-tasks/set-upper-constraints.yml roles: - role: "unbound" tags: