5 from vcpecommon import * # pylint: disable=W0614
6 from datetime import datetime
14 def __init__(self, vcpecommon):
15 self.logger = logging.getLogger(__name__)
16 self.vcpecommon = vcpecommon
18 # delete all vgw stacks
19 def del_all_vgw_stacks(self, keyword):
20 param = ' '.join([k + ' ' + v for k, v in self.vcpecommon.cloud.items()])
21 openstackcmd = 'openstack ' + param + ' '
23 stacks = os.popen(openstackcmd + 'stack list').read()
25 for stack_description in stacks.split('\n'):
26 if keyword in stack_description:
28 stack_name = stack_description.split('|')[2].strip()
29 cmd = openstackcmd + 'stack delete -y ' + stack_name
30 self.logger.info('Deleting ' + stack_name)
34 self.logger.info('No vGW stack to delete')
37 def clean_up_sdnc(self):
38 items = ['tunnelxconn-allotted-resources', 'brg-allotted-resources']
40 self.logger.info('Cleaning up ' + res + ' from SDNC')
41 requests.delete(self.vcpecommon.sdnc_ar_cleanup_url + res, auth=self.vcpecommon.sdnc_userpass)
43 def print_success_info(self, print_instructions=True, nodes=None):
45 nodes = ['brg', 'mux', 'gw', 'web']
46 ip_dict = self.vcpecommon.get_vm_ip(nodes, self.vcpecommon.external_net_addr,
47 self.vcpecommon.external_net_prefix_len)
49 print(json.dumps(ip_dict, indent=4, sort_keys=True))
50 for node in ['brg', 'mux']:
51 print('VxLAN config in {0}:'.format(node))
52 self.vcpecommon.get_vxlan_interfaces(ip_dict[node], print_info=True)
54 print(json.dumps(ip_dict, indent=4, sort_keys=True))
56 if print_instructions:
57 print('----------------------------------------------------------------------------')
58 print('Custom service created successfully. See above for VxLAN configuration info.')
59 print('To test data plane connectivity, following the steps below.')
60 print(' 1. ssh to vGW at {0}'.format(ip_dict['gw']))
61 print(' 2. Restart DHCP: systemctl restart isc-dhcp-server')
62 print(' 3. ssh to vBRG at {0}'.format(ip_dict['brg']))
63 print(' 4. Get IP from vGW: dhclient lstack')
64 print(' 5. Add route to Internet: ip route add 10.2.0.0/24 via 192.168.1.254 dev lstack')
65 print(' 6. ping the web server: ping {0}'.format('10.2.0.10'))
66 print(' 7. wget http://{0}'.format('10.2.0.10'))
68 def create_custom_service(self, csar_file, vgw_template_file, vgw_gra_template_file, preload_dict=None):
69 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
70 brg_mac = self.vcpecommon.get_brg_mac_from_sdnc()
71 brg_mac_enc = brg_mac.replace(':', '-')
73 self.vgw_vfmod_name_index= self.vcpecommon.load_object(self.vcpecommon.vgw_vfmod_name_index_file)
74 self.vgw_vfmod_name_index=self.vgw_vfmod_name_index + 1
75 self.vcpecommon.save_object(self.vgw_vfmod_name_index,self.vcpecommon.vgw_vfmod_name_index_file)
78 preloader = preload.Preload(self.vcpecommon)
79 parameters_to_change = ['vgw_private_ip_0', 'vgw_private_ip_1', 'vgw_private_ip_2','vg_vgmux_tunnel_vni']
80 self.vcpecommon.increase_ip_address_or_vni_in_template(vgw_template_file, parameters_to_change)
81 preloader.preload_vgw(vgw_template_file, brg_mac, preload_dict, name_suffix)
83 preloader.preload_vgw_gra(vgw_gra_template_file, brg_mac_enc, preload_dict, name_suffix, str(self.vgw_vfmod_name_index))
86 so = soutils.SoUtils(self.vcpecommon, 'v5')
87 if so.create_custom_service(csar_file, brg_mac, name_suffix):
88 self.print_success_info()