├── .gitignore ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── itamae-plugin-resource-aws.gemspec └── lib └── itamae └── plugin └── resource ├── aws.rb └── aws ├── ebs_volume.rb └── version.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | Gemfile.lock 7 | InstalledFiles 8 | _yardoc 9 | coverage 10 | doc/ 11 | lib/bundler/man 12 | pkg 13 | rdoc 14 | spec/reports 15 | test/tmp 16 | test/version_tmp 17 | tmp 18 | *.bundle 19 | *.so 20 | *.o 21 | *.a 22 | mkmf.log 23 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in itamae-plugin-resource-aws.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Gosuke Miyashita 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Itamae::Plugin::Resource::Aws 2 | 3 | This is [Itamae](http://itamae.kitchen/) plugin for controlling AWS resources. 4 | 5 | Currently supports creating EBS volmues only. But we will add more features. 6 | 7 | ## Installation 8 | 9 | Add this line to your application's Gemfile: 10 | 11 | gem 'itamae-plugin-resource-aws' 12 | 13 | And then execute: 14 | 15 | $ bundle 16 | 17 | Or install it yourself as: 18 | 19 | $ gem install itamae-plugin-resource-aws 20 | 21 | ## Usage 22 | 23 | ```ruby 24 | require 'itamae/plugin/resource/aws' 25 | 26 | Aws.config[:region] = 'ap-northeast-1' 27 | 28 | aws_ebs_volume 'db_ebs_volume' do 29 | action [:create, :attach] # :attach is not supported currently 30 | availability_zone 'ap-northeast-1b' 31 | device '/dev/xvdf' 32 | volume_type 'standard' 33 | size 10 34 | end 35 | ``` 36 | 37 | ## Contributing 38 | 39 | 1. Fork it ( https://github.com/[my-github-username]/itamae-plugin-resource-aws/fork ) 40 | 2. Create your feature branch (`git checkout -b my-new-feature`) 41 | 3. Commit your changes (`git commit -am 'Add some feature'`) 42 | 4. Push to the branch (`git push origin my-new-feature`) 43 | 5. Create a new Pull Request 44 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | 3 | -------------------------------------------------------------------------------- /itamae-plugin-resource-aws.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'itamae/plugin/resource/aws/version' 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = "itamae-plugin-resource-aws" 8 | spec.version = Itamae::Plugin::Resource::Aws::VERSION 9 | spec.authors = ["Gosuke Miyashita"] 10 | spec.email = ["gosuke-miyashita@cookpad.com"] 11 | spec.summary = "Itamae plugin for control AWS resources" 12 | spec.description = "Itamae plugin for control AWS resources" 13 | spec.homepage = "" 14 | spec.license = "MIT" 15 | 16 | spec.files = `git ls-files -z`.split("\x0") 17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 19 | spec.require_paths = ["lib"] 20 | 21 | spec.add_development_dependency "bundler", "~> 1.6" 22 | spec.add_development_dependency "rake" 23 | 24 | spec.add_runtime_dependency "itamae" 25 | spec.add_runtime_dependency "aws-sdk", "~>2" 26 | end 27 | -------------------------------------------------------------------------------- /lib/itamae/plugin/resource/aws.rb: -------------------------------------------------------------------------------- 1 | require 'itamae/plugin/resource/aws/version' 2 | require 'itamae/plugin/resource/aws/ebs_volume' 3 | require 'aws-sdk' 4 | -------------------------------------------------------------------------------- /lib/itamae/plugin/resource/aws/ebs_volume.rb: -------------------------------------------------------------------------------- 1 | require 'itamae' 2 | 3 | module Itamae 4 | module Plugin 5 | module Resource 6 | class AwsEbsVolume < Itamae::Resource::Base 7 | define_attribute :action, default: :create 8 | define_attribute :name, type: String, default_name: true 9 | define_attribute :availability_zone, type: String 10 | define_attribute :device, type: String 11 | define_attribute :volume_type, type: String 12 | define_attribute :size, type: Integer 13 | 14 | def action_create(options) 15 | ec2 = ::Aws::EC2::Client.new 16 | volumes = ec2.describe_volumes( 17 | { 18 | filters: [ 19 | { 20 | name: 'tag:Name', 21 | values: [ attributes.name ], 22 | }, 23 | ], 24 | } 25 | ).volumes 26 | 27 | if volumes.empty? 28 | @volume = ec2.create_volume( 29 | size: attributes[:size], # attributes.size returns the size of attributes hash 30 | availability_zone: attributes.availability_zone, 31 | volume_type: attributes.volume_type, 32 | ) 33 | 34 | ec2.create_tags( 35 | { 36 | resources: [ @volume.volume_id ], 37 | tags: [ 38 | { 39 | key: 'Name', 40 | value: attributes.name, 41 | }, 42 | ], 43 | } 44 | ) 45 | 46 | updated! 47 | else 48 | @volume = volumes[0] 49 | end 50 | 51 | end 52 | 53 | def action_attach(options) 54 | # TODO 55 | end 56 | end 57 | end 58 | end 59 | end 60 | 61 | -------------------------------------------------------------------------------- /lib/itamae/plugin/resource/aws/version.rb: -------------------------------------------------------------------------------- 1 | module Itamae 2 | module Plugin 3 | module Resource 4 | module Aws 5 | VERSION = "0.0.1" 6 | end 7 | end 8 | end 9 | end 10 | --------------------------------------------------------------------------------