serverspec 2.2.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f6d7aa27e722dbebd2e7c9052d267f2a790b4bc
4
- data.tar.gz: c5dce829ed3872a406673ab8872c4dc6811374aa
3
+ metadata.gz: c11ef86a64f8183dfa28220f2a8f0f3decb729d6
4
+ data.tar.gz: 63ce70dcced311832c744a3ebfe9870fab383362
5
5
  SHA512:
6
- metadata.gz: d45ded0ebc80ae93284eba93a1b1c47b37234aaa375312c0bc266f84afcad3a081a5551b4b5da95793f7b0985397299bbe1792730e238ecd0e927e0f337fe9cd
7
- data.tar.gz: 798478850c32be2528c8bf14b7040f5d0c4869056241b06aa4f887bff4064ddfabf38d919cb8e862467b02afd65eaa2d5539fbe73df7d98d9a0e4b157d8babcc
6
+ metadata.gz: c98b2eeec8291a219bbf6e812c7037b555bd8134b278904c3212106ec0549c2a77bf27c3d712b90b3adf94b9ce3cdac75210bc8d0141473881ccb42b1942bf63
7
+ data.tar.gz: 41073608375f930f27a16457a234fa41b4a3228f7285f6871eb96bd0fd3736b8f3453ebf3eef84200c54a290a479773fd9eed2540c24a1ace222a7ef11300d9e
@@ -8,6 +8,7 @@ module Serverspec
8
8
  package php_config port ppa process routing_table selinux
9
9
  selinux_module service user yumrepo windows_feature
10
10
  windows_hot_fix windows_registry_key windows_scheduled_task zfs
11
+ docker_base docker_image docker_container
11
12
  )
12
13
 
13
14
  types.each {|type| require "serverspec/type/#{type}" }
@@ -0,0 +1,28 @@
1
+ require 'json'
2
+
3
+ module Serverspec::Type
4
+ class DockerBase < Base
5
+ def exist?
6
+ get_inspection.success?
7
+ end
8
+
9
+ def [](key)
10
+ value = inspection
11
+ key.split('.').each do |k|
12
+ value = value[k]
13
+ end
14
+ value
15
+ end
16
+
17
+ def inspection
18
+ return @inspection if @inspection
19
+ @inspection = JSON.parse(get_inspection.stdout)[0]
20
+ end
21
+
22
+ private
23
+ def get_inspection
24
+ return @get_inspectiob if @get_inspection
25
+ @get_inspection = @runner.run_command("docker inspect #{@name}")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module Serverspec::Type
2
+ class DockerContainer < DockerBase
3
+ def running?
4
+ inspection['State']['Running']
5
+ end
6
+
7
+ def has_volume?(container_path, host_path)
8
+ inspection['Volumes'][container_path] == host_path
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ module Serverspec::Type
2
+ class DockerImage < DockerBase
3
+ end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module Serverspec
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "rspec", "~> 3.0"
22
22
  spec.add_runtime_dependency "rspec-its"
23
+ spec.add_runtime_dependency "json"
23
24
  spec.add_runtime_dependency "specinfra", "~> 2.3"
24
25
  spec.add_development_dependency "bundler", "~> 1.3"
25
26
  spec.add_development_dependency "rake", "~> 10.1.1"
