From ff2b7a4ba9edb3f37bc631055da5596323d63cbf Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 17 Jan 2014 17:03:30 -0500 Subject: [PATCH] add in elastic-recheck-unclassified report this adds the new elastic-recheck-unclassified report, which generates an html page of all the unclassified gate failures. it also runs this command, and the elastic-recheck-graph command not only on cron, but also on updates to the repository. In order to do this safely, we create a new er_safe_run.sh in /usr/local that provides a flock front end to ensure we won't race on our html writes. Change-Id: I624f2629e2ac19a1394866f73f1aa9ba18e968ce --- files/er_safe_run.sh | 3 +++ manifests/cron.pp | 42 ++++++++++++++++++++++++++++++++++++++++++ manifests/init.pp | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100755 files/er_safe_run.sh create mode 100644 manifests/cron.pp diff --git a/files/er_safe_run.sh b/files/er_safe_run.sh new file mode 100755 index 0000000..0a550a3 --- /dev/null +++ b/files/er_safe_run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +flock /var/lib/elastic-recheck/er_safe_run.lock $@ diff --git a/manifests/cron.pp b/manifests/cron.pp new file mode 100644 index 0000000..37bf006 --- /dev/null +++ b/manifests/cron.pp @@ -0,0 +1,42 @@ +# Copyright 2013 Hewlett-Packard Development Company, L.P. +# Copyright 2014 Samsung Electronics +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Class to install and configure an instance of the elastic-recheck +# service. +# + +class elastic_recheck::cron () { + $er_state_path = $::elastic_recheck::recheck_state_dir + $graph_cmd = $::elastic_recheck::graph_cmd + $uncat_cmd = $::elastic_recheck::uncat_cmd + + cron { 'elastic-recheck': + user => 'recheck', + minute => '*/15', + hour => '*', + command => "cd ${er_state_path}; er_safe_run.sh ${graph_cmd}", + environment => 'PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + require => Class['elastic_recheck'] + } + + cron { 'elastic-recheck-uncat': + user => 'recheck', + minute => '59', + hour => '*', + command => "cd ${er_state_path}; er_safe_run.sh ${graph_cmd}", + environment => 'PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + require => Class['elastic_recheck'] + } +} diff --git a/manifests/init.pp b/manifests/init.pp index d431bc2..f8e3de3 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -17,6 +17,15 @@ # class elastic_recheck ( ) { + + # For all static page generation scripts we want to run them + # both on a cron schedule (see elastic_recheck::cron) and on + # any commit. So we need to define commands in a way that + # we can trigger an exec here, as well as on cron. + $recheck_state_dir = '/var/lib/elastic-recheck' + $graph_cmd = 'elastic-recheck-graph /opt/elastic-recheck/queries -o graph-new.json && mv graph-new.json graph.json' + $uncat_cmd = 'elastic-recheck-uncategorized -d /opt/elastic-recheck/queries -t /usr/local/share/templates -o uncategorized-new.html && mv uncategorized-new.html uncategorized.html' + group { 'recheck': ensure => 'present', } @@ -36,6 +45,24 @@ class elastic_recheck ( source => 'https://git.openstack.org/openstack-infra/elastic-recheck', } + exec { 'run_er_graph': + command => "cd ${recheck_state_dir} && er_safe_run.sh ${graph_cmd}", + path => '/usr/local/bin:/usr/bin:/bin/', + user => 'recheck', + refreshonly => true, + require => File['/usr/local/bin/er_safe_run.sh'], + subscribe => Vcsrepo['/opt/elastic-recheck'], + } + + exec { 'run_er_uncat': + command => "cd ${recheck_state_dir} && er_safe_run.sh ${uncat_cmd}", + path => '/usr/local/bin:/usr/bin:/bin/', + user => 'recheck', + refreshonly => true, + require => File['/usr/local/bin/er_safe_run.sh'], + subscribe => Vcsrepo['/opt/elastic-recheck'], + } + include pip exec { 'install_elastic-recheck' : command => 'pip install /opt/elastic-recheck', @@ -45,6 +72,14 @@ class elastic_recheck ( require => Class['pip'], } + file { '/usr/local/bin/er_safe_run.sh': + ensure => present, + source => 'puppet:///modules/elastic_recheck/er_safe_run.sh', + mode => '0755', + owner => 'root', + group => 'root', + } + file { '/var/run/elastic-recheck': ensure => directory, mode => '0755',