diff options
Diffstat (limited to 'nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap')
23 files changed, 400 insertions, 119 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java index 38665877..4ec6717a 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java @@ -15,8 +15,11 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; +import com.google.common.base.Splitter; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.concurrent.TimeUnit; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VimInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider; @@ -28,6 +31,7 @@ import org.springframework.core.env.Environment; import static java.lang.Long.valueOf; import static com.google.common.cache.CacheBuilder.newBuilder; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; @@ -52,6 +56,17 @@ public abstract class GenericExternalSystemInfoProvider extends IpMappingProvide this.environment = environment; } + public static VnfmUrls convert(VnfmInfo vnfmInfo) { + ArrayList<String> urls = Lists.newArrayList(Splitter.on(SEPARATOR).split(vnfmInfo.getUrl())); + return new VnfmUrls(urls.get(0), urls.get(1), urls.get(2), urls.get(3)); + } + + public static VnfmCredentials convertToCredentials(VnfmInfo vnfmInfo) { + ArrayList<String> userNames = Lists.newArrayList(Splitter.on(SEPARATOR).split(vnfmInfo.getUserName())); + ArrayList<String> passwords = Lists.newArrayList(Splitter.on(SEPARATOR).split(vnfmInfo.getPassword())); + return new VnfmCredentials(userNames.get(0), passwords.get(0), userNames.get(1), passwords.get(1)); + } + /** * After the Bean has been initialized the IP mapping and the VMFM cache is initialized * It is done in this phase because the logic requires the the @Value anoted fields to @@ -88,4 +103,5 @@ public abstract class GenericExternalSystemInfoProvider extends IpMappingProvide * @return the description of the VNFM */ public abstract VnfmInfo queryVnfmInfoFromSource(String vnfmId); + } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java index 1dc32209..17060d67 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java @@ -16,18 +16,23 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.nokia.cbam.lcn.v32.api.SubscriptionsApi; import com.nokia.cbam.lcn.v32.model.*; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import org.onap.msb.model.MicroServiceFullInfo; import org.onap.msb.model.MicroServiceInfo; import org.onap.msb.model.Node; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.MultiException; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.Constants; +import org.onap.vnfmdriver.model.VnfmInfo; import org.slf4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; import static com.nokia.cbam.lcn.v32.model.SubscriptionAuthentication.TypeEnum.NONE; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; @@ -38,15 +43,15 @@ import static org.slf4j.LoggerFactory.getLogger; /** * Responsible for registering the driver in the core systems. */ -@Component public class SelfRegistrationManager { public static final String DRIVER_VERSION = "v1"; public static final String SERVICE_NAME = "NokiaSVNFM"; public static final String SWAGGER_API_DEFINITION = "self.swagger.json"; private static Logger logger = getLogger(SelfRegistrationManager.class); - private final DriverProperties driverProperties; private final MsbApiProvider msbApiProvider; private final CbamRestApiProvider cbamRestApiProvider; + private final VnfmInfoProvider vnfmInfoProvider; + private final BiMap<String, String> vnfmIdToSubscriptionId = HashBiMap.create(); @Value("${driverMsbExternalIp}") private String driverMsbExternalIp; @Value("${driverVnfmExternalIp}") @@ -55,11 +60,10 @@ public class SelfRegistrationManager { private String driverPort; private volatile boolean ready = false; - @Autowired - SelfRegistrationManager(DriverProperties driverProperties, MsbApiProvider msbApiProvider, CbamRestApiProvider cbamRestApiProvider) { + SelfRegistrationManager(VnfmInfoProvider vnfmInfoProvider, MsbApiProvider msbApiProvider, CbamRestApiProvider cbamRestApiProvider) { this.cbamRestApiProvider = cbamRestApiProvider; this.msbApiProvider = msbApiProvider; - this.driverProperties = driverProperties; + this.vnfmInfoProvider = vnfmInfoProvider; } /** @@ -67,11 +71,11 @@ public class SelfRegistrationManager { */ public void register() { //the order is important (only publish it's existence after the subscription has been created) - subscribeToLcn(driverProperties.getVnfmId()); + subscribeToLcns(); try { registerMicroService(); } catch (RuntimeException e) { - deleteSubscription(driverProperties.getVnfmId()); + deleteSubscriptions(); throw e; } ready = true; @@ -98,7 +102,18 @@ public class SelfRegistrationManager { throw buildFatalFailure(logger, "Unable to deRegister Nokia VNFM driver", e); } } - deleteSubscription(driverProperties.getVnfmId()); + deleteSubscriptions(); + } + + /** + * Subscribes to LCN if not yet subscribed + * + * @param vnfmId the identifier of the VNFM + */ + public void assureSubscription(String vnfmId) { + if (!vnfmIdToSubscriptionId.containsKey(vnfmId)) { + subscribeToLcn(vnfmId); + } } /** @@ -108,15 +123,38 @@ public class SelfRegistrationManager { return systemFunctions().loadFile(SWAGGER_API_DEFINITION); } + /** + * @param subscriptionId the identifier of the subscription + * @return the identifier of the VNFM for the subscription + */ + public String getVnfmId(String subscriptionId) { + return vnfmIdToSubscriptionId.inverse().get(subscriptionId); + } + private String getDriverVnfmUrl() { - return "http://" + driverVnfmExternalIp + ":" + driverPort + DriverProperties.BASE_URL; + return "http://" + driverVnfmExternalIp + ":" + driverPort + Constants.BASE_URL; + } + + private void deleteSubscriptions() { + Set<Exception> exceptions = new HashSet<>(); + for (String vnfmId : vnfmIdToSubscriptionId.keySet()) { + try { + deleteSubscription(vnfmId); + } catch (Exception e) { + exceptions.add(e); + logger.warn("Unable to delete subscription for the " + vnfmId); + } + } + if (!exceptions.isEmpty()) { + throw new MultiException("Unable to delete some of the subscriptions", exceptions); + } } private void deleteSubscription(String vnfmId) { logger.info("Deleting CBAM LCN subscription"); SubscriptionsApi lcnApi = cbamRestApiProvider.getCbamLcnApi(vnfmId); try { - String callbackUrl = getDriverVnfmUrl() + DriverProperties.LCN_URL; + String callbackUrl = getDriverVnfmUrl() + Constants.LCN_URL; for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { logger.info("Deleting subscription with {} identifier", subscription.getId()); @@ -131,7 +169,7 @@ public class SelfRegistrationManager { private MicroServiceFullInfo registerMicroService() { logger.info("Registering micro service"); MicroServiceInfo microServiceInfo = new MicroServiceInfo(); - microServiceInfo.setUrl(DriverProperties.BASE_URL); + microServiceInfo.setUrl(Constants.BASE_URL); //the PATH should not be set microServiceInfo.setProtocol(MicroServiceInfo.ProtocolEnum.REST); microServiceInfo.setVisualRange(MicroServiceInfo.VisualRangeEnum._1); @@ -151,14 +189,23 @@ public class SelfRegistrationManager { } } + private void subscribeToLcns() { + for (String vnfmId : vnfmInfoProvider.getVnfms()) { + subscribeToLcn(vnfmId); + } + } + private void subscribeToLcn(String vnfmId) { - String callbackUrl = getDriverVnfmUrl() + DriverProperties.LCN_URL; - logger.info("Subscribing to CBAM LCN {} with callback to {}", driverProperties.getCbamLcnUrl(), callbackUrl); + String callbackUrl = getDriverVnfmUrl() + Constants.LCN_URL; + VnfmInfo vnfmInfo = vnfmInfoProvider.getVnfmInfo(vnfmId); + VnfmUrls vnfmUrls = GenericExternalSystemInfoProvider.convert(vnfmInfo); + logger.info("Subscribing to CBAM LCN {} with callback to {}", vnfmUrls.getLcnUrl(), callbackUrl); SubscriptionsApi lcnApi = cbamRestApiProvider.getCbamLcnApi(vnfmId); try { for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { logger.warn("The subscription with {} identifier has the same callback URL", subscription.getId()); + vnfmIdToSubscriptionId.put(vnfmId, subscription.getId()); return; } } @@ -176,6 +223,7 @@ public class SelfRegistrationManager { request.setAuthentication(subscriptionAuthentication); Subscription createdSubscription = lcnApi.subscriptionsPost(request, NOKIA_LCN_API_VERSION).blockingFirst(); logger.info("Subscribed to LCN with {} identifier", createdSubscription.getId()); + vnfmIdToSubscriptionId.put(vnfmId, createdSubscription.getId()); } catch (Exception e) { throw buildFatalFailure(logger, "Unable to subscribe to CBAM LCN", e); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForSo.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForSo.java new file mode 100644 index 00000000..bffd444d --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForSo.java @@ -0,0 +1,33 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; + +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIExternalSystemInfoProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Responsible for registering the driver in the core systems. + */ +@Component +public class SelfRegistrationManagerForSo extends SelfRegistrationManager { + @Autowired + SelfRegistrationManagerForSo(AAIExternalSystemInfoProvider vnfmInfoProvider, MsbApiProvider msbApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(vnfmInfoProvider, msbApiProvider, cbamRestApiProvider); + } +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForVfc.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForVfc.java new file mode 100644 index 00000000..c550e887 --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManagerForVfc.java @@ -0,0 +1,33 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; + +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc.VfcExternalSystemInfoProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForVfc; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Responsible for registering the driver in the core systems. + */ +@Component +public class SelfRegistrationManagerForVfc extends SelfRegistrationManager { + @Autowired + SelfRegistrationManagerForVfc(VfcExternalSystemInfoProvider vnfmInfoProvider, MsbApiProvider msbApiProvider, CbamRestApiProviderForVfc cbamRestApiProvider) { + super(vnfmInfoProvider, msbApiProvider, cbamRestApiProvider); + } +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmCredentials.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmCredentials.java new file mode 100644 index 00000000..270d004c --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmCredentials.java @@ -0,0 +1,79 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; + +import static com.google.common.hash.Hashing.sha512; + +/** + * Describes the VNFM credentials + */ +public class VnfmCredentials { + private final String username; + private final String password; + private final String clientId; + private final String clientSecret; + + /** + * @param username the username for the VNFM + * @param password the password for the VNFM + * @param clientId the client identifier + * @param clientSecret the client secret + */ + VnfmCredentials(String username, String password, String clientId, String clientSecret) { + this.username = username; + this.password = password; + this.clientId = clientId; + this.clientSecret = clientSecret; + } + + /** + * @return the username for the VNFM + */ + public String getUsername() { + return username; + } + + /** + * @return the password for the VNFM + */ + public String getPassword() { + return password; + } + + /** + * @return the client identifier + */ + public String getClientId() { + return clientId; + } + + /** + * @return the client secret + */ + public String getClientSecret() { + return clientSecret; + } + + @Override + public String toString() { + return "VnfmCredentials{" + + "username='" + username + '\'' + + ", password='" + sha512().hashBytes(password.getBytes()).toString() + '\'' + + ", clientId='" + clientId + '\'' + + ", clientSecret='" + sha512().hashBytes(clientSecret.getBytes()).toString() + '\'' + + '}'; + } +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmUrls.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmUrls.java new file mode 100644 index 00000000..04088459 --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/VnfmUrls.java @@ -0,0 +1,67 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; + +/** + * Describes the VNFM URLs + */ +public class VnfmUrls { + private final String lcmUrl; + private final String lcnUrl; + private final String authUrl; + private final String catalogUrl; + + /** + * @param authUrl the authentication server URL of the VNFM + * @param lcmUrl the LCM URL of the VNFM + * @param lcnUrl the LCN URL of the VNFM + * @param catalogUrl the catalog URL of the VNFM + */ + VnfmUrls(String authUrl, String lcmUrl, String lcnUrl, String catalogUrl) { + this.lcmUrl = lcmUrl; + this.lcnUrl = lcnUrl; + this.authUrl = authUrl; + this.catalogUrl = catalogUrl; + } + + /** + * @return the LCM URL of the VNFM + */ + public String getLcmUrl() { + return lcmUrl; + } + + /** + * @return the LCN URL of the VNFM + */ + public String getLcnUrl() { + return lcnUrl; + } + + /** + * @return the authentication server URL of the VNFM + */ + public String getAuthUrl() { + return authUrl; + } + + /** + * @return the catalog URL of the VNFM + */ + public String getCatalogUrl() { + return catalogUrl; + } +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java index 81834bcb..fb4de3f2 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java @@ -15,18 +15,21 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; +import java.util.Set; import org.onap.aai.model.EsrSystemInfo; import org.onap.aai.model.EsrVnfm; +import org.onap.aai.model.EsrVnfmList; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.GenericExternalSystemInfoProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vnfmdriver.model.VimInfo; import org.onap.vnfmdriver.model.VnfmInfo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import static com.google.common.collect.Iterables.transform; +import static com.google.common.collect.Sets.newHashSet; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName; @@ -36,7 +39,7 @@ import static org.slf4j.LoggerFactory.getLogger; * Responsible for providing information related to the VNFM from VF-C source */ @Component -@Conditional(value = Conditions.UseForDirect.class) +@Qualifier("so") public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProvider { private static Logger logger = getLogger(AAIExternalSystemInfoProvider.class); private final AAIRestApiProvider aaiRestApiProvider; @@ -114,4 +117,10 @@ public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProv vnfmInfo.setVnfmId(vnfmInAai.getVnfmId()); return vnfmInfo; } + + @Override + public Set<String> getVnfms() { + EsrVnfmList esrVnfmList = aaiRestApiProvider.getExternalSystemApi().getExternalSystemEsrVnfmList().blockingFirst(); + return newHashSet(transform(esrVnfmList.getEsrVnfm(), esr -> esr.getVnfmId())); + } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java index 08bf2c41..ed437841 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java @@ -16,12 +16,13 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; import com.google.common.annotations.VisibleForTesting; -import okhttp3.Credentials; +import java.util.UUID; import okhttp3.Request; import org.onap.aai.ApiClient; import org.onap.aai.api.CloudInfrastructureApi; import org.onap.aai.api.ExternalSystemApi; import org.onap.aai.api.NetworkApi; +import org.onap.aai.auth.HttpBasicAuth; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.MsbApiProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -76,14 +77,22 @@ public class AAIRestApiProvider { apiClient.getOkBuilder().sslSocketFactory(aaiSecurityProvider.buildSSLSocketFactory(), aaiSecurityProvider.buildTrustManager()); apiClient.getOkBuilder().hostnameVerifier(aaiSecurityProvider.buildHostnameVerifier()); apiClient.getOkBuilder().addInterceptor(chain -> { - Request request = chain.request().newBuilder().addHeader("X-FromAppId", SERVICE_NAME).build(); + Request request = chain.request().newBuilder() + .addHeader("X-FromAppId", SERVICE_NAME) + //backward incompatibe API change in Beijing release + .addHeader("X-TransactionId", UUID.randomUUID().toString()) + .addHeader("Accept", "application/json"). + build(); return chain.proceed(request); }); - apiClient.getOkBuilder().authenticator((route, response) -> { - String credential = Credentials.basic(aaiUsername, aaiPassword); - return response.request().newBuilder().header("Authorization", credential).build(); - }); + HttpBasicAuth httpBasicAuth = new HttpBasicAuth(); + httpBasicAuth.setCredentials(aaiUsername, aaiPassword); + apiClient.addAuthorization("basic", httpBasicAuth); String url = msbApiProvider.getMicroServiceUrl(service.getServiceName(), "v11"); + //the returned swagger schema is inconsistent with base URL + url = url.replaceAll("/external-system$", ""); + url = url.replaceAll("/cloud-infrastructure$", ""); + url = url.replaceAll("/network$", ""); if (!url.endsWith("/")) { url = url + "/"; } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/GrantlessGrantManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/GrantlessGrantManager.java index a113405a..9dd35687 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/GrantlessGrantManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/GrantlessGrantManager.java @@ -18,12 +18,11 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; import com.nokia.cbam.lcm.v32.model.VnfInfo; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vnfmdriver.model.GrantVNFResponseVim; import org.onap.vnfmdriver.model.VnfHealRequest; import org.onap.vnfmdriver.model.VnfScaleRequest; import org.slf4j.Logger; -import org.springframework.context.annotation.Conditional; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import static org.slf4j.LoggerFactory.getLogger; @@ -32,7 +31,7 @@ import static org.slf4j.LoggerFactory.getLogger; * Responsible for handling granting before the execution of a VNF operation in case of direct integration */ @Component -@Conditional(value = Conditions.UseForDirect.class) +@Qualifier("so") public class GrantlessGrantManager implements IGrantManager { private static Logger logger = getLogger(GrantlessGrantManager.class); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java index a7e6e404..b2a82fa6 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java @@ -25,12 +25,9 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.MsbApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; @@ -51,23 +48,20 @@ import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE; * Handles authentication and mandatory parameters. */ @Component -@Conditional(value = Conditions.UseForDirect.class) public class SdcPackageProvider implements IPackageProvider { private static final String SDC_MSB_NAME = "sdc"; private static final String SDC_MSB_VERSION = "v1"; private static final String GET_PACKAGE_URL = "%s/sdc/v1/catalog/resources/%s/toscaModel"; private static Logger logger = getLogger(SdcPackageProvider.class); private final MsbApiProvider msbApiProvider; - private final DriverProperties driverProperties; @Value("${sdcUsername}") private String sdcUsername; @Value("${sdcPassword}") private String sdcPassword; @Autowired - SdcPackageProvider(MsbApiProvider msbApiProvider, DriverProperties driverProperties) { + SdcPackageProvider(MsbApiProvider msbApiProvider) { this.msbApiProvider = msbApiProvider; - this.driverProperties = driverProperties; } @Override @@ -77,7 +71,7 @@ public class SdcPackageProvider implements IPackageProvider { CloseableHttpClient client = systemFunctions().getHttpClient(); HttpGet httpget = new HttpGet(format(GET_PACKAGE_URL, baseUrl, csarId)); httpget.setHeader(ACCEPT, APPLICATION_OCTET_STREAM_VALUE); - httpget.setHeader("X-ECOMP-InstanceID", driverProperties.getVnfmId()); + httpget.setHeader("X-ECOMP-InstanceID", SERVICE_NAME); httpget.setHeader("X-FromAppId", SERVICE_NAME); CloseableHttpResponse response = client.execute(httpget); HttpEntity entity = response.getEntity(); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java index 86517435..e419407d 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java @@ -23,14 +23,14 @@ import java.util.HashSet; import java.util.Optional; import java.util.Set; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedConnectionPoints; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedCp; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; +import static java.util.Optional.empty; + import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.tryFind; import static com.nokia.cbam.lcm.v32.model.ChangeType.*; @@ -43,7 +43,6 @@ import static org.springframework.util.StringUtils.isEmpty; * Responsible for providing information related to the VNFM from VF-C source */ @Component -@Conditional(value = Conditions.UseForDirect.class) public class AAINotificationProcessor implements INotificationSender { private static Logger logger = getLogger(AAINotificationProcessor.class); private final GenericVnfManager genericVnfManager; @@ -62,9 +61,9 @@ public class AAINotificationProcessor implements INotificationSender { } @Override - public void processNotification(VnfLifecycleChangeNotification receivedNotification, OperationExecution operationExecution, Optional<ReportedAffectedConnectionPoints> affectedConnectionPoints, String vimId) { + public void processNotification(VnfLifecycleChangeNotification receivedNotification, OperationExecution operationExecution, Optional<ReportedAffectedConnectionPoints> affectedConnectionPoints, String vimId, String vnfmId) { boolean inMaintenance = STARTED.equals(receivedNotification.getStatus()); - genericVnfManager.createOrUpdate(receivedNotification.getVnfInstanceId(), inMaintenance); + genericVnfManager.createOrUpdate(receivedNotification.getVnfInstanceId(), inMaintenance, vnfmId, empty()); addOrUpdateVls(receivedNotification, vimId); addOrUpdateVnfcs(receivedNotification, vimId, inMaintenance); processCps(receivedNotification, affectedConnectionPoints, vimId, inMaintenance); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java index ee7a3feb..16800fbd 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java @@ -24,7 +24,6 @@ import org.onap.aai.model.Relationship; import org.onap.aai.model.RelationshipData; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.slf4j.Logger; import static com.google.common.collect.Iterables.find; @@ -36,12 +35,10 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR abstract class AbstractManager { protected final AAIRestApiProvider aaiRestApiProvider; protected final CbamRestApiProvider cbamRestApiProvider; - protected final DriverProperties driverProperties; - AbstractManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { + AbstractManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider) { this.aaiRestApiProvider = aaiRestApiProvider; this.cbamRestApiProvider = cbamRestApiProvider; - this.driverProperties = driverProperties; } /** diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java index 52e9151d..953eda95 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java @@ -18,17 +18,17 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.nokia.cbam.lcm.v32.model.VnfInfo; import java.util.ArrayList; import java.util.NoSuchElementException; +import java.util.Optional; import org.onap.aai.model.GenericVnf; import org.onap.aai.model.Relationship; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager.SERVICE_NAME; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; @@ -36,14 +36,13 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.sys * Responsible for managing the {@link GenericVnf} in AAI */ @Component -@Conditional(value = Conditions.UseForDirect.class) -class GenericVnfManager extends AbstractManager { +public class GenericVnfManager extends AbstractManager { private static final long MAX_MS_TO_WAIT_FOR_VNF_TO_APPEAR = 30 * 1000L; private static Logger logger = org.slf4j.LoggerFactory.getLogger(GenericVnfManager.class); @Autowired - GenericVnfManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { - super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); + GenericVnfManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(aaiRestApiProvider, cbamRestApiProvider); } static Relationship linkTo(String vnfId) { @@ -54,43 +53,54 @@ class GenericVnfManager extends AbstractManager { return relationship; } + private static Relationship linkToNs(String nsId) { + Relationship relationship = new Relationship(); + relationship.setRelatedTo("service-instance"); + relationship.setRelationshipData(new ArrayList<>()); + relationship.getRelationshipData().add(buildRelationshipData("service-instance.service-instance-id", nsId)); + return relationship; + } + @Override protected Logger getLogger() { return logger; } - void createOrUpdate(String vnfId, boolean inMaintenance) { + public void createOrUpdate(String vnfId, boolean inMaintenance, String vnfmId, Optional<String> nsId) { try { GenericVnf vnf = waitForVnfToAppearInAai(vnfId); - updateFields(vnf, vnfId, inMaintenance); + updateFields(vnf, vnfId, inMaintenance, vnfmId, nsId); } catch (NoSuchElementException e) { try { logger.warn("The VNF with " + vnfId + " identifier did not appear in time", e); - updateFields(new GenericVnf(), vnfId, inMaintenance); + updateFields(new GenericVnf(), vnfId, inMaintenance, vnfmId, nsId); } catch (Exception e2) { logger.warn("The VNF with " + vnfId + " identifier has been created since after the maximal wait for VNF to appear timeout", e2); //the VNF might have been created since the last poll - updateFields(getExistingVnf(vnfId), vnfId, inMaintenance); + updateFields(getExistingVnf(vnfId), vnfId, inMaintenance, vnfmId, nsId); } } } - private GenericVnf getExistingVnf(String vnfId) { - return aaiRestApiProvider.getNetworkApi().getNetworkGenericVnfsGenericVnf(vnfId, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null).blockingFirst(); - } - - private void updateFields(GenericVnf vnf, String vnfId, boolean inMaintenance) { + private void updateFields(GenericVnf vnf, String vnfId, boolean inMaintenance, String vnfmId, Optional<String> nsId) { try { - VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(driverProperties.getVnfmId()).vnfsVnfInstanceIdGet(vnfId, CbamRestApiProvider.NOKIA_LCM_API_VERSION).blockingFirst(); + VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, CbamRestApiProvider.NOKIA_LCM_API_VERSION).blockingFirst(); vnf.setVnfName(vnfInfo.getName()); } catch (RuntimeException e) { throw buildFatalFailure(logger, "Unable to query VNF with " + vnfId + " identifier from CBAM", e); } vnf.setVnfId(vnfId); vnf.setInMaint(inMaintenance); + vnf.setNfType(SERVICE_NAME); //FIXME whould be good to know if this parameter is relevant or not? (mandatory) vnf.setVnfType("NokiaVNF"); vnf.setIsClosedLoopDisabled(inMaintenance); + if (vnf.getRelationshipList() == null) { + vnf.setRelationshipList(new ArrayList<>()); + } + if (nsId.isPresent()) { + addSingletonRelation(vnf.getRelationshipList(), linkTo(nsId.get())); + } aaiRestApiProvider.getNetworkApi().createOrUpdateNetworkGenericVnfsGenericVnf(vnf.getVnfId(), vnf).blockingFirst(); } @@ -107,4 +117,7 @@ class GenericVnfManager extends AbstractManager { throw new NoSuchElementException(); } + private GenericVnf getExistingVnf(String vnfId) { + return aaiRestApiProvider.getNetworkApi().getNetworkGenericVnfsGenericVnf(vnfId, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null).blockingFirst(); + } }
\ No newline at end of file diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java index f1c47d5b..04f601d5 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java @@ -21,12 +21,9 @@ import java.util.ArrayList; import org.onap.aai.model.L3Network; import org.onap.aai.model.Relationship; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; @@ -37,13 +34,12 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.ge * Responsible for managing the {@link L3Network} in AAI */ @Component -@Conditional(value = Conditions.UseForDirect.class) class L3NetworkManager extends AbstractManager { private static Logger logger = org.slf4j.LoggerFactory.getLogger(L3NetworkManager.class); @Autowired - L3NetworkManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { - super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); + L3NetworkManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(aaiRestApiProvider, cbamRestApiProvider); } @Override diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java index 37a6993a..6e37cd1e 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java @@ -21,13 +21,10 @@ import org.onap.aai.model.L3InterfaceIpv4AddressList; import org.onap.aai.model.L3InterfaceIpv6AddressList; import org.onap.aai.model.LInterface; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedCp; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static java.lang.String.format; @@ -39,13 +36,12 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.ge * Responsible for managing the {@link LInterface} in AAI */ @Component -@Conditional(value = Conditions.UseForDirect.class) class LInterfaceManager extends AbstractManager { private static Logger logger = org.slf4j.LoggerFactory.getLogger(LInterfaceManager.class); @Autowired - LInterfaceManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { - super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); + LInterfaceManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(aaiRestApiProvider, cbamRestApiProvider); } static String buildUrl(String vimId, ReportedAffectedCp affectedCp) { diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java index db65d2f1..80d7eb7d 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java @@ -19,12 +19,9 @@ import io.reactivex.Observable; import java.util.ArrayList; import org.onap.aai.model.Vnfc; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static com.google.common.base.Splitter.on; @@ -35,13 +32,12 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR * Responsible for managing {@link Vnfc} in AAI */ @Component -@Conditional(value = Conditions.UseForDirect.class) public class VnfcManager extends AbstractManager { private static Logger logger = org.slf4j.LoggerFactory.getLogger(VnfcManager.class); @Autowired - VnfcManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { - super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); + VnfcManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(aaiRestApiProvider, cbamRestApiProvider); } private static String buildId(String vnfId, String cbamVnfcId) { diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java index 6aeefd77..05f5f6f5 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java @@ -27,13 +27,10 @@ import org.onap.aai.model.Relationship; import org.onap.aai.model.Volume; import org.onap.aai.model.Vserver; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForSo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static com.google.common.collect.Iterables.find; @@ -45,13 +42,12 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.ge * Responsible for managing {@link Vserver} in AAI */ @Component -@Conditional(value = Conditions.UseForDirect.class) class VserverManager extends AbstractManager { private static Logger logger = LoggerFactory.getLogger(AbstractManager.class); @Autowired - VserverManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { - super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); + VserverManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProviderForSo cbamRestApiProvider) { + super(aaiRestApiProvider, cbamRestApiProvider); } static Relationship linkTo(String vimId, String tenantId, String serverProviderId) { diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/so/SoLifecycleManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/so/SoLifecycleManager.java index 2d2f0159..b368fa1f 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/so/SoLifecycleManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/so/SoLifecycleManager.java @@ -22,11 +22,10 @@ import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VimInfoProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIExternalSystemInfoProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification.GenericVnfManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.AdditionalParameters; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.JobManager; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.*; import org.onap.vnfmadapter.so.model.*; import org.onap.vnfmdriver.model.ExtVirtualLinkInfo; import org.onap.vnfmdriver.model.*; @@ -35,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import static java.util.Optional.of; +import static java.util.Optional.ofNullable; import static com.nokia.cbam.lcm.v32.model.VimInfo.VimInfoTypeEnum.*; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification.VnfcManager.buildCbamId; @@ -53,13 +53,16 @@ public class SoLifecycleManager { private final VimInfoProvider vimInfoProvider; private final CbamRestApiProvider cbamRestApiProvider; private final JobManager jobManager; + private final GenericVnfManager genericVnfManager; + @Autowired - SoLifecycleManager(LifecycleManager lifecycleManager, VimInfoProvider vimInfoProvider, CbamRestApiProvider cbamRestApiProvider, JobManager jobManager) { + SoLifecycleManager(LifecycleManagerForSo lifecycleManager, AAIExternalSystemInfoProvider vimInfoProvider, CbamRestApiProviderForSo cbamRestApiProvider, JobManagerForSo jobManager, GenericVnfManager genericVnfManager) { this.lifecycleManager = lifecycleManager; this.vimInfoProvider = vimInfoProvider; this.cbamRestApiProvider = cbamRestApiProvider; this.jobManager = jobManager; + this.genericVnfManager = genericVnfManager; } /** @@ -73,6 +76,7 @@ public class SoLifecycleManager { SoVnfCreationResponse response = new SoVnfCreationResponse(); LifecycleManager.VnfCreationResult result = lifecycleManager.create(vnfmId, request.getCsarId(), request.getName(), request.getDescription()); response.setVnfId(result.getVnfInfo().getId()); + genericVnfManager.createOrUpdate(response.getVnfId(), false, vnfmId, ofNullable(request.getNsId())); return response; } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java index eb8e1f65..a93b97a0 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java @@ -15,16 +15,18 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc; +import java.util.Set; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.GenericExternalSystemInfoProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vnfmdriver.model.VimInfo; import org.onap.vnfmdriver.model.VnfmInfo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import static com.google.common.collect.Sets.newHashSet; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; @@ -32,10 +34,12 @@ import static org.slf4j.LoggerFactory.getLogger; * Responsible for providing information related to the VNFM from VF-C source */ @Component -@Conditional(value = Conditions.UseForVfc.class) +@Qualifier("vfc") public class VfcExternalSystemInfoProvider extends GenericExternalSystemInfoProvider { private static Logger logger = getLogger(VfcExternalSystemInfoProvider.class); private final VfcRestApiProvider vfcRestApiProvider; + @Value("${vnfmId}") + private String vnfmId; @Autowired VfcExternalSystemInfoProvider(Environment environment, VfcRestApiProvider vfcRestApiProvider) { @@ -60,4 +64,10 @@ public class VfcExternalSystemInfoProvider extends GenericExternalSystemInfoProv throw buildFatalFailure(logger, "Unable to query VIM from VF-C with " + vimId + " identifier", e); } } + + @Override + public Set<String> getVnfms() { + //FIXME in the Casablanca release add API to VF-C to be able to list VNFMs VFC-886 task + return newHashSet(vnfmId); + } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java index 7b985c84..c2ba4642 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java @@ -25,13 +25,13 @@ import com.nokia.cbam.lcm.v32.model.VnfInfo; import com.nokia.cbam.lcm.v32.model.VnfcResourceInfo; import java.util.*; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CatalogManager; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CatalogManagerForVfc; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProviderForVfc; import org.onap.vnfmdriver.model.*; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; @@ -46,7 +46,6 @@ import static org.slf4j.LoggerFactory.getLogger; * Responsible for handling granting before the execution of a VNF operation */ @Component -@Conditional(value = Conditions.UseForVfc.class) public class VfcGrantManager implements IGrantManager { private static Logger logger = getLogger(VfcGrantManager.class); private final CatalogManager catalogManager; @@ -54,7 +53,7 @@ public class VfcGrantManager implements IGrantManager { private final VfcRestApiProvider vfcRestApiProvider; @Autowired - VfcGrantManager(CatalogManager catalogManager, CbamRestApiProvider cbamRestApiProvider, VfcRestApiProvider vfcRestApiProvider) { + VfcGrantManager(CatalogManagerForVfc catalogManager, CbamRestApiProviderForVfc cbamRestApiProvider, VfcRestApiProvider vfcRestApiProvider) { this.catalogManager = catalogManager; this.cbamRestApiProvider = cbamRestApiProvider; this.vfcRestApiProvider = vfcRestApiProvider; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java index 65cef408..b44c1531 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java @@ -22,15 +22,12 @@ import com.nokia.cbam.lcm.v32.model.VnfLifecycleChangeNotification; import java.util.ArrayList; import java.util.Optional; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.LifecycleChangeNotificationManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedConnectionPoints; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedCp; import org.onap.vnfmdriver.model.*; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static java.util.Optional.of; @@ -46,20 +43,17 @@ import static org.slf4j.LoggerFactory.getLogger; * Responsible for sending notifications to VF-C */ @Component -@Conditional(value = Conditions.UseForVfc.class) public class VfcNotificationSender implements INotificationSender { private static Logger logger = getLogger(VfcNotificationSender.class); - private final DriverProperties driverProperties; private final VfcRestApiProvider vfcRestApiProvider; @Autowired - VfcNotificationSender(DriverProperties driverProperties, VfcRestApiProvider vfcRestApiProvider) { - this.driverProperties = driverProperties; + VfcNotificationSender(VfcRestApiProvider vfcRestApiProvider) { this.vfcRestApiProvider = vfcRestApiProvider; } @Override - public void processNotification(VnfLifecycleChangeNotification recievedNotification, OperationExecution operationExecution, Optional<ReportedAffectedConnectionPoints> affectedCps, String vimId) { + public void processNotification(VnfLifecycleChangeNotification recievedNotification, OperationExecution operationExecution, Optional<ReportedAffectedConnectionPoints> affectedCps, String vimId, String vnfmId) { VNFLCMNotification notificationToSend = new VNFLCMNotification(); notificationToSend.setJobId(extractOnapJobId(operationExecution.getOperationParams())); notificationToSend.setOperation(getOperation(operationExecution, recievedNotification.getOperation())); @@ -72,15 +66,15 @@ public class VfcNotificationSender implements INotificationSender { } else { notificationToSend.setStatus(VnfLcmNotificationStatus.START); } - sendNotification(notificationToSend); + sendNotification(vnfmId, notificationToSend); } - private void sendNotification(VNFLCMNotification notification) { + private void sendNotification(String vnfmId, VNFLCMNotification notification) { try { if (logger.isInfoEnabled()) { logger.info("Sending LCN: {}", new Gson().toJson(notification)); } - vfcRestApiProvider.getNsLcmApi().vNFLCMNotification(driverProperties.getVnfmId(), notification.getVnfInstanceId(), notification); + vfcRestApiProvider.getNsLcmApi().vNFLCMNotification(vnfmId, notification.getVnfInstanceId(), notification); } catch (Exception e) { throw buildFatalFailure(logger, "Unable to send LCN to VF-C", e); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java index 5831d9b5..03fa3f18 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java @@ -28,12 +28,10 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.IpMappingProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfccatalog.api.VnfpackageApi; import org.onap.vfccatalog.model.VnfPkgDetailInfo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; @@ -45,7 +43,6 @@ import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE; * Retrieves a package from VF-C */ @Component -@Conditional(value = Conditions.UseForVfc.class) public class VfcPackageProvider implements IPackageProvider { private static Logger logger = getLogger(VfcPackageProvider.class); private final VfcRestApiProvider restApiProvider; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java index c2473aae..5c9dc543 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java @@ -17,19 +17,16 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc; import com.google.common.annotations.VisibleForTesting; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.MsbApiProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfccatalog.api.VnfpackageApi; import org.onap.vnfmdriver.ApiClient; import org.onap.vnfmdriver.api.NslcmApi; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; /** * Responsible for providing access to VF-C REST APIs */ @Component -@Conditional(value = Conditions.UseForVfc.class) public class VfcRestApiProvider { static final String NSLCM_API_SERVICE_NAME = "nslcm"; static final String NSLCM_API_VERION = "v1"; |