Jean-Philippe Evrard 25c8e457b3 Only update apt cache if necessary
Workarounding the upstream ansible apt module bug
documented here:
https://github.com/ansible/ansible-modules-core/pull/1517

For the next versions of ansible we'll be using, we should
check if the apt bug is fixed. When it's fixed, we could
abandon this change and use the standard apt module
with correct cache handling.

Change-Id: I2aaf00da175f31d0157bbc4ae30a4e176b055078
2016-02-09 16:46:22 +01:00

188 lines
4.8 KiB
YAML

---
# Copyright 2014, 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.
#TODO(evrardjp): Replace the next 2 tasks by a standard apt with cache
#when https://github.com/ansible/ansible-modules-core/pull/1517 is merged
#in 1.9.x or we move to 2.0 (if tested working)
- name: Check apt last update file
stat:
path: /var/cache/apt
register: apt_cache_stat
tags:
- heat-apt-packages
- name: Update apt if needed
apt:
update_cache: yes
when: "ansible_date_time.epoch|float - apt_cache_stat.stat.mtime > {{cache_timeout}}"
tags:
- heat-apt-packages
- name: Install apt packages
apt:
pkg: "{{ item }}"
state: latest
register: install_packages
until: install_packages|success
retries: 5
delay: 2
with_items: heat_apt_packages
tags:
- heat-install
- heat-apt-packages
- name: Install requires pip packages
pip:
name: "{{ item }}"
state: present
extra_args: "{{ pip_install_options|default('') }}"
register: install_packages
until: install_packages|success
retries: 5
delay: 2
with_items: heat_requires_pip_packages
tags:
- heat-install
- heat-pip-packages
- name: Get local venv checksum
stat:
path: "/var/cache/{{ heat_venv_download_url | basename }}"
get_md5: False
when: heat_venv_enabled | bool
register: local_venv_stat
tags:
- heat-install
- heat-pip-packages
- name: Get remote venv checksum
uri:
url: "{{ heat_venv_download_url | replace('tgz', 'checksum') }}"
return_content: True
when: heat_venv_enabled | bool
register: remote_venv_checksum
tags:
- heat-install
- heat-pip-packages
# TODO: When project moves to ansible 2 we can pass this a sha256sum which will:
# a) allow us to remove force: yes
# b) allow the module to calculate the checksum of dest file which would
# result in file being downloaded only if provided and dest sha256sum
# checksums differ
- name: Attempt venv download
get_url:
url: "{{ heat_venv_download_url }}"
dest: "/var/cache/{{ heat_venv_download_url | basename }}"
force: yes
ignore_errors: true
register: get_venv
when:
- heat_venv_enabled | bool
- (local_venv_stat.stat.exists == False or
{{ local_venv_stat.stat.checksum is defined and local_venv_stat.stat.checksum != remote_venv_checksum.content | trim }})
tags:
- heat-install
- heat-pip-packages
- name: Set heat get_venv fact
set_fact:
heat_get_venv: "{{ get_venv }}"
when: heat_venv_enabled | bool
tags:
- heat-install
- heat-pip-packages
- name: Remove existing venv
file:
path: "{{ heat_venv_bin | dirname }}"
state: absent
when:
- heat_venv_enabled | bool
- heat_get_venv | changed
tags:
- heat-install
- heat-pip-packages
- name: Create heat venv dir
file:
path: "{{ heat_venv_bin | dirname }}"
state: directory
when:
- heat_venv_enabled | bool
- heat_get_venv | changed
tags:
- heat-install
- heat-pip-packages
- name: Unarchive pre-built venv
unarchive:
src: "/var/cache/{{ heat_venv_download_url | basename }}"
dest: "{{ heat_venv_bin | dirname }}"
copy: "no"
when:
- heat_venv_enabled | bool
- heat_get_venv | changed
notify: Restart heat services
tags:
- heat-install
- heat-pip-packages
- name: Update virtualenv path
command: >
virtualenv-tools --update-path=auto {{ heat_venv_bin | dirname }}
when:
- heat_venv_enabled | bool
- heat_get_venv | success
tags:
- heat-install
- heat-pip-packages
- name: Install pip packages (venv)
pip:
name: "{{ item }}"
state: present
virtualenv: "{{ heat_venv_bin | dirname }}"
virtualenv_site_packages: "no"
extra_args: "{{ pip_install_options|default('') }}"
register: install_packages
until: install_packages|success
retries: 5
delay: 2
with_items: heat_pip_packages
when:
- heat_venv_enabled | bool
- heat_get_venv | failed
notify: Restart heat services
tags:
- heat-install
- heat-pip-packages
- name: Install pip packages (no venv)
pip:
name: "{{ item }}"
state: present
extra_args: "{{ pip_install_options|default('') }}"
register: install_packages
until: install_packages|success
retries: 5
delay: 2
with_items: heat_pip_packages
when: not heat_venv_enabled | bool
notify: Restart heat services
tags:
- heat-install
- heat-pip-packages