kitchen-fifo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ #
2
+ # Author:: Brian Akins (<brian@akins.org>)
3
+ #
4
+ # Copyright (C) 2013-present, Brian Akins
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.
@@ -0,0 +1,4 @@
1
+ kitchen-fifo
2
+ ============
3
+
4
+ Project-FIFO driver for Kitchen
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'kitchen/driver/fifo_version.rb'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "kitchen-fifo"
8
+ gem.version = Kitchen::Driver::FIFO_VERSION
9
+ gem.authors = ["Brian Akins"]
10
+ gem.email = ["brian@akins.org"]
11
+ gem.description = "Kitchen::Driver::FIFO - A Test Kitchen Driver for Project-FIFO"
12
+ gem.summary = gem.description
13
+ gem.homepage = "https://github.com/bakins/kitchen-fifo/"
14
+ gem.license = "Apache 2.0"
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = []
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency 'test-kitchen', '~> 1.0.0.alpha.0'
21
+ gem.add_dependency 'project-fifo-ruby'
22
+ end
@@ -0,0 +1,84 @@
1
+ require 'project-fifo'
2
+ require 'kitchen'
3
+
4
+ module Kitchen
5
+
6
+ module Driver
7
+
8
+ class Fifo < Kitchen::Driver::SSHBase
9
+
10
+ default_config :fifo_endpoint, 'http://192.168.1.100/api/0.1.0/'
11
+ default_config :fifo_username, 'admin'
12
+ default_config :fifo_password, 'admin'
13
+ default_config :package, 'medium'
14
+ default_config :dataset, 'ubuntu-12.04'
15
+ default_config :iprange, 'default'
16
+ default_config :username, 'root'
17
+ default_config :port, '22'
18
+
19
+ def create(state)
20
+ server = create_server
21
+ state[:server_id] = server["uuid"]
22
+
23
+ info("FIFO instance <#{state[:server_id]}> created.")
24
+ wait_for_server(server)
25
+ print "(server ready)"
26
+ server = connection.vms.get(state[:server_id])
27
+ state[:hostname] = server['config']['networks'].first['ip']
28
+ wait_for_sshd(state[:hostname]) ; print "(ssh ready)\n"
29
+ end
30
+
31
+ def destroy(state)
32
+ return if state[:server_id].nil?
33
+
34
+ server = connection.vms.get(state[:server_id])
35
+ connection.vms.delete(state[:server_id]) unless server.nil?
36
+ info("FIFO instance <#{state[:server_id]}> destroyed.")
37
+ state.delete(:server_id)
38
+ state.delete(:hostname)
39
+ end
40
+
41
+ private
42
+
43
+ def connection
44
+ @connection ||= begin
45
+ fifo = ProjectFifo.new(config[:fifo_endpoint], config[:fifo_username], config[:fifo_password])
46
+ fifo.connect
47
+ fifo
48
+ end
49
+ end
50
+
51
+ def create_server
52
+ # need to resolve names to uuid's
53
+ # need to add better helpers to fifo client??
54
+ # TODO: we should sort the get_by_name by version???
55
+ connection.vms.create(
56
+ dataset: connection.datasets.get_by_name(config[:dataset]).last['dataset'],
57
+ package: connection.packages.get_by_name(config[:package]).first['uuid'],
58
+ config: {
59
+ alias: "kitchen-" + Time.now.to_i.to_s,
60
+ resolvers: [ "8.8.8.8" ],
61
+ ssh_keys: connection.ssh_keys,
62
+ networks: {
63
+ net0: connection.ipranges.get_by_name(config[:iprange]).first['uuid']
64
+ }
65
+ }
66
+ )
67
+ end
68
+
69
+
70
+ # add to fifo gem?
71
+ def wait_for_server(server)
72
+ id = server["uuid"]
73
+ while true do
74
+ s = connection.vms.get(id)
75
+ break if s['state'] == "running"
76
+ print "."
77
+ sleep 10
78
+ end
79
+ sleep 10
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,6 @@
1
+ module Kitchen
2
+ module Driver
3
+ # Version string for Project-Fifo Test Kitchen driver
4
+ FIFO_VERSION = "0.1.0"
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kitchen-fifo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brian Akins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: test-kitchen
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0.alpha.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0.alpha.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: project-fifo-ruby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Kitchen::Driver::FIFO - A Test Kitchen Driver for Project-FIFO
47
+ email:
48
+ - brian@akins.org
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - LICENSE
55
+ - README.md
56
+ - kitchen-fifo.gemspec
57
+ - lib/kitchen/driver/fifo.rb
58
+ - lib/kitchen/driver/fifo_version.rb
59
+ homepage: https://github.com/bakins/kitchen-fifo/
60
+ licenses:
61
+ - Apache 2.0
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 1.8.23
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: Kitchen::Driver::FIFO - A Test Kitchen Driver for Project-FIFO
84
+ test_files: []
85
+ has_rdoc: