eops 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.
@@ -0,0 +1,8 @@
1
+ require 'eops/artifact.rb'
2
+ require 'eops/database.rb'
3
+ require 'eops/domain.rb'
4
+ require 'eops/image.rb'
5
+ require 'eops/instance.rb'
6
+ require 'eops/key_pair.rb'
7
+ require 'eops/stack.rb'
8
+ require 'eops/storage.rb'
@@ -0,0 +1,10 @@
1
+ class Artifact
2
+ def initialize
3
+ end
4
+
5
+ def add_timestamp(build_identifier, artifact)
6
+ timestamp = Time.now.strftime("%Y.%m.%d.%H.%M.%S.%L")
7
+ stamped_artifact = "#{artifact}-#{build_identifier}-#{timestamp}"
8
+ return stamped_artifact
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class Database
2
+ def initialize
3
+ end
4
+
5
+ def create
6
+ end
7
+
8
+ def destroy
9
+ end
10
+ end
@@ -0,0 +1,44 @@
1
+ require 'aws-sdk'
2
+
3
+ class Domain
4
+
5
+ def initialize
6
+ @sdb = AWS::SimpleDB.new
7
+ end
8
+
9
+ def create(domain_name)
10
+ AWS::SimpleDB.consistent_reads do
11
+ @sdb.domains.create(domain_name)
12
+ end
13
+ end
14
+
15
+ def destroy(domain_name)
16
+ @sdb.domains[domain_name].delete
17
+ end
18
+
19
+ def destroy_item(domain_name, item_name)
20
+ @sdb.domains[domain_name].items[item_name].delete
21
+ end
22
+
23
+ def get_property(sdb_domain, item_name, key)
24
+ AWS::SimpleDB.consistent_reads do
25
+ item = @sdb.domains[sdb_domain].items[item_name]
26
+
27
+ item.attributes.each_value do |name, value|
28
+ if name == key
29
+ @property_value = value.chomp
30
+ end
31
+ end
32
+ end
33
+
34
+ return @property_value
35
+ end
36
+
37
+ def set_property(sdb_domain, item_name, property, value)
38
+ AWS::SimpleDB.consistent_reads do
39
+ item = @sdb.domains[sdb_domain].items[item_name]
40
+
41
+ item.attributes.set(property => [value])
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,28 @@
1
+ class Image
2
+
3
+ def initialize
4
+ @ec2 = AWS::EC2.new
5
+ @sdb = AWS::SimpleDB.new
6
+ @auto_scale = AWS::AutoScaling.new
7
+ end
8
+
9
+ def create(as_group_name, image_name, sdb_domain, type, key)
10
+ domain = Domain.new
11
+ image = @ec2.images.create(
12
+ instance_id: @auto_scale.groups[as_group_name].auto_scaling_instances.first.id,
13
+ name: image_name
14
+ )
15
+
16
+ sleep 10
17
+
18
+ while image.state != :available
19
+ sleep 10
20
+ case image.state
21
+ when :failed
22
+ image.delete
23
+ raise RuntimeError, 'Image Creation Failed'
24
+ end
25
+ end
26
+ domain.set_property(sdb_domain, key, type, image.id)
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ class Instance
2
+ def initialize
3
+ @ec2 = AWS::EC2.new
4
+ @auto_scaling= AWS::AutoScaling.new
5
+ end
6
+
7
+ def destroy
8
+ end
9
+
10
+ def find_in_as_group(as_group_name)
11
+ first_instance = @auto_scaling.groups[as_group_name].auto_scaling_instances.first.id
12
+
13
+ return @ec2.instances[first_instance].ip_address
14
+ end
15
+
16
+ def find_sg_name(sg_id)
17
+ @ec2.security_groups[sgid].name
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ class KeyPair
2
+ def initialize
3
+ @ec2 = AWS::EC2.new
4
+ end
5
+
6
+ def create(name)
7
+ key_pair = @ec2.key_pairs.create(name)
8
+ File.open("/tmp/#{name}", "w") do |f|
9
+ f.write(key_pair.private_key)
10
+ end
11
+ end
12
+
13
+ def delete(name)
14
+ @ec2.key_pairs[name].delete
15
+ end
16
+ end
@@ -0,0 +1,46 @@
1
+ class Stack
2
+
3
+ def initialize
4
+ @cfn = AWS::CloudFormation.new
5
+ end
6
+
7
+ def create(template, stack_name, parameters = {}, wait=false)
8
+ stack = @cfn.stacks.create(stack_name,
9
+ File.open(template, "r").read,
10
+ :parameters => parameters,
11
+ :capabilities => ["CAPABILITY_IAM"],
12
+ :disable_rollback => true)
13
+
14
+ if wait
15
+ while stack.status != "CREATE_COMPLETE"
16
+ sleep 30
17
+
18
+ case stack.status
19
+ when "ROLLBACK_IN_PROGESS"
20
+ stack.delete
21
+ when "ROLLBACK_COMPLETE"
22
+ stack.delete
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def destroy(stack_name)
29
+ stack = @cfn.stacks[stack_name]
30
+ stack.delete
31
+ while stack.exists?
32
+ sleep 30
33
+ end
34
+ end
35
+
36
+ def list
37
+ @cfn.stacks.each do |stack|
38
+ case stack.status
39
+ when "CREATE_COMPLETE"
40
+ puts "Stack Name: #{stack.name} | Status: Available"
41
+ when "CREATE_IN_PROGRESS"
42
+ puts "Stack Name: #{stack.name} | Status: In Progress"
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ class Storage
2
+
3
+ def initialize
4
+ @s3 = AWS::S3.new
5
+ end
6
+
7
+ def copy(bucket, key, desired_key)
8
+ @s3.buckets[bucket].objects[key].copy_to(desired_key)
9
+ end
10
+
11
+ def upload(file, bucket, key)
12
+ @s3.buckets[bucket].objects[key].write(:file => file)
13
+ end
14
+
15
+ def download(bucket, key, output_directory)
16
+ obj = @s3.buckets[bucket].objects[key]
17
+
18
+ base = Pathname.new("#{obj.key}").basename
19
+
20
+ Dir.mkdir(output_directory) unless File.exists?(output_directory)
21
+
22
+ File.open("#{output_directory}/#{base}", 'w') do |file|
23
+ file.write(obj.read)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Eops
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eops
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brian Jakovich
9
+ - Jonny Sywulak
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-08-14 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: aws-sdk
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - '='
21
+ - !ruby/object:Gem::Version
22
+ version: 1.15.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - '='
29
+ - !ruby/object:Gem::Version
30
+ version: 1.15.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: aws-sdk
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - '='
37
+ - !ruby/object:Gem::Version
38
+ version: 1.15.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.15.0
47
+ description: A collection of tools that are used in the Elastic Operations Continuous
48
+ Delivery Pipeline.
49
+ email: brian.jakovich@stelligent.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - lib/eops.rb
55
+ - lib/eops/artifact.rb
56
+ - lib/eops/database.rb
57
+ - lib/eops/domain.rb
58
+ - lib/eops/image.rb
59
+ - lib/eops/instance.rb
60
+ - lib/eops/key_pair.rb
61
+ - lib/eops/stack.rb
62
+ - lib/eops/storage.rb
63
+ - lib/eops/version.rb
64
+ homepage: http://stelligent.com
65
+ licenses:
66
+ - MIT
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.9.3
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 1.8.23
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Elastic Operations tools and utilities
90
+ test_files: []