nylas / ansible-test Goto Github PK
View Code? Open in Web Editor NEWAn Ansible Testing Framework for Humans
License: MIT License
An Ansible Testing Framework for Humans
License: MIT License
Nice package !
Have you considered running tests in a LXC guests ? LXC may be a better tool because it does distribution isolation, rather than process isolation: it runs a real init as PID 1.
You could run something like this to create the LXC guests the test needs from the test inventory file:
- hosts: localhost
vars:
LXC_PATH: /var/lib/lxc # change to /tmp to run in ram with -e
tasks:
- name: Configure container
lxc_container:
name: '{{ item }}'
template: debian
state: started
template_options: --release wheezy
lxc_path: '{{ LXC_PATH }}'
with_items: '{{ groups["all"] }}'
- name: Ensure .ssh directory exists in container
file:
path: '{{ LXC_PATH }}/{{ item }}/.ssh'
state: directory
mode: 0700
with_items: '{{ groups["all"] }}'
- name: Add your SSH key in the container
copy:
src: '{{ lookup("env", "HOME") }}/.ssh/id_rsa.pub'
dest: '{{ LXC_PATH }}/{{ item }}/.ssh/authorized_keys'
mode: 0600
with_items: '{{ groups["all"] }}'
Then you could execute your playbooks from the host.
Testing on multiple hosts may be useful for more complicated tests such as orchestration tests.
Thoughts ?
It might be a package issue, but when you run the command it results in this:
Running setup.py install for cryptography
c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
#include <ffi.h>
^
compilation terminated.
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/opt/ansible/venv/build/cryptography/setup.py", line 335, in <module>
**keywords_with_side_effects(sys.argv)
File "/usr/lib/python2.7/distutils/core.py", line 111, in setup
_setup_distribution = dist = klass(attrs)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/dist.py", line 239, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/dist.py", line 264, in fetch_build_eggs
replace_conflicting=True
File "/opt/ansible/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 580, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 818, in best_match
return self.obtain(req, installer) # try and download/install
File "/opt/ansible/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 830, in obtain
return installer(requirement)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/dist.py", line 314, in fetch_build_egg
return cmd.easy_install(req)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 593, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 623, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 809, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1015, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/opt/ansible/venv/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1003, in run_setup
raise DistutilsError("Setup script exited with %s" % (v.args[0],))
distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
Complete output from command /opt/ansible/venv/bin/python -c "import setuptools, tokenize;__file__='/opt/ansible/venv/build/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-5lm8Op-record/install-record.txt --single-version-externally-managed --compile --install-headers /opt/ansible/venv/include/site/python2.7:
c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
#include <ffi.h>
^
This can be fixed by adding `libffi-dev` in the `apt-get install` command
When running ansible-test sanity --list-tests
command from ansible documentation, the docker instance fails to init due to PyPi erroring out because it can't install ansible into the docker instance(?):
vagrant@vagrant-acs:~$ sudo ansible-test sanity --list-tests
Sending build context to Docker daemon 6.405MB
Step 1/8 : FROM debian:7.7
---> 6d129b37ec3b
Step 2/8 : MAINTAINER Rob McQueen
---> Using cache
---> 2497f1a1838e
Step 3/8 : RUN apt-get update && apt-get install -y python-dev python-virtualenv sudo
---> Using cache
---> 73436b884880
Step 4/8 : RUN mkdir /opt/ansible && virtualenv /opt/ansible/venv && /opt/ansible/venv/bin/pip install ansible
---> Running in 7c8aa8fbe804
New python executable in /opt/ansible/venv/bin/python
Installing distribute.............................................................................................................................................................................................done.
Installing pip...............done.
Downloading/unpacking ansible
Cannot fetch index base URL http://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement ansible
No distributions at all found for ansible
Storing complete log in /root/.pip/pip.log
The command '/bin/sh -c mkdir /opt/ansible && virtualenv /opt/ansible/venv && /opt/ansible/venv/bin/pip install ansible' returned a non-zero code: 1
Traceback (most recent call last):
File "/usr/local/bin/ansible-test", line 69, in <module>
main(context)
File "/usr/local/bin/ansible-test", line 45, in main
'-t', DOCKER_CONTAINER, '.']
File "/usr/lib/python2.7/subprocess.py", line 541, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'build', '-t', 'testbox', '.']' returned non-zero exit status 1
This is likely caused by the recent PyPi migration of trusted host site (see below)
Note: Sometime during April 2018, the Python Package Index was migrated from pypi.python.org to pypi.org. This means "trusted-host" commands using the old domain no longer work.
When running ansible-test
with --image ubuntu:16.04
, setup of the environment inside the container fail with
unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
Hi Everyone,
I seem to be running into issues setting this up on OSX. It looks like when I run ansible-test app
(from this repo: https://github.com/nylas/ansible-flask-example), it is using the old Dockerfile
.
I ran sudo pip install ansible-test --upgrade
and it said it is on the latest version.
I am the maintainer of the molecule project. I see this project is similar to ours. Would you be interested in joining forces?
John
I absolutely love this lightweight and fast testing tool, and that it doesn't require me to install all the weight of test-kitchen to run. However, I'm running into this problem no matter what I do:
Step 8 : CMD /opt/ansible/venv/bin/ansible-playbook -i inventory.yml -c local -s -e testing=true -e role=$DOCKER_TEST_ROLE -vvvv playbook.yml; /bin/bash
---> Running in 3187901e93db
---> b17e33c00016
Removing intermediate container 3187901e93db
Successfully built b17e33c00016
Usage: ansible-playbook playbook.yml
ansible-playbook: error: Sudo arguments ('--sudo', '--sudo-user', and '--ask-sudo-pass') and su arguments ('-su', '--su-user', and '--ask-su-pass') and become arguments ('--become', '--become-user', and '--ask-become-pass') are exclusive of each other
I get the same results with or without adding -vvvv.
The apt-* commands in the Dockerfile are hard-coded for Debian based distributions. It will be good to allow detection of OS family and change them with their yum equivalents.
$ ansible-test logstash -i centos
Sending build context to Docker daemon 193.5kB
Step 1/8 : FROM centos
---> 328edcd84f1b
Step 2/8 : MAINTAINER Rob McQueen
---> Using cache
---> d1c31afe5d68
Step 3/8 : RUN apt-get update && apt-get install -y python-dev python-virtualenv sudo
---> Running in 977da8b18afa
/bin/sh: apt-get: command not found
The command '/bin/sh -c apt-get update && apt-get install -y python-dev python-virtualenv sudo' returned a non-zero code: 127
Traceback (most recent call last):
File "/usr/local/bin/ansible-test", line 69, in <module>
main(context)
File "/usr/local/bin/ansible-test", line 45, in main
'-t', DOCKER_CONTAINER, '.']
File "/usr/lib/python2.7/subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'build', '-t', 'testbox', '.']' returned non-zero exit status 127
Hello! Ansible Core Engineering Team member here ๐ค.
ansible-core has a tool called ansible-test
. It used to be development-only but a few major versions back it started being exposed as ansible-test
executable and now if somebody will do pip install ansible-test ansible
, they'll conflict trying to overwrite each other.
Our official ansible-test
is a test runner that we use in our own CI for running various sanity, unit, and integration tests. Besides that, it's an official solution to running tests in end-users' Ansible Collections. In particular, it supports running tests in docker containers as well as in the host environment.
There's a different type of testing that's not covered by the official ansible-test but is covered by another active community project called Molecule. It allows running roles against automatically orchestrated envs, including container-based, just like this project.
Looking at the activity of this repository, it seems to be unmaintained for the last 3 years (and the PyPI release was 6 years ago). It only seems fair to recommend users to use the official tooling from Ansible Core and Molecule projects.
There's one problem, though: when folks hear about the need to use ansible-test
, they often end up in this dead project while they are expected to use the official one. This creates some amount of friction as it is misleading.
@jerm @grinich @rcoh @SJLC @spang @woohgit would you be open to migrating this project to a different name on GitHub and PyPI to help reduce the confusion this collision creates?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.