456
455
context, id, group_name)
458
class SecurityGroupsOutputController(wsgi.Controller):
459
def __init__(self, *args, **kwargs):
460
super(SecurityGroupsOutputController, self).__init__(*args, **kwargs)
461
self.compute_api = compute.API()
463
def _extend_servers(self, req, servers):
464
key = "security_groups"
465
for server in servers:
466
instance = req.get_db_instance(server['id'])
467
groups = instance.get(key)
469
server[key] = [{"name": group["name"]} for group in groups]
471
def _show(self, req, resp_obj):
472
if not softauth(req.environ['nova.context']):
474
if 'server' in resp_obj.obj:
475
resp_obj.attach(xml=SecurityGroupServerTemplate())
476
self._extend_servers(req, [resp_obj.obj['server']])
479
def show(self, req, resp_obj, id):
480
return self._show(req, resp_obj)
483
def create(self, req, resp_obj, body):
484
return self._show(req, resp_obj)
487
def detail(self, req, resp_obj):
488
if not softauth(req.environ['nova.context']):
490
resp_obj.attach(xml=SecurityGroupServersTemplate())
491
self._extend_servers(req, list(resp_obj.obj['servers']))
494
class SecurityGroupsTemplateElement(xmlutil.TemplateElement):
495
def will_render(self, datum):
496
return "security_groups" in datum
499
def make_server(elem):
500
secgrps = SecurityGroupsTemplateElement('security_groups')
502
secgrp = xmlutil.SubTemplateElement(secgrps, 'security_group',
503
selector="security_groups")
507
class SecurityGroupServerTemplate(xmlutil.TemplateBuilder):
509
root = xmlutil.TemplateElement('server')
511
return xmlutil.SlaveTemplate(root, 1)
514
class SecurityGroupServersTemplate(xmlutil.TemplateBuilder):
516
root = xmlutil.TemplateElement('servers')
517
elem = xmlutil.SubTemplateElement(root, 'server', selector='servers')
519
return xmlutil.SlaveTemplate(root, 1)
459
522
class Security_groups(extensions.ExtensionDescriptor):
460
523
"""Security group support"""
462
524
name = "SecurityGroups"
463
alias = "security_groups"
525
alias = "os-security-groups"
464
526
namespace = "http://docs.openstack.org/compute/ext/securitygroups/api/v1.1"
465
527
updated = "2011-07-21T00:00:00+00:00"
467
529
def get_controller_extensions(self):
468
530
controller = SecurityGroupActionController()
469
extension = extensions.ControllerExtension(self, 'servers', controller)
531
actions = extensions.ControllerExtension(self, 'servers', controller)
532
controller = SecurityGroupsOutputController()
533
output = extensions.ControllerExtension(self, 'servers', controller)
534
return [actions, output]
472
536
def get_resources(self):