kitchen-policyfile-nodes 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.kitchen.yml +19 -0
- data/README.md +9 -3
- data/kitchen-policyfile-nodes.gemspec +2 -2
- data/lib/kitchen/provisioner/policyfile_nodes.rb +32 -3
- data/lib/kitchen/provisioner/policyfile_nodes_version.rb +1 -1
- data/test/integration/cookbooks/test/Policyfile.rb +1 -15
- data/test/integration/cookbooks/test/recipes/search.rb +10 -3
- data/test/integration/ssh/serverspec/default_spec.rb +15 -25
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60713a800964889583b52f98ead21b7d8784d003
|
4
|
+
data.tar.gz: f7e703225d95591709017977c71331c189409b5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7a53f6008d89425ac7a23060cba77b58b18664e86428616dfc3d9987d3779349632e02aec45c40348751a8f456a585dd49002203314609ba6c375e2e6bfc4e8
|
7
|
+
data.tar.gz: 35a1260f626f4f80894c3a42e109fd16a582396a220702a71d1776c15af94c2a5082a05d75a4dff51543ac82b3812faef83110130d6e418db532b09d38b4939c
|
data/.kitchen.yml
CHANGED
@@ -12,15 +12,34 @@ platforms:
|
|
12
12
|
driver:
|
13
13
|
box: bento/centos-6.7
|
14
14
|
|
15
|
+
- name: win2012R2
|
16
|
+
driver:
|
17
|
+
box: win-2012r2-base
|
18
|
+
customize:
|
19
|
+
memsize: 2048
|
20
|
+
cpus: 2
|
21
|
+
|
15
22
|
suites:
|
16
23
|
- name: sftp
|
17
24
|
transport:
|
18
25
|
name: sftp
|
19
26
|
provisioner:
|
20
27
|
named_run_list: sftp
|
28
|
+
excludes:
|
29
|
+
- win2012R2
|
30
|
+
|
31
|
+
- name: winrm
|
32
|
+
transport:
|
33
|
+
name: winrm
|
34
|
+
provisioner:
|
35
|
+
named_run_list: win
|
36
|
+
excludes:
|
37
|
+
- el6
|
21
38
|
|
22
39
|
- name: ssh
|
23
40
|
transport:
|
24
41
|
name: ssh
|
25
42
|
provisioner:
|
26
43
|
named_run_list: ssh
|
44
|
+
excludes:
|
45
|
+
- win2012R2
|
data/README.md
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
# Kitchen::PolicyfileNodes
|
2
2
|
|
3
3
|
Provisioner `policyfile_nodes` extends `policyfile_zero` by adding one more step in the end of converge - it downloads the resulted node
|
4
|
-
JSON object to the `nodes_path` on the host machine after successful converge
|
5
|
-
Test Kitchen suites. So, you can use actual node
|
4
|
+
JSON object to the `nodes_path` on the host machine after successful converge. It allows you to use this node object for searches while converging another
|
5
|
+
Test Kitchen suites. So, you can use actual node attributes like ipaddress/fqdn to communicate nodes with each other.
|
6
6
|
|
7
7
|
For example, 'web' node need to search 'db' node ip.
|
8
8
|
In `policyfile_zero` we have to create mock in node_path for this search. `policyfile_nodes` will create mock automatically.
|
9
9
|
|
10
10
|
## Requirements
|
11
11
|
|
12
|
-
* ChefDK 0.
|
12
|
+
* ChefDK 0.12.0+
|
13
|
+
* Test Kitchen 1.7.3+
|
14
|
+
|
15
|
+
## Supports
|
16
|
+
|
17
|
+
* Linux
|
18
|
+
* Windows 2012 RC2
|
13
19
|
|
14
20
|
## Installation
|
15
21
|
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'test-kitchen', '~> 1.
|
22
|
-
spec.add_dependency 'chef-dk', '~> 0.
|
21
|
+
spec.add_dependency 'test-kitchen', '~> 1.7.3'
|
22
|
+
spec.add_dependency 'chef-dk', '~> 0.12'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
spec.add_development_dependency 'rake'
|
@@ -20,6 +20,7 @@ require 'kitchen/provisioner/policyfile_zero'
|
|
20
20
|
require 'kitchen/provisioner/base'
|
21
21
|
require 'kitchen/driver/ssh_base'
|
22
22
|
require 'kitchen/transport/ssh'
|
23
|
+
require 'kitchen/transport/winrm'
|
23
24
|
|
24
25
|
# continue loading if kitchen-sync not installed
|
25
26
|
begin
|
@@ -50,9 +51,9 @@ module Kitchen
|
|
50
51
|
conn.execute(env_cmd(provisioner.prepare_command))
|
51
52
|
conn.execute(env_cmd(provisioner.run_command))
|
52
53
|
# Download node json object generated by chef_client
|
53
|
-
info("Transferring #{provisioner.
|
54
|
+
info("Transferring #{provisioner.unix_int_node_file} " \
|
54
55
|
"from instance to #{provisioner.ext_node_file}")
|
55
|
-
conn.execute(env_cmd(conn.download(provisioner.
|
56
|
+
conn.execute(env_cmd(conn.download(provisioner.unix_int_node_file,
|
56
57
|
provisioner.ext_node_file)))
|
57
58
|
debug('Transfer complete')
|
58
59
|
end
|
@@ -86,6 +87,29 @@ module Kitchen
|
|
86
87
|
end
|
87
88
|
end
|
88
89
|
|
90
|
+
module Kitchen
|
91
|
+
module Transport
|
92
|
+
class Winrm
|
93
|
+
class Connection
|
94
|
+
# Download JSON node file from instance to
|
95
|
+
# node_path over Winrm
|
96
|
+
#
|
97
|
+
# @param remote [String] file path on instance
|
98
|
+
# @param local [String] file path on host
|
99
|
+
# TODO need to fix scheme
|
100
|
+
def download(remote, local)
|
101
|
+
FileUtils.mkdir_p(File.dirname(local))
|
102
|
+
file_manager ||= WinRM::FS::FileManager.new(service)
|
103
|
+
file_manager.download(remote, local)
|
104
|
+
logger.debug("Downloaded #{remote} to #{local}")
|
105
|
+
rescue Kitchen::Transport::WinrmFailed => ex
|
106
|
+
raise WinrmFailed, "Winrm download failed (#{ex.message})"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
89
113
|
module Kitchen
|
90
114
|
module Provisioner
|
91
115
|
class Base
|
@@ -108,6 +132,7 @@ module Kitchen
|
|
108
132
|
conn.execute(prepare_command)
|
109
133
|
conn.execute(run_command)
|
110
134
|
# Download node json object generated by chef_client
|
135
|
+
int_node_file = windows_os? ? win_int_node_file : unix_int_node_file
|
111
136
|
info("Transferring #{int_node_file} " \
|
112
137
|
"from instance to #{ext_node_file}")
|
113
138
|
conn.download(int_node_file, ext_node_file)
|
@@ -138,9 +163,13 @@ module Kitchen
|
|
138
163
|
File.join(config[:nodes_path], "#{instance.name}.json")
|
139
164
|
end
|
140
165
|
|
141
|
-
def
|
166
|
+
def unix_int_node_file
|
142
167
|
File.join(config[:root_path], 'nodes', "#{instance.name}.json")
|
143
168
|
end
|
169
|
+
|
170
|
+
def win_int_node_file
|
171
|
+
File.join(config[:root_path], 'nodes', "#{instance.name}.json").tr('/', '\\')
|
172
|
+
end
|
144
173
|
end
|
145
174
|
end
|
146
175
|
end
|
@@ -1,21 +1,7 @@
|
|
1
|
-
# Policyfile_base - Base file to be evaluated by other Policyfiles
|
2
|
-
# Don't use it as a standalone Policyfile, it doesn't work.
|
3
|
-
#
|
4
|
-
# For more information on the Policyfile feature, visit
|
5
|
-
# https://github.com/opscode/chef-dk/blob/master/POLICYFILE_README.md
|
6
|
-
|
7
|
-
# A name that describes what the system you're building with Chef does.
|
8
1
|
name 'test'
|
9
|
-
|
10
|
-
# Where to find external cookbooks:
|
11
2
|
default_source :supermarket
|
12
|
-
|
13
|
-
# Specify a custom source for a single cookbook:
|
14
3
|
cookbook 'test', path: './'
|
15
|
-
|
16
|
-
# run_list: chef-client will run these recipes in the order specified.
|
17
4
|
run_list 'test::default'
|
18
|
-
|
19
|
-
# named_run_lists
|
20
5
|
named_run_list 'sftp', 'test::default'
|
6
|
+
named_run_list 'win', 'test::default'
|
21
7
|
named_run_list 'ssh', 'test::search'
|
@@ -16,11 +16,18 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
-
|
19
|
+
sftp_node = search(:node, "name:sftp-* AND platform:#{node['platform']}")
|
20
|
+
ruby_block 'save sftp attributes' do
|
21
|
+
block do
|
22
|
+
parent = File.join(ENV['TEMP'] || '/tmp', 'kitchen')
|
23
|
+
IO.write(File.join(parent, 'sftp.json'), sftp_node[0].to_json)
|
24
|
+
end
|
25
|
+
end
|
20
26
|
|
21
|
-
|
27
|
+
win_node = search(:node, 'platform:windows')
|
28
|
+
ruby_block 'save win attributes' do
|
22
29
|
block do
|
23
30
|
parent = File.join(ENV['TEMP'] || '/tmp', 'kitchen')
|
24
|
-
IO.write(File.join(parent, '
|
31
|
+
IO.write(File.join(parent, 'win.json'), win_node[0].to_json)
|
25
32
|
end
|
26
33
|
end
|
@@ -9,38 +9,28 @@ describe 'sftp node' do
|
|
9
9
|
IO.read(File.join(ENV['TEMP'] || '/tmp', 'kitchen/sftp.json'))
|
10
10
|
)
|
11
11
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
Net::SSH.start(
|
16
|
-
ip,
|
17
|
-
'vagrant',
|
18
|
-
password: 'vagrant',
|
19
|
-
paranoid: false
|
20
|
-
)
|
12
|
+
|
13
|
+
it 'has ip' do
|
14
|
+
expect(node['automatic'].key?('ipaddress')).to eq(true)
|
21
15
|
end
|
22
16
|
|
23
|
-
it 'has
|
24
|
-
expect(
|
17
|
+
it 'has fqdn' do
|
18
|
+
expect(node['automatic'].key?('fqdn')).to eq(true)
|
25
19
|
end
|
20
|
+
end
|
26
21
|
|
27
|
-
|
28
|
-
|
22
|
+
describe 'win node' do
|
23
|
+
let(:node) do
|
24
|
+
JSON.parse(
|
25
|
+
IO.read(File.join(ENV['TEMP'] || '/tmp', 'kitchen/win.json'))
|
26
|
+
)
|
29
27
|
end
|
30
28
|
|
31
|
-
|
32
|
-
|
29
|
+
it 'has ip' do
|
30
|
+
expect(node['automatic'].key?('ipaddress')).to eq(true)
|
33
31
|
end
|
34
32
|
|
35
|
-
it 'has
|
36
|
-
|
37
|
-
channel.request_pty
|
38
|
-
channel.exec('hostname') do |_ch, _success|
|
39
|
-
channel.on_data do |_ch, data|
|
40
|
-
expect(data.chomp).to eq(fqdn)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
connection.loop
|
33
|
+
it 'has fqdn' do
|
34
|
+
expect(node['automatic'].key?('fqdn')).to eq(true)
|
45
35
|
end
|
46
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-policyfile-nodes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrei Skopenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.7.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.7.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: chef-dk
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.12'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.12'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.6.4
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: Test Kitchen provisioner based on policyfile_zero that generates searchable
|