Page Menu
Home
ClusterLabs Projects
Search
Configure Global Search
Log In
Files
F3151504
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rF Fence Agents
Attached
Detach File
Event Timeline
Log In to Comment