blob: 375a04e12c5e16d79dbeeccc7414dfa04a8704d4 [file] [log] [blame]
Kang Xi11d278c2018-04-06 16:56:04 -04001#! /usr/bin/python
2import sys
3import logging
4from vcpecommon import *
Yang Xuc52ed6e2019-04-29 00:20:52 -04005import sdcutils
Kang Xi11d278c2018-04-06 16:56:04 -04006import soutils
7from datetime import datetime
8import preload
9import vcpe_custom_service
10import csar_parser
11import config_sdnc_so
Kang Xi6c762392018-05-30 09:27:34 -040012import json
Kang Xi11d278c2018-04-06 16:56:04 -040013
14
15def config_sniro(vcpecommon, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
16 logger = logging.getLogger(__name__)
17
18 logger.info('\n----------------------------------------------------------------------------------')
19 logger.info('Start to config SNIRO homing emulator')
20
21 preloader = preload.Preload(vcpecommon)
22 template_sniro_data = vcpecommon.find_file('sniro_data', 'json', 'preload_templates')
23 template_sniro_request = vcpecommon.find_file('sniro_request', 'json', 'preload_templates')
24
25 vcperescust_csar = vcpecommon.find_file('rescust', 'csar', 'csar')
26 parser = csar_parser.CsarParser()
27 parser.parse_csar(vcperescust_csar)
28 tunnelxconn_ar_name = None
29 brg_ar_name = None
30 vgw_name = None
31 for model in parser.vnf_models:
Yang Xu86c0e4a2018-12-02 13:10:41 -050032 logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
Yang Xu27e16242018-12-28 01:00:50 -050033 if 'tunnel' in model['modelCustomizationName'].lower():
Yang Xu86c0e4a2018-12-02 13:10:41 -050034 logger.info('tunnel is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040035 tunnelxconn_ar_name = model['modelCustomizationName']
Yang Xu27e16242018-12-28 01:00:50 -050036 elif 'brg' in model['modelCustomizationName'].lower():
Yang Xu86c0e4a2018-12-02 13:10:41 -050037 logger.info('brg is in %s', model['modelCustomizationName'])
Kang Xi11d278c2018-04-06 16:56:04 -040038 brg_ar_name = model['modelCustomizationName']
Yang Xu86c0e4a2018-12-02 13:10:41 -050039 #elif 'vgw' in model['modelCustomizationName']:
40 else:
Kang Xi11d278c2018-04-06 16:56:04 -040041 vgw_name = model['modelCustomizationName']
42
43 if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
44 logger.error('Cannot find all names from %s.', vcperescust_csar)
45 sys.exit()
46
47 preloader.preload_sniro(template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, brg_ar_name,
48 vgmux_svc_instance_uuid, vbrg_svc_instance_uuid)
49
50
51def create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict, suffix, heatbridge=False):
52 """
53 :return: service instance UUID
54 """
55 so = soutils.SoUtils(vcpecommon, 'v4')
56 return so.create_entire_service(csar_file, vnf_template_file, preload_dict, suffix, heatbridge)
57
Kang Xi6c762392018-05-30 09:27:34 -040058
Kang Xi11d278c2018-04-06 16:56:04 -040059def deploy_brg_only():
60 logging.basicConfig(level=logging.INFO, format='%(message)s')
61 logger = logging.getLogger(__name__)
62
63 vcpecommon = VcpeCommon()
64 preload_dict = vcpecommon.load_preload_data()
Kang Xi6c762392018-05-30 09:27:34 -040065# name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
66 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
Kang Xi11d278c2018-04-06 16:56:04 -040067
68 # create multiple services based on the pre-determined order
69 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
70 for keyword in ['brg']:
71 heatbridge = 'gmux' == keyword
72 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
73 vnf_template_file = vcpecommon.find_file(keyword, 'json', 'preload_templates')
Kang Xi6c762392018-05-30 09:27:34 -040074 vcpecommon.increase_ip_address_or_vni_in_template(vnf_template_file, ['vbrgemu_private_ip_0'])
Kang Xi11d278c2018-04-06 16:56:04 -040075 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
76 name_suffix, heatbridge)
77 if not svc_instance_uuid[keyword]:
78 sys.exit()
79
80 # Setting up SNIRO
81 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
82
Kang Xi6c762392018-05-30 09:27:34 -040083
Kang Xi11d278c2018-04-06 16:56:04 -040084def deploy_infra():
Kang Xi11d278c2018-04-06 16:56:04 -040085 logger = logging.getLogger(__name__)
86
87 vcpecommon = VcpeCommon()
88
89 # preload all networks
90 network_template = vcpecommon.find_file('network', 'json', 'preload_templates')
91 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
92 preloader = preload.Preload(vcpecommon)
93 preload_dict = preloader.preload_all_networks(network_template, name_suffix)
94 logger.debug('Initial preload dictionary:')
95 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
96 if not preload_dict:
97 logger.error("Failed to preload networks.")
98 sys.exit()
99 vcpecommon.save_preload_data(preload_dict)
100
101 # create multiple services based on the pre-determined order
102 svc_instance_uuid = {}
103 for keyword in ['infra', 'bng', 'gmux', 'brg']:
104 heatbridge = 'gmux' == keyword
105 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
106 vnf_template_file = vcpecommon.find_file(keyword, 'json', 'preload_templates')
107 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
108 name_suffix, heatbridge)
109 if not svc_instance_uuid[keyword]:
110 sys.exit()
111
112 vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
113 # Setting up SNIRO
114 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
115
116 print('----------------------------------------------------------------------------------------------------')
117 print('Congratulations! The following have been completed correctly:')
118 print(' - Infrastructure Service Instantiation: ')
119 print(' * 4 VMs: DHCP, AAA, DNS, Web Server')
120 print(' * 2 Networks: CPE_PUBLIC, CPE_SIGNAL')
121 print(' - vBNG Service Instantiation: ')
122 print(' * 1 VM: vBNG')
123 print(' * 2 Networks: BRG_BNG, BNG_MUX')
124 print(' - vGMUX Service Instantiation: ')
125 print(' * 1 VM: vGMUX')
126 print(' * 1 Network: MUX_GW')
127 print(' - vBRG Service Instantiation: ')
128 print(' * 1 VM: vBRG')
129 print(' - Adding vGMUX vServer information to AAI.')
130 print(' - SNIRO Homing Emulator configuration.')
131
132
133def deploy_custom_service():
134 nodes = ['brg', 'mux']
135 vcpecommon = VcpeCommon(nodes)
136 custom_service = vcpe_custom_service.CustomService(vcpecommon)
137
138 # clean up
Kang Xi0e0a1d62018-07-23 16:53:54 -0400139 host_dic = {k: vcpecommon.hosts[k] for k in nodes}
140 if False:
141 if not vcpecommon.delete_vxlan_interfaces(host_dic):
142 sys.exit()
143 custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
Kang Xi11d278c2018-04-06 16:56:04 -0400144
Kang Xi6c762392018-05-30 09:27:34 -0400145 #custom_service.clean_up_sdnc()
Kang Xi11d278c2018-04-06 16:56:04 -0400146
147 # create new service
148 csar_file = vcpecommon.find_file('rescust', 'csar', 'csar')
149 vgw_template_file = vcpecommon.find_file('vgw', 'json', 'preload_templates')
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500150 vgw_gra_template_file = vcpecommon.find_file('gwgra', 'json', 'preload_templates')
Kang Xi11d278c2018-04-06 16:56:04 -0400151 preload_dict = vcpecommon.load_preload_data()
Brian Freeman81f6e9e2018-11-11 22:36:20 -0500152 custom_service.create_custom_service(csar_file, vgw_template_file, vgw_gra_template_file, preload_dict)
Kang Xi11d278c2018-04-06 16:56:04 -0400153
154
155def closed_loop(lossrate=0):
156 if lossrate > 0:
157 while 'y' != raw_input('Please enter docker container "drools" in Policy VM and type "policy stop". Then enter y here: ').lower():
158 continue
159 nodes = ['brg', 'mux']
160 logger = logging.getLogger('__name__')
161 vcpecommon = VcpeCommon(nodes)
162 logger.info('Cleaning up vGMUX data reporting settings')
163 vcpecommon.del_vgmux_ves_mode()
164 time.sleep(2)
165 vcpecommon.del_vgmux_ves_collector()
166
Yang Xu9f935b22018-11-22 10:56:52 -0500167 logger.info('Starting vGMUX data reporting to DCAE')
Kang Xi11d278c2018-04-06 16:56:04 -0400168 time.sleep(2)
169 vcpecommon.set_vgmux_ves_collector()
170
171 logger.info('Setting vGMUX to report packet loss rate: %s', lossrate)
172 time.sleep(2)
173 vcpecommon.set_vgmux_packet_loss_rate(lossrate, vcpecommon.load_vgmux_vnf_name())
174 if lossrate > 0:
175 print('Please enter docker container "drools" in Policy VM and type "policy start". Then observe vGMUX being restarted.')
176
177
178def init_so_sdnc():
179 logger = logging.getLogger('__name__')
180 vcpecommon = VcpeCommon()
181 config_sdnc_so.insert_customer_service_to_so(vcpecommon)
Yang Xu63a0afd2018-11-20 16:01:01 -0500182 #config_sdnc_so.insert_customer_service_to_sdnc(vcpecommon)
Brian Freeman8076a872018-11-13 11:34:48 -0500183 vgw_vfmod_name_index= 0
184 vcpecommon.save_object(vgw_vfmod_name_index, vcpecommon.vgw_vfmod_name_index_file)
Kang Xi11d278c2018-04-06 16:56:04 -0400185
Yang Xu0e319ef2019-04-30 14:28:07 -0400186
187def init():
Yang Xuc52ed6e2019-04-29 00:20:52 -0400188 vcpecommon = VcpeCommon()
Yang Xu0e319ef2019-04-30 14:28:07 -0400189 init_sdc(vcpecommon)
190 download_vcpe_service_templates(vcpecommon)
191
192
193def init_sdc(vcpecommon):
Yang Xuc52ed6e2019-04-29 00:20:52 -0400194 sdc = sdcutils.SdcUtils(vcpecommon)
Yang Xu0e319ef2019-04-30 14:28:07 -0400195 sdc.create_allotted_resource_subcategory('BRG')
196
197
198def download_vcpe_service_templates(vcpecommon):
199 sdc = sdcutils.SdcUtils(vcpecommon)
200 sdc.download_vcpe_service_template()
201
Kang Xi11d278c2018-04-06 16:56:04 -0400202
Kang Xi6c762392018-05-30 09:27:34 -0400203def tmp_sniro():
204 logger = logging.getLogger(__name__)
205
206 vcpecommon = VcpeCommon()
207
208 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
209 # Setting up SNIRO
210 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
211
Yang Xu0e319ef2019-04-30 14:28:07 -0400212
Yang Xu64339a82018-12-30 05:32:21 +0000213def test():
214 vcpecommon = VcpeCommon()
Yang Xu65b84a42018-12-31 17:48:02 +0000215 print("oom-k8s-04 public ip: %s" % (vcpecommon.get_vm_public_ip_by_nova('oom-k8s-04')))
Yang Xu64339a82018-12-30 05:32:21 +0000216
Yang Xu0e319ef2019-04-30 14:28:07 -0400217
Kang Xi11d278c2018-04-06 16:56:04 -0400218if __name__ == '__main__':
Brian Freemana605bc72018-11-12 10:50:30 -0500219 logging.basicConfig(level=logging.DEBUG, format='%(message)s')
Kang Xi11d278c2018-04-06 16:56:04 -0400220
221 print('----------------------------------------------------------------------------------------------------')
222 print(' vcpe.py: Brief info about this program')
223# print(' vcpe.py sdc: Onboard VNFs, design and distribute vCPE services (under development)')
224 print(' vcpe.py init: Add customer service data to SDNC and SO DBs.')
225 print(' vcpe.py infra: Deploy infrastructure, including DHCP, AAA, DNS, Web Server, vBNG, vGMUX, vBRG.')
Brian Freemanec9fe0e2018-11-12 12:37:12 -0500226 print(' vcpe.py brg: Deploy brg only (for testing after infra succeeds).')
Kang Xi11d278c2018-04-06 16:56:04 -0400227 print(' vcpe.py customer: Deploy customer service, including vGW and VxLANs')
228 print(' vcpe.py loop: Test closed loop control')
229 print('----------------------------------------------------------------------------------------------------')
230
231 if len(sys.argv) != 2:
232 sys.exit()
233
234 if sys.argv[1] == 'sdc':
235 print('Under development')
236 elif sys.argv[1] == 'init':
Yang Xu0e319ef2019-04-30 14:28:07 -0400237 init()
Kang Xi11d278c2018-04-06 16:56:04 -0400238 init_so_sdnc()
239 elif sys.argv[1] == 'infra':
240 if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
241 deploy_infra()
242 elif sys.argv[1] == 'customer':
243 if 'y' == raw_input('Ready to deploy customer service? y/n: ').lower():
244 deploy_custom_service()
245 elif sys.argv[1] == 'loop':
246 closed_loop(22)
247 elif sys.argv[1] == 'noloss':
248 closed_loop(0)
249 elif sys.argv[1] == 'brg':
250 deploy_brg_only()
Yang Xu86c0e4a2018-12-02 13:10:41 -0500251 elif sys.argv[1] == 'sniro':
252 tmp_sniro()
Yang Xu64339a82018-12-30 05:32:21 +0000253 elif sys.argv[1] == 'test':
254 test()
Kang Xi11d278c2018-04-06 16:56:04 -0400255