Specinfra Docker Compose Backend

Documentation GitHub License

Gem Version Dependency Status Code Climate Travis CI Build Status Circle CI Build Status Coverage Status Inline docs

Serverspec / Specinfra backend for Docker Compose.

Requirements

  • Recommended Docker 1.7.0 or higher.
  • Docker Compose

Installation

Add this line to your application's Gemfile:

# Gemfile

gem 'specinfra-backend-docker_compose', '~> 0.1.0'

And then execute:

$ bundle

Or install it yourself as:

$ gem install specinfra-backend-docker_compose

Usage

Create the Docker Compose configuration to test:

# docker-compose.yml

web:
  build: .
  links:
  - db:mysql
  ports:
  - 8080:80

db:
  image: mariadb
  environment:
  - MYSQL_ROOT_PASSWORD=example

And a file example with some Serverspec tests:

# web_test_spec.rb

require 'serverspec'
require 'specinfra/backend/docker_compose'

set :docker_compose_file, './docker-compose.yml'
set :docker_compose_container, :web # The compose container to test
set :docker_wait, 15 # wait 15 seconds before running the tests
set :backend, :docker_compose

describe 'docker-compose.yml run' do
  describe service('httpd') do
    it { should be_enabled }
    it { should be_running }
  end
end

To run the tests:

$ rspec web_test_spec.rb

Configuration

Uses the following Specinfra configuration options:

  • :docker_compose_file: Docker Compose configuration file path (required).
  • :docker_compose_container: The name of the container you want to test (required). Only one can be tested.
  • :docker_wait: Seconds to wait for containers to start (i.e., time to sleep before running the tests) (recommended).
  • :backend: :docker_compose or :docker_compose_lxc (for LXC execution driver). Always set it after all other options.

Keep in mind that some CI environments may be somewhat slower than usual. So maybe you will need to increase the :docker_wait value to one or two minutes to allow more time for services to start.

Some options used only by the :docker_compose_lxc backend:

  • :sudo_options: Sudo command argument list as string or as array.
  • :sudo_path: Sudo binary directory.
  • :sudo_password
  • :disable_sudo: whether to disable Sudo (enabled by default).

For example:

set :sudo_password, '0deH3R7RbHoEwzIqQGCD'

Important Warning

This backend uses the docker-compose-api Ruby gem to emulate Docker Compose. So, some docker-compose.yml configuration options may not be supported yet or may not work exactly the same. Let us know if you find any bug or you need a missing feature.

Thanks to Mauricio Klein for all his work by the way!

Testing

See TESTING.md.

Contributing

Please do not hesitate to open an issue with any questions or problems.

See CONTRIBUTING.md.

TODO

See TODO.md.

License and Author

Author: Xabier de Zuazo ([email protected])
Copyright: Copyright (c) 2016 Xabier de Zuazo
License: Apache License, Version 2.0
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.