summaryrefslogtreecommitdiffstats
path: root/tests/nova_force_down.py
diff options
context:
space:
mode:
authorRyota MIBU <r-mibu@cq.jp.nec.com>2016-02-21 00:19:29 +0900
committerRyota Mibu <r-mibu@cq.jp.nec.com>2016-02-20 15:34:25 +0000
commit0f39f1198ecbd5b5979e009ee3816973e207c2e1 (patch)
treec7681ccb02544f77534863c3f7f412cf204d21a3 /tests/nova_force_down.py
parent914c18c6ffecc12026c8eb8838c719e6105bbcc1 (diff)
test: add nova_force_down clientbrahmaputra.1.0
New force_down API is not available due to rack of support in default configuration of keystone service catalog and limit of novaclient, so this patch adds nova_force_down client to operate the new API. Change-Id: I2545f4448313b334d4c0a12f1638e64ecfafdf41 Signed-off-by: Ryota MIBU <r-mibu@cq.jp.nec.com> (cherry picked from commit a3ea372e18ef14b75734f82db969531df6d0c7dd)
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()