Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/agents/openstack/fence_openstack.py b/agents/openstack/fence_openstack.py
index ab9618a8..182c38f8 100755
--- a/agents/openstack/fence_openstack.py
+++ b/agents/openstack/fence_openstack.py
@@ -1,128 +1,144 @@
#!@PYTHON@ -tt
import atexit
import logging
import os
import re
import sys
from pipes import quote
sys.path.append("/usr/share/fence")
from fencing import *
from fencing import fail_usage, is_executable, run_command, run_delay
try:
- from keystoneclient.v3 import client as ksclient
+ from novaclient import client as novaclient
+ from keystoneauth1 import session as ksc_session
+ from keystoneauth1 import loading
+ legacy_import = False
+except ImportError:
from novaclient import client as novaclient
from keystoneclient import session as ksc_session
from keystoneclient.auth.identity import v3
-except ImportError:
- pass
+ legacy_import = True
def get_name_or_uuid(options):
return options["--uuid"] if "--uuid" in options else options["--plug"]
def get_power_status(_, options):
output = nova_run_command(options, "status")
if (output == 'ACTIVE'):
return 'on'
else:
return 'off'
def set_power_status(_, options):
nova_run_command(options, options["--action"])
return
def nova_login(username,password,projectname,auth_url,user_domain_name,project_domain_name):
- auth=v3.Password(username=username,password=password,project_name=projectname,user_domain_name=user_domain_name,project_domain_name=project_domain_name,auth_url=auth_url)
+ if not legacy_import:
+ loader = loading.get_plugin_loader('password')
+ auth = loader.load_from_options(auth_url=auth_url,
+ username=username,
+ password=password,
+ project_name=projectname,
+ user_domain_name=user_domain_name,
+ project_domain_name=project_domain_name)
+ else:
+ auth = v3.Password(username=username,
+ password=password,
+ project_name=projectname,
+ user_domain_name=user_domain_name,
+ project_domain_name=project_domain_name,
+ auth_url=auth_url)
session = ksc_session.Session(auth=auth)
- keystone = ksclient.Client(session=session)
nova = novaclient.Client("2", session=session)
return nova
def nova_run_command(options,action,timeout=None):
username=options["--username"]
password=options["--password"]
projectname=options["--project-name"]
auth_url=options["--auth-url"]
user_domain_name=options["--user-domain-name"]
project_domain_name=options["--project-domain-name"]
novaclient=nova_login(username,password,projectname,auth_url,user_domain_name,project_domain_name)
server = novaclient.servers.get(options["--uuid"])
if action == "status":
return server.status
if action == "on":
server.start()
if action == "off":
server.stop()
if action == "reboot":
server.reboot('REBOOT_HARD')
def define_new_opts():
all_opt["auth-url"] = {
"getopt" : ":",
"longopt" : "auth-url",
"help" : "--auth-url=[authurl] Keystone Auth URL",
"required" : "1",
"shortdesc" : "Keystone Auth URL",
"order": 1
}
all_opt["project-name"] = {
"getopt" : ":",
"longopt" : "project-name",
"help" : "--project-name=[project] Tenant Or Project Name",
"required" : "1",
"shortdesc" : "Keystone Project",
"default": "admin",
"order": 1
}
all_opt["user-domain-name"] = {
"getopt" : ":",
"longopt" : "user-domain-name",
"help" : "--user-domain-name=[user-domain] Keystone User Domain Name",
"required" : "0",
"shortdesc" : "Keystone User Domain Name",
"default": "Default",
"order": 1
}
all_opt["project-domain-name"] = {
"getopt" : ":",
"longopt" : "project-domain-name",
"help" : "--project-domain-name=[project-domain] Keystone Project Domain Name",
"required" : "0",
"shortdesc" : "Keystone Project Domain Name",
"default": "Default",
"order": 1
}
all_opt["uuid"] = {
"getopt" : ":",
"longopt" : "uuid",
"help" : "--uuid=[uuid] UUID of the nova instance",
"required" : "1",
"shortdesc" : "UUID of the nova instance",
"order": 1
}
def main():
atexit.register(atexit_handler)
device_opt = ["login", "passwd", "auth-url", "project-name", "user-domain-name", "project-domain-name", "uuid"]
define_new_opts()
options = check_input(device_opt, process_input(device_opt))
docs = {}
docs["shortdesc"] = "Fence agent for OpenStack's Nova service"
docs["longdesc"] = "fence_openstack is a Fencing agent \
which can be used with machines controlled by the Openstack's Nova service. \
This agent calls the python-novaclient and it is mandatory to be installed "
docs["vendorurl"] = "https://wiki.openstack.org/wiki/Nova"
show_docs(options, docs)
run_delay(options)
result = fence_action(None, options, set_power_status, get_power_status,None)
sys.exit(result)
if __name__ == "__main__":
main()

File Metadata

Mime Type
text/x-diff
Expires
Mon, Feb 24, 5:11 AM (1 d, 20 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1462965
Default Alt Text
(5 KB)

Event Timeline