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.
- data/lib/eops.rb +8 -0
- data/lib/eops/artifact.rb +10 -0
- data/lib/eops/database.rb +10 -0
- data/lib/eops/domain.rb +44 -0
- data/lib/eops/image.rb +28 -0
- data/lib/eops/instance.rb +19 -0
- data/lib/eops/key_pair.rb +16 -0
- data/lib/eops/stack.rb +46 -0
- data/lib/eops/storage.rb +26 -0
- data/lib/eops/version.rb +3 -0
- metadata +90 -0
data/lib/eops.rb
ADDED
data/lib/eops/domain.rb
ADDED
@@ -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
|
data/lib/eops/image.rb
ADDED
@@ -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
|
data/lib/eops/stack.rb
ADDED
@@ -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
|
data/lib/eops/storage.rb
ADDED
@@ -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
|
data/lib/eops/version.rb
ADDED
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: []
|