ab6a7781398422daab7090b0a530151576f82ebf
[policy/drools-applications.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SdncActorServiceProvider
4  * ================================================================================
5  * Copyright (C) 2018-2019 Huawei Technologies Co., Ltd. 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.policy.controlloop.actor.sdnc;
22
23 import com.google.common.collect.ImmutableList;
24 import com.google.common.collect.ImmutableMap;
25
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.UUID;
29
30 import org.onap.policy.aai.AaiGetVnfResponse;
31 import org.onap.policy.controlloop.ControlLoopOperation;
32 import org.onap.policy.controlloop.VirtualControlLoopEvent;
33 import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
34 import org.onap.policy.controlloop.policy.Policy;
35 import org.onap.policy.sdnc.SdncHealNetworkInfo;
36 import org.onap.policy.sdnc.SdncHealRequest;
37 import org.onap.policy.sdnc.SdncHealRequestHeaderInfo;
38 import org.onap.policy.sdnc.SdncHealRequestInfo;
39 import org.onap.policy.sdnc.SdncHealServiceInfo;
40 import org.onap.policy.sdnc.SdncHealVfModuleParameter;
41 import org.onap.policy.sdnc.SdncHealVfModuleParametersInfo;
42 import org.onap.policy.sdnc.SdncHealVfModuleRequestInput;
43 import org.onap.policy.sdnc.SdncHealVnfInfo;
44
45 import org.onap.policy.sdnc.SdncRequest;
46
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50
51 public class SdncActorServiceProvider implements Actor {
52     private static final Logger logger = LoggerFactory.getLogger(SdncActorServiceProvider.class);
53
54     // Strings for Sdnc Actor
55     private static final String SDNC_ACTOR = "SDNC";
56
57     // Strings for targets
58     private static final String TARGET_VM = "VM";
59
60     // Strings for recipes
61     private static final String RECIPE_REROUTE = "Reroute";
62
63     // Strings for recipes
64     private static final String RECIPE_BW_ON_DEMAND = "BandwidthOnDemand";
65
66     private static final ImmutableList<String> recipes = ImmutableList.of(RECIPE_REROUTE);
67     private static final ImmutableMap<String, List<String>> targets =
68             new ImmutableMap.Builder<String, List<String>>().put(RECIPE_REROUTE, ImmutableList.of(TARGET_VM)).build();
69
70     @Override
71     public String actor() {
72         return SDNC_ACTOR;
73     }
74
75     @Override
76     public List<String> recipes() {
77         return ImmutableList.copyOf(recipes);
78     }
79
80     @Override
81     public List<String> recipeTargets(String recipe) {
82         return ImmutableList.copyOf(targets.getOrDefault(recipe, Collections.emptyList()));
83     }
84
85     @Override
86     public List<String> recipePayloads(String recipe) {
87         return Collections.emptyList();
88     }
89
90     /**
91      * Construct a request.
92      *
93      * @param onset the onset event
94      * @param operation the control loop operation
95      * @param policy the policy
96      * @return the constructed request
97      */
98     public SdncRequest constructRequest(VirtualControlLoopEvent onset, ControlLoopOperation operation,
99             Policy policy) {
100         switch (policy.getRecipe()) {
101             case RECIPE_REROUTE:
102                 return constructReOptimizeRequest(onset);
103             case RECIPE_BW_ON_DEMAND:
104                 logger.info("Construct request for receipe {}" , RECIPE_BW_ON_DEMAND);
105                 return constructBwOnDemandRequest(onset);
106             default:
107                 logger.info("Unsupported recipe {} " + policy.getRecipe());
108                 return null;
109         }
110     }
111
112     private SdncRequest constructBwOnDemandRequest(VirtualControlLoopEvent onset) {
113         // Construct an Sdnc request
114         String serviceInstance = onset.getAai().get("service-instance.service-instance-id");
115         if (serviceInstance == null || serviceInstance.isEmpty()) {
116             // This indicates that AAI Enrichment needs to be done by event producer.
117             return null;
118         }
119         SdncHealVfModuleParameter bandwidth = new SdncHealVfModuleParameter();
120         bandwidth.setName("bandwidth");
121         bandwidth.setValue(onset.getAai().get("bandwidth"));
122
123         SdncHealVfModuleParameter timeStamp = new SdncHealVfModuleParameter();
124         timeStamp.setName("bandwidth-change-time");
125         timeStamp.setValue(onset.getAai().get("bandwidth-change-time"));
126
127         SdncHealVfModuleParametersInfo vfParametersInfo = new SdncHealVfModuleParametersInfo();
128         vfParametersInfo.addParameters(bandwidth);
129         vfParametersInfo.addParameters(timeStamp);
130
131         SdncHealVfModuleRequestInput vfRequestInfo = new SdncHealVfModuleRequestInput();
132         vfRequestInfo.setVfModuleParametersInfo(vfParametersInfo);
133
134         SdncHealServiceInfo serviceInfo = new SdncHealServiceInfo();
135         serviceInfo.setServiceInstanceId(serviceInstance);
136
137         SdncHealRequestInfo requestInfo = new SdncHealRequestInfo();
138         requestInfo.setRequestAction("SdwanBWPolicyChange");
139
140         SdncHealRequestHeaderInfo headerInfo = new SdncHealRequestHeaderInfo();
141         headerInfo.setSvcAction("update");
142         headerInfo.setSvcRequestId(UUID.randomUUID().toString());
143
144         SdncRequest request = new SdncRequest();
145         request.setNsInstanceId(serviceInstance);
146         request.setRequestId(onset.getRequestId());
147         request.setUrl("/GENERIC-RESOURCE-API:vnf-topology-operation");
148
149         SdncHealVnfInfo vnfInfo = new SdncHealVnfInfo();
150         vnfInfo.setVnfId(onset.getAai().get("vnfId"));
151
152         SdncHealRequest healRequest = new SdncHealRequest();
153         healRequest.setVnfInfo(vnfInfo);
154         healRequest.setRequestHeaderInfo(headerInfo);
155         healRequest.setVfModuleRequestInput(vfRequestInfo);
156         healRequest.setRequestInfo(requestInfo);
157         healRequest.setServiceInfo(serviceInfo);
158         request.setHealRequest(healRequest);
159         return request;
160     }
161
162     private SdncRequest constructReOptimizeRequest(VirtualControlLoopEvent onset) {
163         // Construct an Sdnc request
164         String serviceInstance = onset.getAai().get("service-instance.service-instance-id");
165         if (serviceInstance == null || serviceInstance.isEmpty()) {
166             // This indicates that AAI Enrichment needs to be done by event producer.
167             return null;
168         }
169         SdncHealServiceInfo serviceInfo = new SdncHealServiceInfo();
170         serviceInfo.setServiceInstanceId(serviceInstance);
171
172         String networkId = onset.getAai().get("network-information.network-id");
173         if (networkId == null || networkId.isEmpty()) {
174             // This indicates that AAI Enrichment needs to be done by event producer.
175             return null;
176         }
177         SdncHealNetworkInfo networkInfo = new SdncHealNetworkInfo();
178         networkInfo.setNetworkId(networkId);
179
180         SdncHealRequestInfo requestInfo = new SdncHealRequestInfo();
181         requestInfo.setRequestAction("ReoptimizeSOTNInstance");
182
183         SdncHealRequestHeaderInfo headerInfo = new SdncHealRequestHeaderInfo();
184         headerInfo.setSvcAction("reoptimize");
185         headerInfo.setSvcRequestId(UUID.randomUUID().toString());
186
187         SdncRequest request = new SdncRequest();
188         request.setNsInstanceId(serviceInstance);
189         request.setRequestId(onset.getRequestId());
190         request.setUrl("/GENERIC-RESOURCE-API:network-topology-operation");
191
192         SdncHealRequest healRequest = new SdncHealRequest();
193         healRequest.setRequestHeaderInfo(headerInfo);
194         healRequest.setNetworkInfo(networkInfo);
195         healRequest.setRequestInfo(requestInfo);
196         healRequest.setServiceInfo(serviceInfo);
197         request.setHealRequest(healRequest);
198         return request;
199     }
200 }