summaryrefslogtreecommitdiffstats
path: root/tests/nova_force_down.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/nova_force_down.py')
-rw-r--r--tests/nova_force_down.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/nova_force_down.py b/tests/nova_force_down.py
new file mode 100644
index 00000000..bb10e9ea
--- /dev/null
+++ b/tests/nova_force_down.py
@@ -0,0 +1,60 @@
+##############################################################################
+# 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 json
+import os
+
+from keystoneclient.v2_0 import client
+import requests
+
+
+def force_down(hostname, force_down=True):
+ keystone = client.Client(username=os.environ['OS_USERNAME'],
+ password=os.environ['OS_PASSWORD'],
+ tenant_name=os.environ['OS_TENANT_NAME'],
+ auth_url=os.environ['OS_AUTH_URL'])
+
+ for service in keystone.auth_ref['serviceCatalog']:
+ if service['type'] == 'compute':
+ base_url = service['endpoints'][0]['internalURL']
+ break
+
+ url = '%s/os-services/force-down' % base_url.replace('/v2/', '/v2.1/')
+ data = {
+ 'forced_down': force_down,
+ 'binary': 'nova-compute',
+ 'host': hostname,
+ }
+ headers = {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'X-Auth-Token': keystone.auth_ref['token']['id'],
+ 'X-OpenStack-Nova-API-Version': 2.11,
+ }
+
+ print requests.put(url, data=json.dumps(data), headers=headers)
+
+
+def get_args():
+ parser = argparse.ArgumentParser(description='Doctor Test Cleaner')
+ parser.add_argument('hostname', metavar='HOSTNAME', type=str, nargs='?',
+ help='a nova-compute hostname to force down')
+ parser.add_argument('--unset', action='store_true', default=False,
+ help='unset force_down flag')
+ return parser.parse_args()
+
+
+def main():
+ args = get_args()
+ force_down(args.hostname, not(args.unset))
+
+
+if __name__ == '__main__':
+ main()