@@ -0,0 +1,104 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ property[:os] = nil
5
+ set :os, {:family => 'linux'}
6
+
7
+ describe docker_container('c1') do
8
+ it { should exist }
9
+ end
10
+
11
+ describe docker_container('c1') do
12
+ let(:stdout) { inspect_container }
13
+ it { should be_running }
14
+ it { should have_volume('/tmp', '/data') }
15
+ its(:inspection) { should include 'Driver' => 'aufs' }
16
+ its(['Config.Cmd']) { should include '/bin/sh' }
17
+ end
18
+
19
+ def inspect_container
20
+ <<'EOS'
21
+ [{
22
+ "Args": [],
23
+ "Config": {
24
+ "AttachStderr": false,
25
+ "AttachStdin": false,
26
+ "AttachStdout": false,
27
+ "Cmd": [
28
+ "/bin/sh"
29
+ ],
30
+ "CpuShares": 0,
31
+ "Cpuset": "",
32
+ "Domainname": "",
33
+ "Entrypoint": null,
34
+ "Env": [
35
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
36
+ ],
37
+ "ExposedPorts": null,
38
+ "Hostname": "65cd2e2d7963",
39
+ "Image": "busybox",
40
+ "Memory": 0,
41
+ "MemorySwap": 0,
42
+ "NetworkDisabled": false,
43
+ "OnBuild": null,
44
+ "OpenStdin": true,
45
+ "PortSpecs": null,
46
+ "StdinOnce": false,
47
+ "Tty": true,
48
+ "User": "",
49
+ "Volumes": null,
50
+ "WorkingDir": ""
51
+ },
52
+ "Created": "2014-09-26T15:08:37.527931773Z",
53
+ "Driver": "aufs",
54
+ "ExecDriver": "native-0.2",
55
+ "HostConfig": {
56
+ "Binds": [
57
+ "/data:/tmp"
58
+ ],
59
+ "ContainerIDFile": "",
60
+ "Dns": null,
61
+ "DnsSearch": null,
62
+ "Links": null,
63
+ "LxcConf": [],
64
+ "NetworkMode": "bridge",
65
+ "PortBindings": {},
66
+ "Privileged": false,
67
+ "PublishAllPorts": false,
68
+ "VolumesFrom": null
69
+ },
70
+ "HostnamePath": "/mnt/sda1/var/lib/docker/containers/65cd2e2d7963bacaecda2d7fcd89499010bc0d38d70bce5ad0af7112a94a4545/hostname",
71
+ "HostsPath": "/mnt/sda1/var/lib/docker/containers/65cd2e2d7963bacaecda2d7fcd89499010bc0d38d70bce5ad0af7112a94a4545/hosts",
72
+ "Id": "65cd2e2d7963bacaecda2d7fcd89499010bc0d38d70bce5ad0af7112a94a4545",
73
+ "Image": "e72ac664f4f0c6a061ac4ef332557a70d69b0c624b6add35f1c181ff7fff2287",
74
+ "MountLabel": "",
75
+ "Name": "/c1",
76
+ "NetworkSettings": {
77
+ "Bridge": "docker0",
78
+ "Gateway": "172.17.42.1",
79
+ "IPAddress": "172.17.0.24",
80
+ "IPPrefixLen": 16,
81
+ "PortMapping": null,
82
+ "Ports": {}
83
+ },
84
+ "Path": "/bin/sh",
85
+ "ProcessLabel": "",
86
+ "ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/65cd2e2d7963bacaecda2d7fcd89499010bc0d38d70bce5ad0af7112a94a4545/resolv.conf",
87
+ "State": {
88
+ "ExitCode": 0,
89
+ "FinishedAt": "0001-01-01T00:00:00Z",
90
+ "Paused": false,
91
+ "Pid": 4123,
92
+ "Running": true,
93
+ "StartedAt": "2014-09-26T15:08:37.737780273Z"
94
+ },
95
+ "Volumes": {
96
+ "/tmp": "/data"
97
+ },
98
+ "VolumesRW": {
99
+ "/tmp": true
100
+ }
101
+ }
102
+ ]
103
+ EOS
104
+ end
@@ -0,0 +1,94 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ property[:os] = nil
5
+ set :os, {:family => 'linux'}
6
+
7
+ describe docker_image('busybox:latest') do
8
+ it { should exist }
9
+ end
10
+
11
+ describe docker_image('busybox:latest') do
12
+ let(:stdout) { inspect_image }
13
+ its(:inspection) { should include 'Architecture' => 'amd64' }
14
+ its(['Architecture']) { should eq 'amd64' }
15
+ its(['Config.Cmd']) { should include '/bin/sh' }
16
+ end
17
+
18
+ def inspect_image
19
+ <<'EOS'
20
+ [{
21
+ "Architecture": "amd64",
22
+ "Author": "Jérôme Petazzoni \u003cjerome@docker.com\u003e",
23
+ "Comment": "",
24
+ "Config": {
25
+ "AttachStderr": false,
26
+ "AttachStdin": false,
27
+ "AttachStdout": false,
28
+ "Cmd": [
29
+ "/bin/sh"
30
+ ],
31
+ "CpuShares": 0,
32
+ "Cpuset": "",
33
+ "Domainname": "",
34
+ "Entrypoint": null,
35
+ "Env": [
36
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
37
+ ],
38
+ "ExposedPorts": null,
39
+ "Hostname": "88f18f678e5d",
40
+ "Image": "e433a6c5b276a31aa38bf6eaba9cd1cfd69ea33f706ed72b3f20bafde5cd8644",
41
+ "Memory": 0,
42
+ "MemorySwap": 0,
43
+ "NetworkDisabled": false,
44
+ "OnBuild": [],
45
+ "OpenStdin": false,
46
+ "PortSpecs": null,
47
+ "StdinOnce": false,
48
+ "Tty": false,
49
+ "User": "",
50
+ "Volumes": null,
51
+ "WorkingDir": ""
52
+ },
53
+ "Container": "8e73b239682fe73338323d9af83d3c5aa5bb7d22a3fe84cbfcf5f47e756d6636",
54
+ "ContainerConfig": {
55
+ "AttachStderr": false,
56
+ "AttachStdin": false,
57
+ "AttachStdout": false,
58
+ "Cmd": [
59
+ "/bin/sh",
60
+ "-c",
61
+ "#(nop) CMD [/bin/sh]"
62
+ ],
63
+ "CpuShares": 0,
64
+ "Cpuset": "",
65
+ "Domainname": "",
66
+ "Entrypoint": null,
67
+ "Env": [
68
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
69
+ ],
70
+ "ExposedPorts": null,
71
+ "Hostname": "88f18f678e5d",
72
+ "Image": "e433a6c5b276a31aa38bf6eaba9cd1cfd69ea33f706ed72b3f20bafde5cd8644",
73
+ "Memory": 0,
74
+ "MemorySwap": 0,
75
+ "NetworkDisabled": false,
76
+ "OnBuild": [],
77
+ "OpenStdin": false,
78
+ "PortSpecs": null,
79
+ "StdinOnce": false,
80
+ "Tty": false,
81
+ "User": "",
82
+ "Volumes": null,
83
+ "WorkingDir": ""
84
+ },
85
+ "Created": "2014-10-01T20:46:08.914288461Z",
86
+ "DockerVersion": "1.2.0",
87
+ "Id": "e72ac664f4f0c6a061ac4ef332557a70d69b0c624b6add35f1c181ff7fff2287",
88
+ "Os": "linux",
89
+ "Parent": "e433a6c5b276a31aa38bf6eaba9cd1cfd69ea33f706ed72b3f20bafde5cd8644",
90
+ "Size": 0
91
+ }
92
+ ]
93
+ EOS
94
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gosuke Miyashita
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: specinfra
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +143,9 @@ files:
129
143
  - lib/serverspec/type/command.rb
