blob: 58a08964158857132f749ee8977d5f3af7d9299e [file] [log] [blame]
Andy Bavier89a95422016-11-02 14:38:39 -04001import os
2import base64
3from collections import defaultdict
4from netaddr import IPAddress, IPNetwork
5from django.db.models import F, Q
6from xos.config import Config
7from synchronizers.base.syncstep import *
8from core.models import *
9from synchronizers.base.ansible import *
10from xos.logger import observer_logger as logger
11import json
12
13class SyncControllerSlices(SyncStep):
14 provides=[Slice]
15 requested_interval=0
16 observes=ControllerSlice
17 playbook='sync_controller_slices.yaml'
18
19 def map_sync_inputs(self, controller_slice):
20 logger.info("sync'ing slice controller %s" % controller_slice)
21
22 if not controller_slice.controller.admin_user:
23 logger.info("controller %r has no admin_user, skipping" % controller_slice.controller)
24 return
25
26 controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
27 controller=controller_slice.controller)
28 if not controller_users:
29 raise Exception("slice creator %s has not account at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
30 else:
31 controller_user = controller_users[0]
32
33 max_instances=int(controller_slice.slice.max_instances)
34 slice_fields = {
35 'endpoint': controller_slice.controller.auth_url,
36 'admin_user': controller_slice.controller.admin_user,
37 'admin_password': controller_slice.controller.admin_password,
38 'slice_name': controller_slice.slice.name,
39 'slice_description': controller_slice.slice.description,
40 'name': controller_user.user.email,
41 'ansible_tag': '%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
42 'image': controller_slice.slice.default_image.name,
43 'addresses': '10.168.2.0/24', # FIXME
44 'gateway_ip': '10.168.2.1', # FIXME
45 'gateway_mac': '02:42:0a:a8:02:01', # FIXME
46 'max_instances': max_instances
47 }
48
49 return slice_fields
50
51 def map_sync_outputs(self, controller_slice, res):
52 if (not controller_slice.tenant_id):
53 controller_slice.tenant_id = "Not implemented"
54 controller_slice.backend_status = '1 - OK'
55 controller_slice.save()
56
57
58 def map_delete_inputs(self, controller_slice):
59 controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
60 controller=controller_slice.controller)
61 if not controller_users:
62 raise Exception("slice creator %s has not account at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
63 else:
64 controller_user = controller_users[0]
65
66 slice_fields = {
67 'endpoint': controller_slice.controller.auth_url,
68 'admin_user': controller_slice.controller.admin_user,
69 'admin_password': controller_slice.controller.admin_password,
70 'slice': controller_slice.slice.name,
71 'slice_description': controller_slice.slice.description,
72 'name': controller_user.user.email,
73 'ansible_tag': '%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
74 'delete': True
75 }
76 return slice_fields