specinfra 0.3.2 → 0.4.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: 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