Giter Club home page Giter Club logo

kitchen-ansible's Introduction

kitchen-ansible

Gem Version Gem Downloads Build Status

A Test Kitchen Provisioner for Ansible

The provider works by passing the ansible repository based on attributes in .kitchen.yml & calling ansible-playbook.

It install ansible on the server and runs ansible-playbook using host localhost.

Has been tested against the Ubuntu 1204 and Centos 6.5 boxes running in vagrant/virtualbox.

Requirements

You'll need a driver box without a chef installation so ansible can be installed.

Installation & Setup

You'll need the test-kitchen & kitchen-ansible gem's installed in your system, along with kitchen-vagrant or some other suitable driver for test-kitchen.

Please see the Provisioner Options (https://github.com/neillturner/kitchen-ansible/blob/master/provisioner_options.md).

Example kitchen.yml file

based on the example ansible setup for tomcat at https://github.com/ansible/ansible-examples/tree/master/tomcat-standalone

---
driver:
    name: vagrant

provisioner:
  name: ansible_playbook
  roles_path: roles
  hosts: tomcat-servers
  require_ansible_repo: true
  ansible_verbose: true
  ansible_version:   1.6.2-1.el6
  extra_vars:
    a: b

platforms:
  - name: nocm_centos-6.5
    driver_plugin: vagrant
    driver_config:
      box: nocm_centos-6.5
      box_url: http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-nocm.box
      network:
      - ['forwarded_port', {guest: 8080, host: 8080}]
      - [ 'private_network', { ip: '192.168.33.11' } ]

Test-Kitchen/Ansible/Serverspec

In the root directory for your Ansible role:

Create a .kitchen.yml, much like one the described above:

  ---
  driver:
    name: vagrant

  provisioner:
    name: ansible_playbook
    playbook: default.yml
    ansible_yum_repo: "https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm"
    ansible_verbose: true
    ansible_verbosity: 3
    hosts: all

  platforms:
    - name: ubuntu-12.04
      driver_config:
        box: ubuntu/precise32
    - name: centos-7
      driver_config:
         box: chef/centos-7.0

  suites:
    - name: default

NOTE: With Test-Kitchen 1.4 you not longer need chef install to run the tests. You just need ruby installed version 1.9 or higher and also add to the .kitchen.yml file

  verifier:
    ruby_bindir: '/usr/bin'

where /usr/bin is the location of the ruby command.

Then for serverspec:

  mkdir -p test/integration/default/serverspec/localhost
  echo "require 'serverspec'" >> test/integration/default/serverspec/spec_helper.rb
  echo "set :backend, :exec" >> test/integration/default/serverspec/spec_helper.rb

Create a basic playbook test/integration/default.yml so that kitchen can use your role (this should include any dependencies for your role):

  ---
  - name: wrapper playbook for kitchen testing "my_role"
    hosts: localhost
    roles:
      - my_role

Create your serverspec tests in test/integration/default/serverspec/localhost/my_roles_spec.rb:

  require 'spec_helper'

  if os[:family] == 'ubuntu'
        describe '/etc/lsb-release' do
          it "exists" do
              expect(file('/etc/lsb-release').to be_file
          end
        end
  end

  if os[:family] == 'redhat'
    describe '/etc/redhat-release' do
      it "exists" do
          expect(file('/etc/redhat-release')).to be_file
      end
    end
  end

Testing multiple playbooks

To test different playbooks in different suites you can easily overwrite the provisioner settings in each suite seperately.

---
  driver:
    name: vagrant

  provisioner:
    name: ansible_playbook

  platforms:
    - name: ubuntu-12.04
      driver_config:
        box: ubuntu/precise32
    - name: centos-7
      driver_config:
         box: chef/centos-7.0

  suites:
    - name: database
      provisioner:
        playbook: postgres.yml
        hosts: database
    - name: application
      provisioner:
        playbook: web_app.yml
        hosts: web_application

Notes

  • The default in all of the above is the name of the test suite defined in the 'suites' section of your .kitchen.yml, so if you have more than suite of tests or change the name, you'll need to adapt my example accordingly.
  • serverspec test files must be named _spec.rb
  • Since I'm using Vagrant, my box definitions refer to Vagrant boxes, either standard, published boxes available from http://atlas.hashicorp.com/boxes or custom-created boxes (perhaps using Packer and bento), in which case you'll need to provide the url in box_url.
  • This could be adapted to using Openstack/AWS/whatever VMs as supported by Vagrant.

kitchen-ansible's People

Contributors

ahelal avatar dhutty avatar ernoaapa avatar jaimegildesagredo avatar jolexa avatar ktosiek avatar neillturner avatar soupdiver avatar tjsoftworks avatar trinitronx avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.