ovh-provisioner 0.1.0

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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.gitlab-ci.yml +23 -0
  4. data/.rspec +2 -0
  5. data/.ruby-version +1 -0
  6. data/CHANGELOG +7 -0
  7. data/CONTRIBUTING.md +62 -0
  8. data/Gemfile +6 -0
  9. data/LICENSE +202 -0
  10. data/README.md +107 -0
  11. data/Rakefile +24 -0
  12. data/bin/console +32 -0
  13. data/bin/ovh_provisioner +27 -0
  14. data/bin/setup +23 -0
  15. data/lib/ovh/provisioner.rb +43 -0
  16. data/lib/ovh/provisioner/api_list.rb +158 -0
  17. data/lib/ovh/provisioner/api_object/api_object.rb +125 -0
  18. data/lib/ovh/provisioner/api_object/dedicated_server.rb +225 -0
  19. data/lib/ovh/provisioner/api_object/domain_zone.rb +115 -0
  20. data/lib/ovh/provisioner/api_object/ip.rb +83 -0
  21. data/lib/ovh/provisioner/api_object/record.rb +48 -0
  22. data/lib/ovh/provisioner/api_object/vrack.rb +92 -0
  23. data/lib/ovh/provisioner/cli.rb +173 -0
  24. data/lib/ovh/provisioner/cli_domain.rb +138 -0
  25. data/lib/ovh/provisioner/cli_ip.rb +64 -0
  26. data/lib/ovh/provisioner/cli_vrack.rb +71 -0
  27. data/lib/ovh/provisioner/init.rb +77 -0
  28. data/lib/ovh/provisioner/self_cli.rb +81 -0
  29. data/lib/ovh/provisioner/spawner.rb +63 -0
  30. data/lib/ovh/provisioner/version.rb +24 -0
  31. data/ovh-provisioner.gemspec +53 -0
  32. data/spec/config.yml +53 -0
  33. data/spec/helpers/highline_helper.rb +36 -0
  34. data/spec/ovh/provisioner/cli_domain_spec.rb +140 -0
  35. data/spec/ovh/provisioner/cli_ip_spec.rb +90 -0
  36. data/spec/ovh/provisioner/cli_spec.rb +186 -0
  37. data/spec/ovh/provisioner/cli_vrack_spec.rb +83 -0
  38. data/spec/ovh/provisioner/stubs/domain_stubs.rb +204 -0
  39. data/spec/ovh/provisioner/stubs/ip_stubs.rb +152 -0
  40. data/spec/ovh/provisioner/stubs/server_stubs.rb +146 -0
  41. data/spec/ovh/provisioner/stubs/vrack_stubs.rb +87 -0
  42. data/spec/ovh/provisioner_spec.rb +25 -0
  43. data/spec/spec_helper.rb +47 -0
  44. metadata +350 -0
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2015-2016 Sam4Mobile, 2017-2018 Make.org
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ vracks = {
20
+ 'pn-1111' => { 'name' => 'avrack', 'description' => '' },
21
+ 'pn-2222' => { 'name' => 'bvrack', 'description' => 'Vrack n°2' }
22
+ }
23
+
24
+ servers = {
25
+ 'pn-1111' => ['test-server-01'],
26
+ 'pn-2222' => ['test-server-02']
27
+ }
28
+
29
+ tasks = {
30
+ 321 => {
31
+ 'function' => 'removeDedicatedServerFromBridgeDomain',
32
+ 'targetDomain' => 'test-server-02',
33
+ 'status' => 'init',
34
+ 'serviceName' => 'pn-2222',
35
+ 'orderId' => nil,
36
+ 'lastUpdate' => now,
37
+ 'todoDate' => now,
38
+ 'id' => 321
39
+ },
40
+ 322 => {
41
+ 'function' => 'addDedicatedServerToBridgeDomain',
42
+ 'targetDomain' => 'test-server-03',
43
+ 'status' => 'init',
44
+ 'serviceName' => 'pn-2222',
45
+ 'orderId' => nil,
46
+ 'lastUpdate' => now,
47
+ 'todoDate' => now,
48
+ 'id' => 322
49
+ }
50
+ }
51
+
52
+ # Stubs
53
+ RSpec.configure do |config|
54
+ config.before(:each) do
55
+ url = 'https://api.test.com/1.0/vrack'
56
+
57
+ stub_request(:get, "#{url}/")
58
+ .to_return(status: 200, body: vracks.keys.to_json, headers: {})
59
+
60
+ vracks.each_pair do |vrack, general|
61
+ stub_request(:get, "#{url}/#{vrack}/")
62
+ .to_return(status: 200, body: general.to_json, headers: {})
63
+
64
+ serverlist = servers[vrack].to_json
65
+ stub_request(:get, "#{url}/#{vrack}/dedicatedServer")
66
+ .to_return(status: 200, body: serverlist, headers: {})
67
+ end
68
+
69
+ stub_request(:delete, "#{url}/pn-2222/dedicatedServer/test-server-02")
70
+ .to_return(status: 200, body: tasks[321].to_json, headers: {})
71
+
72
+ stub_request(:post, "#{url}/pn-2222/dedicatedServer")
73
+ .with(body: '{"dedicatedServer":"test-server-03"}')
74
+ .to_return(status: 200, body: tasks[322].to_json, headers: {})
75
+
76
+ stub_request(:get, "#{url}/pn-1111/task")
77
+ .to_return(status: 200, body: '[]', headers: {})
78
+
79
+ stub_request(:get, "#{url}/pn-2222/task")
80
+ .to_return(status: 200, body: tasks.keys.to_json, headers: {})
81
+
82
+ tasks.each_pair do |task, body|
83
+ stub_request(:get, "#{url}/pn-2222/task/#{task}")
84
+ .to_return(status: 200, body: body.to_json, headers: {})
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2015-2016 Sam4Mobile, 2017-2018 Make.org
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe OVH::Provisioner do
22
+ it 'has a version number' do
23
+ expect(OVH::Provisioner::VERSION).not_to be nil
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2015-2016 Sam4Mobile, 2017-2018 Make.org
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
20
+ require 'ovh/provisioner'
21
+ require 'webmock/rspec' # Most tests will use webmock
22
+
23
+ # Force expect syntax over should
24
+ RSpec.configure do |config|
25
+ config.expect_with :rspec do |c|
26
+ c.syntax = :expect
27
+ end
28
+ end
29
+
30
+ dir = File.dirname(__FILE__)
31
+ # Load helpers
32
+ Dir[File.join(dir, 'helpers', '*.rb')].each { |file| require file }
33
+
34
+ def now
35
+ Time.new.strftime('%Y-%m-%dT%H:%M:%S%z').insert(-3, ':')
36
+ end
37
+
38
+ # Load stubs
39
+ files = File.join(dir, 'ovh', 'provisioner', 'stubs', '*.rb')
40
+ Dir[files].each { |file| require file }
41
+
42
+ # To test the cli
43
+ def start(caller_object, subcommand = nil)
44
+ cmd = caller_object.class.description.split(' ')
45
+ args = [subcommand, *cmd, '-c', 'spec/config.yml'].compact
46
+ OVH::Provisioner::Cli.start(args)
47
+ end
metadata ADDED
@@ -0,0 +1,350 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ovh-provisioner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Bernard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-10-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.40'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.40'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: celluloid
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.17'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.17'
97
+ - !ruby/object:Gem::Dependency
98
+ name: hashdiff
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.3'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: highline
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: ovh-rest
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.0.5
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.0.5
139
+ - !ruby/object:Gem::Dependency
140
+ name: ruby-progressbar
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.10'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.10'
153
+ - !ruby/object:Gem::Dependency
154
+ name: thor
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.19'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.19'
167
+ description: |
168
+ OVH::Provisioner
169
+ ================
170
+
171
+ Interact with OVH REST API, mainly targeted to manage dedicated servers and
172
+ OVH DNS.
173
+
174
+ Installation
175
+ ------------
176
+
177
+ Add this line to your application's Gemfile:
178
+
179
+ ```ruby
180
+ gem 'ovh-provisioner'
181
+ ```
182
+
183
+ And then execute:
184
+
185
+ $ bundle
186
+
187
+ Or install it yourself as:
188
+
189
+ $ gem install ovh-provisioner
190
+
191
+ Configuration
192
+ -------------
193
+
194
+ The best way to use ovh-provisioner is to create a configuration file
195
+ (recommended path: ~/.config/ovh-provisioner.yml) containing your keys and some
196
+ general configuration. Then, just launch it to get all commands with their
197
+ description.
198
+
199
+ Example:
200
+
201
+ ```yaml
202
+ # All keys can be overriden with cli options
203
+ api_url: https://eu.api.ovh.com/1.0
204
+ app_key: XXXXXXXXXXXX
205
+ app_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
206
+ consumer_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
207
+
208
+ template: template_name # is be defined in OVH manager when you save a template
209
+ use_distrib_kernel: true
210
+ ssh-key: 'key_name_to install'
211
+
212
+ # name_scheme support any variable available as attribute in
213
+ # lib/ovh/provisioner/api_object/dedicated_server.rb
214
+ # Along with name_domain, it is used to rename (reverse dns) servers
215
+ name_scheme: '%{location}-%{flavor_tag}-%{server_id}.%{vrack}'
216
+ name_domain: example.com
217
+
218
+ # example of flavors, you can use any hardware parameters from
219
+ # GET /dedicated/server/{serviceName}/specifications/hardware
220
+ # to differentiate your flavors
221
+ flavors:
222
+ EG-16S:
223
+ tag: eg16s
224
+ hardware:
225
+ description: 'Serveur EG-16 - E3-1230v6 - 16GB - SoftRaid 2x450GB NVMe'
226
+ EG-32S:
227
+ tag: eg32s
228
+ hardware:
229
+ description: 'Serveur EG-32 - E3-1270v6 - 32GB - SoftRaid 2x450GB NVMe'
230
+ EG-64S:
231
+ tag: eg64s
232
+ hardware:
233
+ description: 'Serveur EG-64 - E5-1650v3 - 64GB - SoftRaid 2x450GB NVMe'
234
+ ```
235
+
236
+ Development
237
+ -----------
238
+
239
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
240
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
241
+ prompt that will allow you to experiment.
242
+
243
+ To install this gem onto your local machine, run `bundle exec rake install`. To
244
+ release a new version, update the version number in `version.rb`, and then run
245
+ `bundle exec rake release`, which will create a git tag for the version, push
246
+ git commits and tags, and push the `.gem` file to
247
+ [rubygems.org](https://rubygems.org).
248
+
249
+ Contributing
250
+ ------------
251
+
252
+ Please read carefully [CONTRIBUTING.md](CONTRIBUTING.md) before making a merge
253
+ request.
254
+
255
+ License and Author
256
+ ------------------
257
+
258
+ - Author:: Samuel Bernard (<samuel.bernard@gmail.com>)
259
+
260
+ ```text
261
+ Copyright (c) 2015-2016 Sam4Mobile, 2017-2018 Make.org
262
+
263
+ Licensed under the Apache License, Version 2.0 (the "License");
264
+ you may not use this file except in compliance with the License.
265
+ You may obtain a copy of the License at
266
+
267
+ http://www.apache.org/licenses/LICENSE-2.0
268
+
269
+ Unless required by applicable law or agreed to in writing, software
270
+ distributed under the License is distributed on an "AS IS" BASIS,
271
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
272
+ See the License for the specific language governing permissions and
273
+ limitations under the License.
274
+ ```
275
+ email:
276
+ - samuel.bernard@gmail.com
277
+ executables:
278
+ - console
279
+ - ovh_provisioner
280
+ - setup
281
+ extensions: []
282
+ extra_rdoc_files: []
283
+ files:
284
+ - ".gitignore"
285
+ - ".gitlab-ci.yml"
286
+ - ".rspec"
287
+ - ".ruby-version"
288
+ - CHANGELOG
289
+ - CONTRIBUTING.md
290
+ - Gemfile
291
+ - LICENSE
292
+ - README.md
293
+ - Rakefile
294
+ - bin/console
295
+ - bin/ovh_provisioner
296
+ - bin/setup
297
+ - lib/ovh/provisioner.rb
298
+ - lib/ovh/provisioner/api_list.rb
299
+ - lib/ovh/provisioner/api_object/api_object.rb
300
+ - lib/ovh/provisioner/api_object/dedicated_server.rb
301
+ - lib/ovh/provisioner/api_object/domain_zone.rb
302
+ - lib/ovh/provisioner/api_object/ip.rb
303
+ - lib/ovh/provisioner/api_object/record.rb
304
+ - lib/ovh/provisioner/api_object/vrack.rb
305
+ - lib/ovh/provisioner/cli.rb
306
+ - lib/ovh/provisioner/cli_domain.rb
307
+ - lib/ovh/provisioner/cli_ip.rb
308
+ - lib/ovh/provisioner/cli_vrack.rb
309
+ - lib/ovh/provisioner/init.rb
310
+ - lib/ovh/provisioner/self_cli.rb
311
+ - lib/ovh/provisioner/spawner.rb
312
+ - lib/ovh/provisioner/version.rb
313
+ - ovh-provisioner.gemspec
314
+ - spec/config.yml
315
+ - spec/helpers/highline_helper.rb
316
+ - spec/ovh/provisioner/cli_domain_spec.rb
317
+ - spec/ovh/provisioner/cli_ip_spec.rb
318
+ - spec/ovh/provisioner/cli_spec.rb
319
+ - spec/ovh/provisioner/cli_vrack_spec.rb
320
+ - spec/ovh/provisioner/stubs/domain_stubs.rb
321
+ - spec/ovh/provisioner/stubs/ip_stubs.rb
322
+ - spec/ovh/provisioner/stubs/server_stubs.rb
323
+ - spec/ovh/provisioner/stubs/vrack_stubs.rb
324
+ - spec/ovh/provisioner_spec.rb
325
+ - spec/spec_helper.rb
326
+ homepage: https://gitlab.com/sre-gems/ovh-provisioner
327
+ licenses:
328
+ - Apache-2.0
329
+ metadata: {}
330
+ post_install_message:
331
+ rdoc_options: []
332
+ require_paths:
333
+ - lib
334
+ required_ruby_version: !ruby/object:Gem::Requirement
335
+ requirements:
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ version: '0'
339
+ required_rubygems_version: !ruby/object:Gem::Requirement
340
+ requirements:
341
+ - - ">="
342
+ - !ruby/object:Gem::Version
343
+ version: '0'
344
+ requirements: []
345
+ rubyforge_project:
346
+ rubygems_version: 2.7.7
347
+ signing_key:
348
+ specification_version: 4
349
+ summary: Provision dedicated servers hosted by OVH
350
+ test_files: []