handle event for new project
This commit is contained in:
parent
3c797950ed
commit
eecfb3050d
4 changed files with 26 additions and 6 deletions
|
@ -35,6 +35,7 @@ You need to enable notification for this openstack service:
|
|||
- Nova (nova.conf)
|
||||
- Cinder (cinder.conf)
|
||||
- Neutron (neutron.conf)
|
||||
- Keystone (keystone.conf)
|
||||
|
||||
### Nova
|
||||
Add configuration below on `[oslo_messaging_notifications]`
|
||||
|
@ -51,7 +52,7 @@ notify_on_state_change = vm_and_task_state
|
|||
notification_format = unversioned
|
||||
```
|
||||
|
||||
### Cinder & Neutron
|
||||
### Cinder & Neutron & Keystone
|
||||
|
||||
Add configuration below on `[oslo_messaging_notifications]`
|
||||
|
||||
|
|
15
core/component/project/event_handler.py
Normal file
15
core/component/project/event_handler.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
import logging
|
||||
|
||||
from core.models import BillingProject
|
||||
|
||||
LOG = logging.getLogger("yuyu_notification")
|
||||
|
||||
|
||||
class ProjectEventHandler:
|
||||
def handle(self, event_type, raw_payload):
|
||||
if event_type == 'identity.project.created':
|
||||
new_project_id = raw_payload['target']['id']
|
||||
LOG.info("Registering new project " + new_project_id)
|
||||
project = BillingProject()
|
||||
project.tenant_id = new_project_id
|
||||
project.save()
|
|
@ -4,6 +4,7 @@ import traceback
|
|||
from oslo_messaging import NotificationResult
|
||||
|
||||
from core.component import component
|
||||
from core.component.project.event_handler import ProjectEventHandler
|
||||
from core.notification import send_notification
|
||||
from core.utils.dynamic_setting import get_dynamic_settings, BILLING_ENABLED, get_dynamic_setting
|
||||
from yuyu import settings
|
||||
|
@ -17,6 +18,9 @@ class EventEndpoint(object):
|
|||
cls(component.INVOICE_HANDLER[label]) for label, cls in component.EVENT_HANDLER.items()
|
||||
]
|
||||
|
||||
# Add handler for project event
|
||||
self.event_handler.append(ProjectEventHandler())
|
||||
|
||||
def info(self, ctxt, publisher_id, event_type, payload, metadata):
|
||||
LOG.info("=== Event Received ===")
|
||||
LOG.info("Event Type: " + str(event_type))
|
||||
|
@ -25,7 +29,6 @@ class EventEndpoint(object):
|
|||
if not get_dynamic_setting(BILLING_ENABLED):
|
||||
return NotificationResult.HANDLED
|
||||
|
||||
# TODO: Error Handling
|
||||
try:
|
||||
for handler in self.event_handler:
|
||||
handler.handle(event_type, payload)
|
||||
|
|
|
@ -43,7 +43,7 @@ class Command(BaseCommand):
|
|||
|
||||
def notify_server(self, transport, topics):
|
||||
endpoints = [EventEndpoint()]
|
||||
targets = list(map(lambda t: messaging.Target(topic=t), topics))
|
||||
targets = list(map(lambda t: messaging.Target(topic=t, fanout=True), topics))
|
||||
server = notify.get_notification_listener(
|
||||
transport,
|
||||
targets,
|
||||
|
@ -54,13 +54,14 @@ class Command(BaseCommand):
|
|||
|
||||
def handle(self, *args, **options):
|
||||
url = settings.YUYU_NOTIFICATION_URL
|
||||
transport = messaging.get_notification_transport(cfg.CONF,
|
||||
url=url)
|
||||
|
||||
# oslo.config defaults
|
||||
cfg.CONF.heartbeat_interval = 5
|
||||
cfg.CONF.prog = os.path.basename(__file__)
|
||||
cfg.CONF.project = 'yuyu'
|
||||
cfg.CONF.project = 'xxx'
|
||||
|
||||
transport = messaging.get_notification_transport(cfg.CONF,
|
||||
url=url)
|
||||
|
||||
signal.signal(signal.SIGTERM, self.signal_handler)
|
||||
signal.signal(signal.SIGINT, self.signal_handler)
|
||||
|
|
Loading…
Add table
Reference in a new issue