kitchen-rax 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aca94155610a4b5e174e96c6460ec2339c948932
4
- data.tar.gz: c5ab9d9fc2625fe90fee924244bf7ab8f5f1e93c
3
+ metadata.gz: c0109d9348db441b6600d8035ec7f33d5adc7f49
4
+ data.tar.gz: 9356b8368eefdb41221eda9bd2a88fef91640c01
5
5
  SHA512:
6
- metadata.gz: b7ff7320bad031b00cccec7ed004be577717bd13eb92ab116d3beb2b8a41431635b509f9dc0fe3dc2675499de8d321d377e8192505d4daf3ef9f30e2b360a2be
7
- data.tar.gz: 644db80c4beccec3a87a21a12057c1df0c526093595a961161b208237cc20a53ce109cc6fe1f63ff8161cdf6ca4226d22fbdf7c2ba6ba67dba16ccc6a04990f4
6
+ metadata.gz: f1c1984bd5fde64482a9e71ed0aaf699cafb333f3ffaf3578235167192a5244e67cce58bf3fbf283b8953d75835c4bbaef2620d3b58cc518d849457ba1264a48
7
+ data.tar.gz: 2e8003ff10c41fcf84df49249d1256e9cbc641ce396b8d3c3a0e5732625ea8fa7738a53d870fd0350b2d2c6de78e909b9abedf438ae0ddc0b6fbfd63e6f5d292
@@ -0,0 +1,16 @@
1
+ module Kitchen
2
+
3
+ module Driver
4
+
5
+ def self.default_name
6
+ [
7
+ instance.name.gsub(/\W/, '')[0..14],
8
+ (Etc.getlogin || 'nologin').gsub(/\W/, '')[0..14],
9
+ Socket.gethostname.gsub(/\W/, '')[0..22],
10
+ Array.new(7) { rand(36).to_s(36) }.join
11
+ ].join('-')
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -1,37 +1,99 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Author:: Olivier Kouame (<olivier.kouame@salesforce.com>)
4
- #
5
- # Copyright (C) 2017, Olivier Kouame
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
1
  require 'kitchen'
20
2
 
21
3
  module Kitchen
22
4
 
23
- module Driver
5
+ module Driver
6
+
7
+ class Rax < Kitchen::Driver::Base
8
+
9
+ default_config :version, 'v2'
10
+ default_config :flavor_id, 'performance1-1'
11
+ default_config :port, '22'
12
+ default_config :rackspace_region, 'lon'
13
+ default_config :wait_for, 600
14
+ default_config(:image_id, &:default_image)
15
+ default_config(:server_name, &:default_name)
16
+ default_config :networks, nil
17
+
18
+ default_config :rackspace_username do
19
+ ENV['RACKSPACE_USERNAME']
20
+ end
21
+
22
+ default_config :rackspace_api_key do
23
+ ENV['RACKSPACE_API_KEY']
24
+ end
25
+
26
+ required_config :rackspace_username
27
+ required_config :rackspace_api_key
28
+ required_config :image_id
29
+
30
+ def initialize(config)
31
+ super
32
+ Fog.timeout = config[:wait_for].to_i
33
+ end
34
+
35
+ def create(state)
36
+ server = create_server
37
+ state[:server_id] = server.id
38
+ info("Rackspace instance <#{state[:server_id]}> created.")
39
+ server.wait_for { ready? }
40
+ puts '(server ready)'
41
+ rackconnect_check(server)
42
+ state[:hostname] = hostname(server)
43
+ tcp_check(state)
44
+ rescue Fog::Errors::Error, Excon::Errors::Error => ex
45
+ raise ActionFailed, ex.message
46
+ end
47
+
48
+ def destroy(state)
49
+ return if state[:server_id].nil?
50
+ server = compute.servers.get(state[:server_id])
51
+ server.destroy unless server.nil?
52
+ info("Rackspace instance <#{state[:server_id]}> destroyed.")
53
+ state.delete(:server_id)
54
+ state.delete(:hostname)
55
+ end
56
+
57
+ private
58
+
59
+ def compute
60
+ server_def = { provider: 'Rackspace' }
61
+ opts = [:version, :rackspace_username, :rackspace_api_key, :rackspace_region]
62
+ opts.each do |opt|
63
+ server_def[opt] = config[opt]
64
+ end
65
+ Fog::Compute.new(server_def)
66
+ end
67
+
68
+ def create_server
69
+ server_def = { name: config[:server_name], networks: networks }
70
+ [:image_id, :flavor_id].each do |opt|
71
+ server_def[opt] = config[opt]
72
+ end
73
+ server_def[:no_passwd_lock] = true
74
+ server = compute.servers.new(server_def).save
75
+ username = instance.transport[:username]
76
+ state[:password] = server.password
77
+ end
78
+
79
+ def rackconnect_check(server)
80
+ server.wait_for { metadata.all['rackconnect_automation_status'] == 'DEPLOYED' }
81
+ puts '(rackconnect automation complete)'
82
+ server.update
83
+ end
84
+
85
+ def winrm_transport?
86
+ instance.transport.name.casecmp("winrm") == 0
87
+ end
24
88
 
25
- # Rax driver for Kitchen.
26
- #
27
- # @author Olivier Kouame <olivier.kouame@salesforce.com>
28
- class Rax < Kitchen::Driver::SSHBase
89
+ def hostname(server)
90
+ server.public_ip_address
91
+ end
29
92
 
30
- def create(state)
31
- end
93
+ def networks
94
+ nil
95
+ end
32
96
 
33
- def destroy(state)
34
- end
35
- end
36
- end
97
+ end
98
+ end
37
99
  end
@@ -21,6 +21,6 @@ module Kitchen
21
21
  module Driver
22
22
 
23
23
  # Version string for Rax Kitchen driver
24
- RAX_VERSION = "0.2.0"
24
+ RAX_VERSION = "0.3.0"
25
25
  end
26
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-rax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olivier Kouame
@@ -113,6 +113,7 @@ files:
113
113
  - bin/console
114
114
  - bin/setup
115
115
  - kitchen-rax.gemspec
116
+ - lib/kitchen/driver/helper.rb
116
117
  - lib/kitchen/driver/rax.rb
117
118
  - lib/kitchen/driver/rax_version.rb
118
119
  - spec/kitchen/rax_spec.rb