summaryrefslogtreecommitdiffstats
path: root/roles/docker_img_monitoring
diff options
context:
space:
mode:
authorThomas Wiest <twiest@redhat.com>2014-10-28 14:43:15 -0400
committerThomas Wiest <twiest@redhat.com>2014-10-29 12:00:06 -0400
commit525b741b6fbb178b11c6a2b3ccd4bf9ff9e98e0c (patch)
tree6b063a310bb71cae17f3b6a910dca5ac1584f829 /roles/docker_img_monitoring
parentfd788c250c1fbdc5cc188aa29812c65ebafecc59 (diff)
downloadopenshift-525b741b6fbb178b11c6a2b3ccd4bf9ff9e98e0c.tar.gz
openshift-525b741b6fbb178b11c6a2b3ccd4bf9ff9e98e0c.tar.bz2
openshift-525b741b6fbb178b11c6a2b3ccd4bf9ff9e98e0c.tar.xz
openshift-525b741b6fbb178b11c6a2b3ccd4bf9ff9e98e0c.zip
Added Docker image build stuff
Diffstat (limited to 'roles/docker_img_monitoring')
-rw-r--r--roles/docker_img_monitoring/README.md36
-rw-r--r--roles/docker_img_monitoring/defaults/main.yml2
-rw-r--r--roles/docker_img_monitoring/files/monitoring_container/Dockerfile26
-rwxr-xr-xroles/docker_img_monitoring/files/monitoring_container/register-with-zabbix.rb36
-rwxr-xr-xroles/docker_img_monitoring/files/monitoring_container/start.rb73
-rw-r--r--roles/docker_img_monitoring/handlers/main.yml2
-rw-r--r--roles/docker_img_monitoring/meta/main.yml14
-rw-r--r--roles/docker_img_monitoring/tasks/main.yml10
-rw-r--r--roles/docker_img_monitoring/vars/main.yml2
9 files changed, 201 insertions, 0 deletions
diff --git a/roles/docker_img_monitoring/README.md b/roles/docker_img_monitoring/README.md
new file mode 100644
index 000000000..103df4b19
--- /dev/null
+++ b/roles/docker_img_monitoring/README.md
@@ -0,0 +1,36 @@
+Role Name
+=========
+
+The purpose of this role is to setup files to do the monitoring docker image build
+
+Requirements
+------------
+
+Docker
+
+Role Variables
+--------------
+
+None
+
+Dependencies
+------------
+
+None
+
+Example Playbook
+----------------
+
+ - hosts: servers
+ roles:
+ - docker_img_monitoring
+
+License
+-------
+
+ASL 2.0
+
+Author Information
+------------------
+
+Thomas Wiest
diff --git a/roles/docker_img_monitoring/defaults/main.yml b/roles/docker_img_monitoring/defaults/main.yml
new file mode 100644
index 000000000..1f563defd
--- /dev/null
+++ b/roles/docker_img_monitoring/defaults/main.yml
@@ -0,0 +1,2 @@
+---
+# defaults file for docker_img_puppet
diff --git a/roles/docker_img_monitoring/files/monitoring_container/Dockerfile b/roles/docker_img_monitoring/files/monitoring_container/Dockerfile
new file mode 100644
index 000000000..cd1651bc1
--- /dev/null
+++ b/roles/docker_img_monitoring/files/monitoring_container/Dockerfile
@@ -0,0 +1,26 @@
+# This FROM gives us the proper oo-rhui certs, basic runtime env vars, basic repos, etc.
+# Otherwise we can't install anything
+FROM rhel6ops
+
+MAINTAINER Thomas Wiest <twiest@redhat.com>
+
+RUN yum -y update ; yum clean all
+
+# Container Specific RPMs
+RUN yum -y install ruby193-rubygem-zbxapi cronie zabbix-sender ruby openshift-origin-util-scl ruby193-facter socat ; yum clean all
+
+# Setup ctr-ipc dir
+RUN ln -s /shared/var/run/ctr-ipc /var/run/ctr-ipc
+
+# TEMP WORKAROUND: until zbxapi rpm is updated to work with zbx 2.4
+RUN ruby -i -ane 'if $_ =~ /APIInfo.version/ ; puts " @major,@minor=2,0" ; else puts $_ ; end' /opt/rh/ruby193/root/usr/share/gems/gems/zbxapi-0.3.3/zbxapi.rb
+
+
+# Container specific files
+ADD start.rb /start.rb
+ADD register-with-zabbix.rb /register-with-zabbix.rb
+
+# TEMP WORKAROUND: until cron-send-haproxy-status.rb doesn't check service to see if haproxy is running
+RUN ln -sf /bin/true /etc/init.d/haproxy
+
+CMD ["/start.rb"]
diff --git a/roles/docker_img_monitoring/files/monitoring_container/register-with-zabbix.rb b/roles/docker_img_monitoring/files/monitoring_container/register-with-zabbix.rb
new file mode 100755
index 000000000..02659228f
--- /dev/null
+++ b/roles/docker_img_monitoring/files/monitoring_container/register-with-zabbix.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env oo-ruby
+
+require 'optparse'
+require '/usr/local/lib/zabbix_helper'
+
+
+if __FILE__ == $0
+ $stdout.sync = true
+ $stderr.sync = true
+
+ opt_name = nil
+ opt_hostgroup = []
+ opt_template = []
+
+ optparse = OptionParser.new do |opts|
+ opts.banner = "\nUsage: #{File.basename $0}\n\n"
+
+ opts.on('--name NAME', '[REQUIRED] The host name to register') { |value| opt_name = value }
+ opts.on('--hostgroup GROUP', '[REQUIRED] The hostgroup(s) with which to register') { |value| opt_hostgroup << value }
+ opts.on('--template TEMPLATE', '[REQUIRED] The template with which to register') { |value| opt_template << value }
+ end
+
+ optparse.parse!
+
+ abort optparse.help if opt_name.nil? || opt_hostgroup.empty? || opt_template.empty?
+
+ puts "Adding host [#{opt_name}] to zabbix..."
+
+ zh = ZabbixHelper.new()
+ result = zh.create_agentless_host(opt_name, opt_hostgroup, opt_template)
+ if result['hostids'].nil?
+ raise "failed to add #{opt_name}"
+ else
+ puts "Successfully registered host with hostid [#{result['hostids'].first}]"
+ end
+end
diff --git a/roles/docker_img_monitoring/files/monitoring_container/start.rb b/roles/docker_img_monitoring/files/monitoring_container/start.rb
new file mode 100755
index 000000000..7cd713707
--- /dev/null
+++ b/roles/docker_img_monitoring/files/monitoring_container/start.rb
@@ -0,0 +1,73 @@
+#!/usr/bin/env ruby
+
+require 'fileutils'
+
+
+# TODO: These should be passed in as env vars. When we're in a POD, make sure to do this.
+# WORKAROUND: ^^
+OO_ENV = 'stg'
+OO_CTR_TYPE = 'proxy'
+HOSTGROUPS = ['STG Environment']
+TEMPLATES = ['Template OpenShift Proxy Ctr']
+CTR_NAME = "ctr-#{OO_CTR_TYPE}-#{OO_ENV}-#{ENV['container_uuid'][0..6]}"
+
+
+CTR_CONFIG_FLAG = '/shared/var/run/ctr-ipc/flag/ctr_configured'
+
+
+class Start
+ def self.wait_for_ctr_configured
+ while ! File.exist?(CTR_CONFIG_FLAG)
+ puts "Sleeping 10 seconds, waiting for #{CTR_CONFIG_FLAG}"
+ sleep 10
+ end
+ end
+
+ def self.add_to_zabbix
+ # Need to do this as a separate script because /usr/local gets changed after this script starts.
+ # FIXME: we can change this once we aren't using the puppet container anymore
+ cmd = "/register-with-zabbix.rb --name #{CTR_NAME}"
+ cmd += ' ' + HOSTGROUPS.collect() { |a| "--hostgroup '#{a}'" }.join(' ')
+ cmd += ' ' + TEMPLATES.collect() { |a| "--template '#{a}'" }.join(' ')
+ puts "Running: #{cmd}"
+ system(cmd)
+ raise "failed" unless $?.exitstatus == 0
+ end
+
+ def self.setup_shared_dirs
+ puts '_'
+ ['/usr/local', '/etc/openshift', '/var/lib/haproxy', '/etc/haproxy'].each do |shared_dir|
+ puts "Setting up /shared#{shared_dir}..."
+ FileUtils.rm_rf(shared_dir)
+ FileUtils.ln_s("/shared#{shared_dir}", shared_dir)
+ end
+ puts '_'
+ end
+
+ def self.setup_cron()
+ File.open('/etc/crontab', 'a') do |f|
+ # FIXME: on failure, this should e-mail, not log to a file. Not sure how best to do that in a 1 service per container way.
+ f.write("30 12 * * * root /usr/bin/flock -n /var/tmp/cron-send-cert-expiration.lock -c '/usr/bin/timeout -s9 30s /usr/local/bin/cron-send-cert-expiration.rb --server noc2.ops.rhcloud.com --zbx-host #{CTR_NAME}' &>> /var/log/cron-send-cert-expiration.log\n")
+ f.write("*/2 * * * * root /usr/local/bin/cron-send-haproxy-status.rb --server noc2.ops.rhcloud.com --zbx-host #{CTR_NAME} &>> /var/log/cron-send-haproxy-status.log\n")
+ end
+ end
+
+ def self.exec_cron()
+ puts '_'
+ puts 'Exec-ing cron'
+ puts '-------------'
+ puts "Starting cron..."
+ exec("/usr/sbin/crond -n")
+ end
+end
+
+if __FILE__ == $0
+ $stdout.sync = true
+ $stderr.sync = true
+
+ Start.setup_shared_dirs()
+ Start.wait_for_ctr_configured
+ Start.add_to_zabbix()
+ Start.setup_cron()
+ Start.exec_cron()
+end
diff --git a/roles/docker_img_monitoring/handlers/main.yml b/roles/docker_img_monitoring/handlers/main.yml
new file mode 100644
index 000000000..9b5fe2b3d
--- /dev/null
+++ b/roles/docker_img_monitoring/handlers/main.yml
@@ -0,0 +1,2 @@
+---
+# handlers file for docker_img_build
diff --git a/roles/docker_img_monitoring/meta/main.yml b/roles/docker_img_monitoring/meta/main.yml
new file mode 100644
index 000000000..40f83bf2f
--- /dev/null
+++ b/roles/docker_img_monitoring/meta/main.yml
@@ -0,0 +1,14 @@
+---
+galaxy_info:
+ author: Thomas Wiest
+ description: Tools to do docker image builds
+ company: Red Hat
+ license: ASL 2.0
+ min_ansible_version: 1.6
+ platforms:
+ - name: EL
+ versions:
+ - 7
+ categories:
+ - docker
+dependencies: []
diff --git a/roles/docker_img_monitoring/tasks/main.yml b/roles/docker_img_monitoring/tasks/main.yml
new file mode 100644
index 000000000..ce8d5a0a9
--- /dev/null
+++ b/roles/docker_img_monitoring/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+- name: deploy monitoring image build files
+ file: dest=/usr/local/etc/containers/monitoring_container mode=755 state=directory
+
+- name: deploy monitoring image build files
+ copy: "src=monitoring_container/{{ item.name }} dest=/usr/local/etc/containers/monitoring_container/{{ item.name }} mode={{ item.mode }}"
+ with_items:
+ - { name: 'Dockerfile', mode: '644' }
+ - { name: 'register-with-zabbix.rb', mode: '755' }
+ - { name: 'start.rb', mode: '755' }
diff --git a/roles/docker_img_monitoring/vars/main.yml b/roles/docker_img_monitoring/vars/main.yml
new file mode 100644
index 000000000..3abe3ae6a
--- /dev/null
+++ b/roles/docker_img_monitoring/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# vars file for docker_img_puppet