tests: Rebuild Docker containers
A few changes are bundled in this - Ansible 2.10.x and Mitogen 0.3.x are used to build nearly all images (Ansile 2.3.x is retained for CentOS 5, because it uses Python 2.4). - Tox is used to install/run Ansible, replacing build_docker_images.py - A static inventory, identifying containers by name rather than ID. - debian-test image is renamed to debian9-test - debian9-test image is now based on debian:9 - centos6-test image is now based on moreati/centos6-vault following the same scheme as centos5-test. - Images are now uploaded to Amazon Elastic Container Registry (ECR). See #809. - Debian recommended packages aren't installed (e.g. build-essential) - Python 2.x and Python 3.x are installed wherever available. - Python Virtualenv is installed wherever available.pull/816/head
parent
60fbea4b59
commit
a8e8cf91cb
@ -0,0 +1,20 @@
|
|||||||
|
- name: Start containers
|
||||||
|
hosts: all
|
||||||
|
strategy: mitogen_free
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- name: Fetch container images
|
||||||
|
docker_image:
|
||||||
|
name: "{{ docker_base }}"
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Start containers
|
||||||
|
docker_container:
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
image: "{{ docker_base }}"
|
||||||
|
command: /bin/bash
|
||||||
|
hostname: "mitogen-{{ inventory_hostname }}"
|
||||||
|
detach: true
|
||||||
|
interactive: true
|
||||||
|
tty: true
|
||||||
|
delegate_to: localhost
|
@ -0,0 +1,18 @@
|
|||||||
|
- name: Prepare images
|
||||||
|
hosts: all
|
||||||
|
strategy: mitogen_free
|
||||||
|
gather_facts: true
|
||||||
|
tasks:
|
||||||
|
- name: Commit containers
|
||||||
|
command: >
|
||||||
|
docker commit
|
||||||
|
--change 'EXPOSE 22'
|
||||||
|
--change 'CMD ["/usr/sbin/sshd", "-D"]'
|
||||||
|
{{ inventory_hostname }}
|
||||||
|
public.ecr.aws/n5z0e8q9/{{ inventory_hostname }}-test
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Stop containers
|
||||||
|
command: >
|
||||||
|
docker rm -f {{ inventory_hostname }}
|
||||||
|
delegate_to: localhost
|
@ -1,7 +1,11 @@
|
|||||||
|
|
||||||
[defaults]
|
[defaults]
|
||||||
|
deprecation_warnings = false
|
||||||
strategy_plugins = ../../ansible_mitogen/plugins/strategy
|
strategy_plugins = ../../ansible_mitogen/plugins/strategy
|
||||||
retry_files_enabled = false
|
retry_files_enabled = false
|
||||||
display_args_to_stdout = True
|
display_args_to_stdout = True
|
||||||
no_target_syslog = True
|
no_target_syslog = True
|
||||||
host_key_checking = False
|
host_key_checking = False
|
||||||
|
|
||||||
|
[inventory]
|
||||||
|
unparsed_is_fatal = true
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
Build the Docker images used for testing.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import commands
|
|
||||||
import os
|
|
||||||
import shlex
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
|
|
||||||
BASEDIR = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
|
|
||||||
|
|
||||||
def sh(s, *args):
|
|
||||||
if args:
|
|
||||||
s %= args
|
|
||||||
return shlex.split(s)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
label_by_id = {}
|
|
||||||
|
|
||||||
for base_image, label in [
|
|
||||||
('astj/centos5-vault', 'centos5'), # Python 2.4.3
|
|
||||||
# Debian containers later than debuerreotype/debuerreotype#48 no longer
|
|
||||||
# ship a stub 'initctl', causing (apparently) the Ansible service
|
|
||||||
# module run at the end of DebOps to trigger a full stop/start of SSHd.
|
|
||||||
# When SSHd is killed, Docker responds by destroying the container.
|
|
||||||
# Proper solution is to include a full /bin/init; Docker --init doesn't
|
|
||||||
# help. In the meantime, just use a fixed older version.
|
|
||||||
('debian:stretch-20181112', 'debian'), # Python 2.7.13, 3.5.3
|
|
||||||
('centos:6', 'centos6'), # Python 2.6.6
|
|
||||||
('centos:7', 'centos7') # Python 2.7.5
|
|
||||||
]:
|
|
||||||
args = sh('docker run --rm -it -d -h mitogen-%s %s /bin/bash',
|
|
||||||
label, base_image)
|
|
||||||
container_id = subprocess.check_output(args).strip()
|
|
||||||
label_by_id[container_id] = label
|
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile() as fp:
|
|
||||||
fp.write('[all]\n')
|
|
||||||
for id_, label in label_by_id.items():
|
|
||||||
fp.write('%s ansible_host=%s\n' % (label, id_))
|
|
||||||
fp.flush()
|
|
||||||
|
|
||||||
try:
|
|
||||||
subprocess.check_call(
|
|
||||||
cwd=BASEDIR,
|
|
||||||
args=sh('ansible-playbook -i %s -c docker setup.yml', fp.name) + sys.argv[1:],
|
|
||||||
)
|
|
||||||
|
|
||||||
for container_id, label in label_by_id.items():
|
|
||||||
subprocess.check_call(sh('''
|
|
||||||
docker commit
|
|
||||||
--change 'EXPOSE 22'
|
|
||||||
--change 'CMD ["/usr/sbin/sshd", "-D"]'
|
|
||||||
%s
|
|
||||||
mitogen/%s-test
|
|
||||||
''', container_id, label))
|
|
||||||
finally:
|
|
||||||
subprocess.check_call(sh('docker rm -f %s', ' '.join(label_by_id)))
|
|
@ -1,3 +1,9 @@
|
|||||||
|
common_packages:
|
||||||
|
- openssh-server
|
||||||
|
- rsync
|
||||||
|
- strace
|
||||||
|
- sudo
|
||||||
|
|
||||||
sudo_group:
|
sudo_group:
|
||||||
MacOSX: admin
|
MacOSX: admin
|
||||||
Debian: sudo
|
Debian: sudo
|
@ -0,0 +1,6 @@
|
|||||||
|
bootstrap_packages: [python-simplejson]
|
||||||
|
|
||||||
|
docker_base: astj/centos5-vault
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- perl
|
@ -0,0 +1,6 @@
|
|||||||
|
bootstrap_packages: [python]
|
||||||
|
|
||||||
|
docker_base: moreati/centos6-vault
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- perl-JSON
|
@ -0,0 +1,8 @@
|
|||||||
|
bootstrap_packages: [python]
|
||||||
|
|
||||||
|
docker_base: centos:7
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- perl-JSON
|
||||||
|
- python-virtualenv
|
||||||
|
- python3
|
@ -0,0 +1,11 @@
|
|||||||
|
bootstrap_packages: [python]
|
||||||
|
|
||||||
|
docker_base: debian:9
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- libjson-perl
|
||||||
|
- locales
|
||||||
|
- python-virtualenv
|
||||||
|
- python3
|
||||||
|
- python3-virtualenv
|
||||||
|
- virtualenv
|
@ -0,0 +1,14 @@
|
|||||||
|
[all:children]
|
||||||
|
centos
|
||||||
|
debian
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
ansible_connection = docker
|
||||||
|
|
||||||
|
[centos]
|
||||||
|
centos5
|
||||||
|
centos6
|
||||||
|
centos7
|
||||||
|
|
||||||
|
[debian]
|
||||||
|
debian9
|
@ -1,3 +1,6 @@
|
|||||||
|
#!/usr/bin/env ansible-playbook
|
||||||
|
|
||||||
|
- include: _container_create.yml
|
||||||
- include: _container_setup.yml
|
- include: _container_setup.yml
|
||||||
- include: _user_accounts.yml
|
- include: _user_accounts.yml
|
||||||
|
- include: _container_finalize.yml
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
[tox]
|
||||||
|
envlist =
|
||||||
|
ansible2.3,
|
||||||
|
ansible2.10,
|
||||||
|
skipsdist = true
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
setenv =
|
||||||
|
ANSIBLE_STRATEGY_PLUGINS={envsitepackagesdir}/ansible_mitogen/plugins/strategy
|
||||||
|
|
||||||
|
[testenv:ansible2.3]
|
||||||
|
basepython = python2
|
||||||
|
deps =
|
||||||
|
ansible>=2.3,<2.4
|
||||||
|
docker-py>=1.7.0
|
||||||
|
mitogen>=0.2.10rc1,<0.3
|
||||||
|
install_command =
|
||||||
|
python -m pip --no-python-version-warning install {opts} {packages}
|
||||||
|
commands =
|
||||||
|
./setup.yml -i hosts.ini -l 'localhost,centos5' {posargs}
|
||||||
|
|
||||||
|
[testenv:ansible2.10]
|
||||||
|
basepython = python3
|
||||||
|
deps =
|
||||||
|
ansible>=2.10,<2.11
|
||||||
|
docker>=1.8.0
|
||||||
|
mitogen>=0.3.0rc1,<0.4
|
||||||
|
commands =
|
||||||
|
./setup.yml -i hosts.ini -l '!centos5' {posargs}
|
Loading…
Reference in New Issue