blob: 36012f7b0fb062657257d40aa3a6ef8aa4e8c586 [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
Brian Freeman81f6e9e2018-11-11 22:36:20 -050069 def create_custom_service(self, csar_file, vgw_template_file, vgw_gra_template_file, preload_dict=None):
Kang Xi11d278c2018-04-06 16:56:04 -040070 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
Kang Xi0e0a1d62018-07-23 16:53:54 -040071 if self.vcpecommon.oom_mode:
72 brg_mac = str(raw_input("Enter the BRG MAC address: "))
73 else:
74 brg_mac = self.vcpecommon.get_brg_mac_from_sdnc()
Yang Xu3f686832018-11-22 10:56:52 -050075 brg_mac_enc = brg_mac.replace(':', '-')
Brian Freeman81f6e9e2018-11-11 22:36:20 -050076 # get name index
Brian Freeman8076a872018-11-13 11:34:48 -050077 self.vgw_vfmod_name_index= self.vcpecommon.load_object(self.vcpecommon.vgw_vfmod_name_index_file)
78 self.vgw_vfmod_name_index=self.vgw_vfmod_name_index + 1
Yang Xu1a0a0462018-11-20 16:01:01 -050079 self.vcpecommon.save_object(self.vgw_vfmod_name_index,self.vcpecommon.vgw_vfmod_name_index_file)
Kang Xi11d278c2018-04-06 16:56:04 -040080 # preload vGW
81 if preload_dict:
82 preloader = preload.Preload(self.vcpecommon)
Kang Xi0e0a1d62018-07-23 16:53:54 -040083 parameters_to_change = ['vgw_private_ip_0', 'vgw_private_ip_1', 'vgw_private_ip_2','vg_vgmux_tunnel_vni']
Kang Xi6c762392018-05-30 09:27:34 -040084 self.vcpecommon.increase_ip_address_or_vni_in_template(vgw_template_file, parameters_to_change)
Kang Xi11d278c2018-04-06 16:56:04 -040085 preloader.preload_vgw(vgw_template_file, brg_mac, preload_dict, name_suffix)
Brian Freeman81f6e9e2018-11-11 22:36:20 -050086 # preload vGW-GRA
Yang Xu3f686832018-11-22 10:56:52 -050087 preloader.preload_vgw_gra(vgw_gra_template_file, brg_mac_enc, preload_dict, name_suffix, str(self.vgw_vfmod_name_index))
Kang Xi11d278c2018-04-06 16:56:04 -040088
89 # create service
90 so = soutils.SoUtils(self.vcpecommon, 'v5')
91 if so.create_custom_service(csar_file, brg_mac, name_suffix):
92 self.print_success_info()