Use a common python build/install role for source-base deployment

Instead of copying a common set of code between all the roles,
switch to using a common role which checks whether a deploy host
already has the appropriate venv package. If it does not, build
it on the fly and pull it to the deploy host.

Implementing this does away with the requirement to do builds
on the repo container. Once this has been implemented into all
roles then the repo_build role will be retired.

Depends-On: https://review.openstack.org/556840
Change-Id: I57e87406bee5c7d10aa824f18d3142f8f3ac6ab4
This commit is contained in:
Jesse Pretorius 2018-03-09 17:53:44 +00:00
parent 1ef4471ea5
commit 975675b659
3 changed files with 34 additions and 105 deletions

View File

@ -32,7 +32,9 @@
until: _stop | success
retries: 5
delay: 2
listen: "Restart glance services"
listen:
- "Restart glance services"
- "venv changed"
# TODO(odyssey4me):
# Assuming glance-registry is removed in the S cycle as planned, this
@ -82,7 +84,9 @@
- "/etc/systemd/system/{{ glance_services['glance-registry']['service_name'] }}.service"
when:
- not glance_services['glance-registry']['condition']
listen: "Restart glance services"
listen:
- "Restart glance services"
- "venv changed"
# Note (odyssey4me):
# The policy.json file is currently read continually by the services
@ -100,7 +104,9 @@
group: "{{ glance_system_group_name }}"
mode: "0640"
remote_src: yes
listen: "Restart glance services"
listen:
- "Restart glance services"
- "venv changed"
- name: Start services
service:
@ -113,7 +119,9 @@
until: _start | success
retries: 5
delay: 2
listen: "Restart glance services"
listen:
- "Restart glance services"
- "venv changed"
- meta: noop
listen: Manage LB

View File

@ -103,113 +103,30 @@
{% endfor %}
when: glance_developer_mode | bool
- name: Install requires pip packages
pip:
name: "{{ glance_requires_pip_packages }}"
state: "{{ glance_pip_package_state }}"
extra_args: >-
- name: Build/install the python venv
include_role:
name: "python_venv_build"
private: yes
vars:
distro_package_list: "{{ glance_distro_packages }}"
host_pip_packages: "{{ glance_requires_pip_packages }}"
venv_pip_packages: "{{ glance_pip_packages }}"
host_pip_install_args: >-
{{ glance_developer_mode | ternary(pip_install_developer_constraints | default('--constraint /opt/developer-pip-constraints.txt'), '') }}
{{ (pip_install_upper_constraints is defined) | ternary('--constraint ' + pip_install_upper_constraints | default(''),'') }}
{{ pip_install_options | default('') }}
register: install_packages
until: install_packages|success
retries: 5
delay: 2
- name: Retrieve checksum for venv download
uri:
url: "{{ glance_venv_download_url | replace('tgz', 'checksum') }}"
return_content: yes
register: glance_venv_checksum
when: glance_venv_download | bool
- name: Attempt venv download
get_url:
url: "{{ glance_venv_download_url }}"
dest: "/var/cache/{{ glance_venv_download_url | basename }}"
checksum: "sha1:{{ glance_venv_checksum.content | trim }}"
register: glance_get_venv
when: glance_venv_download | bool
- name: Remove existing venv
file:
path: "{{ glance_bin | dirname }}"
state: absent
when: glance_get_venv | changed
- name: Create glance venv dir
file:
path: "{{ glance_bin | dirname }}"
state: directory
register: glance_venv_dir
when: glance_get_venv | changed
- name: Unarchive pre-built venv
unarchive:
src: "/var/cache/{{ glance_venv_download_url | basename }}"
dest: "{{ glance_bin | dirname }}"
copy: "no"
when: glance_get_venv | changed
notify:
- Manage LB
- Restart glance services
- name: Install pip packages
pip:
name: "{{ glance_pip_packages }}"
state: "{{ glance_pip_package_state }}"
virtualenv: "{{ glance_bin | dirname }}"
virtualenv_site_packages: "no"
extra_args: >-
venv_pip_install_args: >-
{{ glance_developer_mode | ternary(pip_install_developer_constraints | default('--constraint /opt/developer-pip-constraints.txt'), '') }}
{{ (pip_install_upper_constraints is defined) | ternary('--constraint ' + pip_install_upper_constraints | default(''),'') }}
{{ pip_install_options | default('') }}
register: install_packages
until: install_packages|success
retries: 5
delay: 2
when: glance_get_venv | failed or glance_get_venv | skipped
notify:
- Manage LB
- Restart glance services
- name: Remove python from path first (CentOS, openSUSE)
file:
path: "{{ glance_bin | dirname }}/bin/python2.7"
state: "absent"
when:
- ansible_pkg_mgr in ['yum', 'dnf', 'zypper']
- glance_get_venv | changed
- name: Update virtualenv path
shell: |
find {{ glance_bin }} -name \*.pyc -delete
sed -si '1s/^.*python.*$/#!{{ glance_bin | replace ('/','\/') }}\/python/' {{ glance_bin }}/*
virtualenv {{ glance_bin | dirname }}
when: glance_get_venv | changed
tags:
- skip_ansible_lint
- name: Record the need for a service restart
ini_file:
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
section: glance
option: need_service_restart
value: True
when: (glance_get_venv | changed) or
(glance_venv_dir | changed) or
(install_packages | changed) or
(ansible_local is not defined) or
('openstack_ansible' not in ansible_local) or
('glance' not in ansible_local['openstack_ansible']) or
('need_service_restart' not in ansible_local['openstack_ansible']['glance'])
- name: Record the venv tag deployed
ini_file:
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
section: glance
option: venv_tag
value: "{{ glance_venv_tag }}"
venv_destination_path: "{{ glance_bin | dirname }}"
venv_facts_when_changed:
- section: "glance"
option: "need_service_restart"
value: True
- section: "glance"
option: "venv_tag"
value: "{{ glance_venv_tag }}"
- name: Create TEMP run dir
file:

View File

@ -58,3 +58,7 @@
src: https://git.openstack.org/openstack/ansible-role-systemd_service
scm: git
version: master
- name: python_venv_build
src: https://git.openstack.org/openstack/ansible-role-python_venv_build
scm: git
version: master