X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=tests%2Finspector.py;h=c6432102b2a6315932b91e26192ad7049e835750;hb=HEAD;hp=c1f9569717f89cc54bf3a29a9fdcd9e5dbfc876c;hpb=54d3f0371eda368a39ffa34ddc498c4d3e3eefe2;p=doctor.git diff --git a/tests/inspector.py b/tests/inspector.py deleted file mode 100644 index c1f95697..00000000 --- a/tests/inspector.py +++ /dev/null @@ -1,101 +0,0 @@ -############################################################################## -# Copyright (c) 2016 NEC Corporation and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -import argparse -import collections -from flask import Flask -from flask import request -import json -import logger as doctor_log -import os -import time - -import novaclient.client as novaclient - -import nova_force_down - -LOG = doctor_log.Logger('doctor_inspector').getLogger() - - -class DoctorInspectorSample(object): - - nova_api_version = '2.11' - - def __init__(self): - self.servers = collections.defaultdict(list) - self.nova = novaclient.Client(self.nova_api_version, - os.environ['OS_USERNAME'], - os.environ['OS_PASSWORD'], - os.environ['OS_TENANT_NAME'], - os.environ['OS_AUTH_URL'], - connection_pool=True) - # check nova is available - self.nova.servers.list(detailed=False) - self.init_servers_list() - - def init_servers_list(self): - opts = {'all_tenants': True} - servers=self.nova.servers.list(search_opts=opts) - self.servers.clear() - for server in servers: - try: - host=server.__dict__.get('OS-EXT-SRV-ATTR:host') - self.servers[host].append(server) - LOG.debug('get hostname=%s from server=%s' % (host, server)) - except Exception as e: - LOG.error('can not get hostname from server=%s' % server) - - def disable_compute_host(self, hostname): - for server in self.servers[hostname]: - self.nova.servers.reset_state(server, 'error') - LOG.info('doctor mark vm(%s) error at %s' % (server, time.time())) - - # NOTE: We use our own client here instead of this novaclient for a - # workaround. Once keystone provides v2.1 nova api endpoint - # in the service catalog which is configured by OpenStack - # installer, we can use this: - # - # self.nova.services.force_down(hostname, 'nova-compute', True) - # - nova_force_down.force_down(hostname) - LOG.info('doctor mark host(%s) down at %s' % (hostname, time.time())) - - -app = Flask(__name__) -inspector = DoctorInspectorSample() - - -@app.route('/events', methods=['POST']) -def event_posted(): - LOG.info('event posted at %s' % time.time()) - LOG.info('inspector = %s' % inspector) - LOG.info('received data = %s' % request.data) - d = json.loads(request.data) - for event in d: - hostname = event['details']['hostname'] - event_type = event['type'] - if event_type == 'compute.host.down': - inspector.disable_compute_host(hostname) - return "OK" - - -def get_args(): - parser = argparse.ArgumentParser(description='Doctor Sample Inspector') - parser.add_argument('port', metavar='PORT', type=int, nargs='?', - help='a port for inspector') - return parser.parse_args() - - -def main(): - args = get_args() - app.run(port=args.port) - - -if __name__ == '__main__': - main()