Skip to content

Latest commit

 

History

History
273 lines (193 loc) · 8.06 KB

README.md

File metadata and controls

273 lines (193 loc) · 8.06 KB

Kitchen::Ec2: A Test Kitchen Driver for Amazon EC2

Gem Version Build Status Code Climate

A Test Kitchen Driver for Amazon EC2.

This driver uses the fog gem to provision and destroy EC2 instances. Use Amazon's cloud for your infrastructure testing!

Requirements

There are no external system requirements for this driver. However you will need access to an AWS account.

Installation and Setup

Please read the Driver usage page for more details.

Default Configuration

This driver can determine AMI and username login for a select number of platforms in each region. Currently, the following platform names are supported:

---
platforms:
- name: ubuntu-10.04
- name: ubuntu-12.04
- name: ubuntu-12.10
- name: ubuntu-13.04
- name: centos-6.4
- name: debian-7.1.0

This will effectively generate a configuration similar to:

---
platforms:
- name: ubuntu-10.04
  driver_config:
    image_id: ami-1ab3ce73
    username: ubuntu
- name: ubuntu-12.04
  driver_config:
    image_id: ami-2f115c46
    username: ubuntu
# ...
- name: centos-6.4
  driver_config:
    image_id: ami-bf5021d6
    username: root
# ...

For specific default values, please consult amis.json.

Configuration

availability_zone

Required The AWS availability zone to use.

The default is "us-east-1b".

aws_access_key_id

Required The AWS access key id to use.

The default will be read from the AWS_ACCESS_KEY environment variable if set, or nil otherwise.

aws_secret_access_key

Required The AWS secret access key to use.

The default will be read from the AWS_SECRET_KEY environment variable if set, or nil otherwise.

aws_ssh_key_id

Required The EC2 SSH key id to use.

The default will be read from the AWS_SSH_KEY_ID environment variable if set, or nil otherwise.

flavor_id

The EC2 instance type (also known as size) to use.

The default is "m1.small".

groups

An Array of EC security groups which will be applied to the instance.

The default is ["default"].

image_id

Required The EC2 AMI id to use.

The default will be determined by the aws_region chosen and the Platform name, if a default exists (see [amis.json][ami_json]). If a default cannot be computed, then the default is nil.

port

The SSH port number to be used when communicating with the instance.

The default is 22.

region

Required The AWS region to use.

The default is "us-east-1".

require_chef_omnibus

Determines whether or not a Chef Omnibus package will be installed. There are several different behaviors available:

  • true - the latest release will be installed. Subsequent converges will skip re-installing if chef is present.
  • latest - the latest release will be installed. Subsequent converges will always re-install even if chef is present.
  • <VERSION_STRING> (ex: 10.24.0) - the desired version string will be passed the the install.sh script. Subsequent converges will skip if the installed version and the desired version match.
  • false or nil - no chef is installed.

The default value is unset, or nil.

ssh_key

Path to the private SSH key used to connect to the instance.

The default is unset, or nil.

subnet_id

The EC2 subnet to use.

The default is unset, or nil.

sudo

Whether or not to prefix remote system commands such as installing and running Chef with sudo.

The default is true.

tags

The Hash of EC tag name/value pairs which will be applied to the instance.

The default is { "created-by" => "test-kitchen" }.

username

The SSH username that will be used to communicate with the instance.

The default will be determined by the Platform name, if a default exists (see amis.json). If a default cannot be computed, then the default is "root".

Example

The following could be used in a .kitchen.yml or in a .kitchen.local.yml to override default configuration.

---
driver_plugin: ec2
driver_config:
  aws_access_key_id: KAS...
  aws_secret_access_key: 3UK...
  aws_ssh_key_id: id_rsa-aws
  ssh_key: /path/to/id_rsa-aws
  region: us-east-1
  availability_zone: us-east-1b
  require_chef_omnibus: true
  subnet_id: subnet-6d6...

platforms:
- name: ubuntu-12.04
  driver_config:
    image_id: ami-fd20ad94
    username: ubuntu
- name: centos-6.3
  driver_config:
    image_id: ami-ef5ff086
    username: ec2-user

suites:
# ...

Both .kitchen.yml and .kitchen.local.yml files are pre-processed through ERB which can help to factor out secrets and credentials. For example:

---
driver_plugin: ec2
driver_config:
  aws_access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
  aws_secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
  aws_ssh_key_id: <%= ENV['AWS_SSH_KEY_ID'] %>
  ssh_key: <%= File.expand_path('~/.ssh/id_rsa') %>
  region: us-east-1
  availability_zone: us-east-1b
  require_chef_omnibus: true

platforms:
- name: ubuntu-12.04
  driver_config:
    image_id: ami-fd20ad94
    username: ubuntu
- name: centos-6.3
  driver_config:
    image_id: ami-ef5ff086
    username: ec2-user

suites:
# ...

Development

Pull requests are very welcome! Make sure your patches are well tested. Ideally create a topic branch for every separate change you make. For example:

  1. Fork the repo
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Authors

Created and maintained by Fletcher Nichol ([email protected])

License

Apache 2.0 (see LICENSE)