Add support for Keystone domains
This feature fixes even the bug #1659246 Change-Id: I189455f5b1c546304e4b9b3ce9f6c17ebdf0d133 Sem-Ver: feature
This commit is contained in:
parent
a858311eb9
commit
e7e36a1fbd
34
synergy_scheduler_manager/common/domain.py
Normal file
34
synergy_scheduler_manager/common/domain.py
Normal file
@ -0,0 +1,34 @@
|
||||
from synergy.common.serializer import SynergyObject
|
||||
|
||||
|
||||
__author__ = "Lisa Zangrando"
|
||||
__email__ = "lisa.zangrando[AT]pd.infn.it"
|
||||
__copyright__ = """Copyright (c) 2015 INFN - INDIGO-DataCloud
|
||||
All Rights Reserved
|
||||
|
||||
Licensed under the Apache License, Version 2.0;
|
||||
you may not use this file except in compliance with the
|
||||
License. You may obtain a copy of the License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
either express or implied.
|
||||
See the License for the specific language governing
|
||||
permissions and limitations under the License."""
|
||||
|
||||
|
||||
class Domain(SynergyObject):
|
||||
|
||||
def __init__(self):
|
||||
super(Domain, self).__init__()
|
||||
|
||||
self.set("enabled", False)
|
||||
|
||||
def isEnabled(self):
|
||||
return self.get("enabled")
|
||||
|
||||
def setEnabled(self, enabled=True):
|
||||
self.set("enabled", enabled)
|
@ -2,6 +2,7 @@ import json
|
||||
import logging
|
||||
import requests
|
||||
|
||||
from common.domain import Domain
|
||||
from common.endpoint import Endpoint
|
||||
from common.project import Project
|
||||
from common.role import Role
|
||||
@ -298,6 +299,54 @@ class KeystoneManager(Manager):
|
||||
|
||||
return roles
|
||||
|
||||
def getDomain(self, id):
|
||||
try:
|
||||
response = self.getResource("/domains/%s" % id, "GET")
|
||||
except requests.exceptions.HTTPError as ex:
|
||||
response = ex.response.json()
|
||||
raise Exception(
|
||||
"error on retrieving the domain (id=%r, msg=%s)." %
|
||||
(id, response["error"]["message"]))
|
||||
|
||||
domain = None
|
||||
|
||||
if response:
|
||||
info = response["domain"]
|
||||
|
||||
domain = Domain()
|
||||
domain.setId(info["id"])
|
||||
domain.setName(info["name"])
|
||||
domain.setEnabled(info["enabled"])
|
||||
|
||||
return domain
|
||||
|
||||
def getDomains(self, name=None, enabled=True):
|
||||
try:
|
||||
data = {"enabled": enabled}
|
||||
if name:
|
||||
data["name"] = name
|
||||
|
||||
response = self.getResource("/domains", "GET", data=data)
|
||||
except requests.exceptions.HTTPError as ex:
|
||||
response = ex.response.json()
|
||||
raise Exception("error on retrieving the domains list: %s"
|
||||
% response["error"]["message"])
|
||||
|
||||
domains = []
|
||||
|
||||
if response:
|
||||
domains_info = response["domains"]
|
||||
|
||||
for info in domains_info:
|
||||
domain = Domain()
|
||||
domain.setId(info["id"])
|
||||
domain.setName(info["name"])
|
||||
domain.setEnabled(info["enabled"])
|
||||
|
||||
domains.append(domain)
|
||||
|
||||
return domains
|
||||
|
||||
def getProject(self, id):
|
||||
try:
|
||||
response = self.getResource("/projects/%s" % id, "GET")
|
||||
|
@ -250,7 +250,14 @@ class QuotaManager(Manager):
|
||||
total_memory *= float(ram_ratio)
|
||||
total_vcpus *= float(cpu_ratio)
|
||||
|
||||
kprojects = self.keystone_manager.getProjects(domain_id="default")
|
||||
domain = self.keystone_manager.getDomains(name="default")
|
||||
if not domain:
|
||||
raise Exception("domain 'default' not found!")
|
||||
|
||||
domain = domain[0]
|
||||
dom_id = domain.getId()
|
||||
|
||||
kprojects = self.keystone_manager.getProjects(domain_id=dom_id)
|
||||
|
||||
for kproject in kprojects:
|
||||
project = self.getProject(kproject.getId())
|
||||
|
@ -418,8 +418,24 @@ class SchedulerManager(Manager):
|
||||
raise Exception("command=%r not supported!" % command)
|
||||
|
||||
def task(self):
|
||||
if not self.configured:
|
||||
for project in self.keystone_manager.getProjects():
|
||||
if self.configured:
|
||||
for project in self.projects.values():
|
||||
users = self.keystone_manager.getUsers(prj_id=project.getId())
|
||||
|
||||
for user in users:
|
||||
try:
|
||||
project.addUser(user)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
domain = self.keystone_manager.getDomains(name="default")
|
||||
if not domain:
|
||||
raise Exception("domain 'default' not found!")
|
||||
|
||||
domain = domain[0]
|
||||
dom_id = domain.getId()
|
||||
|
||||
for project in self.keystone_manager.getProjects(domain_id=dom_id):
|
||||
if project.getName() in CONF.SchedulerManager.projects:
|
||||
CONF.SchedulerManager.projects.remove(project.getName())
|
||||
project.setTTL(self.default_TTL)
|
||||
@ -505,16 +521,6 @@ class SchedulerManager(Manager):
|
||||
|
||||
self.listener.start()
|
||||
self.configured = True
|
||||
return
|
||||
|
||||
for project in self.projects.values():
|
||||
users = self.keystone_manager.getUsers(prj_id=project.getId())
|
||||
|
||||
for user in users:
|
||||
try:
|
||||
project.addUser(user)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def destroy(self):
|
||||
for queue_worker in self.workers:
|
||||
|
Loading…
x
Reference in New Issue
Block a user