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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb95fb24811d87a5a8b62ca4c024ae19eae5b59304b062c273b52eb790391951
4
- data.tar.gz: 7397a52380316c3ef9554bd082abf032b4bc31e1e3240ab7633f382a6e753bf2
3
+ metadata.gz: 7cad9e4dc98b83ba6e613a270ca130fa900e7bae7d1505c81a9a8af2f77271e1
4
+ data.tar.gz: 477338b913d229c8a92c7d310aef13aa893974aeb78d1a70b9682f7aac5a4f0f
5
5
  SHA512:
6
- metadata.gz: c0c6c40f0cdc8483b27f04f885aa56ff4878106195820d2db3096aea1528e70cb86f902e337b5bfc9ffccc9dc83bcdbd4e070ffd86943dbfbc190cd077a1cac9
7
- data.tar.gz: fd4cb73e77146a8d160e9b7153ba0a83207730b79564cdaffc4b80a451d22355aec0ebe239d33c2f07de1dd6c25eca678d2ae833f5cbaeaab32931c00aeeb6e3
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.30'
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", "3.0.2"
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 => 'rackspace',
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.30
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-05-08 00:00:00.000000000 Z
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: 3.0.2
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: 3.0.2
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.6
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