avst-cloud 0.1.30 → 0.1.31
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -0
- data/avst-cloud.gemspec +2 -2
- data/lib/avst-cloud/aws_connection.rb +18 -2
- data/lib/avst-cloud/rackspace_connection.rb +44 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cad9e4dc98b83ba6e613a270ca130fa900e7bae7d1505c81a9a8af2f77271e1
|
4
|
+
data.tar.gz: 477338b913d229c8a92c7d310aef13aa893974aeb78d1a70b9682f7aac5a4f0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23da11cf970a260583b226e24051a2d519f9fe76101aa466963129bc9effb72dacc167221208cc0f6b6a089fc20806e53ed34ee462f8c579875051dfee7f79ae
|
7
|
+
data.tar.gz: 3be32f47fca6e6689a9c614579db49c60a1f18d4d2a9905d32b21f4c2737a9d95cabcb15408e77124309a72b77d38a60867f8fcb3b8fd2597f86fc6c398e0781
|
data/README.md
CHANGED
@@ -35,6 +35,15 @@ The application depends on several gems listed in avst-cloud.gemspec file. Bundl
|
|
35
35
|
# ebs_size - disk size
|
36
36
|
# hdd_device_path - hdd device path, may differ per ami/os
|
37
37
|
# availability_zone - aws availability zone
|
38
|
+
# additional_hdds - hash of additional disks to attach to server, must contain device_name (e.g. /dev/sda1) and ebs_size per each hdd
|
39
|
+
additional_hdds:
|
40
|
+
'AppDisk':
|
41
|
+
device_name: '/dev/sdf'
|
42
|
+
ebs_size: '100'
|
43
|
+
'DatabaseDisk':
|
44
|
+
device_name: '/dev/sdg'
|
45
|
+
ebs_size: '50'
|
46
|
+
volume_type: 'gp2' #default value
|
38
47
|
# vpc - virtual private cloud, defaults to nil, make sure you adjust subned_id and security_group_ids accordingly when setting this option
|
39
48
|
|
40
49
|
server = conn.create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone)
|
@@ -53,6 +62,16 @@ The application depends on several gems listed in avst-cloud.gemspec file. Bundl
|
|
53
62
|
|
54
63
|
### Rackspace
|
55
64
|
|
65
|
+
# additional_hdds - hash of additional disks to attach to server, must contain device_name (e.g. /dev/sda1) and ebs_size per each hdd
|
66
|
+
additional_hdds:
|
67
|
+
'AppDisk':
|
68
|
+
device_name: '/dev/sdf'
|
69
|
+
ebs_size: '100'
|
70
|
+
volume_type: 'SSD' #default value
|
71
|
+
'DatabaseDisk':
|
72
|
+
device_name: '/dev/sdg'
|
73
|
+
ebs_size: '50'
|
74
|
+
|
56
75
|
```
|
57
76
|
|
58
77
|
conn = AvstCloud::RackspaceConnection.new(provider_user, provider_pass, region)
|
data/avst-cloud.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "avst-cloud"
|
7
|
-
spec.version = '0.1.
|
7
|
+
spec.version = '0.1.31'
|
8
8
|
spec.authors = ["Martin Brehovsky", "Jon Bevan", "Matthew Hope"]
|
9
9
|
spec.email = ["mbrehovsky@adaptavist.com", "jbevan@adaptavist.com", "mhope@adaptavist.com"]
|
10
10
|
spec.summary = %q{Automated creation, bootstrapping and provisioning of servers }
|
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency "rvm-capistrano"
|
26
26
|
spec.add_dependency "capistrano", "3.4.1"
|
27
27
|
spec.add_dependency "capistrano-rvm"
|
28
|
-
spec.add_dependency "net-ssh", "
|
28
|
+
spec.add_dependency "net-ssh", "4.2.0"
|
29
29
|
spec.add_dependency "sshkit", "~> 1.16.0"
|
30
30
|
spec.add_dependency "derelict"
|
31
31
|
spec.add_dependency "docopt", ">= 0.5.0"
|
@@ -33,7 +33,7 @@ module AvstCloud
|
|
33
33
|
AvstCloud::AwsServer.new(server, server_name, server.public_ip_address, root_user, root_password)
|
34
34
|
end
|
35
35
|
|
36
|
-
def create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone, vpc=nil, created_by=nil, custom_tags={})
|
36
|
+
def create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone, additional_hdds={}, vpc=nil, created_by=nil, custom_tags={})
|
37
37
|
|
38
38
|
# Permit named instances from DEFAULT_FLAVOURS
|
39
39
|
flavour = flavour || "t2.micro"
|
@@ -85,6 +85,7 @@ module AvstCloud
|
|
85
85
|
logger.debug "availability_zone - #{availability_zone}"
|
86
86
|
logger.debug "ebs_size - #{ebs_size}"
|
87
87
|
logger.debug "hdd_device_path - #{device_name}"
|
88
|
+
logger.debug "additional_hdds - #{additional_hdds}"
|
88
89
|
logger.debug "vpc - #{vpc}"
|
89
90
|
|
90
91
|
create_ebs_volume = nil
|
@@ -97,7 +98,22 @@ module AvstCloud
|
|
97
98
|
'Ebs.VolumeSize' => ebs_size,
|
98
99
|
}
|
99
100
|
]
|
101
|
+
if additional_hdds and additional_hdds.is_a?(Hash)
|
102
|
+
additional_hdds.each_value do |disk|
|
103
|
+
volume_type = disk['volume_type'] || 'gp2'
|
104
|
+
if disk['device_name'] && disk['ebs_size']
|
105
|
+
create_ebs_volume << {
|
106
|
+
:DeviceName => disk['device_name'],
|
107
|
+
'Ebs.VolumeType' => volume_type,
|
108
|
+
'Ebs.VolumeSize' => disk['ebs_size']
|
109
|
+
}
|
110
|
+
else
|
111
|
+
logger.warn "Failed to create additional hdd, required params device_name (e.g. /dev/sda1) or ebs_size missing: #{disk}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
100
115
|
end
|
116
|
+
|
101
117
|
tags = {
|
102
118
|
'Name' => server_name,
|
103
119
|
'os' => os
|
@@ -218,4 +234,4 @@ module AvstCloud
|
|
218
234
|
connect.servers.all({'tag:Name' => server_name})
|
219
235
|
end
|
220
236
|
end
|
221
|
-
end
|
237
|
+
end
|
@@ -33,7 +33,7 @@ module AvstCloud
|
|
33
33
|
AvstCloud::RackspaceServer.new(server, server_name, server.public_ip_address, root_user, root_password)
|
34
34
|
end
|
35
35
|
|
36
|
-
def create_server(server_name, image_id, flavor_id='4')
|
36
|
+
def create_server(server_name, image_id, flavor_id='4', additional_hdds={})
|
37
37
|
server_number, os="ubuntu14"
|
38
38
|
|
39
39
|
logger.debug "Creating Rackspace server:"
|
@@ -71,7 +71,22 @@ module AvstCloud
|
|
71
71
|
|
72
72
|
logger.debug "The server has been successfully created, to login onto the server:\n\n"
|
73
73
|
logger.debug "\t ssh #{server.username}@#{server.public_ip_address}\n\n"
|
74
|
-
|
74
|
+
if additional_hdds and additional_hdds.is_a?(Hash)
|
75
|
+
additional_hdds.each do |disk_name, disk|
|
76
|
+
if disk['device_name'] && disk['ebs_size']
|
77
|
+
volume_type = disk['volume_type'] || 'SSD'
|
78
|
+
volume = storageService.volumes.create(:size => disk['ebs_size'], :display_name => disk_name, :volume_type => volume_type)
|
79
|
+
if volume && volume.id
|
80
|
+
wait_for_hdd(volume.id, 'available')
|
81
|
+
server.attach_volume volume.id, disk['device_name']
|
82
|
+
else
|
83
|
+
logger.error "Failed to create volume, #{disk_name}"
|
84
|
+
end
|
85
|
+
else
|
86
|
+
logger.warn "Failed to create additional hdd, required params device_name (e.g. /dev/sda1) or ebs_size missing: #{disk}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
75
90
|
rescue Fog::Errors::TimeoutError
|
76
91
|
logger.debug "[TIMEOUT]\n\n"
|
77
92
|
logger.debug "This server is currently #{server.progress}% into the build process and is taking longer to complete than expected."
|
@@ -130,14 +145,40 @@ module AvstCloud
|
|
130
145
|
unless @connection
|
131
146
|
logger.debug "Creating new connection to rackspace: #{@provider_user} #{Logging.mask_message(@provider_pass)} #{@region}"
|
132
147
|
@connection = Fog::Compute.new({
|
133
|
-
:provider => '
|
148
|
+
:provider => 'Rackspace',
|
134
149
|
:rackspace_username => @provider_access_user,
|
135
150
|
:rackspace_api_key => @provider_access_pass,
|
151
|
+
:rackspace_auth_url => Fog::Rackspace::UK_AUTH_ENDPOINT,
|
136
152
|
:version => :v2, # Use Next Gen Cloud Servers
|
137
153
|
:rackspace_region => @region
|
138
154
|
})
|
139
155
|
end
|
140
156
|
@connection
|
141
157
|
end
|
158
|
+
|
159
|
+
def storageService
|
160
|
+
unless @storageService
|
161
|
+
logger.debug "Creating new connection to rackspace storage service: #{@provider_user} #{Logging.mask_message(@provider_pass)} #{@region}"
|
162
|
+
@storageService = Fog::Rackspace::BlockStorage.new({
|
163
|
+
:rackspace_username => @provider_access_user, # Your Rackspace Username
|
164
|
+
:rackspace_api_key => @provider_access_pass, # Your Rackspace API key
|
165
|
+
:rackspace_auth_url => Fog::Rackspace::UK_AUTH_ENDPOINT,
|
166
|
+
:rackspace_region => @region
|
167
|
+
})
|
168
|
+
end
|
169
|
+
@storageService
|
170
|
+
end
|
171
|
+
|
172
|
+
def wait_for_hdd(id, expected_state)
|
173
|
+
logger.debug "Waiting for hdd state change...".yellow
|
174
|
+
(1..60).each do |c|
|
175
|
+
hdd = storageService.volumes.get(id)
|
176
|
+
if hdd.state == expected_state
|
177
|
+
break
|
178
|
+
end
|
179
|
+
logger.debug(.)
|
180
|
+
sleep 60
|
181
|
+
end
|
182
|
+
end
|
142
183
|
end
|
143
184
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avst-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Brehovsky
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-06-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -158,14 +158,14 @@ dependencies:
|
|
158
158
|
requirements:
|
159
159
|
- - '='
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
161
|
+
version: 4.2.0
|
162
162
|
type: :runtime
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
166
|
- - '='
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
168
|
+
version: 4.2.0
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: sshkit
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
@@ -301,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
301
|
version: '0'
|
302
302
|
requirements: []
|
303
303
|
rubyforge_project:
|
304
|
-
rubygems_version: 2.7.
|
304
|
+
rubygems_version: 2.7.7
|
305
305
|
signing_key:
|
306
306
|
specification_version: 4
|
307
307
|
summary: Automated creation, bootstrapping and provisioning of servers
|