Automate pod cluster node ip retrieval
[integration.git] / test / vcpe / vcpe.py
1 #! /usr/bin/python
2 import sys
3 import logging
4 from vcpecommon import *
5 import soutils
6 from datetime import datetime
7 import preload
8 import vcpe_custom_service
9 import csar_parser
10 import config_sdnc_so
11 import json
12
13
14 def 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:
31         logger.info('modelCustomizationName = %s', model['modelCustomizationName'])
32         if 'tunnel' in model['modelCustomizationName'].lower():
33             logger.info('tunnel is in %s', model['modelCustomizationName'])
34             tunnelxconn_ar_name = model['modelCustomizationName']
35         elif 'brg' in model['modelCustomizationName'].lower():
36             logger.info('brg is in %s', model['modelCustomizationName'])
37             brg_ar_name = model['modelCustomizationName']
38         #elif 'vgw' in model['modelCustomizationName']:
39         else:
40             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
50 def 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
57
58 def 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()
64 #    name_suffix = preload_dict['${brg_bng_net}'].split('_')[-1]
65     name_suffix = datetime.now().strftime('%Y%m%d%H%M')
66
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]:
77             sys.exit()
78
79     # Setting up SNIRO
80     config_sniro(vcpecommon, svc_instance_uuid['gmux'], svc_instance_uuid['brg'])
81
82
83 def deploy_infra():
84     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
132 def deploy_custom_service():
133     nodes = ['brg', 'mux']
134     vcpecommon = VcpeCommon(nodes)
135     custom_service = vcpe_custom_service.CustomService(vcpecommon)
136
137     # clean up
138     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)
143
144     #custom_service.clean_up_sdnc()
145
146     # create new service
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)
152
153
154 def 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
166     logger.info('Starting vGMUX data reporting to DCAE')
167     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
177 def init_so_sdnc():
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)
184
185
186 def 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
195 def test(): 
196     vcpecommon = VcpeCommon()
197     print("sdnc_oam_ip: %s" % (vcpecommon.sdnc_oam_ip))
198
199 if __name__ == '__main__':
200     logging.basicConfig(level=logging.DEBUG, format='%(message)s')
201
202     print('----------------------------------------------------------------------------------------------------')
203     print(' vcpe.py:            Brief info about this program')
204 #    print(' vcpe.py sdc:        Onboard VNFs, design and distribute vCPE services (under development)')
205     print(' vcpe.py init:       Add customer service data to SDNC and SO DBs.')
206     print(' vcpe.py infra:      Deploy infrastructure, including DHCP, AAA, DNS, Web Server, vBNG, vGMUX, vBRG.')
207     print(' vcpe.py brg:        Deploy brg only (for testing after infra succeeds).')
208     print(' vcpe.py customer:   Deploy customer service, including vGW and VxLANs')
209     print(' vcpe.py loop:       Test closed loop control')
210     print('----------------------------------------------------------------------------------------------------')
211
212     if len(sys.argv) != 2:
213         sys.exit()
214
215     if sys.argv[1] == 'sdc':
216         print('Under development')
217     elif sys.argv[1] == 'init':
218         if 'y' == raw_input('Ready to add customer service data to SDNC and SO DBs? This is needed only once.'
219                             'y/n: ').lower():
220             init_so_sdnc()
221     elif sys.argv[1] == 'infra':
222         if 'y' == raw_input('Ready to deploy infrastructure? y/n: ').lower():
223             deploy_infra()
224     elif sys.argv[1] == 'customer':
225         if 'y' == raw_input('Ready to deploy customer service? y/n: ').lower():
226             deploy_custom_service()
227     elif sys.argv[1] == 'loop':
228         closed_loop(22)
229     elif sys.argv[1] == 'noloss':
230         closed_loop(0)
231     elif sys.argv[1] == 'brg':
232         deploy_brg_only()
233     elif sys.argv[1] == 'sniro':
234         tmp_sniro()
235     elif sys.argv[1] == 'test':
236         test()
237