bosh_ladle 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9db7accb49f22112b79e02fe97d16793be59eb78
4
+ data.tar.gz: ea5a61e70ae718ec05e86fe4f7ecad453c63a593
5
+ SHA512:
6
+ metadata.gz: ddd995fa0535b05d86fc5ca9035bea89cb5f547c6e2c321eedeaa6f32e845e888be902a9686cb601bfdb146215e816d6f82f2a31ba0c33dc51afc7454a63db78
7
+ data.tar.gz: de3530c1d9deb477eae9609b05e40f01e480dd5d1a08a4416925d3bb3a5039c606d58e9c4e20ba368ad5362e26421c8b09756928cb4ef9282cf8e1cbfd6e436a
data/bin/bosh_ladle ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bosh_ladle/cli'
4
+
5
+ return_code = BOSHLadle::Cli.new.run(ARGV)
6
+ exit return_code.to_i
data/lib/bosh_ladle.rb ADDED
File without changes
@@ -0,0 +1,11 @@
1
+ require 'net/http'
2
+ module BOSHLadle
3
+ class AMI
4
+ def self.latest
5
+ bosh_artifacts = 'bosh-lite-build-artifacts.s3.amazonaws.com'
6
+ ami_index = '/ami/bosh-lite-ami.list'
7
+
8
+ Net::HTTP.get(bosh_artifacts, ami_index).split("\n").last
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ require 'bosh_ladle/ami'
2
+ require 'logger'
3
+
4
+ module BOSHLadle
5
+ class BOSHLite
6
+ def self.spinup(ec2, subnet, name, security_group, key_pair_name, instance_type, logger=Logger.new(STDOUT))
7
+ instance = ec2.vpcs.first.instances.create(
8
+ subnet_id: subnet,
9
+ image_id: AMI.latest,
10
+ security_groups: security_group,
11
+ key_name: key_pair_name,
12
+ instance_type: instance_type
13
+ )
14
+ instance.tag('Name', value: name)
15
+
16
+ wait_for_instance_ready(instance, logger)
17
+ address = wait_for_ip(instance, logger)
18
+
19
+ logger.info("Instance IP: #{address}")
20
+ end
21
+
22
+ private
23
+
24
+ def self.wait_for_instance_ready(instance, logger)
25
+ while instance.status == :pending
26
+ logger.info('Waiting for instance to be available...')
27
+ sleep 1
28
+ end
29
+ end
30
+
31
+ def self.wait_for_ip(instance, logger)
32
+ until address = instance.private_ip_address
33
+ logger.info('Waiting for IP address...')
34
+ sleep 1
35
+ end
36
+
37
+ address
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ require 'trollop'
2
+ require 'aws-sdk'
3
+
4
+ require 'bosh_ladle/bosh_lite'
5
+
6
+ module BOSHLadle
7
+ class Cli
8
+ def initialize
9
+ @opts = {}
10
+ end
11
+
12
+ def run(args)
13
+
14
+ raise ArgumentError.new('Please set AWS_ACCESS_KEY_ID in the environment') if ENV['AWS_ACCESS_KEY_ID'].nil?
15
+ raise ArgumentError.new('Please set AWS_SECRET_ACCESS_KEY in the environment') if ENV['AWS_SECRET_ACCESS_KEY'].nil?
16
+
17
+ @opts = Trollop::options(args) do
18
+ banner <<-PROGINFO
19
+ This script is meant to spin up BOSH lite VMs inside the GoCD VPC on AWS.
20
+ It requires AWS credentials stored in the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables to use EC2.
21
+ Furthermore, it uses the most recently created BOSH-lite AMI available on the AWS marketplace to create the VM.
22
+
23
+ Options:
24
+ PROGINFO
25
+ opt :instance_type, "AWS instance type to use", :type => :string, :default => 'm3.xlarge'
26
+ opt :subnet_id, "The subnet ID to put the VM into (e.g. 'subnet-123abc45')", :type => :string, required: true
27
+ opt :security_group, "The security group to put the VM into", :type => :string, :default => 'bosh', :short => 'g'
28
+ opt :key_pair, "The key pair to use (must be available in AWS)", :type => :string, :default => 'gocd_bosh_lite'
29
+ opt :name, "A name passed to the BOSH lite image (e.g. <team-name>)", :type => :string, required: true
30
+ end
31
+
32
+ ec2 = AWS::EC2.new(
33
+ :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
34
+ :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
35
+ )
36
+
37
+ BOSHLite.spinup(ec2, opts.subnet_id, opts.name, opts.security_group, opts.key_pair, opts.instance_type)
38
+ 0
39
+ end
40
+
41
+ attr_reader :opts
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bosh_ladle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - mmb
8
+ - quavmo
9
+ - gajwani
10
+ - chou
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2014-05-08 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: trollop
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: aws-sdk
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ - !ruby/object:Gem::Dependency
45
+ name: webmock
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ description: |+
59
+ *noun*
60
+
61
+ 1. a large long-handled spoon with a cup-shaped bowl, used for serving soup, stew, or sauce.
62
+ 2. a small single-command CLI tool used for deploying [BOSH-lite](http://github.com/cloudfoundry/bosh-lite) to the first VPC in an AWS account.
63
+
64
+ email: support@cloudfoundry.com
65
+ executables:
66
+ - bosh_ladle
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - lib/bosh_ladle.rb
71
+ - lib/bosh_ladle/ami.rb
72
+ - lib/bosh_ladle/bosh_lite.rb
73
+ - lib/bosh_ladle/cli.rb
74
+ - bin/bosh_ladle
75
+ homepage: https://github.com/pivotal-cf-experimental/gocd_scripts
76
+ licenses:
77
+ - Apache 2.0
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.0.14
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: a CLI for deploying BOSH-lite to the first VPC in an AWS account.
99
+ test_files: []