kitchen-scaleway 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 78fa326410f141a5d106a268f94d2d749242b614
4
+ data.tar.gz: ac1eccc731b39d8332557da657ed7f807dcb92cd
5
+ SHA512:
6
+ metadata.gz: 5c49986c1c711a1551ff7423fac4a39a67781b06f5f62e0c0e94ddbbb370f40449bbe983e87cad11c019b104d1be8dc5f0b9e7f7bda3efbb0a4d1dcb519d9ce7
7
+ data.tar.gz: 3cb73de2dffb3a97ba50de35cf796db5943938b048f7a4ae3ecc203c98bff54711bc68cc92a5cf40513e28096998a38f99daac9ea22ae1b706727f300caadcbb
data/.cane ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.tailor ADDED
@@ -0,0 +1,4 @@
1
+ Tailor.config do |config|
2
+ config.formatters "text"
3
+ config.file_set 'lib/**/*.rb'
4
+ end
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - 1.9.2
7
+ - ruby-head
8
+
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.1.0 / Unreleased
2
+
3
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ Author:: Ryan Hass (<ryan@invalidchecksum.net>)
2
+
3
+ Copyright (C) 2015, Ryan Hass
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # <a name="title"></a> Kitchen::Scaleway
2
+
3
+ A Test Kitchen Driver for Scaleway.
4
+
5
+ ## <a name="requirements"></a> Requirements
6
+
7
+ This driver depends on the Scaleway gem. Additionally, you will need to
8
+ create an account on Scaleway https://www.scaleway.com.
9
+
10
+ Currently, there is no omnibus package for Test Kitchen to use via this driver.
11
+ However, as this driver exists I aim to publish some soon.
12
+
13
+ ## <a name="installation"></a> Installation and Setup
14
+
15
+ Please read the [Driver usage][driver_usage] page for more details.
16
+
17
+ ## <a name="config"></a> Configuration
18
+
19
+ There are two required options which can either be set as system environment
20
+ variables or as driver options.
21
+
22
+ Environment Variables:
23
+ ```bash
24
+ export SCALEWAY_ORG_TOKEN='66c8226d-4b6d-455a-a40a-507faa3fac2b'
25
+ export SCALEWAY_ACCESS_TOKEN='1800d055-03ef-4109-9ad9-0d3c2cb2004a'
26
+ ```
27
+
28
+ kitchen.local.yml options:
29
+ ```yaml
30
+ driver:
31
+ name: scaleway
32
+ scaleway_org: 66c8226d-4b6d-455a-a40a-507faa3fac2b
33
+ scaleway_access_token: 1800d055-03ef-4109-9ad9-0d3c2cb2004a
34
+ ```
35
+
36
+ ### <a name="config-require-chef-omnibus"></a> require\_chef\_omnibus
37
+
38
+ Determines whether or not a Chef [Omnibus package][chef_omnibus_dl] will be
39
+ installed. In the current state of this project, we recommend setting this
40
+ to `false`. We are hard at work to provide an alternate Omnitruck end-point
41
+ with Omnibus builds available for all the available flavors, but it is not
42
+ available at this time.
43
+
44
+ There are several different behaviors available:
45
+
46
+ * `true` - the latest release will be installed. Subsequent converges
47
+ will skip re-installing if chef is present.
48
+ * `latest` - the latest release will be installed. Subsequent converges
49
+ will always re-install even if chef is present.
50
+ * `<VERSION_STRING>` (ex: `10.24.0`) - the desired version string will
51
+ be passed the the install.sh script. Subsequent converges will skip if
52
+ the installed version and the desired version match.
53
+ * `false` or `nil` - no chef is installed.
54
+
55
+ The default value is unset, or `nil`.
56
+
57
+ ## <a name="development"></a> Development
58
+
59
+ * Source hosted at [GitHub][repo]
60
+ * Report issues/questions/feature requests on [GitHub Issues][issues]
61
+
62
+ Pull requests are very welcome! Make sure your patches are well tested.
63
+ Ideally create a topic branch for every separate change you make. For
64
+ example:
65
+
66
+ 1. Fork the repo
67
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
68
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
69
+ 4. Push to the branch (`git push origin my-new-feature`)
70
+ 5. Create new Pull Request
71
+
72
+ ## <a name="authors"></a> Authors
73
+
74
+ Created and maintained by [Ryan Hass][author] (<ryan@invalidchecksum.net>)
75
+
76
+ Much of this code was derived and borrowed from
77
+ [kitchen-digitalocean](https://github.com/test-kitchen/kitchen-digitalocean).
78
+
79
+ Special thanks to [Greg Fitzgerald](https://github.com/gregf/) (<greg@gregf.org>)
80
+
81
+ ## <a name="license"></a> License
82
+
83
+ Apache 2.0 (see [LICENSE][license])
84
+
85
+
86
+ [author]: https://github.com/rhass
87
+ [issues]: https://github.com/rhass/kitchen-scaleway/issues
88
+ [license]: https://github.com/rhass/kitchen-scaleway/blob/master/LICENSE
89
+ [repo]: https://github.com/rhass/kitchen-scaleway
90
+ [driver_usage]: http://docs.kitchen-ci.org/drivers/usage
91
+ [chef_omnibus_dl]: https://www.chef.io/chef/get-chef/
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require "bundler/gem_tasks"
2
+ require 'cane/rake_task'
3
+ require 'tailor/rake_task'
4
+
5
+ desc "Run cane to check quality metrics"
6
+ Cane::RakeTask.new do |cane|
7
+ cane.canefile = './.cane'
8
+ end
9
+
10
+ Tailor::RakeTask.new
11
+
12
+ desc "Display LOC stats"
13
+ task :stats do
14
+ puts "\n## Production Code Stats"
15
+ sh "countloc -r lib"
16
+ end
17
+
18
+ desc "Run all quality tasks"
19
+ task :quality => [:cane, :tailor, :stats]
20
+
21
+ task :default => [:quality]
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'kitchen/driver/scaleway_version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'kitchen-scaleway'
8
+ spec.version = Kitchen::Driver::SCALEWAY_VERSION
9
+ spec.authors = ['Ryan Hass']
10
+ spec.email = ['ryan@invalidchecksum.net']
11
+ spec.description = %q{A Test Kitchen Driver for Scaleway}
12
+ spec.summary = spec.description
13
+ spec.homepage = 'https://github.com/rhass/kitchen-scaleway'
14
+ spec.license = 'Apache 2.0'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = []
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'test-kitchen', '~> 1.4'
22
+ spec.add_dependency 'scaleway', '~> 0.2.1'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+
27
+ spec.add_development_dependency 'cane'
28
+ spec.add_development_dependency 'tailor'
29
+ spec.add_development_dependency 'countloc'
30
+ end
@@ -0,0 +1,172 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Ryan Hass (<ryan@invalidchecksum.net>)
4
+ #
5
+ # Copyright (C) 2015, Ryan Hass
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require 'scaleway'
20
+ require 'kitchen'
21
+
22
+ module Kitchen
23
+ module Driver
24
+ # Scaleway Driver for Kitchen.
25
+ #
26
+ # @author Ryan Hass <ryan@invalidchecksum.net>
27
+ class Scaleway < Kitchen::Driver::SSHBase
28
+
29
+ default_config :username, 'root'
30
+ default_config :port, '22'
31
+ default_config(:image) { |driver| driver.default_image.id }
32
+ default_config(:server_name) { |driver| driver.default_name }
33
+
34
+ default_config :scaleway_org do
35
+ ENV['SCALEWAY_ORG_TOKEN']
36
+ end
37
+
38
+ default_config :scaleway_access_token do
39
+ ENV['SCALEWAY_ACCESS_TOKEN']
40
+ end
41
+
42
+ required_config :scaleway_org
43
+ required_config :scaleway_access_token
44
+
45
+ def create(state)
46
+ client
47
+ server = create_server
48
+
49
+ state[:server_id] = server.id
50
+
51
+ info("Scaleway instance <#{state[:server_id]}> created.")
52
+
53
+ loop do
54
+ info("Waiting for Public IP to become available...")
55
+ sleep 8
56
+ begin
57
+ instance = ::Scaleway::Server.find(state[:server_id])
58
+ rescue ::Scaleway::NotFound
59
+ info('instance still not ready.')
60
+ end
61
+
62
+ break if instance && ! instance.public_ip.nil?
63
+ end
64
+ instance ||= ::Scaleway::Server.find(state[:server_id])
65
+
66
+ state[:hostname] = instance.public_ip[:address]
67
+
68
+ wait_for_sshd(state[:hostname]); print "(ssh ready)\n"
69
+ end
70
+
71
+ def destroy(state)
72
+ client
73
+ return if state[:server_id].nil?
74
+
75
+ loop do
76
+ begin
77
+ instance = ::Scaleway::Server.find(state[:server_id])
78
+
79
+ break if !instance
80
+ if instance && instance.state != 'pending'
81
+ volume = ::Scaleway::Server.find(state[:server_id]).image[:id]
82
+ ::Scaleway::Server.terminate(state[:server_id])
83
+ ::Scaleway::Image.destroy(volume)
84
+ break
85
+ end
86
+ rescue ::Scaleway::APIError
87
+ break if !instance
88
+ if instance && instance.state == 'stopped'
89
+ ::Scaleway::Server.destroy(state[:server_id])
90
+ ::Scaleway::Image.destroy(state[:server_id].image[:id])
91
+ raise ::Kitchen::Error
92
+ end
93
+ rescue ::Scaleway::NotFound
94
+ instance = false
95
+ end
96
+ end
97
+
98
+ info("Scaleway instance <#{state[:server_id]}> destroyed.")
99
+ state.delete(:server_id)
100
+ state.delete(:hostname)
101
+ end
102
+
103
+ def default_image
104
+ client
105
+ ::Scaleway::Image.find_by_name(
106
+ platform_to_slug_mapping.fetch(
107
+ instance.platform.name,
108
+ instance.platform.name
109
+ )
110
+ )
111
+ end
112
+
113
+ # Generate what should be a unique server name up to 63 total chars
114
+ # Base name: 15
115
+ # Username: 15
116
+ # Hostname: 23
117
+ # Random string: 7
118
+ # Separators: 3
119
+ # ================
120
+ # Total: 63
121
+ def default_name
122
+ [
123
+ @instance.name.gsub(/\W/, '')[0..14],
124
+ Etc.getlogin.gsub(/\W/, '')[0..14],
125
+ Socket.gethostname.gsub(/\W/, '')[0..22],
126
+ Array.new(7) { rand(36).to_s(36) }.join
127
+ ].join('-').gsub(/_/, '-')
128
+ end
129
+
130
+ def client
131
+ ::Scaleway.organization = config[:scaleway_org]
132
+ ::Scaleway.token = config[:scaleway_access_token]
133
+ end
134
+
135
+ def create_server
136
+ client
137
+
138
+ instance = ::Scaleway::Server.create(
139
+ {
140
+ name: config[:server_name],
141
+ image: config[:image]
142
+ }
143
+ )
144
+
145
+ ::Scaleway::Server.power_on(instance.id)
146
+
147
+ instance
148
+ end
149
+
150
+ def platform_to_slug_mapping
151
+ {
152
+ 'debian-7.0' => 'Debian Wheezy (7.8)',
153
+ 'debian-70' => 'Debian Wheezy (7.8)',
154
+ 'debian-78' => 'Debian Wheezy (7.8)',
155
+ 'debian-8.1' => 'Debian Jessie (8.1)',
156
+ 'debian-81' => 'Debian Jessie (8.1)',
157
+ 'fedora-22' => 'Fedora 22',
158
+ 'opensuse-13.2' => 'openSUSE 13.2',
159
+ 'opensuse-132' => 'openSUSE 13.2',
160
+ 'ubuntu-12.04' => 'Ubuntu Precise (12.04)',
161
+ 'ubuntu-1204' => 'Ubuntu Precise (12.04)',
162
+ 'ubuntu-14.04' => 'Ubuntu Trusty (14.04 LTS)',
163
+ 'ubuntu-1404' => 'Ubuntu Trusty (14.04 LTS)',
164
+ 'ubuntu-14.10' => 'Ubuntu Utopic (14.10 EOL)',
165
+ 'ubuntu-1410' => 'Ubuntu Utopic (14.10 EOL)',
166
+ 'ubuntu-15.04' => 'Ubuntu Vivid (15.04 latest)',
167
+ 'ubuntu-1504' => 'Ubuntu Vivid (15.04 latest)'
168
+ }
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Ryan Hass (<ryan@invalidchecksum.net>)
4
+ #
5
+ # Copyright (C) 2015, Ryan Hass
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ module Kitchen
20
+
21
+ module Driver
22
+
23
+ # Version string for Scaleway Kitchen driver
24
+ SCALEWAY_VERSION = "0.1.0"
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kitchen-scaleway
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Hass
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test-kitchen
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: scaleway
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cane
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: tailor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: countloc
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: A Test Kitchen Driver for Scaleway
112
+ email:
113
+ - ryan@invalidchecksum.net
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".cane"
119
+ - ".gitignore"
120
+ - ".tailor"
121
+ - ".travis.yml"
122
+ - CHANGELOG.md
123
+ - Gemfile
124
+ - LICENSE
125
+ - README.md
126
+ - Rakefile
127
+ - kitchen-scaleway.gemspec
128
+ - lib/kitchen/driver/scaleway.rb
129
+ - lib/kitchen/driver/scaleway_version.rb
130
+ homepage: https://github.com/rhass/kitchen-scaleway
131
+ licenses:
132
+ - Apache 2.0
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.4.4
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: A Test Kitchen Driver for Scaleway
154
+ test_files: []
155
+ has_rdoc: