haconiwa 0.1.1 → 0.1.2

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: 767036a1ab66ab117bcfd75c18b56a3636fa7358
4
- data.tar.gz: 1d3cee5db594eb27e3f91eb28bedbf67ef94e146
3
+ metadata.gz: 9ddb95a0442d9007bda5a95609229cf0cef771a6
4
+ data.tar.gz: e56fd0275206c68766efc6e7c27a406aaf5db059
5
5
  SHA512:
6
- metadata.gz: 41d15e175b6f1b2fd6475ac558a138770167e1ed9e2d075fe48ec91f0493ceab08e53c619d6fee79e60d1972373041453117b70c41d40afe5bbb22292066599a
7
- data.tar.gz: ad935bf20472c72d34066afc60bcacd682e13d4e489bdc606d4aa6eced14f8e4fff9d07ba24275dbc3b46ea0c86617e696ac347a452fedcc88d5b190b6d9405b
6
+ metadata.gz: 96efacf5d423f067a4fcf33bc624d32db67bb803c9b3123f93c546e4acf435bef82fc48fe58395a84a8eaec3556ac19651b09385102f8631b89e1bb71bb4b541
7
+ data.tar.gz: aeaadfc43ff779eb60d295e05a7f10589795f1e520ac453a426d31b4cc181ba00bc5d9d439fc110e29dafcfeb1995aa4eef4c5d1459768c0a026ee80923b4602
data/lib/haconiwa/base.rb CHANGED
@@ -9,6 +9,7 @@ module Haconiwa
9
9
  class Base
10
10
  attr_accessor :name,
11
11
  :init_command,
12
+ :container_pid_file,
12
13
  :filesystem,
13
14
  :cgroup,
14
15
  :namespace,
@@ -24,6 +25,7 @@ module Haconiwa
24
25
  @namespace = Namespace.new
25
26
  @capabilities = Capabilities.new
26
27
  @name = "haconiwa-#{Time.now.to_i}"
28
+ @container_pid_file = "/var/run/haconiwa-#{@name}.pid"
27
29
  end
28
30
 
29
31
  # aliases
@@ -45,8 +45,15 @@ module Haconiwa::Runners
45
45
  end
46
46
  }
47
47
 
48
+ sleep 0.1 # The magic
48
49
  Haconiwa::SmallCgroup.register_at_exit(pid: container, name: base.name, dirs: base.cgroup.to_dirs)
49
- puts "New container: PID = #{container}"
50
+ real_container_pid = if base.namespace.use_pid_ns
51
+ find_by_ppid(container)
52
+ else
53
+ container
54
+ end
55
+ File.open(base.container_pid_file, "w") {|pid| pid.write real_container_pid }
56
+ puts "New container: PID = #{real_container_pid}"
50
57
 
51
58
  res = Process.waitpid2 container
52
59
  if res[1].success?
@@ -54,6 +61,22 @@ module Haconiwa::Runners
54
61
  else
55
62
  puts "Container exited with status code <#{res[1].to_i}>."
56
63
  end
64
+
65
+ at_exit { FileUtils.rm_f base.container_pid_file }
66
+ end
67
+
68
+ private
69
+ def self.find_by_ppid(ppid)
70
+ s = Dir.glob('/proc/*/stat')
71
+ .find {|stat|
72
+ next unless stat =~ /\d/
73
+ File.read(stat).split[3].to_i == ppid
74
+ }
75
+ if s
76
+ s.scan(/\d+/).first.to_i
77
+ else
78
+ raise("Process that has ppid #{ppid} not found. Somthing is wrong.")
79
+ end
57
80
  end
58
81
  end
59
82
  end
@@ -1,3 +1,3 @@
1
1
  module Haconiwa
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haconiwa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uchio KONDO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-01 00:00:00.000000000 Z
11
+ date: 2016-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi