Merge "Revert "introduce test-kitchen""
This commit is contained in:
commit
d093e6686c
@ -1,12 +0,0 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
hostname: heat.ci.local
|
||||
use_sudo: false
|
||||
|
||||
|
||||
provisioner:
|
||||
grains:
|
||||
noservices: True
|
||||
|
||||
|
@ -1,41 +0,0 @@
|
||||
|
||||
# usage: `KITCHEN_LOCAL_YAML=.kitchen.openstack.yml kitchen test`
|
||||
|
||||
# https://docs.chef.io/config_yml_kitchen.html
|
||||
# https://github.com/test-kitchen/kitchen-openstack
|
||||
|
||||
---
|
||||
driver:
|
||||
name: openstack
|
||||
openstack_auth_url: <%= ENV['OS_AUTH_URL'] %>/tokens
|
||||
openstack_username: <%= ENV['OS_USERNAME'] || 'ci' %>
|
||||
openstack_api_key: <%= ENV['OS_PASSWORD'] || 'ci' %>
|
||||
openstack_tenant: <%= ENV['OS_TENANT_NAME'] || 'ci_jenkins' %>
|
||||
|
||||
#floating_ip_pool: <%= ENV['OS_FLOATING_IP_POOL'] || 'nova' %>
|
||||
key_name: <%= ENV['BOOTSTRAP_SSH_KEY_NAME'] || 'bootstrap_insecure' %>
|
||||
private_key_path: <%= ENV['BOOTSTRAP_SSH_KEY_PATH'] || "#{ENV['HOME']}/.ssh/id_rsa_bootstrap_insecure" %>
|
||||
|
||||
|
||||
platforms:
|
||||
- name: ubuntu-14.04
|
||||
driver:
|
||||
username: <%= ENV['OS_UBUNTU_IMAGE_USER'] || 'root' %>
|
||||
image_ref: <%= ENV['OS_UBUNTU_IMAGE_REF'] || 'ubuntu-14-04-x64-1455869035' %>
|
||||
flavor_ref: m1.medium
|
||||
network_ref:
|
||||
<% if ENV['OS_NETWORK_REF'] -%>
|
||||
- <% ENV['OS_NETWORK_REF'] %>
|
||||
<% else -%>
|
||||
- ci-net
|
||||
<% end -%>
|
||||
# force update apt cache on the image
|
||||
run_list:
|
||||
- recipe[apt]
|
||||
attributes:
|
||||
apt:
|
||||
compile_time_update: true
|
||||
transport:
|
||||
username: <%= ENV['OS_UBUNTU_IMAGE_USER'] || 'root' %>
|
||||
|
||||
# vim: ft=yaml sw=2 ts=2 sts=2 tw=125
|
53
.kitchen.yml
53
.kitchen.yml
@ -1,53 +0,0 @@
|
||||
---
|
||||
driver:
|
||||
name: vagrant
|
||||
vm_hostname: heat.ci.local
|
||||
use_sudo: false
|
||||
customize:
|
||||
memory: 512
|
||||
|
||||
|
||||
provisioner:
|
||||
name: salt_solo
|
||||
salt_install: bootstrap
|
||||
salt_bootstrap_url: https://bootstrap.saltstack.com
|
||||
salt_version: latest
|
||||
formula: heat
|
||||
log_level: info
|
||||
state_top:
|
||||
base:
|
||||
"*":
|
||||
- heat
|
||||
pillars:
|
||||
top.sls:
|
||||
base:
|
||||
"*":
|
||||
- heat
|
||||
grains:
|
||||
noservices: False
|
||||
|
||||
|
||||
verifier:
|
||||
name: inspec
|
||||
sudo: true
|
||||
|
||||
|
||||
platforms:
|
||||
- name: ubuntu-14.04
|
||||
- name: ubuntu-16.04
|
||||
#- name: centos-7.1
|
||||
|
||||
|
||||
suites:
|
||||
|
||||
- name: server-cluster
|
||||
provisioner:
|
||||
pillars-from-files:
|
||||
heat.sls: tests/pillar/server_cluster.sls
|
||||
|
||||
- name: server-single
|
||||
provisioner:
|
||||
pillars-from-files:
|
||||
heat.sls: tests/pillar/server_single.sls
|
||||
|
||||
# vim: ft=yaml sw=2 ts=2 sts=2 tw=125
|
114
INTEGRATION.rst
114
INTEGRATION.rst
@ -1,114 +0,0 @@
|
||||
|
||||
Continuous Integration
|
||||
======================
|
||||
|
||||
We are using Jenkins to spin a kitchen instances in Docker or OpenStack environment.
|
||||
|
||||
If you would like to repeat, then you may use ``.kitchen.<backend>.yml`` configuration yaml in the main directory
|
||||
to override ``.kitchen.yml`` at some points.
|
||||
Usage: ``KITCHEN_LOCAL_YAML=.kitchen.<driver>.yml kitchen verify server-ubuntu-1404 -t tests/integration``.
|
||||
Example: ``KITCHEN_LOCAL_YAML=.kitchen.docker.yml kitchen verify server-ubuntu-1404 -t tests/integration``.
|
||||
|
||||
Be aware of fundamental differences of backends. The formula verification scripts are primarily tested with
|
||||
Vagrant driver.
|
||||
|
||||
CI uses a tuned `make kitchen` target defined in `Makefile` to perform following (Kitchen Test) actions:
|
||||
|
||||
1. *create*, provision an test instance (VM, container)
|
||||
2. *converge*, run a provisioner (shell script, kitchen-salt)
|
||||
3. *verify*, run a verification (inspec, other may be added)
|
||||
4. *destroy*
|
||||
|
||||
|
||||
Test Kitchen
|
||||
------------
|
||||
|
||||
|
||||
To install Test Kitchen is as simple as:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# install kitchen
|
||||
gem install test-kitchen
|
||||
|
||||
# install required plugins
|
||||
gem install kitchen-vagrant kitchen-docker kitchen-salt
|
||||
|
||||
# install additional plugins & tools
|
||||
gem install kitchen-openstack kitchen-inspec busser-serverspec
|
||||
|
||||
kitchen list
|
||||
kitchen test
|
||||
|
||||
of course you have to have installed Ruby and it's package manager `gem <https://rubygems.org/>`_ first.
|
||||
|
||||
One may be satisfied installing it system-wide right from OS package manager which is preferred installation method.
|
||||
For advanced users or the sake of complex environments you may use `rbenv <https://github.com/rbenv/rbenv>`_ for user side ruby installation.
|
||||
|
||||
* https://github.com/rbenv/rbenv
|
||||
* http://kitchen.ci/docs/getting-started/installing
|
||||
|
||||
An example steps then might be:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# get rbenv
|
||||
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
|
||||
|
||||
# configure
|
||||
cd ~/.rbenv && src/configure && make -C src # don't worry if it fails
|
||||
echo 'export PATH="$HOME/.rbenv/bin:$PATH"'>> ~/.bash_profile
|
||||
# Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile.
|
||||
cd ~/.rbenv; git fetch
|
||||
|
||||
# install ruby-build, which provides the rbenv install command
|
||||
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
|
||||
|
||||
# list all available versions:
|
||||
rbenv install -l
|
||||
|
||||
# install a Ruby version
|
||||
# maybe you will need additional packages: libssl-dev, libreadline-dev, zlib1g-dev
|
||||
rbenv install 2.0.0-p648
|
||||
|
||||
# activate
|
||||
rbenv local 2.0.0-p648
|
||||
|
||||
# install test kitchen
|
||||
gem install test-kitchen
|
||||
|
||||
|
||||
An optional ``Gemfile`` in the main directory may contain Ruby dependencies to be required for Test Kitchen workflow.
|
||||
To install them you have to install first ``gem install bundler`` and then run ``bundler install``.
|
||||
|
||||
|
||||
|
||||
Verifier
|
||||
--------
|
||||
|
||||
The `Busser <https://github.com/test-kitchen/busser>`_ *Verifier* goes with test-kitchen by default.
|
||||
It is used to setup and run tests implemented in `<repo>/test/integration`. It guess and installs the particular driver to tested instance.
|
||||
By default `InSpec <https://github.com/chef/kitchen-inspec>`_ is expected.
|
||||
|
||||
You may avoid to install busser framework if you configure specific verifier in `.kitchen.yml` and install it kitchen plugin locally:
|
||||
|
||||
verifier:
|
||||
name: serverspec
|
||||
|
||||
If you would to write another verification scripts than InSpec store them in ``<repo>/tests/integration/<suite>/<busser>/*``.
|
||||
``Busser <https://github.com/test-kitchen/busser>`` is a test setup and execution framework under test kitchen.
|
||||
|
||||
|
||||
|
||||
InSpec
|
||||
~~~~~~
|
||||
|
||||
Implement integration tests under ``<repo>/tests/integration/<suite>/<busser>/*`` directory with ``_spec.rb`` filename
|
||||
suffix.
|
||||
|
||||
Docs:
|
||||
|
||||
* https://github.com/chef/inspec
|
||||
* https://github.com/chef/kitchen-inspec
|
||||
|
||||
|
42
Makefile
42
Makefile
@ -1,28 +1,11 @@
|
||||
DESTDIR=/
|
||||
SALTENVDIR=/usr/share/salt-formulas/env
|
||||
RECLASSDIR=/usr/share/salt-formulas/reclass
|
||||
FORMULANAME=$(shell grep name: metadata.yml|head -1|cut -d : -f 2|grep -Eo '[a-z0-9\-\_]*')
|
||||
|
||||
MAKE_PID := $(shell echo $$PPID)
|
||||
JOB_FLAG := $(filter -j%, $(subst -j ,-j,$(shell ps T | grep "^\s*$(MAKE_PID).*$(MAKE)")))
|
||||
|
||||
ifneq ($(subst -j,,$(JOB_FLAG)),)
|
||||
JOBS := $(subst -j,,$(JOB_FLAG))
|
||||
else
|
||||
JOBS := 1
|
||||
endif
|
||||
|
||||
KITCHEN_LOCAL_YAML?=.kitchen.yml
|
||||
KITCHEN_OPTS?="--concurrency=$(JOBS)"
|
||||
KITCHEN_OPTS_CREATE?=""
|
||||
KITCHEN_OPTS_CONVERGE?=""
|
||||
KITCHEN_OPTS_VERIFY?=""
|
||||
KITCHEN_OPTS_TEST?=""
|
||||
FORMULANAME=$(shell grep name: metadata.yml|head -1|cut -d : -f 2|grep -Eo '[a-z0-9\-]*')
|
||||
|
||||
all:
|
||||
@echo "make install - Install into DESTDIR"
|
||||
@echo "make test - Run tests"
|
||||
@echo "make kitchen - Run Kitchen CI tests (create, converge, verify)"
|
||||
@echo "make clean - Cleanup after tests run"
|
||||
|
||||
install:
|
||||
@ -38,29 +21,6 @@ install:
|
||||
test:
|
||||
[ ! -d tests ] || (cd tests; ./run_tests.sh)
|
||||
|
||||
kitchen: kitchen-create kitchen-converge kitchen-verify kitchen-list
|
||||
|
||||
kitchen-create:
|
||||
kitchen create ${KITCHEN_OPTS} ${KITCHEN_OPTS_CREATE}
|
||||
[ "$(shell echo $(KITCHEN_LOCAL_YAML)|grep -Eo docker)" = "docker" ] || sleep 120
|
||||
|
||||
kitchen-converge:
|
||||
kitchen converge ${KITCHEN_OPTS} ${KITCHEN_OPTS_CONVERGE} &&\
|
||||
kitchen converge ${KITCHEN_OPTS} ${KITCHEN_OPTS_CONVERGE}
|
||||
|
||||
kitchen-verify:
|
||||
[ ! -d tests/integration ] || kitchen verify -t tests/integration ${KITCHEN_OPTS} ${KITCHEN_OPTS_VERIFY}
|
||||
[ -d tests/integration ] || kitchen verify ${KITCHEN_OPTS} ${KITCHEN_OPTS_VERIFY}
|
||||
|
||||
kitchen-test:
|
||||
[ ! -d tests/integration ] || kitchen test -t tests/integration ${KITCHEN_OPTS} ${KITCHEN_OPTS_TEST}
|
||||
[ -d tests/integration ] || kitchen test ${KITCHEN_OPTS} ${KITCHEN_OPTS_TEST}
|
||||
|
||||
kitchen-list:
|
||||
kitchen list
|
||||
|
||||
clean:
|
||||
[ ! -x "$(shell which kitchen)" ] || kitchen destroy
|
||||
[ ! -d .kitchen ] || rm -rf .kitchen
|
||||
[ ! -d tests/build ] || rm -rf tests/build
|
||||
[ ! -d build ] || rm -rf build
|
||||
|
51
README.rst
51
README.rst
@ -161,53 +161,4 @@ repository at:
|
||||
|
||||
Developers should also join the discussion on the IRC list, at:
|
||||
|
||||
https://wiki.openstack.org/wiki/Meetings/openstack-salt
|
||||
Development and testing
|
||||
=======================
|
||||
|
||||
Development and test workflow with `Test Kitchen <http://kitchen.ci>`_ and
|
||||
`kitchen-salt <https://github.com/simonmcc/kitchen-salt>`_ provisioner plugin.
|
||||
|
||||
Test Kitchen is a test harness tool to execute your configured code on one or more platforms in isolation.
|
||||
There is a ``.kitchen.yml`` in main directory that defines *platforms* to be tested and *suites* to execute on them.
|
||||
|
||||
Kitchen CI can spin instances locally or remote, based on used *driver*.
|
||||
For local development ``.kitchen.yml`` defines a `vagrant <https://github.com/test-kitchen/kitchen-vagrant>`_ or
|
||||
`docker <https://github.com/test-kitchen/kitchen-docker>`_ driver.
|
||||
|
||||
To use backend drivers or implement your CI follow the section `INTEGRATION.rst#Continuous Integration`__.
|
||||
|
||||
A listing of scenarios to be executed:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
$ kitchen list
|
||||
|
||||
Instance Driver Provisioner Verifier Transport Last Action
|
||||
|
||||
server-cluster-ubuntu-1404 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
server-cluster-ubuntu-1604 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
server-cluster-centos-71 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
server-single-ubuntu-1404 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
server-single-ubuntu-1604 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
server-single-centos-71 Vagrant SaltSolo Inspec Ssh <Not Created>
|
||||
|
||||
The `Busser <https://github.com/test-kitchen/busser>`_ *Verifier* is used to setup and run tests
|
||||
implementated in `<repo>/test/integration`. It installs the particular driver to tested instance
|
||||
(`Serverspec <https://github.com/neillturner/kitchen-verifier-serverspec>`_,
|
||||
`InSpec <https://github.com/chef/kitchen-inspec>`_, Shell, Bats, ...) prior the verification is executed.
|
||||
|
||||
|
||||
Usage:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# list instances and status
|
||||
kitchen list
|
||||
|
||||
# manually execute integration tests
|
||||
kitchen [test || [create|converge|verify|exec|login|destroy|...]] [instance] -t tests/integration
|
||||
|
||||
# use with provided Makefile (ie: within CI pipeline)
|
||||
make kitchen
|
||||
|
||||
https://wiki.openstack.org/wiki/Meetings/openstack-salt
|
@ -37,9 +37,6 @@ heat:
|
||||
tenant: service
|
||||
user: heat
|
||||
password: password
|
||||
admin_tenant: admin
|
||||
admin_user: admin
|
||||
admin_password: admin
|
||||
message_queue:
|
||||
engine: rabbitmq
|
||||
members:
|
||||
|
@ -37,9 +37,6 @@ heat:
|
||||
tenant: service
|
||||
user: heat
|
||||
password: password
|
||||
admin_tenant: admin
|
||||
admin_user: admin
|
||||
admin_password: admin
|
||||
message_queue:
|
||||
engine: rabbitmq
|
||||
host: 127.0.0.1
|
||||
|
Loading…
Reference in New Issue
Block a user