2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Copyright (C) 2017 Amdocs
8 * =============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 * ============LICENSE_END=========================================================
25 package org.onap.appc.aai.client.aai;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
31 import org.apache.commons.lang3.StringUtils;
32 import org.apache.commons.lang3.math.NumberUtils;
33 import org.onap.appc.aai.client.AppcAaiClientConstant;
34 import org.onap.ccsdk.sli.adaptors.aai.AAIClient;
35 import org.onap.ccsdk.sli.adaptors.aai.AAIService;
36 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
37 import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
38 import org.osgi.framework.BundleContext;
39 import org.osgi.framework.FrameworkUtil;
40 import org.osgi.framework.ServiceReference;
41 import com.att.eelf.configuration.EELFLogger;
42 import com.att.eelf.configuration.EELFManager;
44 public class AaiService {
46 private static final EELFLogger log = EELFManager.getInstance().getLogger(AaiService.class);
47 private AAIClient aaiClient;
49 public AaiService(AAIClient aaiClient) {
50 this.aaiClient = aaiClient;
54 BundleContext bctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
55 ServiceReference sref = bctx.getServiceReference(AAIService.class);
56 aaiClient = (AAIClient) bctx.getService(sref);
59 public void getGenericVnfInfo(Map<String, String> params, SvcLogicContext ctx) throws Exception {
61 String vnfId = params.get("vnfId");
62 if (StringUtils.isBlank(vnfId)) {
63 throw new Exception("VnfId is missing");
65 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
66 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
67 String resourceKey = "generic-vnf.vnf-id = '" + vnfId + "'";
68 String resourceType = "generic-vnf";
69 String queryPrefix = "vnfInfo";
70 SvcLogicContext vnfCtx = readResource(resourceKey, queryPrefix, resourceType);
72 ctx.setAttribute(prefix + "vnf.vnf-name", vnfCtx.getAttribute("vnfInfo.vnf-name"));
73 ctx.setAttribute(prefix + "vnf.vnf-type", vnfCtx.getAttribute("vnfInfo.vnf-type"));
74 ctx.setAttribute(prefix + "vnf.prov-status", vnfCtx.getAttribute("vnfInfo.prov-status"));
75 ctx.setAttribute(prefix + "vnf.orchestration-status", vnfCtx.getAttribute("vnfInfo.orchestration-status"));
76 ctx.setAttribute(prefix + "vnf.ipv4-oam-address", vnfCtx.getAttribute("vnfInfo.ipv4-oam-address"));
79 String relLen = vnfCtx.getAttribute("vnfInfo.relationship-list.relationship_length");
80 int relationshipLength = 0;
82 relationshipLength = Integer.parseInt(relLen);
84 log.info("RELLEN " + relationshipLength);
85 for (int i = 0; i < relationshipLength; i++) {
86 String vserverId = getRelationshipValue(i, vnfCtx, "vserver", "vserver.vserver-id", "vnfInfo");
87 String tenantId = getRelationshipValue(i, vnfCtx, "vserver", "tenant.tenant-id", "vnfInfo");
88 String cloudOwner = getRelationshipValue(i, vnfCtx, "vserver", "cloud-region.cloud-owner", "vnfInfo");
89 String cloudRegionId =
90 getRelationshipValue(i, vnfCtx, "vserver", "cloud-region.cloud-region-id", "vnfInfo");
91 if (vserverId != null) {
92 log.info("VSERVER KEYS " + vserverId + " " + tenantId + " " + cloudOwner + " " + cloudRegionId);
93 String vnfPrefix = prefix + "vm[" + vmCount + "].";
94 ctx.setAttribute(vnfPrefix + "vserver-id", vserverId);
95 ctx.setAttribute(vnfPrefix + "tenant-id", tenantId);
96 ctx.setAttribute(vnfPrefix + "cloud-owner", cloudOwner);
97 ctx.setAttribute(vnfPrefix + "cloud-region-id", cloudRegionId);
101 ctx.setAttribute(prefix + "vm-count", String.valueOf(vmCount));
102 log.info("VMCOUNT FROM VNF INFO " + ctx.getAttribute(prefix + "vm-count"));
105 public void getVMInfo(Map<String, String> params, SvcLogicContext ctx) throws Exception {
106 log.info("Received getVmInfo call with params : " + params);
107 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
108 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
110 ctx.setAttribute(prefix + "vm.vnfc-count", String.valueOf(vnfcCount)); // Incase no vnfcs are found
111 String vserverId = params.get("vserverId");
112 if (StringUtils.isBlank(vserverId)) {
113 throw new Exception("VServerId is missing");
115 String tenantId = params.get("tenantId");
116 if (StringUtils.isBlank(tenantId)) {
117 throw new Exception("TenantId is missing");
119 String cloudOwner = params.get("cloudOwner");
120 if (StringUtils.isBlank(cloudOwner)) {
121 throw new Exception("Cloud Owner is missing");
123 String cloudRegionId = params.get("cloudRegionId");
124 if (StringUtils.isBlank(cloudRegionId)) {
125 throw new Exception("Cloud region Id is missing");
127 String resourceKey = "vserver.vserver-id = '" + vserverId + "' AND tenant.tenant-id = '" + tenantId
128 + "' AND cloud-region.cloud-owner = '" + cloudOwner + "' AND cloud-region.cloud-region-id = '"
129 + cloudRegionId + "'";
130 String queryPrefix = "vmInfo";
131 String resourceType = "vserver";
132 SvcLogicContext vmCtx = readResource(resourceKey, queryPrefix, resourceType);
134 ctx.setAttribute(prefix + "vm.prov-status", vmCtx.getAttribute("vmInfo.prov-status"));
135 ctx.setAttribute(prefix + "vm.vserver-name", vmCtx.getAttribute("vmInfo.vserver-name"));
137 String relLen = vmCtx.getAttribute("vmInfo.relationship-list.relationship_length");
138 int relationshipLength = 0;
139 if (relLen != null) {
140 relationshipLength = Integer.parseInt(relLen);
142 log.info("RELLEN" + relationshipLength);
143 for (int i = 0; i < relationshipLength; i++) {
144 String vfModuleId = getRelationshipValue(i, vmCtx, "vf-module", "vf-module.vf-module-id", "vmInfo");
145 if (vfModuleId != null)
146 ctx.setAttribute(prefix + "vm.vf-module-id", vfModuleId);
148 String vnfcName = getRelationshipValue(i, vmCtx, "vnfc", "vnfc.vnfc-name", "vmInfo");
149 if (vnfcName != null) {
150 ctx.setAttribute(prefix + "vm.vnfc[" + vnfcCount + "].vnfc-name", vnfcName);
154 } // relationshipLength
155 ctx.setAttribute(prefix + "vm.vnfc-count", String.valueOf(vnfcCount));
156 log.info("VSERVERNAME " + ctx.getAttribute(prefix + "vm.vserver-name") + " HAS NUM VNFCS = "
157 + ctx.getAttribute(prefix + "vm.vnfc-count"));
160 private String getRelationshipValue(int i, SvcLogicContext ctx, String relatedTo, String relationshipKey,
161 String prefix) throws Exception {
163 if (relatedTo.equals(ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].related-to"))) {
164 log.info("RELATEDTO " + relatedTo);
165 int relationshipDataLength = 0;
167 ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data_length");
168 if (relDataLen != null) {
169 relationshipDataLength = Integer.parseInt(relDataLen);
172 for (int j = 0; j < relationshipDataLength; j++) {
174 String key = ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data["
175 + j + "].relationship-key");
177 String value = ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data["
178 + j + "].relationship-value");
180 log.info("GENERIC KEY " + key);
181 log.info("GENERIC VALUE " + value);
183 if (relationshipKey.equals(key)) {
187 } // relationshipDataLength
193 public void getVnfcInfo(Map<String, String> params, SvcLogicContext ctx) throws Exception {
194 log.info("Received getVnfc call with params : " + params);
196 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
197 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
199 String vnfcName = params.get("vnfcName");
200 if (StringUtils.isBlank(vnfcName)) {
201 throw new Exception("Vnfc Name is missing");
204 String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'";
205 String queryPrefix = "vnfcInfo";
206 String resourceType = "vnfc";
207 SvcLogicContext vnfcCtx = readResource(resourceKey, queryPrefix, resourceType);
209 // Changes for US 315820 for 1710 vnfc-type renamed to nfc-function,vnfc-function-code renamed to
212 ctx.setAttribute(prefix + "vnfc.vnfc-type", vnfcCtx.getAttribute("vnfcInfo.nfc-function"));
213 ctx.setAttribute(prefix + "vnfc.vnfc-function-code", vnfcCtx.getAttribute("vnfcInfo.nfc-naming-code"));
214 ctx.setAttribute(prefix + "vnfc.group-notation", vnfcCtx.getAttribute("vnfcInfo.group-notation"));
215 ctx.setAttribute(prefix + "vnfc.ipaddress-v4-oam-vip", vnfcCtx.getAttribute("vnfcInfo.ipaddress-v4-oam-vip"));
219 public void insertVnfcs(Map<String, String> params, SvcLogicContext ctx, int vnfcRefLen, int vmCount, String vfModuleIdFromRequest)
221 log.info("Received insertVnfcs call with params : " + params);
223 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
225 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
227 log.debug("vnfcRefIndx" + vnfcRefIndx);
228 for (int i = 0; i < vmCount; i++) {
229 String aaiRefKey = prefix + "vm[" + i + "].";
231 //ConfigScaleOut - Do not process vms that are not associated with vfmodule id if vfmodule id is present
232 if (StringUtils.isNotBlank(vfModuleIdFromRequest)){
233 String vmVfModuleId = ctx.getAttribute(aaiRefKey+"vf-module-id");
234 log.info("insertVnfcs():::vfModule for vm is="+vmVfModuleId);
235 if (StringUtils.isBlank(vmVfModuleId) || !StringUtils.equalsIgnoreCase(vmVfModuleId,vfModuleIdFromRequest)) {
240 log.info("VNFCNAME IN INSERTVNFCS " + ctx.getAttribute(aaiRefKey + "vnfc-name"));
241 String vnfcNameAAI = ctx.getAttribute(aaiRefKey + "vnfc-name");
243 // Get Vnfc_reference data from the table
244 String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "].";
246 log.info("VNFCREFKEY " + vnfcRefKey);
247 log.info("AAIREFKEY " + aaiRefKey);
249 String groupNotationType = ctx.getAttribute(vnfcRefKey + "GROUP-NOTATION-TYPE");
250 String groupNotationValue = ctx.getAttribute(vnfcRefKey + "GROUP-NOTATION-VALUE");
251 String vnfcType = ctx.getAttribute(vnfcRefKey + "VNFC-TYPE");
252 String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE");
253 String populateIpAddressV4OamVip = ctx.getAttribute(vnfcRefKey + "IPADDRESS-V4-OAM-VIP");
255 // Get vnfc Data to be added
256 String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name");
257 String vnfcName = vserverName + vnfcFuncCode + "001";
258 String groupNotation = getGroupNotation(groupNotationType, groupNotationValue, vnfcName, vserverName,
259 prefix, ctx, vnfcType, vnfcFuncCode, vmCount);
261 String ipAddressV4OamVip = null;
262 if ("Y".equals(populateIpAddressV4OamVip)) {
263 ipAddressV4OamVip = ctx.getAttribute("vnf-host-ip-address"); // from input
265 Map<String, String> vnfcParams =
266 populateVnfcParams(ctx, aaiRefKey, ipAddressV4OamVip, groupNotation, vnfcType, vnfcFuncCode);
268 log.info("Vnfc name from AAI: " + vnfcNameAAI);
269 log.info("Vnfc name generated: " + vnfcName);
271 if (StringUtils.isNotBlank(vnfcNameAAI)) {
272 if (vnfcName.equalsIgnoreCase(vnfcNameAAI)) {
273 updateVnfcStatus(vnfcNameAAI, params, prefix);
279 addVnfc(vnfcName, vnfcParams, prefix);
281 // Add VNFC Info to context for current added VNFC
282 ctx.setAttribute(aaiRefKey + "vnfc-name", vnfcName);
283 ctx.setAttribute(aaiRefKey + "vnfc-type", vnfcType);
284 ctx.setAttribute(aaiRefKey + "vnfc-function-code", vnfcFuncCode);
285 ctx.setAttribute(aaiRefKey + "group-notation", groupNotation);
289 public List<String> getVnfcData(Map<String, String> params, SvcLogicContext ctx, int vnfcRefLen, int vmCount)
292 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
293 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
294 List<String> vnfcNames = new ArrayList<String>();
295 int vnfcRefIndx = -1;
296 for (int i = 0; i < vmCount; i++) {
297 String aaiRefKey = prefix + "vm[" + i + "].";
298 log.info("VNFCNAME IN INSERTVNFCS " + ctx.getAttribute(aaiRefKey + "vnfc-name"));
299 if (ctx.getAttribute(aaiRefKey + "vnfc-name") != null) {
304 String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "].";
305 log.info("VNFCREFKEY " + vnfcRefKey);
306 log.info("AAIREFKEY " + aaiRefKey);
307 String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE");
309 // Get vnfc Data to be added
310 String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name");
311 String vnfcName = vserverName + vnfcFuncCode + "001";
314 vnfcNames.add(vnfcName);
320 private Map<String, String> populateVnfcParams(SvcLogicContext ctx, String aaiRefKey, String ipAddressV4OamVip,
321 String groupNotation, String vnfcType, String vnfcFuncCode) throws Exception {
323 Map<String, String> vnfcParams = new HashMap<String, String>();
325 // Changes for vnfc-type renamed to nfc-function,vnfc-function-code renamed to
327 vnfcParams.put("nfc-naming-code", vnfcFuncCode);
328 vnfcParams.put("nfc-function", vnfcType);
329 vnfcParams.put("ipaddress-v4-oam-vip", ipAddressV4OamVip);
330 vnfcParams.put("prov-status", "NVTPROV");
331 vnfcParams.put("orchestration-status", "CONFIGURED");
332 vnfcParams.put("in-maint", "false");
333 vnfcParams.put("is-closed-loop", "false");
334 vnfcParams.put("group-notation", groupNotation);
335 vnfcParams.put("relationship-list.relationship[0].related-to", "vserver");
336 vnfcParams.put("relationship-list.relationship[0].relationship-data[0].relationship-key", "vserver.vserver-id");
337 vnfcParams.put("relationship-list.relationship[0].relationship-data[0].relationship-value",
338 ctx.getAttribute(aaiRefKey + "vserver-id"));
339 vnfcParams.put("relationship-list.relationship[0].relationship-data[1].relationship-key", "tenant.tenant-id");
340 vnfcParams.put("relationship-list.relationship[0].relationship-data[1].relationship-value",
341 ctx.getAttribute(aaiRefKey + "tenant-id"));
342 vnfcParams.put("relationship-list.relationship[0].relationship-data[2].relationship-key",
343 "cloud-region.cloud-owner");
344 vnfcParams.put("relationship-list.relationship[0].relationship-data[2].relationship-value",
345 ctx.getAttribute(aaiRefKey + "cloud-owner"));
346 vnfcParams.put("relationship-list.relationship[0].relationship-data[3].relationship-key",
347 "cloud-region.cloud-region-id");
348 vnfcParams.put("relationship-list.relationship[0].relationship-data[3].relationship-value",
349 ctx.getAttribute(aaiRefKey + "cloud-region-id"));
350 vnfcParams.put("relationship-list.relationship[1].related-to", "generic-vnf");
351 vnfcParams.put("relationship-list.relationship[1].relationship-data[0].relationship-key", "generic-vnf.vnf-id");
352 vnfcParams.put("relationship-list.relationship[1].relationship-data[0].relationship-value",
353 ctx.getAttribute("vnf-id"));
354 vnfcParams.put("relationship-list.relationship[2].related-to", "vf-module");
355 vnfcParams.put("relationship-list.relationship[2].relationship-data[0].relationship-key", "generic-vnf.vnf-id");
356 vnfcParams.put("relationship-list.relationship[2].relationship-data[0].relationship-value",
357 ctx.getAttribute("vnf-id"));
358 vnfcParams.put("relationship-list.relationship[2].relationship-data[1].relationship-key",
359 "vf-module.vf-module-id");
360 vnfcParams.put("relationship-list.relationship[2].relationship-data[1].relationship-value",
361 ctx.getAttribute(aaiRefKey + "vf-module-id"));
366 public void addVnfc(String vnfcName, Map<String, String> params, String prefix) throws Exception {
367 log.info("Received addVnfc call with vnfcName : " + vnfcName);
368 log.info("Received addVnfc call with params : " + params);
369 String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'";
370 log.info("Received addVnfc call with resourceKey : " + resourceKey);
372 SvcLogicContext vnfcCtx = new SvcLogicContext();
373 SvcLogicResource.QueryStatus response =
374 aaiClient.save("vnfc", true, false, resourceKey, params, prefix, vnfcCtx);
376 if (SvcLogicResource.QueryStatus.SUCCESS.equals(response)) {
377 log.info("Added VNFC SUCCESSFULLY " + vnfcName);
378 } else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) {
379 throw new Exception("VNFC Add failed for for vnfc_name " + vnfcName);
383 public String getGroupNotation(String groupNotationType, String groupNotationValue, String vnfcName,
384 String vserverName, String prefix, SvcLogicContext ctx, String vnfcRefVnfcType, String vnfcFuncCode, int vmCount) throws Exception {
386 String grpNotation = null;
388 if ("fixed-value".equals(groupNotationType)) {
389 grpNotation = groupNotationValue;
390 } else if ("first-vnfc-name".equals(groupNotationType)) {
393 * If the group-notation-type value = ?first-vnfc-name?,
394 * then populate the group-notation value with the concatenation of
395 * [vnfc name associated with the first vnfc for the vnfc-type (e.g., *******)]
396 * and [the value in group-notation-value (e.g., pair)].
397 * There may be several vnfc-types associated with the VM?s.
399 /* Vnfc-type should be from refrence data */
401 /* vDBE has 2 VNFCs with same VNFC type . The pair name should be same for both . */
403 * When first VNFC is added details should be added to context so FirstVnfcName doesnt return null second
406 String tmpVnfcName = getFirstVnfcNameForVnfcType(ctx, prefix, vnfcRefVnfcType);
408 log.info("RETURNED FIRSTVNFCNAME" + tmpVnfcName);
409 log.info("CURRENTVNFCNAME" + vnfcName);
410 if (tmpVnfcName == null) {
411 log.info("CURRENTVNFCNAME" + vnfcName);
412 // No Vnfcs currently exist. Use Current vnfcName
413 grpNotation = vnfcName + groupNotationValue;
415 grpNotation = tmpVnfcName + groupNotationValue;
417 } else if ("relative-value".equals(groupNotationType)) {
420 * If the group-notation-type = ?relative-value?, then find the group-notation value
421 * from the prior vnfc (where prior means the vnfc with where the last three digits of the
422 * vm-name is one lower than the current one; note that this vnfc may have been previously configured.)
423 * 1. If the group-notation-value = next, then add 1 to the group-notation value from the prior vnfc and use
425 * 2. If the group-notation-value = same, then use the group-notation-value from the prior vnfc record
428 // next and same cant be defined for first VM. if next will not generate grpNotation if Prior is not a
430 String tmpVserverName = null;
431 if (vserverName != null) {
433 String vmNamePrefix = vserverName.substring(0, vserverName.length() - 3);
435 String lastThreeChars = vserverName.substring(vserverName.length() - 3);
437 if (NumberUtils.isDigits(lastThreeChars)) {
438 int vmNum = Integer.parseInt(lastThreeChars) - 1;
439 String formatted = String.format("%03d", vmNum);
441 log.info("FORMATTED " + formatted);
443 tmpVserverName = vmNamePrefix + formatted;
445 String priorGroupNotation = getGroupNotationForVServer(ctx, prefix, tmpVserverName);
447 if ("same".equals(groupNotationValue)) {
448 grpNotation = priorGroupNotation;
449 } else if ("next".equals(groupNotationValue)) {
450 if (priorGroupNotation != null && NumberUtils.isDigits(priorGroupNotation)) {
451 int nextGrpNotation = Integer.parseInt(priorGroupNotation) + 1;
452 grpNotation = String.valueOf(nextGrpNotation);
458 else if ("existing-value".equals(groupNotationType)) {
459 /* This is a new value being added. Find the existing vnfc records in A&AI inventory with the same vnfc-function code as the value in vnfc_reference table.
460 * Verify that the group-notation value is the same for all such records found in inventory.
461 * if all records do not have the same group-notation value, write the new vnfc record to A&AI inventory without a group-notation value and continue to the next VM in the vnfc_reference table. A 501 intermediate error message should be sent after all new VNFC records have been added to A&AI.
462 If all records match, use the same group-notation value for the new vnfc record as found in the existing vnfc records.
464 grpNotation = getGroupNotationForExistigValue(ctx, prefix, vnfcFuncCode, vmCount);
467 log.info("RETURNED GROUPNOTATION " + grpNotation);
471 public String getGroupNotationForExistigValue(SvcLogicContext ctx, String prefix, String vnfcFuncCode, int vmCount) {
472 String vfModuleId = ctx.getAttribute("req-vf-module-id"); //Coming from request-params
474 String aaiGroupNotationValue=null;
475 for (int i=0;i<vmCount;i++ )
477 String ind = "tmp.vnfInfo.vm["+i+"].";
478 String aaiFuncCode = ctx.getAttribute(ind+"vnfc-function-code");
479 String aaiGroupNotation = ctx.getAttribute(ind+"group-notation");
480 String aaiVfModuleId = ctx.getAttribute(ind+"vf-module-id");
482 log.info("getGroupNotationForExistigValue()::: vfModuleId="+vfModuleId+", aaiFuncCode="+aaiFuncCode
483 +", aaiGroupNotation="+aaiGroupNotation+",aaiVfMOduleId="+aaiVfModuleId);
485 if (StringUtils.isNotBlank(aaiFuncCode) && aaiFuncCode.equals(vnfcFuncCode) &&
486 (StringUtils.isNotBlank(vfModuleId) && StringUtils.isNotBlank(aaiVfModuleId) && aaiVfModuleId.equals(vfModuleId))) {
487 if (null==aaiGroupNotationValue && first) {
488 if (null == aaiGroupNotation) {//Return if null
491 aaiGroupNotationValue = ctx.getAttribute(ind+"group-notation");
495 if (!StringUtils.equals(aaiGroupNotationValue, ctx.getAttribute(ind+"group-notation"))) {
496 log.info("Values are different, returning null");
503 return aaiGroupNotationValue;
506 public String getGroupNotationForVServer(SvcLogicContext ctx, String prefix, String vserverName) {
508 String vmCountStr = ctx.getAttribute(prefix + "vnf.vm-count");
510 if (vmCountStr == null) {
514 int vmCount = Integer.valueOf(vmCountStr);
515 for (int i = 0; i < vmCount; i++) {
517 String tmpVserver = ctx.getAttribute(prefix + "vm[" + i + "].vserver-name");
519 if (vserverName.equals(tmpVserver)) {
520 return ctx.getAttribute(prefix + "vm[" + i + "].group-notation");
527 public String getFirstVnfcNameForVnfcType(SvcLogicContext ctx, String prefix, String vnfcRefVnfcType) {
529 String vmCountStr = ctx.getAttribute(prefix + "vnf.vm-count");
531 if (vmCountStr == null) {
535 int vmCount = Integer.valueOf(vmCountStr);
536 for (int i = 0; i < vmCount; i++) {
538 String tmpvnfcType = ctx.getAttribute(prefix + "vm[" + i + "].vnfc-type");
540 if (vnfcRefVnfcType.equals(tmpvnfcType)) {
541 return ctx.getAttribute(prefix + "vm[" + i + "].vnfc-name");
547 public void updateVServerStatus(Map<String, String> params, SvcLogicContext ctx, int vmCount) throws Exception {
548 log.info("Received updateVServerStatus call with params : " + params);
550 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
552 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
553 Map<String, String> vServerParams = new HashMap<String, String>();
555 // TODO - Should this just update prov-status or both? What about generic-vnf status? Will that be updated by
558 vServerParams.put("prov-status", "NVTPROV");
560 for (int i = 0; i < vmCount; i++) {
561 String aaiRefKey = prefix + "vm[" + i + "].";
563 log.info("VNFCNAME IN UpdateVServer " + ctx.getAttribute(aaiRefKey + "vnfc-name"));
565 if (ctx.getAttribute(aaiRefKey + "vnfc-name") != null) {
569 String resourceKey = "vserver.vserver-id = '" + ctx.getAttribute(aaiRefKey + "vserver-id") + "'"
570 + " AND tenant.tenant-id = '" + ctx.getAttribute(aaiRefKey + "tenant-id") + "'"
571 + " AND cloud-region.cloud-owner = '" + ctx.getAttribute(aaiRefKey + "cloud-owner") + "'"
572 + " AND cloud-region.cloud-region-id = '" + ctx.getAttribute(aaiRefKey + "cloud-region-id") + "'";
574 updateResource("vserver", resourceKey, vServerParams);
578 public void updateVnfStatus(Map<String, String> params, SvcLogicContext ctx) throws Exception {
579 log.info("Received updateVnfStatus call with params : " + params);
581 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
583 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
585 Map<String, String> vnfParams = new HashMap<String, String>();
587 // TODO - Should this just update prov-status or both? What about generic-vnf status? Will that be updated by
590 vnfParams.put("prov-status", "NVTPROV");
592 String resourceKey = "generic-vnf.vnf-id = '" + ctx.getAttribute("vnf-id") + "'";
594 updateResource("generic-vnf", resourceKey, vnfParams);
597 public void updateResource(String resource, String resourceKey, Map<String, String> params) throws Exception {
599 log.info("Received updateResource call with Key : " + resourceKey);
601 SvcLogicContext ctx = new SvcLogicContext();
602 SvcLogicResource.QueryStatus response = aaiClient.update(resource, resourceKey, params, "tmp.update", ctx);
604 if (SvcLogicResource.QueryStatus.SUCCESS.equals(response)) {
605 log.info("Updated " + resource + " SUCCESSFULLY for " + resourceKey);
607 } else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) {
608 throw new Exception(resource + " Update failed for " + resourceKey);
612 public SvcLogicContext readResource(String query, String prefix, String resourceType) throws Exception {
613 SvcLogicContext resourceContext = new SvcLogicContext();
615 SvcLogicResource.QueryStatus response =
616 aaiClient.query(resourceType, false, null, query, prefix, null, resourceContext);
617 log.info("AAIResponse: " + response.toString());
618 if (!SvcLogicResource.QueryStatus.SUCCESS.equals(response)) {
619 throw new Exception("Error Retrieving " + resourceType + " from A&AI");
622 return resourceContext;
625 // Added for Backward Compatibility
627 public void checkAndUpdateVnfc(Map<String, String> params, SvcLogicContext ctx, int vnfcRefLen, int vmCount)
629 log.info("Received checkAndUpdateVnfcStatus call with params : " + params);
631 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
633 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
635 for (int i = 0; i < vmCount; i++) {
636 String aaiRefKey = prefix + "vm[" + i + "].";
638 log.info("VNFCNAME IN INSERTVNFCS " + aaiRefKey + "vnfc-name:" + ctx.getAttribute(aaiRefKey + "vnfc-name"));
640 String vnfcNameAai = ctx.getAttribute(aaiRefKey + "vnfc-name");
642 if (StringUtils.isNotBlank(vnfcNameAai)) {
643 // Get Vnfc_reference data
644 for (int vnfcRefIndx = 0; vnfcRefIndx < vnfcRefLen; vnfcRefIndx++) {
646 String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "].";
648 log.info("VNFCREFKEY " + vnfcRefKey);
649 log.info("AAIREFKEY " + aaiRefKey);
651 String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE");
652 String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name");
653 String vnfcNameReference = vserverName + vnfcFuncCode + "001";
655 if (vnfcNameAai.equals(vnfcNameReference)) {
656 updateVnfcStatus(vnfcNameAai, params, prefix);
663 public void updateVnfcStatus(String vnfcName, Map<String, String> params, String prefix) throws Exception {
665 log.info("Received updateVnfcStatus call with vnfcName : " + vnfcName);
666 log.info("Received updateVnfcStatus call with params : " + params);
668 String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'";
669 log.info("Received updateVnfcStatus call with resourceKey : " + resourceKey);
671 Map<String, String> vnfcParams = new HashMap<String, String>();
672 vnfcParams.put("prov-status", "NVTPROV");
673 vnfcParams.put("orchestration-status", "CONFIGURED");
675 log.info("In updateVnfcStatus call with vnfcParams : " + vnfcParams);
677 updateResource("vnfc", resourceKey, vnfcParams);
679 log.info("End of updateVnfcStatus");
682 public void updateVnfStatusWithOAMAddress(Map<String, String> params, SvcLogicContext ctx) throws Exception {
683 log.info("Received updateVnfStatusWithOAMAddress call with params : " + params);
685 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
686 String ipAddress = ctx.getAttribute("vnf-host-ip-address");
687 log.debug("Vnf-host-ip-address" + ipAddress);
689 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
691 Map<String, String> vnfParams = new HashMap<String, String>();
693 vnfParams.put("ipv4-oam-address", ipAddress);
695 String resourceKey = "generic-vnf.vnf-id = '" + ctx.getAttribute("vnf-id") + "'";
697 updateResource("generic-vnf", resourceKey, vnfParams);
700 public void getVfModuleInfo(Map<String, String> params, SvcLogicContext vfModuleCtx) throws Exception {
701 log.info("Received getVfModuleInfo call with params : " + params);
702 String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
703 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
705 String vnfId = params.get("vnfId");
706 String vfModuleId = params.get("vfModuleId");
707 String resourceKey = "generic-vnf.vnf-id = '" + vnfId +
708 "' AND vf-module.vf-module-id = '" + vfModuleId + "'";
709 String queryPrefix = "vfModuleInfo";
710 String resourceType = "vf-module";
711 SvcLogicContext vfmCtx = readResource(resourceKey, queryPrefix, resourceType);
712 String modelInvariantId=vfmCtx.getAttribute("vfModuleInfo.model-invariant-id");
713 log.info("getVfModuleInfo():::modelInvariant="+modelInvariantId);
714 vfModuleCtx.setAttribute(prefix+"vfModule.model-invariant-id", vfmCtx.getAttribute("vfModuleInfo.model-invariant-id"));
715 vfModuleCtx.setAttribute(prefix+"vfModule.model-version-id", vfmCtx.getAttribute("vfModuleInfo.model-version-id"));
716 log.info("End - getVfModuleInfo");
719 public void getModelVersionInfo(Map<String, String> modelParams, SvcLogicContext modelCtx) throws Exception {
720 log.info("Received getModelVersionInfo call with params : " + modelParams);
721 String prefix = modelParams.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX);
722 prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : "";
724 String modelInvariantId = modelParams.get("model-invariant-id");
725 String modelVersionId = modelParams.get("model-version-id");
726 String resourceKey = "model.model-invariant-id = '" + modelInvariantId +
727 "' AND model-ver.model-version-id = '" + modelVersionId + "'";
728 String queryPrefix = "modelInfo";
729 String resourceType = "model-ver";
730 SvcLogicContext vfmCtx = readResource(resourceKey, queryPrefix, resourceType);
731 log.info("getModelVersionInfo():::modelname="+vfmCtx.getAttribute("modelInfo.model-name"));
732 modelCtx.setAttribute(prefix+"vfModule.model-name", vfmCtx.getAttribute("modelInfo.model-name"));
733 log.info("End - getModelVersionInfo");