4 from vcpecommon import *
6 from datetime import datetime
8 import vcpe_custom_service
14 def config_sniro(vcpecommon, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
15 logger = logging.getLogger(__name__)
17 logger.info('\n----------------------------------------------------------------------------------')
18 logger.info('Start to config SNIRO homing emulator')
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')
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
30 for model in parser.vnf_models:
31 logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
32 if 'tunnel' in model['modelCustomizationName']:
33 logger.info('tunnel is in %s', model['modelCustomizationName'])
34 tunnelxconn_ar_name = model['modelCustomizationName']
35 elif 'brg' in model['modelCustomizationName']:
36 logger.info('brg is in %s', model['modelCustomizationName'])
37 brg_ar_name = model['modelCustomizationName']
38 #elif 'vgw' in model['modelCustomizationName']:
40 vgw_name = model['modelCustomizationName']
42 if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
43 logger.error('Cannot find all names from %s.', vcperescust_csar)
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)
50 def create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict, suffix, heatbridge=False):
52 :return: service instance UUID
54 so = soutils.SoUtils(vcpecommon, 'v4')
55 return so.create_entire_service(csar_file, vnf_template_file, preload_dict, suffix, heatbridge)
58 def deploy_brg_only():
59 logging.basicConfig(level=logging.INFO, format='%(message)s')
60 logger = logging.getLogger(__name__)
62 vcpecommon = VcpeCommon()
63 preload_dict = vcpecommon.load_preload_data()
64 # name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
65 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
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')
73 vcpecommon.increase_ip_address_or_vni_in_template(vnf_template_file, ['vbrgemu_private_ip_0'])
74 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]:
80 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
84 logger = logging.getLogger(__name__)
86 vcpecommon = VcpeCommon()
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))
96 logger.error("Failed to preload networks.")
98 vcpecommon.save_preload_data(preload_dict)
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]:
111 vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
113 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
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.')
132 def deploy_custom_service():
133 nodes = ['brg', 'mux']
134 vcpecommon = VcpeCommon(nodes)
135 custom_service = vcpe_custom_service.CustomService(vcpecommon)
138 host_dic = {k: vcpecommon.hosts[k] for k in nodes}
140 if not vcpecommon.delete_vxlan_interfaces(host_dic):
142 custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
144 #custom_service.clean_up_sdnc()
147 csar_file = vcpecommon.find_file('rescust', 'csar', 'csar')
148 vgw_template_file = vcpecommon.find_file('vgw', 'json', 'preload_templates')
149 vgw_gra_template_file = vcpecommon.find_file('gwgra', 'json', 'preload_templates')
150 preload_dict = vcpecommon.load_preload_data()
151 custom_service.create_custom_service(csar_file, vgw_template_file, vgw_gra_template_file, preload_dict)
154 def closed_loop(lossrate=0):
156 while 'y' != raw_input('Please enter docker container "drools" in Policy VM and type "policy stop". Then enter y here: ').lower():
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()
164 vcpecommon.del_vgmux_ves_collector()
166 logger.info('Starting vGMUX data reporting to DCAE')
168 vcpecommon.set_vgmux_ves_collector()
170 logger.info('Setting vGMUX to report packet loss rate: %s', lossrate)
172 vcpecommon.set_vgmux_packet_loss_rate(lossrate, vcpecommon.load_vgmux_vnf_name())
174 print('Please enter docker container "drools" in Policy VM and type "policy start". Then observe vGMUX being restarted.')
178 logger = logging.getLogger('__name__')
179 vcpecommon = VcpeCommon()
180 config_sdnc_so.insert_customer_service_to_so(vcpecommon)
181 #config_sdnc_so.insert_customer_service_to_sdnc(vcpecommon)
182 vgw_vfmod_name_index= 0
183 vcpecommon.save_object(vgw_vfmod_name_index, vcpecommon.vgw_vfmod_name_index_file)
187 logger = logging.getLogger(__name__)
189 vcpecommon = VcpeCommon()
191 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
193 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
195 if __name__ == '__main__':
196 logging.basicConfig(level=logging.DEBUG, format='%(message)s')
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.')
203 print(' vcpe.py brg: Deploy brg only (for testing after infra succeeds).')
204 print(' vcpe.py customer: Deploy customer service, including vGW and VxLANs')
205 print(' vcpe.py loop: Test closed loop control')
206 print('----------------------------------------------------------------------------------------------------')
208 if len(sys.argv) != 2:
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.'
217 elif sys.argv[1] == 'infra':
218 if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
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':
225 elif sys.argv[1] == 'noloss':
227 elif sys.argv[1] == 'brg':
229 elif sys.argv[1] == 'sniro':