cloudstrap-azure 0.4.6.pre

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.
@@ -0,0 +1,140 @@
1
+ #! /usr/bin/env ruby -W0
2
+ # coding: utf-8
3
+ # -*- ruby -*-
4
+
5
+ require 'json' # Ruby Standard Library
6
+ require 'optparse' # Ruby Standard Library
7
+ require 'ostruct' # Ruby Standard Library
8
+ require 'set' # Ruby Standard Library
9
+ require 'time' # Ruby Standard Library
10
+
11
+ require 'azure_mgmt_subscriptions' # MIT License
12
+ require 'tty-prompt' # MIT License
13
+ require 'tty-which' # MIT License
14
+
15
+ #############
16
+ # Constants #
17
+ #############
18
+
19
+ NullToken = Struct.new(:accessToken)
20
+
21
+ ####################
22
+ # Helper Functions #
23
+ ####################
24
+
25
+ Or = ->(first, *rest) { first || (Or.(*rest) unless rest.empty?) }
26
+ CommandInPath = ->(command) { TTY::Which.which(command) }
27
+ Environment = ->(variable) { ENV.fetch(variable) { nil } }
28
+ EnvironmentKey = ->(*strings) { strings.flatten.join('_').upcase.tr('.', '_') }
29
+ ExpandPath = ->(*paths) { File.expand_path(File.join(paths.flatten)) }
30
+ IsExecutable = ->(file) { File.executable?(file.to_s) }
31
+ ReadFile = ->(file) { File.read(file) if File.exist?(file) }
32
+ RunCommand = ->(command, *args) { %x(#{command} #{args.join(' ')}) if IsExecutable.(command) }
33
+ ParseJSON = ->(json) { [JSON.parse((json || '[]'), object_class: OpenStruct)].flatten.reject(&:nil?) }
34
+ HasExpiration = ->(token) { token.expiresOn }
35
+ ExpirationToTime = ->(token) { token.expiresOn = Time.parse(token.expiresOn) }
36
+ TokensFromJSON = ->(json) { ParseJSON.(json).select(&HasExpiration).each(&ExpirationToTime) }
37
+ Stale = ->(token) { token.expiresOn < Time.now }
38
+ Freshest = ->(tokens) { tokens.reject(&Stale).sort_by(&:expiresOn).last }
39
+ Resource = ->(resource) { "https://#{resource}/" }
40
+ ForResource = ->(resource, token) { (token.resource == Resource.(resource)) if token.respond_to?(:resource) }.curry
41
+ PrettyJSON = ->(object) { object.is_a?(String) ? PrettyJSON.(JSON.parse(string)) : JSON.pretty_generate(object) }
42
+ Warn = ->(message) { TTY::Prompt.new.warn message }
43
+ Error = ->(message) { TTY::Prompt.new.error message }
44
+
45
+ ################
46
+ # Main Program #
47
+ ################
48
+
49
+ features = Set.new
50
+
51
+ OptionParser.new do |parser|
52
+ parser.on('-S', '--with-subscription-id') { features << :subscription_id }
53
+ parser.on('-T', '--with-tenant-id') { features << :tenant_id }
54
+ end.parse!
55
+
56
+ env = %w(management.azure.com graph.windows.net).map do |resource|
57
+ variable = EnvironmentKey.(resource, 'ACCESS_TOKEN')
58
+ access_token = Environment.(variable) || (
59
+ Freshest.(
60
+ TokensFromJSON.(
61
+ ReadFile.(
62
+ ExpandPath.(
63
+ Or.(
64
+ Environment.('DOT_AZURE'),
65
+ %w(~ .azure)),
66
+ 'accessTokens.json')))
67
+ .select(
68
+ &ForResource.(
69
+ resource))) ||
70
+ Freshest.(
71
+ TokensFromJSON.(
72
+ RunCommand.(
73
+ Or.(
74
+ Environment.('AZURE_CLI'),
75
+ CommandInPath.('az')),
76
+ 'account',
77
+ 'get-access-token',
78
+ '--resource',
79
+ Resource.(
80
+ resource)))) ||
81
+ NullToken.new
82
+ ).accessToken
83
+ [variable, access_token]
84
+ end.to_h
85
+
86
+ if [:subscription_id, :tenant_id].any? { |feature| features.include?(feature) }
87
+ ACCESS_TOKEN = MsRest::TokenCredentials.new(env['MANAGEMENT_AZURE_COM_ACCESS_TOKEN'])
88
+
89
+ azure = Azure::Subscriptions::Mgmt::V2016_06_01::SubscriptionClient.new(ACCESS_TOKEN)
90
+
91
+ begin
92
+ subscriptions = azure.subscriptions.list
93
+ .select { |subscription| subscription.state == 'Enabled' }
94
+ tenants = azure.tenants.list
95
+ rescue MsRestAzure::AzureOperationError => error
96
+ abort Error.(PrettyJSON.(error.response.body))
97
+ end
98
+ end
99
+
100
+ if features.include?(:subscription_id)
101
+ env['AZURE_SUBSCRIPTION_ID'] = ENV['AZURE_SUBSCRIPTION_ID'] || (
102
+ case subscriptions.size
103
+ when 0
104
+ abort Error.('ERROR: No Subscriptions are Enabled')
105
+ when 1
106
+ subscriptions.first.subscription_id
107
+ else
108
+ Warn.('Multiple Subscriptions Found')
109
+ SelectFromMenu.(
110
+ 'Select a Subscription:',
111
+ subscriptions.map { |subscription| [
112
+ subscription.display_name,
113
+ subscription.subscription_id]})
114
+ end)
115
+ end
116
+
117
+ if features.include? :tenant_id
118
+ env['AZURE_TENANT_ID'] = ENV['AZURE_TENANT_ID'] || (
119
+ case tenants.size
120
+ when 0
121
+ abort Error.('Error: No Tenants Available')
122
+ when 1
123
+ tenants.first.tenant_id
124
+ else
125
+ Warn.('Multiple Tenants Found')
126
+ SelectFromMenu.(
127
+ 'Select a Tenant:',
128
+ tenants.map(&:tenant_id))
129
+ end)
130
+ end
131
+
132
+ env['AZURE_ACCESS_TOKEN'] = env['MANAGEMENT_AZURE_COM_ACCESS_TOKEN']
133
+
134
+ abort if env.values.any?(&:nil?)
135
+
136
+ if ARGV.empty?
137
+ STDOUT.puts PrettyJSON.(env)
138
+ else
139
+ exec(env, *ARGV)
140
+ end
@@ -0,0 +1,25 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIENDCCApygAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdjaHJp
3
+ cy9EQz1vbHN0cm9tL0RDPWNvbTAeFw0xODAzMTUxODMxMTdaFw0xOTAzMTUxODMx
4
+ MTdaMCIxIDAeBgNVBAMMF2NocmlzL0RDPW9sc3Ryb20vREM9Y29tMIIBojANBgkq
5
+ hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAp31YmQvpMuQSlgX22B++/rxl4p4LYyaq
6
+ cDDbi8DBro9cm2H60lbpCuAUALiED2CagZEK0vel5W8AnZhhns0OEYAlpQtBSJtN
7
+ 8P/jlNYruuY26aVhfHfyA5j1n7tVecJz3i/awEPGC3zuTfvUq7Ahn5czOy+hIm4M
8
+ epee881dqnJlXjzTX/TKFYQa9tYj4bhsjfJOV+EDMcao/DE3vmNcBKH8XFVv/wQe
9
+ MGC7VY5zBwow00AkCicNmIr0Psy5hLvqphJ/E3Eiu4UpXhiBfM0z7xiBPoPMBqOx
10
+ r1RzgfKm/JbDO7leFmrEi8hLofyMmbuGvrSTE274vS4EnKaW6OtK7QM5R+jOJZbd
11
+ 67KUgSw+LdHNwu8xCuuQOdKPeSfWdNz94KAdczjzHdXUl/SpfmTuN/D+BCZjTxSo
12
+ F1kACSU6uGTBFKZy35XK+yqeny/1l6xRs6j+cON+LSRMKYSt7jdLcKQVk5wH2xLo
13
+ 83njwnumFxKhiWu0oaT5dlDCtyYM85j9AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYD
14
+ VR0PBAQDAgSwMB0GA1UdDgQWBBQEd3/D0MMj9FHhMZk0QJDlrUtKaTAcBgNVHREE
15
+ FTATgRFjaHJpc0BvbHN0cm9tLmNvbTAcBgNVHRIEFTATgRFjaHJpc0BvbHN0cm9t
16
+ LmNvbTANBgkqhkiG9w0BAQsFAAOCAYEALritM5RkGNZ7cs8hlljSEyuwJrbJYOSX
17
+ 6p1S0D83GlfGZ/5XABy1p4EGQjxiAYuDrnnIw6GLHpgxFEtUNvyNYVfAa6u6yz4Y
18
+ nEjbEF76zAAxoRfivDApGJ3G9wuZ14cHZswFJppf2N4RG14F8bfLtU1OMYDLw8eK
19
+ QJOpynqHtrSj+FfsyNb6d93K8rlNCEd4UHkdRH1m7VnG6M18HvkbQCRMJtOFg/3j
20
+ c66TgdClDMJJXXiktVinfsmpTwxe2IzjGvwo2CZ/S53WPU/jb4uQMUzY0tMw48rl
21
+ S07/1DQNogstTnLYueqkUS1PYEwtavKVnpAtnaOdf0rJ/Rk4hA36BRgAVyQrp0uu
22
+ mSbo3NCvepJNYsTOUM+Df421VuPq713JV0aJDqltyfPptTM7fmNMcukbRh0aRuMT
23
+ EIKh6yDoB+oCRuiTV0uw/lKE2PtbONhJb7uN1qhZqla/iBpmUjiEu8+skI+ygv9n
24
+ 7Krw8FJrV3+VRCiZTPKHeshAfL9yeIZh
25
+ -----END CERTIFICATE-----
metadata ADDED
@@ -0,0 +1,390 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudstrap-azure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.6.pre
5
+ platform: ruby
6
+ authors:
7
+ - Chris Olstrom
8
+ autorequire:
9
+ bindir: command
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIENDCCApygAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdjaHJp
14
+ cy9EQz1vbHN0cm9tL0RDPWNvbTAeFw0xODAzMTUxODMxMTdaFw0xOTAzMTUxODMx
15
+ MTdaMCIxIDAeBgNVBAMMF2NocmlzL0RDPW9sc3Ryb20vREM9Y29tMIIBojANBgkq
16
+ hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAp31YmQvpMuQSlgX22B++/rxl4p4LYyaq
17
+ cDDbi8DBro9cm2H60lbpCuAUALiED2CagZEK0vel5W8AnZhhns0OEYAlpQtBSJtN
18
+ 8P/jlNYruuY26aVhfHfyA5j1n7tVecJz3i/awEPGC3zuTfvUq7Ahn5czOy+hIm4M
19
+ epee881dqnJlXjzTX/TKFYQa9tYj4bhsjfJOV+EDMcao/DE3vmNcBKH8XFVv/wQe
20
+ MGC7VY5zBwow00AkCicNmIr0Psy5hLvqphJ/E3Eiu4UpXhiBfM0z7xiBPoPMBqOx
21
+ r1RzgfKm/JbDO7leFmrEi8hLofyMmbuGvrSTE274vS4EnKaW6OtK7QM5R+jOJZbd
22
+ 67KUgSw+LdHNwu8xCuuQOdKPeSfWdNz94KAdczjzHdXUl/SpfmTuN/D+BCZjTxSo
23
+ F1kACSU6uGTBFKZy35XK+yqeny/1l6xRs6j+cON+LSRMKYSt7jdLcKQVk5wH2xLo
24
+ 83njwnumFxKhiWu0oaT5dlDCtyYM85j9AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYD
25
+ VR0PBAQDAgSwMB0GA1UdDgQWBBQEd3/D0MMj9FHhMZk0QJDlrUtKaTAcBgNVHREE
26
+ FTATgRFjaHJpc0BvbHN0cm9tLmNvbTAcBgNVHRIEFTATgRFjaHJpc0BvbHN0cm9t
27
+ LmNvbTANBgkqhkiG9w0BAQsFAAOCAYEALritM5RkGNZ7cs8hlljSEyuwJrbJYOSX
28
+ 6p1S0D83GlfGZ/5XABy1p4EGQjxiAYuDrnnIw6GLHpgxFEtUNvyNYVfAa6u6yz4Y
29
+ nEjbEF76zAAxoRfivDApGJ3G9wuZ14cHZswFJppf2N4RG14F8bfLtU1OMYDLw8eK
30
+ QJOpynqHtrSj+FfsyNb6d93K8rlNCEd4UHkdRH1m7VnG6M18HvkbQCRMJtOFg/3j
31
+ c66TgdClDMJJXXiktVinfsmpTwxe2IzjGvwo2CZ/S53WPU/jb4uQMUzY0tMw48rl
32
+ S07/1DQNogstTnLYueqkUS1PYEwtavKVnpAtnaOdf0rJ/Rk4hA36BRgAVyQrp0uu
33
+ mSbo3NCvepJNYsTOUM+Df421VuPq713JV0aJDqltyfPptTM7fmNMcukbRh0aRuMT
34
+ EIKh6yDoB+oCRuiTV0uw/lKE2PtbONhJb7uN1qhZqla/iBpmUjiEu8+skI+ygv9n
35
+ 7Krw8FJrV3+VRCiZTPKHeshAfL9yeIZh
36
+ -----END CERTIFICATE-----
37
+ date: 2018-04-19 00:00:00.000000000 Z
38
+ dependencies:
39
+ - !ruby/object:Gem::Dependency
40
+ name: azure_graph_rbac
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '0.16'
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.16.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.16'
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 0.16.0
59
+ - !ruby/object:Gem::Dependency
60
+ name: azure_mgmt_authorization~> 0.17
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 0.17.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.17.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: azure_mgmt_compute~> 0.17
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.17.0
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 0.17.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: azure_mgmt_container_service
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '0.16'
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.16.0
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.16'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 0.16.0
107
+ - !ruby/object:Gem::Dependency
108
+ name: azure_mgmt_network
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '0.16'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 0.16.0
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.16'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 0.16.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: azure_mgmt_resources~> 0.16
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: 0.16.0
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 0.16.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: azure_mgmt_subscriptions~> 0.16
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 0.16.0
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 0.16.0
155
+ - !ruby/object:Gem::Dependency
156
+ name: chamber
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '2.12'
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 2.12.0
165
+ type: :runtime
166
+ prerelease: false
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '2.12'
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: 2.12.0
175
+ - !ruby/object:Gem::Dependency
176
+ name: chronic
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.10'
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: 0.10.0
185
+ type: :runtime
186
+ prerelease: false
187
+ version_requirements: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '0.10'
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 0.10.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: concurrent-ruby
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.0'
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: 1.0.5
205
+ type: :runtime
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: '1.0'
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: 1.0.5
215
+ - !ruby/object:Gem::Dependency
216
+ name: pastel
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '0.7'
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: 0.7.0
225
+ type: :runtime
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: '0.7'
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: 0.7.0
235
+ - !ruby/object:Gem::Dependency
236
+ name: sshkey~> 1.9
237
+ requirement: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: 1.9.0
242
+ type: :runtime
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: 1.9.0
249
+ - !ruby/object:Gem::Dependency
250
+ name: tty-prompt
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - "~>"
254
+ - !ruby/object:Gem::Version
255
+ version: '0.16'
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: 0.16.0
259
+ type: :runtime
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - "~>"
264
+ - !ruby/object:Gem::Version
265
+ version: '0.16'
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: 0.16.0
269
+ - !ruby/object:Gem::Dependency
270
+ name: tty-spinner
271
+ requirement: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - "~>"
274
+ - !ruby/object:Gem::Version
275
+ version: '0.8'
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: 0.8.0
279
+ type: :runtime
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '0.8'
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: 0.8.0
289
+ - !ruby/object:Gem::Dependency
290
+ name: tty-which
291
+ requirement: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - "~>"
294
+ - !ruby/object:Gem::Version
295
+ version: '0.3'
296
+ - - ">="
297
+ - !ruby/object:Gem::Version
298
+ version: 0.3.0
299
+ type: :runtime
300
+ prerelease: false
301
+ version_requirements: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: '0.3'
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: 0.3.0
309
+ - !ruby/object:Gem::Dependency
310
+ name: uuid
311
+ requirement: !ruby/object:Gem::Requirement
312
+ requirements:
313
+ - - "~>"
314
+ - !ruby/object:Gem::Version
315
+ version: '2.3'
316
+ - - ">="
317
+ - !ruby/object:Gem::Version
318
+ version: 2.3.8
319
+ type: :runtime
320
+ prerelease: false
321
+ version_requirements: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - "~>"
324
+ - !ruby/object:Gem::Version
325
+ version: '2.3'
326
+ - - ">="
327
+ - !ruby/object:Gem::Version
328
+ version: 2.3.8
329
+ - !ruby/object:Gem::Dependency
330
+ name: xxhash
331
+ requirement: !ruby/object:Gem::Requirement
332
+ requirements:
333
+ - - "~>"
334
+ - !ruby/object:Gem::Version
335
+ version: '0.4'
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ version: 0.4.0
339
+ type: :runtime
340
+ prerelease: false
341
+ version_requirements: !ruby/object:Gem::Requirement
342
+ requirements:
343
+ - - "~>"
344
+ - !ruby/object:Gem::Version
345
+ version: '0.4'
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ version: 0.4.0
349
+ description:
350
+ email: chris@olstrom.com
351
+ executables:
352
+ - cloudstrap-azure
353
+ extensions: []
354
+ extra_rdoc_files: []
355
+ files:
356
+ - ".gitignore"
357
+ - Gemfile
358
+ - LICENSE.txt
359
+ - README.org
360
+ - cloudstrap-azure.gemspec
361
+ - command/cloudstrap-azure
362
+ - command/internal/cloudstrap-azure.configure
363
+ - command/internal/cloudstrap-azure.deploy
364
+ - command/internal/cloudstrap-azure.environment
365
+ - trust/certificates/colstrom.pem
366
+ homepage: https://github.com/colstrom/cloudstrap-azure
367
+ licenses:
368
+ - MIT
369
+ metadata: {}
370
+ post_install_message:
371
+ rdoc_options: []
372
+ require_paths:
373
+ - lib
374
+ required_ruby_version: !ruby/object:Gem::Requirement
375
+ requirements:
376
+ - - ">="
377
+ - !ruby/object:Gem::Version
378
+ version: '0'
379
+ required_rubygems_version: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - ">"
382
+ - !ruby/object:Gem::Version
383
+ version: 1.3.1
384
+ requirements: []
385
+ rubyforge_project:
386
+ rubygems_version: 2.7.6
387
+ signing_key:
388
+ specification_version: 4
389
+ summary: Cloudstrap for Azure
390
+ test_files: []