Created
April 13, 2017 13:01
-
-
Save nuriel77/c8ae5e1f3bb6dc0313f26e3da1f3e2f5 to your computer and use it in GitHub Desktop.
Check cinder services via Python API bindings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import argparse | |
import os | |
import sys | |
from keystoneauth1 import loading | |
from keystoneauth1 import session | |
from cinderclient import client | |
def get_client(args): | |
loader = loading.get_plugin_loader('password') | |
auth = loader.load_from_options(auth_url=args.auth_url, | |
username=args.username, | |
password=args.password, | |
project_name=args.tenant) | |
sess = session.Session(auth=auth) | |
return client.Client(args.api_version, session=sess) | |
def parse_args(): | |
parser = argparse.ArgumentParser( | |
description='Check an OpenStack Cinder Service.') | |
parser.add_argument('--auth_url', metavar='URL', type=str, | |
default=os.getenv('OS_AUTH_URL'), | |
help='Keystone URL') | |
parser.add_argument('--username', metavar='username', type=str, | |
default=os.getenv('OS_USERNAME'), | |
help='username to use for authentication') | |
parser.add_argument('--password', metavar='password', type=str, | |
default=os.getenv('OS_PASSWORD'), | |
help='password to use for authentication') | |
parser.add_argument('--tenant', metavar='tenant', type=str, | |
default=os.getenv('OS_TENANT_NAME'), | |
help='tenant name to use for authentication') | |
parser.add_argument('--project-name', metavar='project', type=str, | |
default=os.getenv('OS_PROJECT_NAME'), | |
help='project name to use for authentication') | |
parser.add_argument('--endpoint_url', metavar='endpoint_url', type=str, | |
help='Override the catalog endpoint.') | |
parser.add_argument('--endpoint_type', metavar='endpoint_type', type=str, | |
default="publicURL", | |
help='Endpoint type in the catalog request. ' | |
+ 'Public by default.') | |
parser.add_argument('--api_version', metavar='api_version', type=str, | |
default='2', | |
help='Version of the API to use. 2 by default.') | |
parser.add_argument('--service', metavar='service', type=str, | |
default=None, required=True, | |
help='Cinder service to check: cinder-volume, cinder-backup or cinder-scheduler') | |
return parser.parse_args() | |
def check_service(cinder, service): | |
_errors = [] | |
_res = cinder.services.list(binary=service) | |
if _res and len(_res): | |
if _res[0].status != 'enabled': | |
_errors.append('%s status is %s' % (service, _res[0].status)) | |
if _res[0].state != 'up': | |
_errors.append('%s state is %s' % (service, _res[0].state)) | |
else: | |
_errors.append('Missing service %s' % service) | |
return _errors | |
def run(): | |
try: | |
args = parse_args() | |
except Exception as e: | |
sys.stderr.write("Error parsing arguments: %s\n" % e) | |
sys.exit(2) | |
if args.service not in ('cinder-volume', 'cinder-backup', 'cinder-scheduler'): | |
sys.stderr.write("Unrecognized service: %s\n" % args.service) | |
sys.exit(2) | |
try: | |
cinder = get_client(args) | |
except Exception as e: | |
sys.stderr.write("Error getting Cinder client: %s\n" % e) | |
sys.exit(2) | |
try: | |
errors = check_service(cinder, args.service) | |
except Exception as e: | |
sys.stderr.write("Error checking cinder service: %s\n" % e) | |
sys.exit(2) | |
if len(errors): | |
sys.stderr.write("%s\n" % ", ".join(errors)) | |
sys.exit(2) | |
else: | |
print "%s OK" % args.service | |
sys.exit(0) | |
if __name__ == "__main__": | |
run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment