f08a69313466b696f82ef9c259a65edb3516db65
[plstackapi.git] / planetstack / openstack_observer / steps / sync_roles.py
1 import os
2 import base64
3 from django.db.models import F, Q
4 from planetstack.config import Config
5 from observer.openstacksyncstep import OpenStackSyncStep
6 from core.models.role import Role
7 from core.models.site import SiteRole, Controller, ControllerRole
8 from core.models.slice import SliceRole
9
10 class SyncRoles(OpenStackSyncStep):
11     provides=[Role]
12     requested_interval=0
13
14     def fetch_pending(self, deleted):
15         # Deleting roles is not supported yet
16         if (deleted):
17             return []
18
19         site_roles = SiteRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
20         slice_roles = SliceRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
21         controller_roles = ControllerRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
22
23         roles = []
24         for site_role in site_roles:
25             roles.append(site_role)
26         for slice_role in slice_roles:
27             roles.append(slice_role)
28         for controller_role in controller_roles:
29             roles.append(controller_role)
30
31         return roles
32
33
34     def sync_record(self, role):
35         if not role.enacted:
36             controllers = Controller.objects.all()
37             for controller in controllers:
38                 driver = self.driver.admin_driver(controller=controller)
39                 driver.create_role(role.role)
40             role.save()
41