blob: bb5bbb6374a6264bbc14a907a8625f7d18f0ffe3 [file] [log] [blame]
Kang Xi11d278c2018-04-06 16:56:04 -04001#! /usr/bin/python
2import sys
3import logging
4from vcpecommon import *
5import soutils
6from datetime import datetime
7import preload
8import vcpe_custom_service
9import csar_parser
10import config_sdnc_so
Kang Xi6c762392018-05-30 09:27:34 -040011import json
Kang Xi11d278c2018-04-06 16:56:04 -040012
13
14def config_sniro(vcpecommon, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
15 logger = logging.getLogger(__name__)
16
17 logger.info('\n----------------------------------------------------------------------------------')
18 logger.info('Start to config SNIRO homing emulator')
19
20 preloader = preload.Preload(vcpecommon)
21 template_sniro_data = vcpecommon.find_file('sniro_data', 'json', 'preload_templates')
22 template_sniro_request = vcpecommon.find_file('sniro_request', 'json', 'preload_templates')
23
24 vcperescust_csar = vcpecommon.find_file('rescust', 'csar', 'csar')
25 parser = csar_parser.CsarParser()
26 parser.parse_csar(vcperescust_csar)
27 tunnelxconn_ar_name = None
28 brg_ar_name = None
29 vgw_name = None
30 for model in parser.vnf_models:
Yang Xu86c0e4a2018-12-02 13:10:41 -050031 logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040032 if 'tunnel' in model['modelCustomizationName']:
Yang Xu86c0e4a2018-12-02 13:10:41 -050033 logger.info('tunnel is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040034 tunnelxconn_ar_name = model['modelCustomizationName']
35 elif 'brg' in model['modelCustomizationName']:
Yang Xu86c0e4a2018-12-02 13:10:41 -050036 logger.info('brg is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040037 brg_ar_name = model['modelCustomizationName']
Yang Xu86c0e4a2018-12-02 13:10:41 -050038 #elif 'vgw' in model['modelCustomizationName']:
39 else:
Kang Xi11d278c2018-04-06 16:56:04 -040040 vgw_name = model['modelCustomizationName']
41
42 if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
43 logger.error('Cannot find all names from %s.', vcperescust_csar)
44 sys.exit()
45
46 preloader.preload_sniro(template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, brg_ar_name,
47 vgmux_svc_instance_uuid, vbrg_svc_instance_uuid)
48
49
50def create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict, suffix, heatbridge=False):
51 """
52 :return: service instance UUID
53 """
54 so = soutils.SoUtils(vcpecommon, 'v4')
55 return so.create_entire_service(csar_file, vnf_template_file, preload_dict, suffix, heatbridge)
56
Kang Xi6c762392018-05-30 09:27:34 -040057
Kang Xi11d278c2018-04-06 16:56:04 -040058def deploy_brg_only():
59 logging.basicConfig(level=logging.INFO, format='%(message)s')
60 logger = logging.getLogger(__name__)
61
62 vcpecommon = VcpeCommon()
63 preload_dict = vcpecommon.load_preload_data()
Kang Xi6c762392018-05-30 09:27:34 -040064# name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
65 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
Kang Xi11d278c2018-04-06 16:56:04 -040066
67 # create multiple services based on the pre-determined order
68 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
69 for keyword in ['brg']:
70 heatbridge = 'gmux' == keyword
71 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
72 vnf_template_file = vcpecommon.find_file(keyword, 'json', 'preload_templates')
Kang Xi6c762392018-05-30 09:27:34 -040073 vcpecommon.increase_ip_address_or_vni_in_template(vnf_template_file, ['vbrgemu_private_ip_0'])
Kang Xi11d278c2018-04-06 16:56:04 -040074 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
75 name_suffix, heatbridge)
76 if not svc_instance_uuid[keyword]:
77 sys.exit()
78
79 # Setting up SNIRO
80 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
81
Kang Xi6c762392018-05-30 09:27:34 -040082
Kang Xi11d278c2018-04-06 16:56:04 -040083def deploy_infra():
Kang Xi11d278c2018-04-06 16:56:04 -040084 logger = logging.getLogger(__name__)
85
86 vcpecommon = VcpeCommon()
87
88 # preload all networks
89 network_template = vcpecommon.find_file('network', 'json', 'preload_templates')
90 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
91 preloader = preload.Preload(vcpecommon)
92 preload_dict = preloader.preload_all_networks(network_template, name_suffix)
93 logger.debug('Initial preload dictionary:')
94 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
95 if not preload_dict:
96 logger.error("Failed to preload networks.")
97 sys.exit()
98 vcpecommon.save_preload_data(preload_dict)
99
100 # create multiple services based on the pre-determined order
101 svc_instance_uuid = {}
102 for keyword in ['infra', 'bng', 'gmux', 'brg']:
103 heatbridge = 'gmux' == keyword
104 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
105 vnf_template_file = vcpecommon.find_file(keyword, 'json', 'preload_templates')
106 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
107 name_suffix, heatbridge)
108 if not svc_instance_uuid[keyword]:
109 sys.exit()
110
111 vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
112 # Setting up SNIRO
113 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
114
115 print('----------------------------------------------------------------------------------------------------')
116 print('Congratulations! The following have been completed correctly:')
117 print(' - Infrastructure Service Instantiation: ')
118 print(' * 4 VMs: DHCP, AAA, DNS, Web Server')
119 print(' * 2 Networks: CPE_PUBLIC, CPE_SIGNAL')
120 print(' - vBNG Service Instantiation: ')
121 print(' * 1 VM: vBNG')
122 print(' * 2 Networks: BRG_BNG, BNG_MUX')
123 print(' - vGMUX Service Instantiation: ')
124 print(' * 1 VM: vGMUX')
125 print(' * 1 Network: MUX_GW')
126 print(' - vBRG Service Instantiation: ')
127 print(' * 1 VM: vBRG')
128 print(' - Adding vGMUX vServer information to AAI.')
129 print(' - SNIRO Homing Emulator configuration.')
130
131
132def deploy_custom_service():
133 nodes = ['brg', 'mux']
134 vcpecommon = VcpeCommon(nodes)
135 custom_service = vcpe_custom_service.CustomService(vcpecommon)
136
137 # clean up
Kang Xi0e0a1d62018-07-23 16:53:54 -0400138 host_dic = {k: vcpecommon.hosts[k] for k in nodes}
139 if False:
140 if not vcpecommon.delete_vxlan_interfaces(host_dic):
141 sys.exit()
142 custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
Kang Xi11d278c2018-04-06 16:56:04 -0400143
Kang Xi6c762392018-05-30 09:27:34 -0400144 #custom_service.clean_up_sdnc()
Kang Xi11d278c2018-04-06 16:56:04 -0400145
146 # create new service
147 csar_file = vcpecommon.find_file('rescust', 'csar', 'csar')
148 vgw_template_file = vcpecommon.find_file('vgw', 'json', 'preload_templates')
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500149 vgw_gra_template_file = vcpecommon.find_file('gwgra', 'json', 'preload_templates')
Kang Xi11d278c2018-04-06 16:56:04 -0400150 preload_dict = vcpecommon.load_preload_data()
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500151 custom_service.create_custom_service(csar_file, vgw_template_file, vgw_gra_template_file, preload_dict)
Kang Xi11d278c2018-04-06 16:56:04 -0400152
153
154def closed_loop(lossrate=0):
155 if lossrate > 0:
156 while 'y' != raw_input('Please enter docker container "drools" in Policy VM and type "policy stop". Then enter y here: ').lower():
157 continue
158 nodes = ['brg', 'mux']
159 logger = logging.getLogger('__name__')
160 vcpecommon = VcpeCommon(nodes)
161 logger.info('Cleaning up vGMUX data reporting settings')
162 vcpecommon.del_vgmux_ves_mode()
163 time.sleep(2)
164 vcpecommon.del_vgmux_ves_collector()
165
Yang Xu9f935b22018-11-22 10:56:52 -0500166 logger.info('Starting vGMUX data reporting to DCAE')
Kang Xi11d278c2018-04-06 16:56:04 -0400167 time.sleep(2)
168 vcpecommon.set_vgmux_ves_collector()
169
170 logger.info('Setting vGMUX to report packet loss rate: %s', lossrate)
171 time.sleep(2)
172 vcpecommon.set_vgmux_packet_loss_rate(lossrate, vcpecommon.load_vgmux_vnf_name())
173 if lossrate > 0:
174 print('Please enter docker container "drools" in Policy VM and type "policy start". Then observe vGMUX being restarted.')
175
176
177def init_so_sdnc():
178 logger = logging.getLogger('__name__')
179 vcpecommon = VcpeCommon()
180 config_sdnc_so.insert_customer_service_to_so(vcpecommon)
Yang Xu63a0afd2018-11-20 16:01:01 -0500181 #config_sdnc_so.insert_customer_service_to_sdnc(vcpecommon)
Brian Freeman8076a872018-11-13 11:34:48 -0500182 vgw_vfmod_name_index= 0
183 vcpecommon.save_object(vgw_vfmod_name_index, vcpecommon.vgw_vfmod_name_index_file)
Kang Xi11d278c2018-04-06 16:56:04 -0400184
185
Kang Xi6c762392018-05-30 09:27:34 -0400186def tmp_sniro():
187 logger = logging.getLogger(__name__)
188
189 vcpecommon = VcpeCommon()
190
191 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
192 # Setting up SNIRO
193 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
194
Kang Xi11d278c2018-04-06 16:56:04 -0400195if __name__ == '__main__':
Brian Freemana605bc72018-11-12 10:50:30 -0500196 logging.basicConfig(level=logging.DEBUG, format='%(message)s')
Kang Xi11d278c2018-04-06 16:56:04 -0400197
198 print('----------------------------------------------------------------------------------------------------')
199 print(' vcpe.py: Brief info about this program')
200# print(' vcpe.py sdc: Onboard VNFs, design and distribute vCPE services (under development)')
201 print(' vcpe.py init: Add customer service data to SDNC and SO DBs.')
202 print(' vcpe.py infra: Deploy infrastructure, including DHCP, AAA, DNS, Web Server, vBNG, vGMUX, vBRG.')
Brian Freemanec9fe0e2018-11-12 12:37:12 -0500203 print(' vcpe.py brg: Deploy brg only (for testing after infra succeeds).')
Kang Xi11d278c2018-04-06 16:56:04 -0400204 print(' vcpe.py customer: Deploy customer service, including vGW and VxLANs')
205 print(' vcpe.py loop: Test closed loop control')
206 print('----------------------------------------------------------------------------------------------------')
207
208 if len(sys.argv) != 2:
209 sys.exit()
210
211 if sys.argv[1] == 'sdc':
212 print('Under development')
213 elif sys.argv[1] == 'init':
214 if 'y' == raw_input('Ready to add customer service data to SDNC and SO DBs? This is needed only once.'
215 'y/n: ').lower():
216 init_so_sdnc()
217 elif sys.argv[1] == 'infra':
218 if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
219 deploy_infra()
220 elif sys.argv[1] == 'customer':
221 if 'y' == raw_input('Ready to deploy customer service? y/n: ').lower():
222 deploy_custom_service()
223 elif sys.argv[1] == 'loop':
224 closed_loop(22)
225 elif sys.argv[1] == 'noloss':
226 closed_loop(0)
227 elif sys.argv[1] == 'brg':
228 deploy_brg_only()
Yang Xu86c0e4a2018-12-02 13:10:41 -0500229 elif sys.argv[1] == 'sniro':
230 tmp_sniro()
Kang Xi11d278c2018-04-06 16:56:04 -0400231