2 Copyright 2020 TATA ELXSI
4 Licensed under the Apache License, Version 2.0 (the 'License');
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
21 import { Component, Injector, OnInit } from '@angular/core';
22 import { ActivatedRoute, Router } from '@angular/router';
23 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
24 import { ERRORDATA } from 'CommonModel';
25 import { DataService } from 'DataService';
26 import { environment } from 'environment';
27 import * as HttpStatus from 'http-status-codes';
28 import { RestService } from 'RestService';
29 import { isNullOrUndefined } from 'util';
30 import { CONFIG, VimAccountDetails, VIMData } from 'VimAccountModel';
34 * @Component InfoVimComponent.html as template url
37 selector: 'app-info-vim',
38 templateUrl: './InfoVimComponent.html',
39 styleUrls: ['./InfoVimComponent.scss']
41 /** Exporting a class @exports InfoVimComponent */
42 export class InfoVimComponent implements OnInit {
43 /** To inject services @public */
44 public injector: Injector;
46 /** vimAccountDetails to populate in InfoVIM Page @private */
47 public vimAccountDetails: VimAccountDetails;
49 /** Information Top Left @public */
50 public configParams: {}[] = [];
52 /** Showing more details of collapase */
53 public isCollapsed: boolean = true;
55 /** Contains vim details @public */
56 public vimDetails: {}[];
58 /** Check the Projects loading results @public */
59 public isLoadingResults: boolean = false;
61 /** Give the message for the loading @public */
62 public message: string = 'PLEASEWAIT';
64 /** variables contains paramsID @private */
65 private paramsID: string;
67 /** Instance of the rest service @private */
68 private restService: RestService;
70 /** Holds the instance of router class @private */
71 private router: Router;
73 /** dataService to pass the data from one component to another @private */
74 private dataService: DataService;
76 /** vimId to populate in InfoVIM Page @private */
77 private vimId: string;
79 /** Holds teh instance of AuthService class of type AuthService @private */
80 private activatedRoute: ActivatedRoute;
82 /** Utilizes modal service for any modal operations @private */
83 private modalService: NgbModal;
85 constructor(injector: Injector) {
86 this.injector = injector;
87 this.restService = this.injector.get(RestService);
88 this.dataService = this.injector.get(DataService);
89 this.activatedRoute = this.injector.get(ActivatedRoute);
90 this.modalService = this.injector.get(NgbModal);
91 this.router = this.injector.get(Router);
95 * Lifecyle Hooks the trigger before component is instantiate
97 public ngOnInit(): void {
98 // tslint:disable-next-line:no-backbone-get-set-outside-model
99 this.paramsID = this.activatedRoute.snapshot.paramMap.get('id');
100 this.dataService.currentMessage.subscribe((data: VIMData) => {
101 this.vimId = data.identifier;
106 /** Routing to VIM Account Details Page @public */
107 public onVimAccountBack(): void {
108 this.router.navigate(['vim/details']).catch(() => {
113 /** Generate Data function @public */
114 public generateData(): void {
115 this.isLoadingResults = true;
116 this.restService.getResource(environment.VIMACCOUNTS_URL + '/' + this.paramsID)
117 .subscribe((vimAccountsData: VimAccountDetails) => {
118 this.showDetails(vimAccountsData);
119 if (vimAccountsData.config !== undefined) {
120 if (vimAccountsData.vim_type === 'openstack') {
121 this.showOpenstackConfig(vimAccountsData.config);
122 } else if (vimAccountsData.vim_type === 'aws') {
123 this.awsConfig(vimAccountsData.config);
124 } else if (vimAccountsData.vim_type === 'openvim' || vimAccountsData.vim_type === 'opennebula') {
125 this.openVIMOpenNebulaConfig(vimAccountsData.config);
126 } else if (vimAccountsData.vim_type === 'vmware') {
127 this.vmwareConfig(vimAccountsData.config);
128 } else if (vimAccountsData.vim_type === 'azure') {
129 this.azureConfig(vimAccountsData.config);
132 this.isLoadingResults = false;
133 }, (error: ERRORDATA) => {
134 this.isLoadingResults = false;
135 if (error.error.status === HttpStatus.NOT_FOUND || error.error.status === HttpStatus.UNAUTHORIZED) {
136 this.router.navigateByUrl('404', { skipLocationChange: true }).catch();
138 this.restService.handleError(error, 'get');
143 /** show general vim detailed information @public */
144 public showDetails(vimAccountsData: VimAccountDetails): void {
147 title: 'PAGE.VIMDETAILS.NAME',
148 value: vimAccountsData.name
151 title: 'PAGE.VIMDETAILS.VIMUSERNAME',
152 value: vimAccountsData.vim_user
155 title: 'PAGE.VIMDETAILS.VIMURL',
156 value: vimAccountsData.vim_url
159 title: 'PAGE.VIMDETAILS.VIMTYPE',
160 value: vimAccountsData.vim_type
163 title: 'PAGE.VIMDETAILS.TENANTNAME',
164 value: vimAccountsData.vim_tenant_name
167 title: 'PAGE.VIMDETAILS.DESCRIPTION',
168 value: vimAccountsData.description
171 title: 'PAGE.VIMDETAILS.SCHEMATYPE',
172 value: vimAccountsData.schema_type
175 title: 'PAGE.VIMDETAILS.SCHEMAVERSION',
176 value: vimAccountsData.schema_version
181 /** Openstack Config @public */
182 public showOpenstackConfig(config: CONFIG): void {
183 if (!isNullOrUndefined(config)) {
184 Object.keys(config).forEach((key: string) => {
185 if (Array.isArray(config[key])) {
186 config[key] = JSON.stringify(config[key]);
190 let location: string = config.location;
191 if (!isNullOrUndefined(location)) {
192 const locationArr: string[] = config.location.split(',');
193 if (Array.isArray(locationArr)) {
194 location = locationArr[0];
198 this.configParams = [
200 title: 'PAGE.VIMDETAILS.SDNCONTROLLER',
201 value: config.sdn_controller
204 title: 'PAGE.VIMDETAILS.SDNPORTMAPPING',
205 value: config.sdn_port_mapping
208 title: 'PAGE.VIMDETAILS.VIMNETWORKNAME',
209 value: config.vim_network_name
212 title: 'PAGE.VIMDETAILS.SECURITYGROUPS',
213 value: config.security_groups
216 title: 'PAGE.VIMDETAILS.AVAILABILITYZONE',
217 value: config.availabilityZone
220 title: 'PAGE.VIMDETAILS.REGIONALNAME',
221 value: config.region_name
224 title: 'PAGE.VIMDETAILS.INSECURE',
225 value: config.insecure
228 title: 'PAGE.VIMDETAILS.USEEXISTINGFLAVOURS',
229 value: config.use_existing_flavors
232 title: 'PAGE.VIMDETAILS.USEINTERNALENDPOINT',
233 value: config.use_internal_endpoint
236 title: 'PAGE.VIMDETAILS.ADDITIONALCONFIG',
237 value: config.additional_conf
240 title: 'PAGE.VIMDETAILS.APIVERSION',
241 value: config.APIversion
244 title: 'PAGE.VIMDETAILS.PROJECTDOMAINID',
245 value: config.project_domain_id
248 title: 'PAGE.VIMDETAILS.PROJECTDOMAINNAME',
249 value: config.project_domain_name
252 title: 'PAGE.VIMDETAILS.USERDOMAINID',
253 value: config.user_domain_id
256 title: 'PAGE.VIMDETAILS.USERDOMAINUSER',
257 value: config.user_domain_name
260 title: 'PAGE.VIMDETAILS.KEYPAIR',
261 value: config.keypair
264 title: 'PAGE.VIMDETAILS.DATAPLANEPHYSICALNET',
265 value: config.dataplane_physical_net
268 title: 'PAGE.VIMDETAILS.USEFLOATINGIP',
269 value: config.use_floating_ip
272 title: 'PAGE.VIMDETAILS.MICROVERSION',
273 value: config.microversion
276 title: 'PAGE.VIMDETAILS.VIMLOCATION',
282 /** AWS Config @public */
283 public awsConfig(config: CONFIG): void {
284 this.configParams = [
286 title: 'PAGE.VIMDETAILS.SDNCONTROLLER',
287 value: config.sdn_controller
290 title: 'PAGE.VIMDETAILS.VPCCIDRBLOCK',
291 value: config.vpc_cidr_block
294 title: 'PAGE.VIMDETAILS.SDNPORTMAPPING',
295 value: config.sdn_port_mapping
298 title: 'PAGE.VIMDETAILS.SECURITYGROUPS',
299 value: config.security_groups
302 title: 'PAGE.VIMDETAILS.VIMNETWORKNAME',
303 value: config.vim_network_name
306 title: 'PAGE.VIMDETAILS.KEYPAIR',
307 value: config.keypair
310 title: 'PAGE.VIMDETAILS.REGIONALNAME',
311 value: config.region_name
314 title: 'PAGE.VIMDETAILS.FLAVORIINFO',
315 value: config.flavor_info
318 title: 'PAGE.VIMDETAILS.ADDITIONALCONFIG',
319 value: config.additional_conf
324 /** Open vim and open nebula config @public */
325 public openVIMOpenNebulaConfig(config: CONFIG): void {
326 this.configParams = [
328 title: 'PAGE.VIMDETAILS.SDNCONTROLLER',
329 value: config.sdn_controller
332 title: 'PAGE.VIMDETAILS.SDNPORTMAPPING',
333 value: config.sdn_port_mapping
336 title: 'PAGE.VIMDETAILS.VIMNETWORKNAME',
337 value: config.vim_network_name
340 title: 'PAGE.VIMDETAILS.ADDITIONALCONFIG',
341 value: config.additional_conf
346 /** vmware config @public */
347 public vmwareConfig(config: CONFIG): void {
348 this.configParams = [
350 title: 'PAGE.VIMDETAILS.SDNCONTROLLER',
351 value: config.sdn_controller
354 title: 'PAGE.VIMDETAILS.ORGNAME',
355 value: config.orgname
358 title: 'PAGE.VIMDETAILS.SDNPORTMAPPING',
359 value: config.sdn_port_mapping
362 title: 'PAGE.VIMDETAILS.VCENTERIP',
363 value: config.vcenter_ip
366 title: 'PAGE.VIMDETAILS.VIMNETWORKNAME',
367 value: config.vim_network_name
370 title: 'PAGE.VIMDETAILS.VCENTERPORT',
371 value: config.vcenter_port
374 title: 'PAGE.VIMDETAILS.ADMINUSERNAME',
375 value: config.admin_username
378 title: 'PAGE.VIMDETAILS.VCENTERUSER',
379 value: config.vcenter_user
382 title: 'PAGE.VIMDETAILS.ADMINPASSWORD',
383 value: config.admin_password
386 title: 'PAGE.VIMDETAILS.VCENTERPASSWORD',
387 value: config.vcenter_password
390 title: 'PAGE.VIMDETAILS.NSXMANAGER',
391 value: config.nsx_manager
394 title: 'PAGE.VIMDETAILS.VROPSSITE',
395 value: config.vrops_site
398 title: 'PAGE.VIMDETAILS.NSXUSER',
399 value: config.nsx_user
402 title: 'PAGE.VIMDETAILS.VROPSUSER',
403 value: config.vrops_user
406 title: 'PAGE.VIMDETAILS.NSXPASSWORD',
407 value: config.nsx_password
410 title: 'PAGE.VIMDETAILS.VROPSPASSWORD',
411 value: config.vrops_password
414 title: 'PAGE.VIMDETAILS.ADDITIONALCONFIG',
415 value: config.additional_conf
420 /** Azure Config @public */
421 public azureConfig(config: CONFIG): void {
422 this.configParams = [
424 title: 'PAGE.VIMDETAILS.SUBSCRIPTIONID',
425 value: config.subscription_id
428 title: 'PAGE.VIMDETAILS.REGIONALNAME',
429 value: config.region_name
432 title: 'PAGE.VIMDETAILS.RESOURCEGROUP',
433 value: config.resource_group
436 title: 'PAGE.VIMDETAILS.VNETNAME',
437 value: config.vnet_name
440 title: 'PAGE.VIMDETAILS.FLAVORSPATTERN',
441 value: config.flavors_pattern