130
144
  - lib/serverspec/type/cron.rb
131
145
  - lib/serverspec/type/default_gateway.rb
146
+ - lib/serverspec/type/docker_base.rb
147
+ - lib/serverspec/type/docker_container.rb
148
+ - lib/serverspec/type/docker_image.rb
132
149
  - lib/serverspec/type/file.rb
133
150
  - lib/serverspec/type/group.rb
134
151
  - lib/serverspec/type/host.rb
@@ -203,6 +220,8 @@ files:
203
220
  - spec/type/gentoo/package_spec.rb
204
221
  - spec/type/gentoo/service_spec.rb
205
222
  - spec/type/linux/cgroup_spec.rb
223
+ - spec/type/linux/docker_container_spec.rb
224
+ - spec/type/linux/docker_image_spec.rb
206
225
  - spec/type/linux/file_spec.rb
207
226
  - spec/type/linux/interface_spec.rb
208
227
  - spec/type/linux/ip6tables_spec.rb
@@ -335,6 +354,8 @@ test_files:
335
354
  - spec/type/gentoo/package_spec.rb
336
355
  - spec/type/gentoo/service_spec.rb
337
356
  - spec/type/linux/cgroup_spec.rb
357
+ - spec/type/linux/docker_container_spec.rb
358
+ - spec/type/linux/docker_image_spec.rb
338
359
  - spec/type/linux/file_spec.rb
339
360
  - spec/type/linux/interface_spec.rb
340
361
  - spec/type/linux/ip6tables_spec.rb