specinfra 0.3.2 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ece2d3ebcdaf4b350c4d6cf055ee97ccde8a463e
4
- data.tar.gz: ffd5b3944a6b80825c223e5bf7ea4243e8df1edd
3
+ metadata.gz: 4785000c56dff6105aa2e655328c615026a52af2
4
+ data.tar.gz: d2dc88e1c51ff2b1ccf0c750f0c4fccc8c75f2b4
5
5
  SHA512:
6
- metadata.gz: 2d9eb88d5b685a3022ff87d6da4abbe1ba99ab975efa02aff393e5aca05ef9c55f13bd941297f72af3ab3e85f8598e9765b3bb0d43b7935fd2b5f3cf68f2c86a
7
- data.tar.gz: a2b43107e2d7e6e5b974852aeba201db255e0ead9700f13a83ea7660c5fa3721dc7524a49c6033a594ae9c4cb73131009c294ccf1984e8fae283dea7e203dc74
6
+ metadata.gz: b0fee80b588f1d5aaa319511648989e7a47385b1180e6bf002e06ed2d8a1cddbd6b1ede74036382d066e0e6ca03bb37b36def01fcc71bad202c6ad6a21784653
7
+ data.tar.gz: d542a791c5fd87dda06b5dada1b964b3ea4d1ef4e8c9daf68ef6067758fb1ba69792676d8949c070b6862f895767eb312909b3cb98e8f56b3b98ef3f5e555447
@@ -0,0 +1,68 @@
1
+ module SpecInfra
2
+ module Backend
3
+ class Docker < Exec
4
+ def initialize
5
+ @images = []
6
+ end
7
+
8
+ def run_command(cmd, opts={})
9
+ cmd = build_command(cmd)
10
+ cmd = add_pre_command(cmd)
11
+ docker_run!(cmd)
12
+ end
13
+
14
+ def build_command(cmd)
15
+ cmd
16
+ end
17
+
18
+ def add_pre_command(cmd)
19
+ cmd
20
+ end
21
+
22
+ def copy_file(from, to)
23
+ begin
24
+ @images << current_image.insert_local('localPath' => from, 'outputPath' => to)
25
+ rescue ::Docker::Error::DockerError
26
+ return false
27
+ end
28
+ true
29
+ end
30
+
31
+ private
32
+
33
+ def base_image
34
+ @base_image ||= ::Docker::Image.get(SpecInfra.configuration.docker_image)
35
+ end
36
+
37
+ def current_image
38
+ @images.last || base_image
39
+ end
40
+
41
+ def docker_run!(cmd, opts={})
42
+ opts = {
43
+ 'Image' => current_image.id,
44
+ 'Cmd' => %W{/bin/sh -c #{cmd}},
45
+ }.merge(opts)
46
+
47
+ if path = SpecInfra::configuration::path
48
+ (opts['Env'] ||= {})['PATH'] = path
49
+ end
50
+
51
+ container = ::Docker::Container.create(opts)
52
+ begin
53
+ container.start
54
+ begin
55
+ stdout, stderr = container.attach
56
+ result = container.wait
57
+ return {:stdout => stdout.join, :stderr => stderr.join,
58
+ :exit_status => result['StatusCode'], :exit_signal => nil}
59
+ rescue
60
+ container.kill
61
+ end
62
+ ensure
63
+ container.delete
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -4,6 +4,7 @@ require 'specinfra/backend/ssh'
4
4
  require 'specinfra/backend/powershell/script_helper'
5
5
  require 'specinfra/backend/powershell/command'
6
6
  require 'specinfra/backend/cmd'
7
+ require 'specinfra/backend/docker'
7
8
  require 'specinfra/backend/winrm'
8
9
  require 'specinfra/backend/shellscript'
9
10
  require 'specinfra/backend/dockerfile'
@@ -9,7 +9,8 @@ module SpecInfra
9
9
  :sudo_path,
10
10
  :disable_sudo,
11
11
  :pass_prompt,
12
- :sudo_options
12
+ :sudo_options,
13
+ :docker_image
13
14
  ].freeze
14
15
 
15
16
  def defaults
@@ -1,6 +1,6 @@
1
1
  module SpecInfra
2
2
  module Helper
3
- ['Exec', 'Ssh', 'Cmd', 'WinRM', 'ShellScript', 'Dockerfile'].each do |type|
3
+ ['Exec', 'Ssh', 'Cmd', 'Docker', 'WinRM', 'ShellScript', 'Dockerfile'].each do |type|
4
4
  eval <<-EOF
5
5
  module #{type}
6
6
  def backend(commands_object=nil)
@@ -0,0 +1,11 @@
1
+ module SpecInfra
2
+ module Helper
3
+ module Docker
4
+ def self.included(klass)
5
+ require 'docker' unless defined?(::Docker)
6
+ rescue LoadError
7
+ fail "Docker client library is not available. Try installing `docker-api' gem."
8
+ end
9
+ end
10
+ end
11
+ end
@@ -4,6 +4,8 @@ require 'specinfra/helper/detect_os'
4
4
  require 'specinfra/helper/backend'
5
5
  include SpecInfra::Helper::Backend
6
6
 
7
+ require 'specinfra/helper/docker'
8
+
7
9
  require 'specinfra/helper/configuration'
8
10
 
9
11
  require 'specinfra/helper/properties'
@@ -1,3 +1,3 @@
1
1
  module Specinfra
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specinfra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gosuke Miyashita
@@ -69,6 +69,7 @@ files:
69
69
  - lib/specinfra/backend.rb
70
70
  - lib/specinfra/backend/base.rb
71
71
  - lib/specinfra/backend/cmd.rb
72
+ - lib/specinfra/backend/docker.rb
72
73
  - lib/specinfra/backend/dockerfile.rb
73
74
  - lib/specinfra/backend/exec.rb
74
75
  - lib/specinfra/backend/powershell/command.rb
@@ -105,6 +106,7 @@ files:
105
106
  - lib/specinfra/helper/backend.rb
106
107
  - lib/specinfra/helper/configuration.rb
107
108
  - lib/specinfra/helper/detect_os.rb
109
+ - lib/specinfra/helper/docker.rb
108
110
  - lib/specinfra/helper/os.rb
109
111
  - lib/specinfra/helper/properties.rb
110
112
  - lib/specinfra/properties.rb