berkeley_library-docker 0.0.1 → 0.1.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
  SHA256:
3
- metadata.gz: 1a8f366b628cad8dd6d516fe9180667fb4bd2908d331ad79437990ee4e0d865b
4
- data.tar.gz: 70dd01ff23d3177c3430597abd7cbdee9657829599791f04299052b070efdee2
3
+ metadata.gz: d133859ef409d32d22e2b40723ca7fcfd34a551fb5176f7c3cc039cbe4f72037
4
+ data.tar.gz: be63d139a376a470995b4bd60a6e9ebf4619d4f3f8be9317ae6541acad8e999c
5
5
  SHA512:
6
- metadata.gz: 986553998d692b12fdf140ee55f08b75b7c4754ec829049242283b81894dd6ff3205a47830d9d4d3a7a1178198b3a18d255374a21eb0614943268bbebdf93406
7
- data.tar.gz: 792ac78d25c7c14f7384ba968a0578a373fdc66d0e2e9765e4221db04c3b8665c1030af8edfc0835009e518bb0bdbd186d968a61759c8ad6ddc76ba5658f0caa
6
+ metadata.gz: 6a3d87d5d45aeed03e0a925151a747fd76fa5063f8f874536caec060668fe2707243148f31d51462a6afaa986732f8384b4b0c7f90cdd64a384f90098fb02d6f
7
+ data.tar.gz: 14a858e4d44f9cf038664f950c4aa706fdb0e0645e5b48b49f858b378bcc6e54ee5a3f5e88e8f372598718023c94520175bac9815387d765a21f9d819675509c
@@ -7,7 +7,7 @@ module BerkeleyLibrary
7
7
  SUMMARY = 'Utility functions for Dockerizing Ruby apps'.freeze
8
8
  DESCRIPTION = 'Utility functions for making Ruby apps "just work" in Docker containers.'.freeze
9
9
  LICENSE = 'MIT'.freeze
10
- VERSION = '0.0.1'.freeze
10
+ VERSION = '0.1.0'.freeze
11
11
  HOMEPAGE = 'https://github.com/BerkeleyLibrary/docker'.freeze
12
12
 
13
13
  private_class_method :new
@@ -5,6 +5,20 @@ require 'berkeley_library/docker/railtie' if defined?(Rails::Railtie)
5
5
 
6
6
  module BerkeleyLibrary
7
7
  module Docker
8
- #
8
+ class << self
9
+ def running_in_container?
10
+ File.exist?('/.dockerenv') || init_cgroup_is_dockerish?
11
+ end
12
+
13
+ private
14
+
15
+ def init_cgroup_is_dockerish?
16
+ begin
17
+ File.open('/proc/1/cgroup').read.match?(%r{(/docker|/lxc)})
18
+ rescue
19
+ false
20
+ end
21
+ end
22
+ end
9
23
  end
10
24
  end
@@ -0,0 +1,77 @@
1
+ require 'rails' # require Rails first to mimic load order
2
+ require 'berkeley_library/docker'
3
+ require 'spec_helper'
4
+
5
+ module BerkeleyLibrary
6
+ describe Docker do
7
+ describe '#running_in_container?' do
8
+ DOCKERISH_CGROUP = <<~EOL
9
+ 11:cpuacct,cpu:/docker/12345
10
+ 10:devices:/docker/12345
11
+ 9:hugetlb:/docker/12345
12
+ 8:freezer:/docker/12345
13
+ 7:blkio:/docker/12345
14
+ 6:net_prio,net_cls:/docker/12345
15
+ 5:memory:/docker/12345
16
+ 4:pids:/docker/12345
17
+ 3:perf_event:/docker/12345
18
+ 2:cpuset:/docker/12345
19
+ 1:name=systemd:/docker/12345
20
+ EOL
21
+
22
+ TRADITIONAL_CGROUP = <<~EOL
23
+ 11:cpuacct,cpu:/
24
+ 10:devices:/
25
+ 9:hugetlb:/
26
+ 8:freezer:/
27
+ 7:blkio:/
28
+ 6:net_prio,net_cls:/
29
+ 5:memory:/
30
+ 4:pids:/
31
+ 3:perf_event:/
32
+ 2:cpuset:/
33
+ 1:name=systemd:/
34
+ EOL
35
+
36
+ it 'is true when /.dockerenv exists' do
37
+ mock_dockerenv
38
+ expect(BerkeleyLibrary::Docker.running_in_container?).to be true
39
+ end
40
+
41
+ it 'is true when /proc/1/cgroup is docker-like' do
42
+ mock_dockerenv(false)
43
+ mock_init_cgroup
44
+ expect(BerkeleyLibrary::Docker.running_in_container?).to be true
45
+ end
46
+
47
+ it 'is false when /proc/1/cgroup is traditional' do
48
+ mock_dockerenv(false)
49
+ mock_init_cgroup(false)
50
+ expect(BerkeleyLibrary::Docker.running_in_container?).to be false
51
+ end
52
+
53
+ it 'is false when /proc/1/cgroup does not exist' do
54
+ mock_dockerenv(false)
55
+ expect(File)
56
+ .to receive(:open).with('/proc/1/cgroup')
57
+ .and_raise(Errno::ENOENT)
58
+ expect(BerkeleyLibrary::Docker.running_in_container?).to be false
59
+ end
60
+
61
+ private
62
+
63
+ def mock_dockerenv(exists = true)
64
+ expect(File)
65
+ .to receive(:exist?).with('/.dockerenv')
66
+ .and_return(exists)
67
+ end
68
+
69
+ def mock_init_cgroup(dockerish = true)
70
+ expect(File)
71
+ .to receive(:open).with('/proc/1/cgroup')
72
+ .and_return(
73
+ StringIO.new(dockerish ? DOCKERISH_CGROUP : TRADITIONAL_CGROUP))
74
+ end
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkeley_library-docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Schmidt
@@ -101,6 +101,7 @@ files:
101
101
  - lib/berkeley_library/docker/secret.rb
102
102
  - spec/berkeley_library/docker/railtie_spec.rb
103
103
  - spec/berkeley_library/docker/secret_spec.rb
104
+ - spec/berkeley_library/docker_spec.rb
104
105
  - spec/spec_helper.rb
105
106
  - spec/spec_utils.rb
106
107
  homepage: https://github.com/BerkeleyLibrary/docker
@@ -130,5 +131,6 @@ summary: Utility functions for Dockerizing Ruby apps
130
131
  test_files:
131
132
  - spec/berkeley_library/docker/railtie_spec.rb
132
133
  - spec/berkeley_library/docker/secret_spec.rb
134
+ - spec/berkeley_library/docker_spec.rb
133
135
  - spec/spec_helper.rb
134
136
  - spec/spec_utils.rb