23830066ad
This test executes an LXC container listing from the LXC host, then verifies that the container is present by name and IP address. The test will work whether there is one or more IP addresses in each containers created. This patch also includes the following in order to unblock testing for this role: - A forced apt-get update - A base other-requirements.txt file to ensure that the OpenStack-CI fallback requirements aren't used, which conflict with LXC and cause the instance to hang. Change-Id: I2619b1090300a161c108fcc3f65059e8d50c851e
107 lines
4.2 KiB
YAML
107 lines
4.2 KiB
YAML
---
|
|
# Copyright 2015, 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: Playbook for pre-role testing
|
|
hosts: localhost
|
|
connection: local
|
|
pre_tasks:
|
|
- name: First ensure apt cache is always refreshed
|
|
apt:
|
|
update_cache: yes
|
|
- name: Ensure root ssh key
|
|
user:
|
|
name: "{{ ansible_env.USER | default('root') }}"
|
|
generate_ssh_key: "yes"
|
|
ssh_key_bits: 2048
|
|
ssh_key_file: ".ssh/id_rsa"
|
|
- name: get the calling users key
|
|
command: cat ~/.ssh/id_rsa.pub
|
|
register: key_get
|
|
- set_fact:
|
|
lxc_container_ssh_key: key_get.stdout
|
|
roles:
|
|
- role: "lxc_hosts"
|
|
lxc_net_address: 10.100.100.1
|
|
lxc_net_dhcp_range: 10.100.100.2,10.100.100.253
|
|
lxc_net_bridge: lxcbr0
|
|
lxc_kernel_options:
|
|
- { key: 'fs.inotify.max_user_instances', value: 1024 }
|
|
lxc_container_caches:
|
|
- url: "https://rpc-repo.rackspace.com/container_images/rpc-trusty-container.tgz"
|
|
name: "trusty.tgz"
|
|
sha256sum: "56c6a6e132ea7d10be2f3e8104f47136ccf408b30e362133f0dc4a0a9adb4d0c"
|
|
chroot_path: trusty/rootfs-amd64
|
|
- role: "py_from_git"
|
|
git_repo: "https://github.com/lxc/python2-lxc"
|
|
git_dest: "/opt/lxc_python2"
|
|
git_install_branch: "master"
|
|
post_tasks:
|
|
# THIS TASK IS ONLY BEING DONE BECAUSE THE TOX SHARED LXC LIB IS NOT USABLE ON A
|
|
# HOST MACHINE THAT MAY NOT HAVE ACCESS TO THE VENV.
|
|
- name: Ensure the lxc lib is on the host
|
|
command: /usr/local/bin/pip install /opt/lxc_python2
|
|
# Inventory is being pre-loaded using a post tasks instead of through a dynamic
|
|
# inventory system. While this is not a usual method for deployment it's being
|
|
# done for functional testing.
|
|
- name: Create container hosts
|
|
add_host:
|
|
groups: "all,all_containers"
|
|
hostname: "{{ item.name }}"
|
|
inventory_hostname: "{{ item.name }}"
|
|
ansible_ssh_host: "{{ item.address }}"
|
|
ansible_become: true
|
|
properties:
|
|
service_name: "{{ item.service }}"
|
|
container_networks:
|
|
management_address:
|
|
address: "{{ item.address }}"
|
|
bridge: "lxcbr0"
|
|
interface: "eth1"
|
|
netmask: "255.255.252.0"
|
|
type: "veth"
|
|
physical_host: localhost
|
|
container_name: "{{ item.name }}"
|
|
with_items:
|
|
- { name: "container1", service: "service1", address: "10.100.100.101" }
|
|
- { name: "container2", service: "service2", address: "10.100.100.102" }
|
|
|
|
- name: Playbook for role testing
|
|
hosts: all_containers
|
|
connection: local
|
|
gather_facts: false
|
|
roles:
|
|
- role: "{{ rolename | basename }}"
|
|
lxc_container_release: trusty
|
|
lxc_container_backing_store: dir
|
|
global_environment_variables:
|
|
PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
|
|
- name: Test whether the role produced expected results
|
|
hosts: localhost
|
|
tasks:
|
|
- name: List the running LXC containers present on the host
|
|
command: lxc-ls -1 --fancy --fancy-format name,ipv4 --running
|
|
register: lxc_container_list
|
|
- name: Verify that the expected containers are present with the correct addresses
|
|
# Example stdout:
|
|
# NAME IPV4
|
|
# ---------------------------------------
|
|
# container1 172.16.12.3, 10.100.100.101
|
|
# container2 10.100.100.102, 172.16.12.4
|
|
assert:
|
|
that:
|
|
- lxc_container_list.stdout | search("container1\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},\s+)*10.100.100.101(,\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})*\s+")
|
|
- lxc_container_list.stdout | search("container2\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},\s+)*10.100.100.102(,\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})*\s+")
|