avst-cloud 0.1.30 → 0.1.31
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 +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
|