#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Keystone monitoring script for Nagios # # Copyright © 2012 eNovance # # Author: Florian Lambert # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # import sys import argparse from glance import client as glance_client from glance.common import exception from glance.common import utils from glance import version STATE_OK = 0 STATE_WARNING = 1 STATE_CRITICAL = 2 STATE_UNKNOWN = 3 parser = argparse.ArgumentParser(description='Check an OpenStack glance server.') parser.add_argument('--host', metavar='host', type=str, required=True, help='Glance host') parser.add_argument('--auth_url', metavar='URL', type=str, required=True, help='Keystone URL') parser.add_argument('--username', metavar='username', type=str, required=True, help='username to use for authentication') parser.add_argument('--password', metavar='password', type=str, required=True, help='password to use for authentication') parser.add_argument('--tenant', metavar='tenant', type=str, required=True, help='tenant name to use for authentication') parser.add_argument('--req_count', metavar='numberImages', type=str, required=False, help='minimum number of images in glance') parser.add_argument('--req_images', metavar='imagesName', type=str, nargs='+', required=False, help='name of images who must be available') parser.add_argument('--region_name', metavar='region_name', type=str, help='Region to select for authentication') args = parser.parse_args() try: c = glance_client.get_client(host=args.host, username=args.username, password=args.password, tenant=args.tenant, auth_url=args.auth_url, region=args.region_name) except Exception as e: print str(e) sys.exit(STATE_CRITICAL) #Flags resultat valid_image = 0 count = 0 if args.req_count : required_count = int(args.req_count) if len(c.get_images(**{"limit": required_count})) == required_count: count = 1 if args.req_images : required_images = args.req_images for image in required_images: try: if len(c.get_images(**{"filters": {"name": image}})) == 1: valid_image = valid_image + 1 except : pass if args.req_count and count == 0: print "Failed - less than %d images found" % (required_count) sys.exit(STATE_CRITICAL) if args.req_images and valid_image < len(required_images): print "Failed - '%s' %d/%d images found " % (required_images,valid_image,len(required_images)) sys.exit(STATE_WARNING) if args.req_images and args.req_count: print "OK - image %s found and enough images >=%d" % (required_images,required_count) elif args.req_images: print "OK - image %s found" % (required_images) elif args.req_count: print "OK - more than %d images found" % (count) else : print "OK - Connection glance established" sys.exit(STATE_OK)