Skip to content

Instantly share code, notes, and snippets.

@nuriel77
Created April 13, 2017 13:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nuriel77/c8ae5e1f3bb6dc0313f26e3da1f3e2f5 to your computer and use it in GitHub Desktop.
Save nuriel77/c8ae5e1f3bb6dc0313f26e3da1f3e2f5 to your computer and use it in GitHub Desktop.
Check cinder services via Python API bindings
#!/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