blob: d89129eef109346e3a4aec3555cf05ba2e5e0745 [file] [log] [blame]
Kang Xi11d278c2018-04-06 16:56:04 -04001#! /usr/bin/python
2
3import os
4import requests
5import time
6from vcpecommon import *
7from datetime import datetime
8import soutils
9import logging
10import preload
11import json
12
13
14class CustomService:
15 def __init__(self, vcpecommon):
16 self.logger = logging.getLogger(__name__)
17 self.vcpecommon = vcpecommon
18
19 # delete all vgw stacks
20 def del_all_vgw_stacks(self, keyword):
21 param = ' '.join([k + ' ' + v for k, v in self.vcpecommon.cloud.items()])
22 openstackcmd = 'openstack ' + param + ' '
23
24 stacks = os.popen(openstackcmd + 'stack list').read()
25 found = False
26 for stack_description in stacks.split('\n'):
27 if keyword in stack_description:
28 found = True
29 stack_name = stack_description.split('|')[2].strip()
30 cmd = openstackcmd + 'stack delete -y ' + stack_name
31 self.logger.info('Deleting ' + stack_name)
32 os.popen(cmd)
33
34 if not found:
35 self.logger.info('No vGW stack to delete')
36
37 # clean up SDNC
38 def clean_up_sdnc(self):
39 items = ['tunnelxconn-allotted-resources', 'brg-allotted-resources']
40 for res in items:
41 self.logger.info('Cleaning up ' + res + ' from SDNC')
42 requests.delete(self.vcpecommon.sdnc_ar_cleanup_url + res, auth=self.vcpecommon.sdnc_userpass)
43
44 def print_success_info(self, print_instructions=True, nodes=None):
45 if not nodes:
46 nodes = ['brg', 'mux', 'gw', 'web']
47 ip_dict = self.vcpecommon.get_vm_ip(nodes, self.vcpecommon.external_net_addr,
48 self.vcpecommon.external_net_prefix_len)
49
50 print(json.dumps(ip_dict, indent=4, sort_keys=True))
51 for node in ['brg', 'mux']:
52 print('VxLAN config in {0}:'.format(node))
53 self.vcpecommon.get_vxlan_interfaces(ip_dict[node], print_info=True)
54
55 print(json.dumps(ip_dict, indent=4, sort_keys=True))
56
57 if print_instructions:
58 print('----------------------------------------------------------------------------')
59 print('Custom service created successfully. See above for VxLAN configuration info.')
60 print('To test data plane connectivity, following the steps below.')
61 print(' 1. ssh to vGW at {0}'.format(ip_dict['gw']))
62 print(' 2. Restart DHCP: systemctl restart isc-dhcp-server')
63 print(' 3. ssh to vBRG at {0}'.format(ip_dict['brg']))
64 print(' 4. Get IP from vGW: dhclient lstack')
65 print(' 5. Add route to Internet: ip route add 10.2.0.0/24 via 192.168.1.254 dev lstack')
66 print(' 6. ping the web server: ping {0}'.format('10.2.0.10'))
67 print(' 7. wget http://{0}'.format('10.2.0.10'))
68
69 def create_custom_service(self, csar_file, vgw_template_file, preload_dict=None):
70 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
71 brg_mac = self.vcpecommon.get_brg_mac_from_sdnc()
72 # preload vGW
73 if preload_dict:
74 preloader = preload.Preload(self.vcpecommon)
75 preloader.preload_vgw(vgw_template_file, brg_mac, preload_dict, name_suffix)
76
77 # create service
78 so = soutils.SoUtils(self.vcpecommon, 'v5')
79 if so.create_custom_service(csar_file, brg_mac, name_suffix):
80 self.print_success_info()