/*-
* ============LICENSE_START=======================================================
* sdc-distribution-client
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* 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.
* ============LICENSE_END=========================================================
*/
package org.onap.sdc.api.consumer;
import java.util.List;
import org.apache.kafka.common.KafkaException;
import org.onap.sdc.api.notification.INotificationData;
public interface IConfiguration {
/**
* SDC Distribution Engine address. Value can be either hostname (with or
* without port), IP:port or FQDN (Fully Qualified Domain Name). * @return SDC
* Distribution Engine address.
*/
String getSdcAddress();
/**
* Kafka security protocol to be used by the client to Auth towards the kafka cluster
*
* @return Kafka security.protocol. Default is SASL_PLAINTEXT
*/
default String getKafkaSecurityProtocolConfig() {
return System.getenv().getOrDefault("SECURITY_PROTOCOL", "SASL_PLAINTEXT");
}
/**
* Kafka SASL mechanism to be used by the client to Auth towards the kafka cluster
*
* @return Kafka sasl.mechanism. Default is SCRAM-SHA-512
*/
default String getKafkaSaslMechanism() {
return System.getenv().getOrDefault("SASL_MECHANISM", "SCRAM-SHA-512");
}
/**
* Kafka JAAS config to be used by the client to Auth towards the kafka cluster.
* If overridden, must align with sasl.jaas.config convention set out by the sasl.mechanism being used
* otherwise, mandatory setting of the environment variable SASL_JAAS_CONFIG is required to provide default behaviour
* @return Kafka sasl.jaas.config
*/
default String getKafkaSaslJaasConfig() {
String saslJaasConfFromEnv = System.getenv("SASL_JAAS_CONFIG");
if(saslJaasConfFromEnv != null) {
return saslJaasConfFromEnv;
} else {
throw new KafkaException("sasl.jaas.config not set for Kafka Consumer");
}
}
/**
* Kafka consumer max.poll.interval.ms
*
* @return Kafka max.poll.interval.ms. Default is 300 seconds
*/
default int getKafkaConsumerMaxPollInterval() {
return 300;
}
/**
* Kafka consumer session.timeout.ms
*
* @return Kafka session.timeout.ms. Default is 45 seconds
*/
default int getKafkaConsumerSessionTimeout() {
return 45;
}
/**
* User Name for SDC distribution consumer authentication.
*
* @return User Name.
*/
String getUser();
/**
* Return True if ssl is needed, false otherwise. This param can be null, then
* default (HTTPS) behavior will be applied. If set to false, distribution
* client will use HTTP when connecting to SDC.
*
* @return default is true
*/
default Boolean isUseHttpsWithSDC() {
return true;
}
/**
* User Password for SDC distribution consumer authentication.
*
* @return User Password.
*/
String getPassword();
/**
* Distribution Client Polling Interval towards messaging bus in seconds. Can Be
* reconfigured in runtime.
*
* @return Distribution Client Polling Interval.
*/
int getPollingInterval();
/**
* Distribution Client Timeout in seconds waiting for messaging bus server response in each
* fetch interval. Can Be reconfigured in runtime.
*
* @return Distribution Client Timeout in seconds.
*/
int getPollingTimeout();
/**
* List of artifact types.
* If the service contains any of the artifacts in the list, the callback will
* be activated. Can Be reconfigured in runtime.
*
* @return List of artifact types.
*/
List getRelevantArtifactTypes();
/**
* Returns the kafka consumer group defined for this component.
*
* @return SdcKafkaConsumer group.
*/
String getConsumerGroup();
/**
* Returns the environment name (testing, production etc...). Can Be
* reconfigured in runtime.
*
* @return Environment name
*/
String getEnvironmentName();
/**
* Returns the kafka consumer id defined for this component.
*
* @return SdcKafkaConsumer id.
*/
String getConsumerID();
/**
* Return full path to Client's Key Store that contains either CA certificate or
* the SDC's public key (e.g /etc/keystore/sdc-client.jks) file will be
* deployed with sdc-distribution jar.
*
* @return Client's Key store path
*/
String getKeyStorePath();
/**
* Return the password for the Client's Key Store
*
* @return Client's Key Store password
*/
String getKeyStorePassword();
/**
* Sets whether SDC server TLS authentication is activated. If set to false, Key
* Store path and password are not needed to be set.
*
* @return true by default
*/
boolean activateServerTLSAuth();
/**
* If set to true the method {@link INotificationData#getResources()} will
* return all found resources.
* That means that metadata of resources that do not contain relevant artifacts
* types (artifacts that are defined in {@link #getRelevantArtifactTypes()} will
* be returned.
* Setting the method to false will activate the legacy behavior, in which empty
* resources are not part of the notification.
*
* @return true or false
*/
boolean isFilterInEmptyResources();
/**
* By default: false. Distribution Client will trigger the regular
* registration towards SDC (register component as consumer to the
* SDC-DISTR-NOTIF-TOPIC-[ENV] topic and register component as producer to the
* SDC-DISTR-STATUS-TOPIC-[ENV]).
* If set to true, distribution client trigger Register to SDC indicating that
* this component request to be consumer and producer of the
* SDC-DISTR-STATUS-TOPIC-[ENV] topic.
*
* @return false by default
*/
default boolean isConsumeProduceStatusTopic() {
return false;
}
/**
* By default: false. If set to true, Distribution Client will use System wide
* available proxies from JVM arguments. If set to false, distribution client
* will use proxy parameters configured through properties file.
*
* @return false by default
*/
default Boolean isUseSystemProxy() {
return false;
}
/**
* Optional configuration parameter. If the httpProxyHost parameter is
* configured and {@link #isUseHttpsWithSDC()} is false then SDC Distribution
* Client will register the proxy configuration with the HttpClient instance
* using HTTP and route requests through the proxy.
*
* @return Hostname of the http proxy
*/
String getHttpProxyHost();
/**
* Mandatory configuration parameter if httpProxyHost is configured. If the
* httpProxyHost and httpProxyPort parameters are configured and
* {@link #isUseHttpsWithSDC()} is false then SDC Distribution Client will
* register the proxy configuration with the HttpClient instance using HTTP and
* route requests through the proxy.
*
* @return Port of the http proxy
*/
int getHttpProxyPort();
/**
* Optional configuration parameter. If the httpsProxyHost parameter is
* configured and {@link #isUseHttpsWithSDC()} is true then SDC Distribution
* Client will register the proxy configuration with the HttpClient instance
* using HTTPS and route requests through the proxy.
*
* @return Hostname of the https proxy
*/
String getHttpsProxyHost();
/**
* Mandatory configuration parameter if httpsProxyHost is configured. If the
* httpsProxyHost and httpsProxyPort parameters are configured and
* {@link #isUseHttpsWithSDC()} is true then SDC Distribution Client will
* register the proxy configuration with the HttpClient instance using HTTPS and
* route requests through the proxy.
*
* @return Port of the https proxy
*/
int getHttpsProxyPort();
}