summaryrefslogtreecommitdiffstats
path: root/roles/docker_img_proxy/files/proxy_container/ipc-watcher.rb
diff options
context:
space:
mode:
Diffstat (limited to 'roles/docker_img_proxy/files/proxy_container/ipc-watcher.rb')
-rwxr-xr-xroles/docker_img_proxy/files/proxy_container/ipc-watcher.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/roles/docker_img_proxy/files/proxy_container/ipc-watcher.rb b/roles/docker_img_proxy/files/proxy_container/ipc-watcher.rb
new file mode 100755
index 000000000..202a58124
--- /dev/null
+++ b/roles/docker_img_proxy/files/proxy_container/ipc-watcher.rb
@@ -0,0 +1,67 @@
+#!/usr/bin/env ruby
+
+require 'fileutils'
+
+module OpenShift
+ module Ops
+ class Notify
+ def self.puts(msg)
+ $stdout.puts "#{Time.now}: #{msg}"
+ end
+ end
+
+ class WatchForIpcs
+ IPC_DIR = '/var/run/ctr-ipc'
+ POLL_INTERVAL = 10 # second
+ HAPROXY_CONF = '/etc/haproxy/haproxy.cfg'
+ HAPROXY_PID_FILE = '/var/run/haproxy.pid'
+
+ def self.wait_for_service()
+ loop do
+ Dir.glob("#{IPC_DIR}/service/*").each do |svc_file|
+ svc = File.basename(svc_file)
+ action = File.read(svc_file)
+ Notify.puts "Found IPC service file: #{svc}"
+ Notify.puts " Action requested: #{action}"
+
+ # Make sure we don't handle this multiple times
+ FileUtils.rm(svc_file)
+
+ handle_service_ipc(svc, action)
+ end
+
+ sleep POLL_INTERVAL
+ end
+ end
+
+ def self.handle_service_ipc(svc, action)
+ cmd = nil
+ case svc
+ when 'httpd'
+ case action
+ when 'restart', 'reload'
+ cmd = "/usr/sbin/apachectl -k graceful"
+ end
+ when 'haproxy'
+ case action
+ when 'restart'
+ cmd = "/usr/sbin/haproxy -f #{HAPROXY_CONF} -p #{HAPROXY_PID_FILE} -sf $(/bin/cat #{HAPROXY_PID_FILE})"
+ end
+ end
+
+ if cmd.nil?
+ Notify.puts " Warning: Not handling #{svc} #{action}"
+ return
+ end
+
+ Notify.puts " Running: #{cmd}"
+ output = %x[#{cmd} 2>&1]
+ Notify.puts " Output: #{output}"
+ end
+ end
+ end
+end
+
+if __FILE__ == $0
+ OpenShift::Ops::WatchForIpcs.wait_for_service()
+end