c81dac7c6f50de5411f587a57236a94090bdabad
[so.git] / adapters / mso-openstack-adapters / src / main / java / org / onap / so / adapters / audit / AuditVServer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.adapters.audit;
22
23 import java.util.Optional;
24 import java.util.Set;
25
26 import org.onap.aai.domain.yang.LInterface;
27 import org.onap.aai.domain.yang.LInterfaces;
28 import org.onap.aai.domain.yang.Vserver;
29 import org.onap.so.client.aai.AAIObjectPlurals;
30 import org.onap.so.client.aai.AAIObjectType;
31 import org.onap.so.client.aai.entities.AAIResultWrapper;
32 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
33 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36 import org.springframework.stereotype.Component;
37
38 @Component
39 public class AuditVServer extends AbstractAudit {
40         private static final Logger logger = LoggerFactory.getLogger(AuditVServer.class);
41
42         public boolean auditAllVserversDoExist(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, String cloudRegion) {
43                 if (vServersToAudit == null || vServersToAudit.isEmpty()){
44                         return false;
45                 }
46                 return vServersToAudit.stream()
47                                 .filter(vServer -> !doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion,true)).findFirst()
48                                 .map(v -> false).orElse(true);
49         }
50         
51         public boolean auditAllVserversDoNotExist(Set<Vserver> vServersToAudit, String tenantId, String cloudOwner, String cloudRegion) {
52                 if (vServersToAudit == null || vServersToAudit.isEmpty()){
53                         return true;
54                 }
55                 return vServersToAudit.stream()
56                                 .filter(vServer -> doesVServerExistInAAI(vServer, tenantId, cloudOwner, cloudRegion,false)).findFirst()
57                                 .map(v -> false).orElse(true);
58         }
59
60         private boolean doesVServerExistInAAI(Vserver vServer, String tenantId, String cloudOwner, String cloudRegion, boolean checkLinterfaces) {
61                 AAIResourceUri vserverURI = AAIUriFactory.createResourceUri(AAIObjectType.VSERVER, cloudOwner, cloudRegion,
62                                 tenantId, vServer.getVserverId());
63                 boolean vServerExists = getAaiClient().exists(vserverURI);
64                 boolean doesExist = getAaiClient().exists(vserverURI);
65                 logger.info("v-server {} exists: {}", vServer.getVserverId(), doesExist);
66                 boolean allNeutronNetworksExist = true;
67                 if (vServerExists && vServer.getLInterfaces() != null && checkLinterfaces) {
68                         allNeutronNetworksExist = vServer.getLInterfaces()
69                                         .getLInterface().stream().filter(lInterface -> !doesLinterfaceExistinAAI(lInterface,
70                                                         vServer.getVserverId(), tenantId, cloudOwner, cloudRegion))
71                                         .findFirst().map(v -> false).orElse(true);
72                 }
73                 return vServerExists && allNeutronNetworksExist;
74         }
75
76         private boolean doesLinterfaceExistinAAI(LInterface lInterface, String vServerId, String tenantId,
77                         String cloudOwner, String cloudRegion) {
78                 boolean doesLInterfaceExist = false;
79                 boolean doSubInterfacesExist = true;
80                 AAIResourceUri linterfaceURI = AAIUriFactory
81                                 .createResourceUri(AAIObjectPlurals.L_INTERFACE, cloudOwner, cloudRegion, tenantId, vServerId)
82                                 .queryParam("interface-id", lInterface.getInterfaceId());
83                 Optional<LInterfaces> queriedLInterface = getAaiClient().get(LInterfaces.class, linterfaceURI);
84                 if (queriedLInterface.isPresent()) {
85                         if (queriedLInterface.get().getLInterface().size() > 1) {
86                                 logger.error("Non-Unique LInterface Found stopping audit, L-Interface Id: " +lInterface.getInterfaceId());
87                                 doesLInterfaceExist = false;
88                         } else {
89                                 doesLInterfaceExist = true;
90                                 lInterface.setInterfaceName(queriedLInterface.get().getLInterface().get(0).getInterfaceName());
91                         }
92                 }
93                 logger.info("l-interface id:{} name: {} exists: {}", lInterface.getInterfaceId(), lInterface.getInterfaceName(),
94                                 doesLInterfaceExist);
95
96                 if (doesLInterfaceExist && lInterface.getLInterfaces() != null) {
97                         doSubInterfacesExist = lInterface.getLInterfaces().getLInterface()
98                                         .stream().filter(subInterface -> !doesSubInterfaceExistinAAI(subInterface,
99                                                         lInterface.getInterfaceName(), vServerId, tenantId, cloudOwner, cloudRegion))
100                                         .findFirst().map(v -> false).orElse(true);
101                 } else
102                         logger.debug("l-interface {} does not contain any sub-iterfaces", lInterface.getInterfaceId());
103
104                 return doesLInterfaceExist && doSubInterfacesExist;
105         }
106
107         private boolean doesSubInterfaceExistinAAI(LInterface subInterface, String linterfaceName, String vServerId,
108                         String tenantId, String cloudOwner, String cloudRegion) {
109                 logger.info("checking if sub-l-interface {} , linterfaceName: {} vserverId: {}  exists",
110                                 subInterface.getInterfaceId(), linterfaceName, vServerId);
111
112                 AAIResourceUri linterfaceURI = AAIUriFactory.createResourceUri(AAIObjectPlurals.SUB_L_INTERFACE, cloudOwner,
113                                 cloudRegion, tenantId, vServerId, linterfaceName)
114                                 .queryParam("interface-id", subInterface.getInterfaceId());
115
116                 boolean doesExist = getAaiClient().exists(linterfaceURI);
117                 logger.info("sub-l-interface {} exists: {}", subInterface.getInterfaceId(), doesExist);
118                 return doesExist;
119         }
120 }