4 logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s.%(funcName)s(): %(message)s')
7 from vcpecommon import *
10 from datetime import datetime
12 import vcpe_custom_service
18 # disable InsecureRequestWarning warning in requests < 2.16.0
19 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
20 # disable InsecureRequestWarning warning in requests >= 2.16.0
21 from requests.packages.urllib3.exceptions import InsecureRequestWarning
22 requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
24 def config_sniro(vcpecommon, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid):
25 logger = logging.getLogger(__name__)
27 logger.info('\n----------------------------------------------------------------------------------')
28 logger.info('Start to config SNIRO homing emulator')
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')
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
40 for model in parser.vnf_models:
41 logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
42 if 'tunnel' in model['modelCustomizationName'].lower():
43 logger.info('tunnel is in %s', model['modelCustomizationName'])
44 tunnelxconn_ar_name = model['modelCustomizationName']
45 elif 'brg' in model['modelCustomizationName'].lower():
46 logger.info('brg is in %s', model['modelCustomizationName'])
47 brg_ar_name = model['modelCustomizationName']
48 #elif 'vgw' in model['modelCustomizationName']:
50 vgw_name = model['modelCustomizationName']
52 if not (tunnelxconn_ar_name and brg_ar_name and vgw_name):
53 logger.error('Cannot find all names from %s.', vcperescust_csar)
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)
60 def create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict, suffix, heatbridge=False):
62 :return: service instance UUID
64 so = soutils.SoUtils(vcpecommon, 'v4')
65 return so.create_entire_service(csar_file, vnf_template_file, preload_dict, suffix, heatbridge)
68 def deploy_brg_only():
69 logger = logging.getLogger(__name__)
71 vcpecommon = VcpeCommon()
72 preload_dict = vcpecommon.load_preload_data()
73 # name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
74 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
76 # create multiple services based on the pre-determined order
77 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
78 for keyword in ['brg']:
79 heatbridge = 'gmux' == keyword
80 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
81 vnf_template_file = vcpecommon.find_file(keyword, 'json', 'preload_templates')
82 vcpecommon.increase_ip_address_or_vni_in_template(vnf_template_file, ['vbrgemu_private_ip_0'])
83 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
84 name_suffix, heatbridge)
85 if not svc_instance_uuid[keyword]:
89 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
93 logger = logging.getLogger(__name__)
95 vcpecommon = VcpeCommon()
97 # preload all VNF-API networks
98 network_template = vcpecommon.find_file('network.', 'json', 'preload_templates')
99 name_suffix = datetime.now().strftime('%Y%m%d%H%M')
100 preloader = preload.Preload(vcpecommon)
101 preload_dict = preloader.preload_all_networks(network_template, name_suffix)
102 logger.debug('Initial preload dictionary:')
103 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
105 logger.error("Failed to preload networks.")
107 vcpecommon.save_preload_data(preload_dict)
109 # preload all GRA-API networks
110 network_template_gra = vcpecommon.find_file('networkgra.', 'json', 'preload_templates')
111 preloader = preload.Preload(vcpecommon)
112 preload_dict_gra = preloader.preload_all_networks(network_template_gra, name_suffix)
113 logger.debug('Initial preload dictionary:')
114 logger.debug(json.dumps(preload_dict, indent=4, sort_keys=True))
115 if not preload_dict_gra:
116 logger.error("Failed to preload networks.")
118 vcpecommon.save_preload_data(preload_dict_gra)
120 # create multiple services based on the pre-determined order
121 svc_instance_uuid = {}
122 for keyword in ['infra', 'bng', 'gmux', 'brgemu']:
123 keyword_vnf=keyword + "_"
124 keyword_gra=keyword + "gra_"
125 heatbridge = 'gmux' == keyword
126 csar_file = vcpecommon.find_file(keyword, 'csar', 'csar')
127 vnf_template_file = vcpecommon.find_file(keyword_vnf, 'json', 'preload_templates')
128 gra_template_file = vcpecommon.find_file(keyword_gra, 'json', 'preload_templates')
129 if vcpecommon.gra_api_flag:
130 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, gra_template_file, preload_dict,
131 name_suffix, heatbridge)
133 svc_instance_uuid[keyword] = create_one_service(vcpecommon, csar_file, vnf_template_file, preload_dict,
134 name_suffix, heatbridge)
135 if not svc_instance_uuid[keyword]:
138 vcpecommon.save_object(svc_instance_uuid, vcpecommon.svc_instance_uuid_file)
141 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
143 print('----------------------------------------------------------------------------------------------------')
144 print('Congratulations! The following have been completed correctly:')
145 print(' - Infrastructure Service Instantiation: ')
146 print(' * 4 VMs: DHCP, AAA, DNS, Web Server')
147 print(' * 2 Networks: CPE_PUBLIC, CPE_SIGNAL')
148 print(' - vBNG Service Instantiation: ')
149 print(' * 1 VM: vBNG')
150 print(' * 2 Networks: BRG_BNG, BNG_MUX')
151 print(' - vGMUX Service Instantiation: ')
152 print(' * 1 VM: vGMUX')
153 print(' * 1 Network: MUX_GW')
154 print(' - vBRG Service Instantiation: ')
155 print(' * 1 VM: vBRG')
156 print(' - Adding vGMUX vServer information to AAI.')
157 print(' - SNIRO Homing Emulator configuration.')
160 def deploy_custom_service():
161 nodes = ['brg', 'mux']
162 vcpecommon = VcpeCommon(nodes)
163 custom_service = vcpe_custom_service.CustomService(vcpecommon)
166 host_dic = {k: vcpecommon.hosts[k] for k in nodes}
168 if not vcpecommon.delete_vxlan_interfaces(host_dic):
170 custom_service.del_all_vgw_stacks(vcpecommon.vgw_name_keyword)
172 #custom_service.clean_up_sdnc()
175 csar_file = vcpecommon.find_file('rescust', 'csar', 'csar')
176 vgw_template_file = vcpecommon.find_file('vgw', 'json', 'preload_templates')
177 vgw_gra_template_file = vcpecommon.find_file('gwgra', 'json', 'preload_templates')
178 preload_dict = vcpecommon.load_preload_data()
179 custom_service.create_custom_service(csar_file, vgw_template_file, vgw_gra_template_file, preload_dict)
182 def closed_loop(lossrate=0):
183 nodes = ['brg', 'mux']
184 logger = logging.getLogger('__name__')
185 vcpecommon = VcpeCommon(nodes)
187 logger.info('Setting up closed loop policy')
188 policy_template_file = vcpecommon.find_file('operational.vcpe', 'json', 'preload_templates')
189 vcpecommon.set_closed_loop_policy(policy_template_file)
191 logger.info('Cleaning up vGMUX data reporting settings')
192 vcpecommon.del_vgmux_ves_mode()
194 vcpecommon.del_vgmux_ves_collector()
196 logger.info('Starting vGMUX data reporting to DCAE')
198 vcpecommon.set_vgmux_ves_collector()
200 logger.info('Setting vGMUX to report packet loss rate: %s', lossrate)
202 vcpecommon.set_vgmux_packet_loss_rate(lossrate, vcpecommon.load_vgmux_vnf_name())
204 print('Now please observe vGMUX being restarted')
208 logger = logging.getLogger('__name__')
209 vcpecommon = VcpeCommon()
210 #config_sdnc_so.insert_sdnc_ip_pool(vcpecommon)
211 config_sdnc_so.insert_customer_service_to_so(vcpecommon)
212 #config_sdnc_so.insert_customer_service_to_sdnc(vcpecommon)
213 vgw_vfmod_name_index= 0
214 vcpecommon.save_object(vgw_vfmod_name_index, vcpecommon.vgw_vfmod_name_index_file)
218 vcpecommon = VcpeCommon()
220 download_vcpe_service_templates(vcpecommon)
221 preloader = preload.Preload(vcpecommon)
222 template_aai_region_data = vcpecommon.find_file('aai_region_data', 'json', 'preload_templates')
223 preloader.preload_aai_data(template_aai_region_data)
226 def init_sdc(vcpecommon):
227 sdc = sdcutils.SdcUtils(vcpecommon)
228 # default SDC creates BRG - remove this in frankfurt
229 #sdc.create_allotted_resource_subcategory('BRG')
232 def download_vcpe_service_templates(vcpecommon):
233 sdc = sdcutils.SdcUtils(vcpecommon)
234 sdc.download_vcpe_service_template()
238 logger = logging.getLogger(__name__)
240 vcpecommon = VcpeCommon()
242 svc_instance_uuid = vcpecommon.load_object(vcpecommon.svc_instance_uuid_file)
244 config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brgemu'])
248 vcpecommon = VcpeCommon()
249 print("oom-k8s-04 public ip: %s" % (vcpecommon.get_vm_public_ip_by_nova('oom-k8s-04')))
252 if __name__ == '__main__':
253 print('----------------------------------------------------------------------------------------------------')
254 print(' vcpe.py: Brief info about this program')
255 # print(' vcpe.py sdc: Onboard VNFs, design and distribute vCPE services (under development)')
256 print(' vcpe.py init: Add customer service data to SDNC and SO DBs.')
257 print(' vcpe.py infra: Deploy infrastructure, including DHCP, AAA, DNS, Web Server, vBNG, vGMUX, vBRG.')
258 print(' vcpe.py brg: Deploy brg only (for testing after infra succeeds).')
259 print(' vcpe.py customer: Deploy customer service, including vGW and VxLANs')
260 print(' vcpe.py loop: Test closed loop control (packet loss set to 22)')
261 print(' vcpe.py noloss: Set vGMUX packet loss to 0')
262 print('----------------------------------------------------------------------------------------------------')
264 if len(sys.argv) != 2:
267 if sys.argv[1] == 'sdc':
268 print('Under development')
269 elif sys.argv[1] == 'init':
272 elif sys.argv[1] == 'infra':
273 #if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
275 elif sys.argv[1] == 'customer':
276 if 'y' == raw_input('Ready to deploy customer service? y/n: ').lower():
277 deploy_custom_service()
278 elif sys.argv[1] == 'loop':
280 elif sys.argv[1] == 'noloss':
282 elif sys.argv[1] == 'brg':
284 elif sys.argv[1] == 'sniro':
286 elif sys.argv[1] == 'test':