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

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

@ -103,113 +103,30 @@
{% endfor %} {% endfor %}
when: glance_developer_mode | bool when: glance_developer_mode | bool
- name: Install requires pip packages - name: Build/install the python venv
pip: include_role:
name: "{{ glance_requires_pip_packages }}" name: "python_venv_build"
state: "{{ glance_pip_package_state }}" private: yes
extra_args: >- 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'), '') }} {{ 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_upper_constraints is defined) | ternary('--constraint ' + pip_install_upper_constraints | default(''),'') }}
{{ pip_install_options | default('') }} {{ pip_install_options | default('') }}
register: install_packages venv_pip_install_args: >-
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: >-
{{ glance_developer_mode | ternary(pip_install_developer_constraints | default('--constraint /opt/developer-pip-constraints.txt'), '') }} {{ 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_upper_constraints is defined) | ternary('--constraint ' + pip_install_upper_constraints | default(''),'') }}
{{ pip_install_options | default('') }} {{ pip_install_options | default('') }}
register: install_packages venv_destination_path: "{{ glance_bin | dirname }}"
until: install_packages|success venv_facts_when_changed:
retries: 5 - section: "glance"
delay: 2 option: "need_service_restart"
when: glance_get_venv | failed or glance_get_venv | skipped value: True
notify: - section: "glance"
- Manage LB option: "venv_tag"
- Restart glance services value: "{{ glance_venv_tag }}"
- 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 }}"
- name: Create TEMP run dir - name: Create TEMP run dir
file: file:

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