ansible-role-python_venv_build/tests/test-functional.yml

171 lines
5.2 KiB
YAML

---
# Copyright 2018, 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.
- name: Clean up from previous tests
hosts: "{{ build_host }}:{{ install_hosts }}"
become: yes
any_errors_fatal: yes
tasks:
- name: Clean up files/folders from previous tests
file:
path: "{{ item.path }}"
state: absent
with_items:
- path: "{{ lookup('env', 'HOME') }}/archive"
- path: "{{ lookup('env', 'HOME') }}/venvs"
- name: Clean up facts from previous tests
ini_file:
path: "/etc/ansible/facts.d/openstack_ansible.fact"
section: "{{ item }}"
state: absent
with_items: "{{ build_host.split(':') + install_hosts.split(':') }}"
- name: Refresh the inventory to clear the added groups
meta: refresh_inventory
- name: Set venv_build_archive_path and venv_install_source_path
set_fact:
venv_build_archive_path: >-
{%- if build_host == "container1" %}
{%- if ansible_distribution == "Ubuntu" %}
{%- set _path = "/var/www/html" %}
{%- elif ansible_distribution == "CentOS" %}
{%- set _path = "/usr/share/nginx/html" %}
{%- else %}
{%- set _path = "/srv/www/htdocs" %}
{%- endif %}
{%- else -%}
{%- set _path = lookup('env', 'HOME') ~ "/archive/venvs" -%}
{%- endif -%}
{{- _path }}
venv_install_source_path: >-
{%- if build_host == "container1" -%}
http://{{ hostvars['container1'].ansible_default_ipv4.address }}
{%- else -%}
{{- lookup('env', 'HOME') }}/archive/venvs
{%- endif -%}
- name: Setup web server for url-based venv install
when:
- inventory_hostname == 'container1'
block:
- name: Install EPEL gpg keys
rpm_key:
key: "http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7"
state: present
when:
- ansible_pkg_mgr in ['yum', 'dnf']
register: _add_yum_keys
until: _add_yum_keys is success
retries: 5
delay: 2
- name: Install the EPEL repository
yum_repository:
name: epel-nginx
baseurl: "{{ (centos_epel_mirror | default ('http://download.fedoraproject.org/pub/epel')) ~ '/' ~ ansible_distribution_major_version ~ '/' ~ ansible_architecture }}"
description: 'Extra Packages for Enterprise Linux 7 - $basearch'
gpgcheck: yes
enabled: yes
state: present
includepkgs: 'nginx*'
when:
- ansible_pkg_mgr in ['yum', 'dnf']
register: install_epel_repo
until: install_epel_repo is success
retries: 5
delay: 2
- name: Install distro packages
package:
name: "nginx"
update_cache: "{{ (ansible_pkg_mgr in ['apt', 'zypper']) | ternary('yes', omit) }}"
register: install
until: install is success
retries: 5
delay: 2
- name: Enable and start nginx
service:
name: nginx
enabled: yes
daemon_reload: yes
state: restarted
- name: Execute build
hosts: "{{ build_host }}"
become: yes
any_errors_fatal: yes
tasks:
- name: Execute venv build
include_role:
name: "python_venv_build"
private: yes
vars:
venv_build_only: yes
- name: Execute install
hosts: "{{ install_hosts }}"
become: yes
any_errors_fatal: yes
tasks:
- name: Execute venv install
include_role:
name: "python_venv_build"
private: yes
vars:
venv_facts_when_changed:
- section: "{{ inventory_hostname }}"
option: "test"
value: True
- name: refresh local facts
setup:
filter: ansible_local
gather_subset: "!all"
- name: Show the ansible_local facts
debug:
var: ansible_local
- name: Verify that the facts were set
assert:
that:
- ansible_local['openstack_ansible'][inventory_hostname]['test'] | bool
- name: Find files/folders on targets
find:
file_type: directory
get_checksum: no
recurse: no
paths:
- "{{ venv_install_destination_path | dirname }}"
register: _target_folders
- name: Compile the folder list from the targets
set_fact:
_target_folder_list: "{{ _target_folders['files'] | map(attribute='path') | list }}"
- name: Show the files/folder from the targets
debug:
var: _target_folder_list
- name: Verify the folder list from the targets
assert:
that:
- "{{ venv_install_destination_path in _target_folder_list }}"