kitchen-localhost 0.2.0 → 0.3.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 +4 -4
- data/.kitchen.yml +2 -0
- data/.travis.yml +9 -9
- data/CHANGELOG.md +11 -5
- data/README.md +27 -9
- data/appveyor.yml +16 -0
- data/circle.yml +21 -0
- data/lib/kitchen/driver/localhost.rb +14 -37
- data/lib/kitchen/instance_patch.rb +54 -1
- data/lib/kitchen/localhost/shell_out.rb +113 -0
- data/lib/kitchen/localhost/version.rb +1 -1
- data/lib/kitchen/platform/localhost.rb +47 -0
- data/lib/kitchen/transport/localhost/connection.rb +11 -8
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f625ce9d5ceb591fc61fac2d52dc5777393d47f3
|
4
|
+
data.tar.gz: c6b4096a2eb860b334aaabff91cbb6d281d732ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ac97bf7163a87d5b3926a6ab4d972ca1f66c31890268078f64ad361949c6749769cdf04950cd7f60551550af8dc10948c3618a1dfe8ac891b428696c3e8d748
|
7
|
+
data.tar.gz: 4bc525a72e0d528b80078ba9ec91dc7f5c89e7fb53b05648bfc4690797ab731d183bfffd9a0c355aa803ab5077caf791c3c11b0abd6858fb1e197a070e8468ac
|
data/.kitchen.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
language:
|
1
|
+
language: objective-c
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
branches:
|
4
|
+
only:
|
5
|
+
- master
|
5
6
|
|
6
|
-
|
7
|
-
-
|
7
|
+
install:
|
8
|
+
- curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -P chefdk
|
9
|
+
- chef exec bundle update
|
8
10
|
|
9
|
-
|
10
|
-
-
|
11
|
-
- 2.0.0
|
12
|
-
- 1.9.3
|
11
|
+
script:
|
12
|
+
- chef exec bundle exec kitchen test -c 2
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
Kitchen-Localhost CHANGELOG
|
2
2
|
===========================
|
3
3
|
|
4
|
+
v0.3.0 (2015-08-20)
|
5
|
+
-------------------
|
6
|
+
- Add Windows support
|
7
|
+
- Add a `clean_up_on_destroy` option for saving Kitchen's temp dirs (e.g. to
|
8
|
+
save Busser plugins on a caching-capable CI system)
|
9
|
+
|
4
10
|
v0.2.0 (2015-05-31)
|
5
11
|
-------------------
|
6
|
-
|
7
|
-
instances of this driver to run serially
|
12
|
+
- Try to catch instances where Kitchen is running in concurrency mode and force
|
13
|
+
instances of this driver to run serially
|
8
14
|
|
9
15
|
v0.1.1 (2015-04-29)
|
10
16
|
-------------------
|
11
|
-
|
17
|
+
- Bump Kitchen dependency to the final 1.4 release
|
12
18
|
|
13
19
|
v0.1.0 (2015-04-13)
|
14
20
|
-------------------
|
15
|
-
|
21
|
+
- Initial release!
|
16
22
|
|
17
23
|
v0.0.1 (2015-04-10)
|
18
24
|
-------------------
|
19
|
-
|
25
|
+
- Development started!
|
data/README.md
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
[][gem]
|
2
|
-
[][circle]
|
3
|
+
[][appveyor]
|
4
|
+
[][travis]
|
3
5
|
[][codeclimate]
|
4
6
|
[][coveralls]
|
5
7
|
[][gemnasium]
|
6
8
|
|
7
9
|
[gem]: https://rubygems.org/gems/kitchen-localhost
|
10
|
+
[circle]: https://circleci.com/gh/RoboticCheese/kitchen-localhost
|
11
|
+
[appveyor]: https://ci.appveyor.com/project/RoboticCheese/kitchen-localhost
|
8
12
|
[travis]: https://travis-ci.org/RoboticCheese/kitchen-localhost
|
9
13
|
[codeclimate]: https://codeclimate.com/github/RoboticCheese/kitchen-localhost
|
10
14
|
[coveralls]: https://coveralls.io/r/RoboticCheese/kitchen-localhost
|
@@ -15,11 +19,13 @@ Kitchen::Localhost
|
|
15
19
|
|
16
20
|
A Test Kitchen Driver for when you just want to run Chef on localhost.
|
17
21
|
|
18
|
-
I swear, there's a reason this driver exists!
|
19
|
-
|
20
|
-
|
21
|
-
allows you to
|
22
|
-
|
22
|
+
I swear, there's a reason this driver exists!
|
23
|
+
|
24
|
+
TravisCI has a wonderful OS X build environment and AppVeyor a Windows one.
|
25
|
+
This driver allows you to use either as a test environment--having the platform
|
26
|
+
under test be the one running Test Kitchen, rather than a remote cloud
|
27
|
+
server--all while keeping the same Kitchen settings, behavior, and log output
|
28
|
+
you're used to.
|
23
29
|
|
24
30
|
Requirements
|
25
31
|
------------
|
@@ -29,9 +35,10 @@ understanding that this driver will be running against _your local machine_. If
|
|
29
35
|
you write a cookbook that formats a hard drive and run it with this driver, bad
|
30
36
|
things will happen.
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
38
|
+
This driver attempts to minimize cases of multiple test suites clobbering each
|
39
|
+
other by never running concurrently, even if the `-c` option is passed to Test
|
40
|
+
Kitchen. But everything is still running on the same machine. Don't define
|
41
|
+
multiple suites unless they're okay to run, serially, on a single server.
|
35
42
|
|
36
43
|
Installation and Setup
|
37
44
|
----------------------
|
@@ -73,6 +80,17 @@ That's it!
|
|
73
80
|
run_list:
|
74
81
|
- recipe[something]
|
75
82
|
|
83
|
+
Optionally, you can configure the driver to leave behind Test Kitchen's temp
|
84
|
+
directories when it does a `kitchen destroy`:
|
85
|
+
|
86
|
+
---
|
87
|
+
driver:
|
88
|
+
name: localhost
|
89
|
+
clean_up_on_destroy: false
|
90
|
+
|
91
|
+
This can be useful if, for example, you have a CI system that's slow to install
|
92
|
+
gems and you want to have it cache Busser + its plugins.
|
93
|
+
|
76
94
|
Contributing
|
77
95
|
------------
|
78
96
|
|
data/appveyor.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
branches:
|
2
|
+
only:
|
3
|
+
- master
|
4
|
+
|
5
|
+
cache:
|
6
|
+
- '%TEMP%\verifier\gems'
|
7
|
+
|
8
|
+
install:
|
9
|
+
- cinst chefdk
|
10
|
+
- SET PATH=C:\opscode\chefdk\bin;%PATH%
|
11
|
+
|
12
|
+
build_script:
|
13
|
+
- chef exec bundle update
|
14
|
+
|
15
|
+
test_script:
|
16
|
+
- chef exec bundle exec kitchen test -c 2
|
data/circle.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
machine:
|
2
|
+
ruby:
|
3
|
+
version: 2.1.6
|
4
|
+
|
5
|
+
dependencies:
|
6
|
+
pre:
|
7
|
+
- rvm install 2.0.0-p645
|
8
|
+
- rvm install 1.9.3-p545
|
9
|
+
override:
|
10
|
+
- bundle update
|
11
|
+
- rvm-exec 2.0.0-p645 bundle update
|
12
|
+
- rvm-exec 1.9.3-p545 bundle update
|
13
|
+
cache_directories:
|
14
|
+
- /home/ubuntu/.rvm/gems
|
15
|
+
|
16
|
+
test:
|
17
|
+
override:
|
18
|
+
- bundle exec rake
|
19
|
+
- rvm-exec 2.0.0-p645 bundle exec rake
|
20
|
+
- rvm-exec 1.9.3-p545 bundle exec rake
|
21
|
+
- bundle exec kitchen test -c 2
|
@@ -17,12 +17,12 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'fileutils'
|
21
20
|
require 'socket'
|
22
21
|
require 'kitchen'
|
23
22
|
require 'kitchen/driver/base'
|
24
|
-
require_relative '../localhost/version'
|
25
23
|
require_relative '../instance_patch'
|
24
|
+
require_relative '../localhost/shell_out'
|
25
|
+
require_relative '../localhost/version'
|
26
26
|
|
27
27
|
module Kitchen
|
28
28
|
module Driver
|
@@ -30,43 +30,18 @@ module Kitchen
|
|
30
30
|
#
|
31
31
|
# @author Jonathan Hartman <j@p4nt5.com>
|
32
32
|
class Localhost < Kitchen::Driver::Base
|
33
|
+
include Kitchen::Localhost::ShellOut
|
34
|
+
|
33
35
|
kitchen_driver_api_version 2
|
34
36
|
plugin_version Kitchen::Localhost::VERSION
|
35
37
|
|
36
|
-
|
37
|
-
# Define a Mutex at the class level so we can prevent instances using
|
38
|
-
# this driver from colliding.
|
39
|
-
#
|
40
|
-
# @return [Mutex]
|
41
|
-
#
|
42
|
-
def self.lock
|
43
|
-
@lock ||= Mutex.new
|
44
|
-
end
|
45
|
-
|
46
|
-
#
|
47
|
-
# Lock the class-level Mutex, whatever state it's in currently.
|
48
|
-
#
|
49
|
-
def self.lock!
|
50
|
-
lock.lock
|
51
|
-
end
|
52
|
-
|
53
|
-
#
|
54
|
-
# Unlock the class-level Mutex, whatever state it's in currently.
|
55
|
-
#
|
56
|
-
def self.unlock!
|
57
|
-
# Mutex#unlock raises an exception if lock is owned by another thread
|
58
|
-
# and Mutex#owned? isn't available in Ruby 1.9.
|
59
|
-
lock.unlock if lock.locked?
|
60
|
-
rescue ThreadError
|
61
|
-
nil
|
62
|
-
end
|
38
|
+
default_config :clean_up_on_destroy, true
|
63
39
|
|
64
40
|
#
|
65
41
|
# Create the temp dirs on the local filesystem for Kitchen.
|
66
42
|
#
|
67
43
|
# (see Base#create)
|
68
44
|
def create(state)
|
69
|
-
self.class.lock!
|
70
45
|
state[:hostname] = Socket.gethostname
|
71
46
|
logger.info("[Localhost] Instance #{instance} ready.")
|
72
47
|
end
|
@@ -77,14 +52,16 @@ module Kitchen
|
|
77
52
|
# (see Base#destroy)
|
78
53
|
#
|
79
54
|
def destroy(_)
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
55
|
+
if config[:clean_up_on_destroy]
|
56
|
+
[
|
57
|
+
instance.provisioner[:root_path], instance.verifier[:root_path]
|
58
|
+
].each do |p|
|
59
|
+
rm_rf(p)
|
60
|
+
logger.info("[Localhost] Deleted temp dir '#{p}'.")
|
61
|
+
end
|
62
|
+
else
|
63
|
+
logger.info('[Localhost] Leaving Kitchen temp dirs in place.')
|
86
64
|
end
|
87
|
-
self.class.unlock!
|
88
65
|
end
|
89
66
|
end
|
90
67
|
end
|
@@ -20,6 +20,7 @@
|
|
20
20
|
require 'kitchen'
|
21
21
|
require 'kitchen/instance'
|
22
22
|
require_relative 'driver/localhost'
|
23
|
+
require_relative 'platform/localhost'
|
23
24
|
require_relative 'transport/localhost'
|
24
25
|
|
25
26
|
module Kitchen
|
@@ -28,17 +29,69 @@ module Kitchen
|
|
28
29
|
#
|
29
30
|
# @author Jonathan Hartman <j@p4nt5.com>
|
30
31
|
class Instance
|
32
|
+
class << self
|
33
|
+
#
|
34
|
+
# Define a Mutex at the class level so we can prevent instances using
|
35
|
+
# the Localhost driver from colliding.
|
36
|
+
#
|
37
|
+
# @return [Mutex]
|
38
|
+
#
|
39
|
+
def lock
|
40
|
+
@lock ||= Mutex.new
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
alias_method :old_test, :test
|
45
|
+
|
46
|
+
#
|
47
|
+
# If using the Localhost driver, don't start the test phase until we can
|
48
|
+
# get a lock on the class-level Mutex.
|
49
|
+
#
|
50
|
+
# (see Instance#test)
|
51
|
+
#
|
52
|
+
def test(destroy_node = :passing)
|
53
|
+
if driver.class == Kitchen::Driver::Localhost
|
54
|
+
debug("[Localhost] Waiting for a lock before #{to_str} can proceed...")
|
55
|
+
self.class.lock.synchronize do
|
56
|
+
debug("[Localhost] Lock obtained for #{to_str}; proceeding...")
|
57
|
+
old_test(destroy_node)
|
58
|
+
debug("[Localhost] Test complete for #{to_str}; releasing lock...")
|
59
|
+
end
|
60
|
+
else
|
61
|
+
old_test(destroy_node)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
31
65
|
alias_method :old_setup_transport, :setup_transport
|
32
66
|
|
67
|
+
#
|
33
68
|
# If using the Localhost driver, force usage of the Localhost transport.
|
34
69
|
#
|
35
70
|
# (see Instance#setup_transport)
|
36
71
|
#
|
37
72
|
def setup_transport
|
38
|
-
if
|
73
|
+
if driver.class == Kitchen::Driver::Localhost
|
39
74
|
@transport = Kitchen::Transport::Localhost.new
|
40
75
|
end
|
41
76
|
old_setup_transport
|
42
77
|
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# If using the Localhost driver, use the custom Platform class to figure
|
81
|
+
# out whether we need to use PowerShell or not.
|
82
|
+
#
|
83
|
+
# (see Instance#platform)
|
84
|
+
#
|
85
|
+
def platform
|
86
|
+
if driver.class == Kitchen::Driver::Localhost && \
|
87
|
+
@platform.class != Kitchen::Platform::Localhost
|
88
|
+
@platform = Kitchen::Platform::Localhost.new(
|
89
|
+
name: @platform.name,
|
90
|
+
os_type: @platform.os_type,
|
91
|
+
shell_type: @platform.shell_type
|
92
|
+
)
|
93
|
+
end
|
94
|
+
@platform
|
95
|
+
end
|
43
96
|
end
|
44
97
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2015, Jonathan Hartman
|
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
|
+
|
20
|
+
require 'fileutils'
|
21
|
+
require 'tempfile'
|
22
|
+
require 'kitchen'
|
23
|
+
require 'kitchen/shell_out'
|
24
|
+
|
25
|
+
module Kitchen
|
26
|
+
module Localhost
|
27
|
+
# Take Kitchen's ShellOut module and add support for Windows Powershell.
|
28
|
+
#
|
29
|
+
# @author Jonathan Hartman <j@p4nt5.com>
|
30
|
+
module ShellOut
|
31
|
+
include Kitchen::ShellOut
|
32
|
+
|
33
|
+
alias_method :run_command_sh, :run_command
|
34
|
+
|
35
|
+
#
|
36
|
+
# Run a given command through the regular shell on any *nix systems or
|
37
|
+
# PowerShell on Windows.
|
38
|
+
#
|
39
|
+
# @param cmd [String] a command to run
|
40
|
+
#
|
41
|
+
def run_command(cmd)
|
42
|
+
windows_os? ? run_command_psh(cmd) : run_command_sh(cmd)
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Run a given command through PowerShell, accounting for quotes and
|
47
|
+
# other difficult-to-account for characters by writing the command out
|
48
|
+
# to a temp file, executing it, and cleaning up after.
|
49
|
+
#
|
50
|
+
# @param cmd [String] a PowerShell command or script to run
|
51
|
+
#
|
52
|
+
# @raise [ShellCommandFailed] if the command exits non-zero
|
53
|
+
#
|
54
|
+
def run_command_psh(cmd)
|
55
|
+
script = Tempfile.new(%w(kitchen-localhost .ps1))
|
56
|
+
script.write(cmd)
|
57
|
+
script.close
|
58
|
+
begin
|
59
|
+
res = run_command_sh("powershell #{script.path}")
|
60
|
+
ensure
|
61
|
+
script.unlink
|
62
|
+
end
|
63
|
+
res
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Do a recursive copy of one path to another, while running the paths
|
68
|
+
# through PowerShell on Windows platforms to translate any PSH variables.
|
69
|
+
#
|
70
|
+
# @param source [String] a source path
|
71
|
+
# @param dest [String] a destination path
|
72
|
+
#
|
73
|
+
def cp_r(source, dest)
|
74
|
+
if windows_os?
|
75
|
+
source = run_command_psh("\"#{source}\"").strip
|
76
|
+
dest = run_command_psh("\"#{dest}\"").strip
|
77
|
+
end
|
78
|
+
FileUtils.cp_r(source, dest)
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Do a recursive delete of a given path, while running the path through
|
83
|
+
# PowerShell on Windows platforms to translate any PSH variables.
|
84
|
+
#
|
85
|
+
# @param path [String] a directory to create
|
86
|
+
#
|
87
|
+
def rm_rf(path)
|
88
|
+
path = run_command_psh("\"#{path}\"").strip if windows_os?
|
89
|
+
FileUtils.rm_rf(path)
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Do a recursive mkdir of a given path, while running the path through
|
94
|
+
# PowerShell on Windows platforms to translate any PSH variables.
|
95
|
+
#
|
96
|
+
# @param path [String] a directory to create
|
97
|
+
#
|
98
|
+
def mkdir_p(path)
|
99
|
+
path = run_command_psh("\"#{path}\"").strip if windows_os?
|
100
|
+
FileUtils.mkdir_p(path)
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# Check whether the localhost instance is Windows
|
105
|
+
#
|
106
|
+
# @return [TrueClass, FalseClass] whether localhost is Windows
|
107
|
+
#
|
108
|
+
def windows_os?
|
109
|
+
!RUBY_PLATFORM.match(/mswin|mingw32|windows/).nil?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2015, Jonathan Hartman
|
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
|
+
|
20
|
+
require 'kitchen'
|
21
|
+
require 'kitchen/platform'
|
22
|
+
require_relative '../localhost/shell_out'
|
23
|
+
|
24
|
+
module Kitchen
|
25
|
+
class Platform
|
26
|
+
# A customized platform class that figures out on its own whether we're on
|
27
|
+
# a Windows or *nix system, rather than relying on platform name.
|
28
|
+
#
|
29
|
+
# @author Jonathan Hartman <j@p4nt5.com>
|
30
|
+
class Localhost < Platform
|
31
|
+
include Kitchen::Localhost::ShellOut
|
32
|
+
|
33
|
+
#
|
34
|
+
# Figure out automatically whether localhost is a Windows or *nix system.
|
35
|
+
#
|
36
|
+
# (see Platform#initialize)
|
37
|
+
#
|
38
|
+
def initialize(options = {})
|
39
|
+
if windows_os?
|
40
|
+
options[:os_type] = 'windows'
|
41
|
+
options[:shell_type] = 'powershell'
|
42
|
+
end
|
43
|
+
super(options)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -18,10 +18,9 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'bundler'
|
21
|
-
require 'fileutils'
|
22
21
|
require 'kitchen'
|
23
|
-
require 'kitchen/shell_out'
|
24
22
|
require 'kitchen/transport/base'
|
23
|
+
require_relative '../../localhost/shell_out'
|
25
24
|
require_relative '../localhost'
|
26
25
|
|
27
26
|
module Kitchen
|
@@ -31,10 +30,12 @@ module Kitchen
|
|
31
30
|
#
|
32
31
|
# @author Jonathan Hartman <j@p4nt5.com>
|
33
32
|
class Connection < Kitchen::Transport::Base::Connection
|
34
|
-
include Kitchen::ShellOut
|
33
|
+
include Kitchen::Localhost::ShellOut
|
35
34
|
|
36
35
|
#
|
37
|
-
# Execute a given command
|
36
|
+
# Execute a given command. Use the ShellOut helpers so the command is
|
37
|
+
# run through PowerShell on Windows systems and the regular command
|
38
|
+
# line everywhere else.
|
38
39
|
#
|
39
40
|
# (see Base::Connection#execute)
|
40
41
|
#
|
@@ -42,7 +43,7 @@ module Kitchen
|
|
42
43
|
#
|
43
44
|
def execute(command)
|
44
45
|
return if command.nil?
|
45
|
-
logger.debug("[Localhost]
|
46
|
+
logger.debug("[Localhost] Executing command '#{command}'")
|
46
47
|
begin
|
47
48
|
Bundler.with_clean_env { run_command(command) }
|
48
49
|
rescue StandardError => err
|
@@ -51,14 +52,16 @@ module Kitchen
|
|
51
52
|
end
|
52
53
|
|
53
54
|
#
|
54
|
-
# Upload a set of local files to a 'remote' (aka Kitchen temp dir)
|
55
|
+
# Upload a set of local files to a 'remote' (aka Kitchen temp dir). Use
|
56
|
+
# the ShellOut helpers to run the paths through PowerShell and resolve
|
57
|
+
# any input PSH variables.
|
55
58
|
#
|
56
59
|
# (see Base::Connection#upload)
|
57
60
|
#
|
58
61
|
def upload(locals, remote)
|
59
|
-
|
62
|
+
mkdir_p(remote)
|
60
63
|
Array(locals).each do |local|
|
61
|
-
|
64
|
+
cp_r(local, remote)
|
62
65
|
logger.debug("[Localhost] Copied '#{local}' to '#{remote}'")
|
63
66
|
end
|
64
67
|
logger.debug("[Localhost] File copying to '#{remote}' complete")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-localhost
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Hartman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-kitchen
|
@@ -181,10 +181,14 @@ files:
|
|
181
181
|
- LICENSE.txt
|
182
182
|
- README.md
|
183
183
|
- Rakefile
|
184
|
+
- appveyor.yml
|
185
|
+
- circle.yml
|
184
186
|
- kitchen-localhost.gemspec
|
185
187
|
- lib/kitchen/driver/localhost.rb
|
186
188
|
- lib/kitchen/instance_patch.rb
|
189
|
+
- lib/kitchen/localhost/shell_out.rb
|
187
190
|
- lib/kitchen/localhost/version.rb
|
191
|
+
- lib/kitchen/platform/localhost.rb
|
188
192
|
- lib/kitchen/transport/localhost.rb
|
189
193
|
- lib/kitchen/transport/localhost/connection.rb
|
190
194
|
homepage: https://github.com/test-kitchen/kitchen-localhost
|
@@ -207,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
211
|
version: '0'
|
208
212
|
requirements: []
|
209
213
|
rubyforge_project:
|
210
|
-
rubygems_version: 2.4.
|
214
|
+
rubygems_version: 2.4.8
|
211
215
|
signing_key:
|
212
216
|
specification_version: 4
|
213
217
|
summary: Use Test Kitchen on your local machine!
|