blob: c58b60adb6455bc68bde55b981998e23da661ece [file] [log] [blame]
Bartek Grzybowskifbbdbec2019-09-25 16:37:05 +02001#!/usr/bin/env python
Yang Xu1b31a1d2019-06-26 01:50:15 -04002
Kang Xi11d278c2018-04-06 16:56:04 -04003import logging
Bartek Grzybowskifbbdbec2019-09-25 16:37:05 +02004logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s.%(funcName)s(): %(message)s')
Yang Xu1b31a1d2019-06-26 01:50:15 -04005
6import sys
Kang Xi11d278c2018-04-06 16:56:04 -04007from vcpecommon import *
Yang Xuc52ed6e2019-04-29 00:20:52 -04008import sdcutils
Kang Xi11d278c2018-04-06 16:56:04 -04009import soutils
10from datetime import datetime
11import preload
12import vcpe_custom_service
13import csar_parser
14import config_sdnc_so
Kang Xi6c762392018-05-30 09:27:34 -040015import json
Bartek Grzybowskidecd6fb62019-10-31 12:49:46 +010016import urllib3
Kang Xi11d278c2018-04-06 16:56:04 -040017
Bartek Grzybowskidecd6fb62019-10-31 12:49:46 +010018# disable InsecureRequestWarning warning in requests < 2.16.0
19urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
20# disable InsecureRequestWarning warning in requests >= 2.16.0
21from requests.packages.urllib3.exceptions import InsecureRequestWarning
22requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
Kang Xi11d278c2018-04-06 16:56:04 -040023
24def config_sniro(vcpecommon, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
25 logger = logging.getLogger(__name__)
26
27 logger.info('\n----------------------------------------------------------------------------------')
28 logger.info('Start to config SNIRO homing emulator')
29
30 preloader = preload.Preload(vcpecommon)
31 template_sniro_data = vcpecommon.find_file('sniro_data', 'json', 'preload_templates')
32 template_sniro_request = vcpecommon.find_file('sniro_request', 'json', 'preload_templates')
33
34 vcperescust_csar = vcpecommon.find_file('rescust', 'csar', 'csar')
35 parser = csar_parser.CsarParser()
36 parser.parse_csar(vcperescust_csar)
37 tunnelxconn_ar_name = None
38 brg_ar_name = None
39 vgw_name = None
40 for model in parser.vnf_models:
Yang Xu86c0e4a2018-12-02 13:10:41 -050041 logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
Yang Xu27e16242018-12-28 01:00:50 -050042 if 'tunnel' in model['modelCustomizationName'].lower():
Yang Xu86c0e4a2018-12-02 13:10:41 -050043 logger.info('tunnel is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040044 tunnelxconn_ar_name = model['modelCustomizationName']
Yang Xu27e16242018-12-28 01:00:50 -050045 elif 'brg' in model['modelCustomizationName'].lower():
Yang Xu86c0e4a2018-12-02 13:10:41 -050046 logger.info('brg is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040047 brg_ar_name = model['modelCustomizationName']
Yang Xu86c0e4a2018-12-02 13:10:41 -050048 #elif 'vgw' in model['modelCustomizationName']:
49 else:
Kang Xi11d278c2018-04-06 16:56:04 -040050 vgw_name = model['modelCustomizationName']
51
52 if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
53 logger.error('Cannot find all names from %s.', vcperescust_csar)
Bartek Grzybowski68d93c22019-10-30 10:55:55 +010054 sys.exit(1)
Kang Xi11d278c2018-04-06 16:56:04 -040055
56 preloader.preload_sniro(template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, brg_ar_name,
57 vgmux_svc_instance_uuid, vbrg_svc_instance_uuid)
58
59
60def create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict, suffix, heatbridge=False):
61 """
62 :return: service instance UUID
63 """
64 so = soutils.SoUtils(vcpecommon, 'v4')
65 return so.create_entire_service(csar_file, vnf_template_file, preload_dict, suffix, heatbridge)
66
Kang Xi6c762392018-05-30 09:27:34 -040067
Kang Xi11d278c2018-04-06 16:56:04 -040068def deploy_brg_only():
Kang Xi11d278c2018-04-06 16:56:04 -040069 logger = logging.getLogger(__name__)
70
71 vcpecommon = VcpeCommon()
72 preload_dict = vcpecommon.load_preload_data()
Kang Xi6c762392018-05-30 09:27:34 -040073# name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
74 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
Kang Xi11d278c2018-04-06 16:56:04 -040075
76 # create multiple services based on the pre-determined order
77 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
Bartek Grzybowskidc3a1e82019-11-20 15:43:26 +010078 for keyword in ['brgemu']:
79 keyword_vnf=keyword + "_"
80 keyword_gra=keyword + "gra_"
Kang Xi11d278c2018-04-06 16:56:04 -040081 heatbridge = 'gmux' == keyword
82 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
Bartek Grzybowskidc3a1e82019-11-20 15:43:26 +010083 vnf_template_file = vcpecommon.find_file(keyword_vnf, 'json', 'preload_templates')
84 gra_template_file = vcpecommon.find_file(keyword_gra, 'json', 'preload_templates')
85 if vcpecommon.gra_api_flag:
86 vcpecommon.increase_ip_address_or_vni_in_template(gra_template_file, ['vbrgemu_private_ip_0'])
87 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, gra_template_file, preload_dict,
88 name_suffix, heatbridge)
89 else:
90 vcpecommon.increase_ip_address_or_vni_in_template(vnf_template_file, ['vbrgemu_private_ip_0'])
91 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
92 name_suffix, heatbridge)
Kang Xi11d278c2018-04-06 16:56:04 -040093 if not svc_instance_uuid[keyword]:
Bartek Grzybowski68d93c22019-10-30 10:55:55 +010094 sys.exit(1)
Kang Xi11d278c2018-04-06 16:56:04 -040095
96 # Setting up SNIRO
Brian Freeman9b3d6ca2019-11-06 13:22:53 -050097 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
Kang Xi11d278c2018-04-06 16:56:04 -040098
Kang Xi6c762392018-05-30 09:27:34 -040099
Kang Xi11d278c2018-04-06 16:56:04 -0400100def deploy_infra():
Kang Xi11d278c2018-04-06 16:56:04 -0400101 logger = logging.getLogger(__name__)
102
103 vcpecommon = VcpeCommon()
104
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500105 # preload all VNF-API networks
106 network_template = vcpecommon.find_file('network.', 'json', 'preload_templates')
Kang Xi11d278c2018-04-06 16:56:04 -0400107 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
108 preloader = preload.Preload(vcpecommon)
109 preload_dict = preloader.preload_all_networks(network_template, name_suffix)
110 logger.debug('Initial preload dictionary:')
111 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
112 if not preload_dict:
113 logger.error("Failed to preload networks.")
Bartek Grzybowski68d93c22019-10-30 10:55:55 +0100114 sys.exit(1)
Kang Xi11d278c2018-04-06 16:56:04 -0400115 vcpecommon.save_preload_data(preload_dict)
116
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500117 # preload all GRA-API networks
118 network_template_gra = vcpecommon.find_file('networkgra.', 'json', 'preload_templates')
119 preloader = preload.Preload(vcpecommon)
120 preload_dict_gra = preloader.preload_all_networks(network_template_gra, name_suffix)
121 logger.debug('Initial preload dictionary:')
122 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
123 if not preload_dict_gra:
124 logger.error("Failed to preload networks.")
125 sys.exit(1)
126 vcpecommon.save_preload_data(preload_dict_gra)
127
Kang Xi11d278c2018-04-06 16:56:04 -0400128 # create multiple services based on the pre-determined order
129 svc_instance_uuid = {}
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500130 for keyword in ['infra', 'bng', 'gmux', 'brgemu']:
131 keyword_vnf=keyword + "_"
132 keyword_gra=keyword + "gra_"
Kang Xi11d278c2018-04-06 16:56:04 -0400133 heatbridge = 'gmux' == keyword
134 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500135 vnf_template_file = vcpecommon.find_file(keyword_vnf, 'json', 'preload_templates')
136 gra_template_file = vcpecommon.find_file(keyword_gra, 'json', 'preload_templates')
137 if vcpecommon.gra_api_flag:
138 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, gra_template_file, preload_dict,
139 name_suffix, heatbridge)
140 else:
141 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
Kang Xi11d278c2018-04-06 16:56:04 -0400142 name_suffix, heatbridge)
143 if not svc_instance_uuid[keyword]:
Bartek Grzybowski68d93c22019-10-30 10:55:55 +0100144 sys.exit(1)
Kang Xi11d278c2018-04-06 16:56:04 -0400145
146 vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500147
Kang Xi11d278c2018-04-06 16:56:04 -0400148 # Setting up SNIRO
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500149 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
Kang Xi11d278c2018-04-06 16:56:04 -0400150
151 print('----------------------------------------------------------------------------------------------------')
152 print('Congratulations! The following have been completed correctly:')
153 print(' - Infrastructure Service Instantiation: ')
154 print(' * 4 VMs: DHCP, AAA, DNS, Web Server')
155 print(' * 2 Networks: CPE_PUBLIC, CPE_SIGNAL')
156 print(' - vBNG Service Instantiation: ')
157 print(' * 1 VM: vBNG')
158 print(' * 2 Networks: BRG_BNG, BNG_MUX')
159 print(' - vGMUX Service Instantiation: ')
160 print(' * 1 VM: vGMUX')
161 print(' * 1 Network: MUX_GW')
162 print(' - vBRG Service Instantiation: ')
163 print(' * 1 VM: vBRG')
164 print(' - Adding vGMUX vServer information to AAI.')
165 print(' - SNIRO Homing Emulator configuration.')
166
167
168def deploy_custom_service():
169 nodes = ['brg', 'mux']
170 vcpecommon = VcpeCommon(nodes)
171 custom_service = vcpe_custom_service.CustomService(vcpecommon)
172
173 # clean up
Kang Xi0e0a1d62018-07-23 16:53:54 -0400174 host_dic = {k: vcpecommon.hosts[k] for k in nodes}
175 if False:
176 if not vcpecommon.delete_vxlan_interfaces(host_dic):
Bartek Grzybowski68d93c22019-10-30 10:55:55 +0100177 sys.exit(1)
Kang Xi0e0a1d62018-07-23 16:53:54 -0400178 custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
Kang Xi11d278c2018-04-06 16:56:04 -0400179
Kang Xi6c762392018-05-30 09:27:34 -0400180 #custom_service.clean_up_sdnc()
Kang Xi11d278c2018-04-06 16:56:04 -0400181
182 # create new service
183 csar_file = vcpecommon.find_file('rescust', 'csar', 'csar')
184 vgw_template_file = vcpecommon.find_file('vgw', 'json', 'preload_templates')
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500185 vgw_gra_template_file = vcpecommon.find_file('gwgra', 'json', 'preload_templates')
Kang Xi11d278c2018-04-06 16:56:04 -0400186 preload_dict = vcpecommon.load_preload_data()
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500187 custom_service.create_custom_service(csar_file, vgw_template_file, vgw_gra_template_file, preload_dict)
Kang Xi11d278c2018-04-06 16:56:04 -0400188
189
190def closed_loop(lossrate=0):
Kang Xi11d278c2018-04-06 16:56:04 -0400191 nodes = ['brg', 'mux']
192 logger = logging.getLogger('__name__')
193 vcpecommon = VcpeCommon(nodes)
Bartek Grzybowskidbb3ba12019-09-25 11:21:42 +0200194
195 logger.info('Setting up closed loop policy')
196 policy_template_file = vcpecommon.find_file('operational.vcpe', 'json', 'preload_templates')
197 vcpecommon.set_closed_loop_policy(policy_template_file)
198
Kang Xi11d278c2018-04-06 16:56:04 -0400199 logger.info('Cleaning up vGMUX data reporting settings')
200 vcpecommon.del_vgmux_ves_mode()
201 time.sleep(2)
202 vcpecommon.del_vgmux_ves_collector()
203
Yang Xu9f935b22018-11-22 10:56:52 -0500204 logger.info('Starting vGMUX data reporting to DCAE')
Kang Xi11d278c2018-04-06 16:56:04 -0400205 time.sleep(2)
206 vcpecommon.set_vgmux_ves_collector()
207
208 logger.info('Setting vGMUX to report packet loss rate: %s', lossrate)
209 time.sleep(2)
210 vcpecommon.set_vgmux_packet_loss_rate(lossrate, vcpecommon.load_vgmux_vnf_name())
211 if lossrate > 0:
Yang Xu1b31a1d2019-06-26 01:50:15 -0400212 print('Now please observe vGMUX being restarted')
Kang Xi11d278c2018-04-06 16:56:04 -0400213
214
215def init_so_sdnc():
216 logger = logging.getLogger('__name__')
217 vcpecommon = VcpeCommon()
Bartek Grzybowskiba8a72f2019-11-22 15:02:21 +0100218 config_sdnc_so.insert_sdnc_ip_pool(vcpecommon)
Kang Xi11d278c2018-04-06 16:56:04 -0400219 config_sdnc_so.insert_customer_service_to_so(vcpecommon)
Yang Xu63a0afd2018-11-20 16:01:01 -0500220 #config_sdnc_so.insert_customer_service_to_sdnc(vcpecommon)
Brian Freeman8076a872018-11-13 11:34:48 -0500221 vgw_vfmod_name_index= 0
222 vcpecommon.save_object(vgw_vfmod_name_index, vcpecommon.vgw_vfmod_name_index_file)
Kang Xi11d278c2018-04-06 16:56:04 -0400223
Yang Xu0e319ef2019-04-30 14:28:07 -0400224
225def init():
Yang Xuc52ed6e2019-04-29 00:20:52 -0400226 vcpecommon = VcpeCommon()
Yang Xu0e319ef2019-04-30 14:28:07 -0400227 init_sdc(vcpecommon)
228 download_vcpe_service_templates(vcpecommon)
Bartek Grzybowski6358aa32019-10-30 13:46:43 +0100229 preloader = preload.Preload(vcpecommon)
230 template_aai_region_data = vcpecommon.find_file('aai_region_data', 'json', 'preload_templates')
231 preloader.preload_aai_data(template_aai_region_data)
Yang Xu0e319ef2019-04-30 14:28:07 -0400232
233
234def init_sdc(vcpecommon):
Yang Xuc52ed6e2019-04-29 00:20:52 -0400235 sdc = sdcutils.SdcUtils(vcpecommon)
Brian Freemane8aa3f02019-09-20 08:29:22 -0500236 # default SDC creates BRG - remove this in frankfurt
237 #sdc.create_allotted_resource_subcategory('BRG')
Yang Xu0e319ef2019-04-30 14:28:07 -0400238
239
240def download_vcpe_service_templates(vcpecommon):
241 sdc = sdcutils.SdcUtils(vcpecommon)
242 sdc.download_vcpe_service_template()
243
Kang Xi11d278c2018-04-06 16:56:04 -0400244
Kang Xi6c762392018-05-30 09:27:34 -0400245def tmp_sniro():
246 logger = logging.getLogger(__name__)
247
248 vcpecommon = VcpeCommon()
249
250 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
251 # Setting up SNIRO
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500252 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
Kang Xi6c762392018-05-30 09:27:34 -0400253
Yang Xu0e319ef2019-04-30 14:28:07 -0400254
Yang Xu64339a82018-12-30 05:32:21 +0000255def test():
256 vcpecommon = VcpeCommon()
Yang Xu65b84a42018-12-31 17:48:02 +0000257 print("oom-k8s-04 public ip: %s" % (vcpecommon.get_vm_public_ip_by_nova('oom-k8s-04')))
Yang Xu64339a82018-12-30 05:32:21 +0000258
Yang Xu0e319ef2019-04-30 14:28:07 -0400259
Kang Xi11d278c2018-04-06 16:56:04 -0400260if __name__ == '__main__':
Kang Xi11d278c2018-04-06 16:56:04 -0400261 print('----------------------------------------------------------------------------------------------------')
262 print(' vcpe.py: Brief info about this program')
263# print(' vcpe.py sdc: Onboard VNFs, design and distribute vCPE services (under development)')
264 print(' vcpe.py init: Add customer service data to SDNC and SO DBs.')
265 print(' vcpe.py infra: Deploy infrastructure, including DHCP, AAA, DNS, Web Server, vBNG, vGMUX, vBRG.')
Brian Freemanec9fe0e2018-11-12 12:37:12 -0500266 print(' vcpe.py brg: Deploy brg only (for testing after infra succeeds).')
Kang Xi11d278c2018-04-06 16:56:04 -0400267 print(' vcpe.py customer: Deploy customer service, including vGW and VxLANs')
Bartek Grzybowski304628b2019-10-17 10:44:39 +0200268 print(' vcpe.py loop: Test closed loop control (packet loss set to 22)')
269 print(' vcpe.py noloss: Set vGMUX packet loss to 0')
Kang Xi11d278c2018-04-06 16:56:04 -0400270 print('----------------------------------------------------------------------------------------------------')
271
272 if len(sys.argv) != 2:
273 sys.exit()
274
275 if sys.argv[1] == 'sdc':
276 print('Under development')
277 elif sys.argv[1] == 'init':
Yang Xu0e319ef2019-04-30 14:28:07 -0400278 init()
Kang Xi11d278c2018-04-06 16:56:04 -0400279 init_so_sdnc()
280 elif sys.argv[1] == 'infra':
Brian Freeman9b3d6ca2019-11-06 13:22:53 -0500281 #if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
Kang Xi11d278c2018-04-06 16:56:04 -0400282 deploy_infra()
283 elif sys.argv[1] == 'customer':
284 if 'y' == raw_input('Ready to deploy customer service? y/n: ').lower():
285 deploy_custom_service()
286 elif sys.argv[1] == 'loop':
287 closed_loop(22)
288 elif sys.argv[1] == 'noloss':
289 closed_loop(0)
290 elif sys.argv[1] == 'brg':
291 deploy_brg_only()
Yang Xu86c0e4a2018-12-02 13:10:41 -0500292 elif sys.argv[1] == 'sniro':
293 tmp_sniro()
Yang Xu64339a82018-12-30 05:32:21 +0000294 elif sys.argv[1] == 'test':
295 test()
Kang Xi11d278c2018-04-06 16:56:04 -0400296