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 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