/**
* Copyright 2017 Netflix, Inc.
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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 com.netflix.raigad.configuration;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.*;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.netflix.config.*;
import com.netflix.raigad.aws.ICredential;
import com.netflix.raigad.utils.RetriableCallable;
import com.netflix.raigad.utils.SystemUtils;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.plugins.Plugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@Singleton
public class RaigadConfiguration implements IConfiguration {
private static final Logger logger = LoggerFactory.getLogger(RaigadConfiguration.class);
public static final String MY_WEBAPP_NAME = "Raigad";
private static final String CONFIG_CLUSTER_NAME = MY_WEBAPP_NAME + ".es.clustername";
private static final String CONFIG_AVAILABILITY_ZONES = MY_WEBAPP_NAME + ".zones.available";
private static final String CONFIG_DATA_LOCATION = MY_WEBAPP_NAME + ".es.data.location";
private static final String CONFIG_LOG_LOCATION = MY_WEBAPP_NAME + ".es.log.location";
private static final String CONFIG_ES_START_SCRIPT = MY_WEBAPP_NAME + ".es.startscript";
private static final String CONFIG_ES_STOP_SCRIPT = MY_WEBAPP_NAME + ".es.stopscript";
private static final String CONFIG_ES_HOME = MY_WEBAPP_NAME + ".es.home";
private static final String CONFIG_FD_PING_INTERVAL = MY_WEBAPP_NAME + ".es.fd.pinginterval";
private static final String CONFIG_FD_PING_TIMEOUT = MY_WEBAPP_NAME + ".es.fd.pingtimeout";
private static final String CONFIG_HTTP_PORT = MY_WEBAPP_NAME + ".es.http.port";
private static final String CONFIG_TRANSPORT_TCP_PORT = MY_WEBAPP_NAME + ".es.transport.tcp.port";
private static final String CONFIG_MIN_MASTER_NODES = MY_WEBAPP_NAME + ".es.min.master.nodes";
private static final String CONFIG_NUM_REPLICAS = MY_WEBAPP_NAME + ".es.num.replicas";
private static final String CONFIG_NUM_SHARDS = MY_WEBAPP_NAME + ".es.num.shards";
private static final String CONFIG_PING_TIMEOUT = MY_WEBAPP_NAME + ".es.pingtimeout";
private static final String CONFIG_INDEX_REFRESH_INTERVAL = MY_WEBAPP_NAME + ".es.index.refresh.interval";
private static final String CONFIG_IS_MASTER_QUORUM_ENABLED = MY_WEBAPP_NAME + ".es.master.quorum.enabled";
private static final String CONFIG_IS_PING_MULTICAST_ENABLED = MY_WEBAPP_NAME + ".es.ping.multicast.enabled";
private static final String CONFIG_ES_DISCOVERY_TYPE = MY_WEBAPP_NAME + ".es.discovery.type";
private static final String CONFIG_BOOTCLUSTER_NAME = MY_WEBAPP_NAME + ".bootcluster";
private static final String CONFIG_INSTANCE_DATA_RETRIEVER = MY_WEBAPP_NAME + ".instanceDataRetriever";
private static final String CONFIG_CREDENTIAL_PROVIDER = MY_WEBAPP_NAME + ".credentialProvider";
private static final String CONFIG_SECURITY_GROUP_NAME = MY_WEBAPP_NAME + ".security.group.name";
private static final String CONFIG_IS_MULTI_DC_ENABLED = MY_WEBAPP_NAME + ".es.multi.dc.enabled";
private static final String CONFIG_IS_ASG_BASED_DEPLOYMENT_ENABLED = MY_WEBAPP_NAME + ".es.asg.based.deployment.enabled";
private static final String CONFIG_ES_CLUSTER_ROUTING_ATTRIBUTES = MY_WEBAPP_NAME + ".es.cluster.routing.attributes";
private static final String CONFIG_ES_PROCESS_NAME = MY_WEBAPP_NAME + ".es.processname";
private static final String CONFIG_ES_SHARD_ALLOCATION_ATTRIBUTE = MY_WEBAPP_NAME + ".es.shard.allocation.attribute";
private static final String CONFIG_IS_SHARD_ALLOCATION_POLICY_ENABLED = MY_WEBAPP_NAME + ".shard.allocation.policy.enabled";
private static final String CONFIG_EXTRA_PARAMS = MY_WEBAPP_NAME + ".extra.params";
private static final String CONFIG_IS_DEBUG_ENABLED = MY_WEBAPP_NAME + ".debug.enabled";
private static final String CONFIG_IS_SHARDS_PER_NODE_ENABLED = MY_WEBAPP_NAME + ".shards.per.node.enabled";
private static final String CONFIG_SHARDS_PER_NODE = MY_WEBAPP_NAME + ".shards.per.node";
private static final String CONFIG_INDEX_METADATA = MY_WEBAPP_NAME + ".index.metadata";
private static final String CONFIG_IS_INDEX_AUTOCREATION_ENABLED = MY_WEBAPP_NAME + ".index.autocreation.enabled";
private static final String CONFIG_AUTOCREATE_INDEX_TIMEOUT = MY_WEBAPP_NAME + ".autocreate.index.timeout";
private static final String CONFIG_AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS = MY_WEBAPP_NAME + ".autocreate.index.initial.start.delay.seconds";
private static final String CONFIG_AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR = MY_WEBAPP_NAME + ".autocreate.index.periodic.scheduled.delay.seconds";
private static final String CONFIG_BACKUP_LOCATION = MY_WEBAPP_NAME + ".backup.location";
private static final String CONFIG_BACKUP_HOUR = MY_WEBAPP_NAME + ".backup.hour";
private static final String CONFIG_BACKUP_IS_SNAPSHOT_ENABLED = MY_WEBAPP_NAME + ".snapshot.enabled";
private static final String CONFIG_BACKUP_IS_HOURLY_SNAPSHOT_ENABLED = MY_WEBAPP_NAME + ".hourly.snapshot.enabled";
private static final String CONFIG_BACKUP_COMMA_SEPARATED_INDICES = MY_WEBAPP_NAME + ".backup.comma.separated.indices";
private static final String CONFIG_BACKUP_PARTIAL_INDICES = MY_WEBAPP_NAME + ".backup.partial.indices";
private static final String CONFIG_BACKUP_INCLUDE_GLOBAL_STATE = MY_WEBAPP_NAME + ".backup.include.global.state";
private static final String CONFIG_BACKUP_WAIT_FOR_COMPLETION = MY_WEBAPP_NAME + ".backup.wait.for.completion";
private static final String CONFIG_BACKUP_INCLUDE_INDEX_NAME = MY_WEBAPP_NAME + ".backup.include.index.name";
private static final String CONFIG_BACKUP_CRON_TIMER_SECONDS = MY_WEBAPP_NAME + ".backup.cron.timer.seconds";
private static final String CONFIG_IS_RESTORE_ENABLED = MY_WEBAPP_NAME + ".restore.enabled";
private static final String CONFIG_RESTORE_REPOSITORY_NAME = MY_WEBAPP_NAME + ".restore.repository.name";
private static final String CONFIG_RESTORE_REPOSITORY_TYPE = MY_WEBAPP_NAME + ".restore.repository.type";
private static final String CONFIG_RESTORE_SNAPSHOT_NAME = MY_WEBAPP_NAME + ".restore.snapshot.name";
private static final String CONFIG_RESTORE_COMMA_SEPARATED_INDICES = MY_WEBAPP_NAME + ".restore.comma.separated.indices";
private static final String CONFIG_RESTORE_TASK_INITIAL_START_DELAY_SECONDS = MY_WEBAPP_NAME + ".restore.task.initial.start.delay.seconds";
private static final String CONFIG_RESTORE_SOURCE_CLUSTER_NAME = MY_WEBAPP_NAME + ".restore.source.cluster.name";
private static final String CONFIG_RESTORE_SOURCE_REPO_REGION = MY_WEBAPP_NAME + ".restore.source.repo.region";
private static final String CONFIG_RESTORE_LOCATION = MY_WEBAPP_NAME + ".restore.location";
private static final String CONFIG_AM_I_TRIBE_NODE = MY_WEBAPP_NAME + ".tribe.node.enabled";
private static final String CONFIG_AM_I_WRITE_ENABLED_TRIBE_NODE = MY_WEBAPP_NAME + ".tribe.node.write.enabled";
private static final String CONFIG_AM_I_METADATA_ENABLED_TRIBE_NODE = MY_WEBAPP_NAME + ".tribe.node.metadata.enabled";
private static final String CONFIG_TRIBE_COMMA_SEPARATED_SOURCE_CLUSTERS = MY_WEBAPP_NAME + ".tribe.comma.separated.source.clusters";
private static final String CONFIG_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE = MY_WEBAPP_NAME + ".tribe.node.source.cluster.enabled";
private static final String CONFIG_TRIBE_COMMA_SEPARATED_TRIBE_CLUSTERS = MY_WEBAPP_NAME + ".tribe.comma.separated.tribe.clusters";
private static final String CONFIG_IS_NODEMISMATCH_WITH_DISCOVERY_ENABLED = MY_WEBAPP_NAME + ".nodemismatch.health.metrics.enabled";
private static final String CONFIG_DESIRED_NUM_NODES_IN_CLUSTER = MY_WEBAPP_NAME + ".desired.num.nodes.in.cluster";
private static final String CONFIG_IS_EUREKA_HEALTH_CHECK_ENABLED = MY_WEBAPP_NAME + ".eureka.health.check.enabled";
private static final String CONFIG_IS_LOCAL_MODE_ENABLED = MY_WEBAPP_NAME + ".local.mode.enabled";
private static final String CONFIG_CASSANDRA_KEYSPACE_NAME = MY_WEBAPP_NAME + ".cassandra.keyspace.name";
private static final String CONFIG_CASSANDRA_THRIFT_PORT = MY_WEBAPP_NAME + ".cassandra.thrift.port";
private static final String CONFIG_IS_EUREKA_HOST_SUPPLIER_ENABLED = MY_WEBAPP_NAME + ".eureka.host.supplier.enabled";
private static final String CONFIG_COMMA_SEPARATED_CASSANDRA_HOSTNAMES = MY_WEBAPP_NAME + ".comma.separated.cassandra.hostnames";
private static final String CONFIG_IS_SECURITY_GROUP_IN_MULTI_DC = MY_WEBAPP_NAME + ".security.group.in.multi.dc.enabled";
private static final String CONFIG_IS_KIBANA_SETUP_REQUIRED = MY_WEBAPP_NAME + ".kibana.setup.required";
private static final String CONFIG_KIBANA_PORT = MY_WEBAPP_NAME + ".kibana.port";
private static final String CONFIG_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC = MY_WEBAPP_NAME + ".tribe.node.source.cluster.enabled.in.multi.dc";
private static final String CONFIG_REPORT_METRICS_FROM_MASTER_ONLY = MY_WEBAPP_NAME + ".report.metrics.from.master.only";
private static final String CONFIG_TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT = MY_WEBAPP_NAME + ".tribe.preferred.cluster.id.on.conflict";
private static final String CONFIG_IS_VPC_MIGRATION_MODE_ENABLED = MY_WEBAPP_NAME + ".vpc.migration.mode.enabled";
// Amazon specific
private static final String CONFIG_ASG_NAME = MY_WEBAPP_NAME + ".az.asgname";
private static final String CONFIG_STACK_NAME = MY_WEBAPP_NAME + ".az.stack";
private static final String CONFIG_REGION_NAME = MY_WEBAPP_NAME + ".az.region";
private static final String CONFIG_ACL_GROUP_NAME = MY_WEBAPP_NAME + ".acl.groupname";
private static final String CONFIG_ACL_GROUP_NAME_FOR_VPC = MY_WEBAPP_NAME + ".acl.groupname.vpc";
private static Boolean IS_DEPLOYED_IN_VPC = false;
private static Boolean IS_VPC_EXTERNAL = false;
private static final String MAC_ID = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/mac");
private static String VPC_ID = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/network/interfaces/macs/" + MAC_ID + "/vpc-id").trim();
private static String PUBLIC_HOSTNAME, PUBLIC_IP, ACL_GROUP_ID_FOR_VPC;
{
if (StringUtils.equals(VPC_ID, SystemUtils.NOT_FOUND_STR)) {
PUBLIC_HOSTNAME = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/public-hostname").trim();
PUBLIC_IP = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/public-ipv4").trim();
} else {
IS_DEPLOYED_IN_VPC = true;
IS_VPC_EXTERNAL = true;
PUBLIC_HOSTNAME = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/public-hostname").trim();
if (StringUtils.equals(PUBLIC_HOSTNAME, SystemUtils.NOT_FOUND_STR)) {
// Looks like this is VPC internal, trying local hostname
PUBLIC_HOSTNAME = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/local-hostname").trim();
IS_VPC_EXTERNAL = false;
}
logger.info("Node host name initialized with {}", PUBLIC_HOSTNAME);
PUBLIC_IP = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/public-ipv4").trim();
if (StringUtils.equals(PUBLIC_IP, SystemUtils.NOT_FOUND_STR)) {
// Looks like this is VPC internal, trying local IP
PUBLIC_IP = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/local-ipv4").trim();
IS_VPC_EXTERNAL = false;
}
logger.info("Node IP initialized with {}", PUBLIC_IP);
}
}
private static final String RAC = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/placement/availability-zone");
private static final String LOCAL_HOSTNAME = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/local-hostname").trim();
private static final String LOCAL_IP = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/local-ipv4").trim();
private static final String INSTANCE_ID = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/instance-id").trim();
private static final String INSTANCE_TYPE = SystemUtils.getDataFromUrl("http://169.254.169.254/latest/meta-data/instance-type").trim();
private static final String ES_NODE_NAME = RAC + "." + INSTANCE_ID;
private static String ASG_NAME = System.getenv("ASG_NAME");
private static String STACK_NAME = System.getenv("STACK_NAME");
private static String REGION = System.getenv("EC2_REGION");
// Defaults
private final String DEFAULT_CLUSTER_NAME = "es_samplecluster";
private final String DEFAULT_ES_HOME_DIR = "/apps/elasticsearch";
private List<String> DEFAULT_AVAILABILITY_ZONES = ImmutableList.of();
private static final String DEFAULT_DATA_LOCATION = "/mnt/data/es";
private static final String DEFAULT_LOG_LOCATION = "/logs/es";
private static final String DEFAULT_YAML_LOCATION = "/apps/elasticsearch/config/elasticsearch.yml";
private static final String DEFAULT_ES_START_SCRIPT = "/etc/init.d/elasticsearch start";
private static final String DEFAULT_ES_STOP_SCRIPT = "/etc/init.d/elasticsearch stop";
private static final String DEFAULT_ES_HOME = "/apps/elasticsearch";
private static final String DEFAULT_FD_PING_INTERVAL = "30s";
private static final String DEFAULT_FD_PING_TIMEOUT = "30s";
private static final int DEFAULT_HTTP_PORT = 7104;
private static final int DEFAULT_TRANSPORT_TCP_PORT = 7102;
private static final int DEFAULT_MIN_MASTER_NODES = 1;
private static final int DEFAULT_NUM_REPLICAS = 2;
private static final int DEFAULT_NUM_SHARDS = 5;
private static final String DEFAULT_PING_TIMEOUT = "60s";
private static final String DEFAULT_INDEX_REFRESH_INTERVAL = "1m";
private static final boolean DEFAULT_IS_MASTER_QUORUM_ENABLED = true;
private static final boolean DEFAULT_IS_PING_MULTICAST_ENABLED = false;
private static final String DEFAULT_CONFIG_BOOTCLUSTER_NAME = "cass_metadata";
private static final String DEFAULT_CREDENTIAL_PROVIDER = "com.netflix.raigad.aws.IAMCredential";
private static final String DEFAULT_ES_DISCOVERY_TYPE = "raigad";
private static final boolean DEFAULT_IS_MULTI_DC_ENABLED = false;
private static final boolean DEFAULT_IS_ASG_BASED_DEPLOYMENT_ENABLED = false;
private static final String DEFAULT_ES_CLUSTER_ROUTING_ATTRIBUTES = "rack_id";
private static final String DEFAULT_ES_PROCESS_NAME = "org.elasticsearch.bootstrap.Elasticsearch";
private static final boolean DEFAULT_IS_SHARD_ALLOCATION_POLICY_ENABLED = false;
private static final String DEFAULT_ES_SHARD_ALLOCATION_ATTRIBUTE = "all";
private static final String DEFAULT_CONFIG_EXTRA_PARAMS = null;
private static final boolean DEFAULT_IS_DEBUG_ENABLED = false;
private static final boolean DEFAULT_IS_SHARDS_PER_NODE_ENABLED = false;
private static final int DEFAULT_SHARDS_PER_NODE = 5;
private static final boolean DEFAULT_IS_INDEX_AUTOCREATION_ENABLED = false;
private static final int DEFAULT_AUTOCREATE_INDEX_TIMEOUT = 300000;
private static final int DEFAULT_AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS = 300;
private static final int DEFAULT_AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR = 22;
private static final String DEFAULT_INDEX_METADATA = null;
private static final String DEFAULT_BACKUP_LOCATION = "elasticsearch-us-east-1-backup";
private static final int DEFAULT_BACKUP_HOUR = 1;
private static final String DEFAULT_BACKUP_COMMA_SEPARATED_INDICES = "_all";
private static final boolean DEFAULT_BACKUP_PARTIAL_INDICES = false;
private static final boolean DEFAULT_BACKUP_INCLUDE_GLOBAL_STATE = false;
private static final boolean DEFAULT_BACKUP_WAIT_FOR_COMPLETION = true;
private static final boolean DEFAULT_BACKUP_INCLUDE_INDEX_NAME = false;
private static final boolean DEFAULT_IS_RESTORE_ENABLED = false;
private static final String DEFAULT_RESTORE_REPOSITORY_NAME = "testrepo";
private static final String DEFAULT_RESTORE_REPOSITORY_TYPE = "s3";
private static final String DEFAULT_RESTORE_SNAPSHOT_NAME = "";
private static final String DEFAULT_RESTORE_COMMA_SEPARATED_INDICES = "_all";
private static final int DEFAULT_RESTORE_TASK_INITIAL_START_DELAY_SECONDS = 600;
private static final String DEFAULT_RESTORE_SOURCE_CLUSTER_NAME = "";
private static final String DEFAULT_RESTORE_SOURCE_REPO_REGION = "us-east-1";
private static final String DEFAULT_RESTORE_LOCATION = "elasticsearch-us-east-1-backup";
private static final boolean DEFAULT_BACKUP_IS_SNAPSHOT_ENABLED = false;
private static final boolean DEFAULT_BACKUP_IS_HOURLY_SNAPSHOT_ENABLED = false;
private static final long DEFAULT_BACKUP_CRON_TIMER_SECONDS = 3600;
private static final boolean DEFAULT_AM_I_TRIBE_NODE = false;
private static final boolean DEFAULT_AM_I_WRITE_ENABLED_TRIBE_NODE = false;
private static final boolean DEFAULT_AM_I_METADATA_ENABLED_TRIBE_NODE = false;
private static final String DEFAULT_TRIBE_COMMA_SEPARATED_SOURCE_CLUSTERS = "";
private static final boolean DEFAULT_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE = false;
private static final String DEFAULT_TRIBE_COMMA_SEPARATED_TRIBE_CLUSTERS = "";
private static final boolean DEFAULT_IS_NODEMISMATCH_WITH_DISCOVERY_ENABLED = false;
private static final int DEFAULT_DESIRED_NUM_NODES_IN_CLUSTER = 6;
private static final boolean DEFAULT_IS_EUREKA_HEALTH_CHECK_ENABLED = true;
private static final boolean DEFAULT_IS_LOCAL_MODE_ENABLED = false;
private static final String DEFAULT_CASSANDRA_KEYSPACE_NAME = "escarbootstrap";
private static final int DEFAULT_CASSANDRA_THRIFT_PORT = 7102;
private static final boolean DEFAULT_IS_EUREKA_HOST_SUPPLIER_ENABLED = true;
private static final String DEFAULT_COMMA_SEPARATED_CASSANDRA_HOSTNAMES = "";
private static final boolean DEFAULT_IS_SECURITY_GROUP_IN_MULTI_DC = false;
private static final boolean DEFAULT_IS_KIBANA_SETUP_REQUIRED = false;
private static final int DEFAULT_KIBANA_PORT = 8001;
private static final boolean DEFAULT_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC = false;
private static final boolean DEFAULT_REPORT_METRICS_FROM_MASTER_ONLY = false;
private static final String DEFAULT_TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT = "t0";
private static final boolean DEFAULT_IS_VPC_MIGRATION_MODE_ENABLED = false;
private static final String DEFAULT_ACL_GROUP_NAME_FOR_VPC = "es_samplecluster";
private final IConfigSource config;
private final ICredential provider;
private final DynamicStringProperty CREDENTIAL_PROVIDER = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_CREDENTIAL_PROVIDER, DEFAULT_CREDENTIAL_PROVIDER);
private final DynamicStringProperty ES_STARTUP_SCRIPT_LOCATION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_START_SCRIPT, DEFAULT_ES_START_SCRIPT);
private final DynamicStringProperty ES_STOP_SCRIPT_LOCATION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_STOP_SCRIPT, DEFAULT_ES_STOP_SCRIPT);
private final DynamicStringProperty DATA_LOCATION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_DATA_LOCATION, DEFAULT_DATA_LOCATION);
private final DynamicStringProperty LOG_LOCATION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_LOG_LOCATION, DEFAULT_LOG_LOCATION);
private final DynamicStringProperty ES_HOME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_HOME, DEFAULT_ES_HOME);
private final DynamicStringProperty FD_PING_INTERVAL = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_FD_PING_INTERVAL, DEFAULT_FD_PING_INTERVAL);
private final DynamicStringProperty FD_PING_TIMEOUT = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_FD_PING_TIMEOUT, DEFAULT_FD_PING_TIMEOUT);
private final DynamicIntProperty ES_HTTP_PORT = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_HTTP_PORT, DEFAULT_HTTP_PORT);
private final DynamicIntProperty ES_TRANSPORT_TCP_PORT = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_TRANSPORT_TCP_PORT, DEFAULT_TRANSPORT_TCP_PORT);
private final DynamicIntProperty MINIMUM_MASTER_NODES = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_MIN_MASTER_NODES, DEFAULT_MIN_MASTER_NODES);
private final DynamicIntProperty NUM_REPLICAS = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_NUM_REPLICAS, DEFAULT_NUM_REPLICAS);
private final DynamicIntProperty NUM_SHARDS = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_NUM_SHARDS, DEFAULT_NUM_SHARDS);
private final DynamicStringProperty PING_TIMEOUT = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_PING_TIMEOUT, DEFAULT_PING_TIMEOUT);
private final DynamicStringProperty INDEX_REFRESH_INTERVAL = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_INDEX_REFRESH_INTERVAL, DEFAULT_INDEX_REFRESH_INTERVAL);
private final DynamicBooleanProperty IS_MASTER_QUORUM_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_MASTER_QUORUM_ENABLED, DEFAULT_IS_MASTER_QUORUM_ENABLED);
private final DynamicBooleanProperty IS_PING_MULTICAST_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_PING_MULTICAST_ENABLED, DEFAULT_IS_PING_MULTICAST_ENABLED);
private final DynamicStringProperty BOOTCLUSTER_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_BOOTCLUSTER_NAME, DEFAULT_CONFIG_BOOTCLUSTER_NAME);
private final DynamicStringProperty ES_DISCOVERY_TYPE = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_DISCOVERY_TYPE, DEFAULT_ES_DISCOVERY_TYPE);
private final DynamicStringProperty SECURITY_GROUP_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_SECURITY_GROUP_NAME, DEFAULT_CLUSTER_NAME);
private final DynamicBooleanProperty IS_MULTI_DC_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_MULTI_DC_ENABLED, DEFAULT_IS_MULTI_DC_ENABLED);
private final DynamicBooleanProperty IS_ASG_BASED_DEPLOYMENT_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_ASG_BASED_DEPLOYMENT_ENABLED, DEFAULT_IS_ASG_BASED_DEPLOYMENT_ENABLED);
private final DynamicStringProperty ES_CLUSTER_ROUTING_ATTRIBUTES = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_CLUSTER_ROUTING_ATTRIBUTES, DEFAULT_ES_CLUSTER_ROUTING_ATTRIBUTES);
private final DynamicBooleanProperty IS_SHARD_ALLOCATION_POLICY_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_SHARD_ALLOCATION_POLICY_ENABLED, DEFAULT_IS_SHARD_ALLOCATION_POLICY_ENABLED);
private final DynamicStringProperty ES_SHARD_ALLOCATION_ATTRIBUTE = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_SHARD_ALLOCATION_ATTRIBUTE, DEFAULT_ES_SHARD_ALLOCATION_ATTRIBUTE);
private final DynamicStringProperty EXTRA_PARAMS = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_EXTRA_PARAMS, DEFAULT_CONFIG_EXTRA_PARAMS);
private final DynamicBooleanProperty IS_DEBUG_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_DEBUG_ENABLED, DEFAULT_IS_DEBUG_ENABLED);
private final DynamicBooleanProperty IS_SHARDS_PER_NODE_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_SHARDS_PER_NODE_ENABLED, DEFAULT_IS_SHARDS_PER_NODE_ENABLED);
private final DynamicIntProperty TOTAL_SHARDS_PER_NODES = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_SHARDS_PER_NODE, DEFAULT_SHARDS_PER_NODE);
private final DynamicStringProperty INDEX_METADATA = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_INDEX_METADATA, DEFAULT_INDEX_METADATA);
private final DynamicBooleanProperty IS_INDEX_AUTOCREATION_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_INDEX_AUTOCREATION_ENABLED, DEFAULT_IS_INDEX_AUTOCREATION_ENABLED);
private final DynamicIntProperty AUTOCREATE_INDEX_TIMEOUT = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_AUTOCREATE_INDEX_TIMEOUT, DEFAULT_AUTOCREATE_INDEX_TIMEOUT);
private final DynamicIntProperty AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS, DEFAULT_AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS);
private final DynamicIntProperty AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR, DEFAULT_AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR);
private final DynamicStringProperty ES_PROCESS_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ES_PROCESS_NAME, DEFAULT_ES_PROCESS_NAME);
private final DynamicStringProperty BUCKET_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_BACKUP_LOCATION, DEFAULT_BACKUP_LOCATION);
private final DynamicIntProperty BACKUP_HOUR = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_BACKUP_HOUR, DEFAULT_BACKUP_HOUR);
private final DynamicStringProperty COMMA_SEPARATED_INDICES_TO_BACKUP = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_BACKUP_COMMA_SEPARATED_INDICES, DEFAULT_BACKUP_COMMA_SEPARATED_INDICES);
private final DynamicBooleanProperty PARTIALLY_BACKUP_INDICES = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_PARTIAL_INDICES, DEFAULT_BACKUP_PARTIAL_INDICES);
private final DynamicBooleanProperty INCLUDE_GLOBAL_STATE_DURING_BACKUP = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_INCLUDE_GLOBAL_STATE, DEFAULT_BACKUP_INCLUDE_GLOBAL_STATE);
private final DynamicBooleanProperty WAIT_FOR_COMPLETION_OF_BACKUP = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_WAIT_FOR_COMPLETION, DEFAULT_BACKUP_WAIT_FOR_COMPLETION);
private final DynamicBooleanProperty INCLUDE_INDEX_NAME_IN_SNAPSHOT_BACKUP = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_INCLUDE_INDEX_NAME, DEFAULT_BACKUP_INCLUDE_INDEX_NAME);
private final DynamicBooleanProperty IS_RESTORE_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_RESTORE_ENABLED, DEFAULT_IS_RESTORE_ENABLED);
private final DynamicStringProperty RESTORE_REPOSITORY_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_REPOSITORY_NAME, DEFAULT_RESTORE_REPOSITORY_NAME);
private final DynamicStringProperty RESTORE_REPOSITORY_TYPE = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_REPOSITORY_TYPE, DEFAULT_RESTORE_REPOSITORY_TYPE);
private final DynamicStringProperty RESTORE_SNAPSHOT_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_SNAPSHOT_NAME, DEFAULT_RESTORE_SNAPSHOT_NAME);
private final DynamicStringProperty COMMA_SEPARATED_INDICES_TO_RESTORE = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_COMMA_SEPARATED_INDICES, DEFAULT_RESTORE_COMMA_SEPARATED_INDICES);
private final DynamicIntProperty RESTORE_TASK_INITIAL_START_DELAY_SECONDS = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_RESTORE_TASK_INITIAL_START_DELAY_SECONDS, DEFAULT_RESTORE_TASK_INITIAL_START_DELAY_SECONDS);
private final DynamicStringProperty RESTORE_SOURCE_CLUSTER_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_SOURCE_CLUSTER_NAME, DEFAULT_RESTORE_SOURCE_CLUSTER_NAME);
private final DynamicStringProperty RESTORE_SOURCE_REPO_REGION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_SOURCE_REPO_REGION, DEFAULT_RESTORE_SOURCE_REPO_REGION);
private final DynamicStringProperty RESTORE_LOCATION = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_RESTORE_LOCATION, DEFAULT_RESTORE_LOCATION);
private final DynamicBooleanProperty IS_SNAPSHOT_BACKUP_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_IS_SNAPSHOT_ENABLED, DEFAULT_BACKUP_IS_SNAPSHOT_ENABLED);
private final DynamicBooleanProperty IS_HOURLY_SNAPSHOT_BACKUP_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_BACKUP_IS_HOURLY_SNAPSHOT_ENABLED, DEFAULT_BACKUP_IS_HOURLY_SNAPSHOT_ENABLED);
private final DynamicLongProperty BACKUP_CRON_TIMER_SECONDS = DynamicPropertyFactory.getInstance().getLongProperty(CONFIG_BACKUP_CRON_TIMER_SECONDS, DEFAULT_BACKUP_CRON_TIMER_SECONDS);
private final DynamicBooleanProperty AM_I_TRIBE_NODE = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_AM_I_TRIBE_NODE, DEFAULT_AM_I_TRIBE_NODE);
private final DynamicBooleanProperty AM_I_WRITE_ENABLED_TRIBE_NODE = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_AM_I_WRITE_ENABLED_TRIBE_NODE, DEFAULT_AM_I_WRITE_ENABLED_TRIBE_NODE);
private final DynamicBooleanProperty AM_I_METADATA_ENABLED_TRIBE_NODE = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_AM_I_METADATA_ENABLED_TRIBE_NODE, DEFAULT_AM_I_METADATA_ENABLED_TRIBE_NODE);
private final DynamicStringProperty COMMA_SEPARATED_SOURCE_CLUSTERS_IN_TRIBE = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_TRIBE_COMMA_SEPARATED_SOURCE_CLUSTERS, DEFAULT_TRIBE_COMMA_SEPARATED_SOURCE_CLUSTERS);
private final DynamicBooleanProperty AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE, DEFAULT_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE);
private final DynamicStringProperty COMMA_SEPARATED_TRIBE_CLUSTERS = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_TRIBE_COMMA_SEPARATED_TRIBE_CLUSTERS, DEFAULT_TRIBE_COMMA_SEPARATED_TRIBE_CLUSTERS);
private final DynamicBooleanProperty IS_NODE_MISMATCH_WITH_DISCOVERY_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_NODEMISMATCH_WITH_DISCOVERY_ENABLED, DEFAULT_IS_NODEMISMATCH_WITH_DISCOVERY_ENABLED);
private final DynamicIntProperty DESIRED_NUM_NODES_IN_CLUSTER = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_DESIRED_NUM_NODES_IN_CLUSTER, DEFAULT_DESIRED_NUM_NODES_IN_CLUSTER);
private final DynamicBooleanProperty IS_EUREKA_HEALTH_CHECK_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_EUREKA_HEALTH_CHECK_ENABLED, DEFAULT_IS_EUREKA_HEALTH_CHECK_ENABLED);
private final DynamicBooleanProperty IS_LOCAL_MODE_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_LOCAL_MODE_ENABLED, DEFAULT_IS_LOCAL_MODE_ENABLED);
private final DynamicStringProperty CASSANDRA_KEYSPACE_NAME = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_CASSANDRA_KEYSPACE_NAME, DEFAULT_CASSANDRA_KEYSPACE_NAME);
private final DynamicIntProperty CASSANDRA_THRIFT_PORT = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_CASSANDRA_THRIFT_PORT, DEFAULT_CASSANDRA_THRIFT_PORT);
private final DynamicBooleanProperty IS_EUREKA_HOST_SUPPLIER_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_EUREKA_HOST_SUPPLIER_ENABLED, DEFAULT_IS_EUREKA_HOST_SUPPLIER_ENABLED);
private final DynamicStringProperty COMMA_SEPARATED_CASSANDRA_HOSTNAMES = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_COMMA_SEPARATED_CASSANDRA_HOSTNAMES, DEFAULT_COMMA_SEPARATED_CASSANDRA_HOSTNAMES);
private final DynamicBooleanProperty IS_SECURITY_GROUP_IN_MULTI_DC = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_SECURITY_GROUP_IN_MULTI_DC, DEFAULT_IS_SECURITY_GROUP_IN_MULTI_DC);
private final DynamicBooleanProperty IS_KIBANA_SETUP_REQUIRED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_KIBANA_SETUP_REQUIRED, DEFAULT_IS_KIBANA_SETUP_REQUIRED);
private final DynamicIntProperty KIBANA_PORT = DynamicPropertyFactory.getInstance().getIntProperty(CONFIG_KIBANA_PORT, DEFAULT_KIBANA_PORT);
private final DynamicBooleanProperty AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC, DEFAULT_AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC);
private final DynamicBooleanProperty REPORT_METRICS_FROM_MASTER_ONLY = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_REPORT_METRICS_FROM_MASTER_ONLY, DEFAULT_REPORT_METRICS_FROM_MASTER_ONLY);
private final DynamicStringProperty TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT, DEFAULT_TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT);
private final DynamicBooleanProperty IS_VPC_MIGRATION_MODE_ENABLED = DynamicPropertyFactory.getInstance().getBooleanProperty(CONFIG_IS_VPC_MIGRATION_MODE_ENABLED, DEFAULT_IS_VPC_MIGRATION_MODE_ENABLED);
private final DynamicStringProperty ACL_GROUP_NAME_FOR_VPC = DynamicPropertyFactory.getInstance().getStringProperty(CONFIG_ACL_GROUP_NAME_FOR_VPC, DEFAULT_ACL_GROUP_NAME_FOR_VPC);
@Inject
public RaigadConfiguration(ICredential provider, IConfigSource config) {
this.provider = provider;
this.config = config;
}
@Override
public void initialize() {
setupEnvVars();
this.config.initialize(ASG_NAME, REGION);
setDefaultRACList(REGION);
populateProps();
SystemUtils.createDirs(getDataFileLocation());
}
private void setupEnvVars() {
REGION = StringUtils.isBlank(REGION) ? System.getProperty("EC2_REGION") : REGION;
if (StringUtils.isBlank(REGION)) {
REGION = RAC.substring(0, RAC.length() - 1);
}
ASG_NAME = StringUtils.isBlank(ASG_NAME) ? System.getProperty("ASG_NAME") : ASG_NAME;
if (StringUtils.isBlank(ASG_NAME)) {
ASG_NAME = populateASGName(REGION, INSTANCE_ID);
}
STACK_NAME = StringUtils.isBlank(STACK_NAME) ? System.getProperty("STACK_NAME") : STACK_NAME;
logger.info(String.format("REGION set to [%s], ASG Name set to [%s]", REGION, ASG_NAME));
}
/**
* Query amazon to get ASG name. Currently not available as part of instance
* info api.
*/
private String populateASGName(String region, String instanceId) {
GetASGName getASGName = new GetASGName(region, instanceId);
try {
return getASGName.call();
} catch (Exception e) {
logger.error("Failed to determine ASG name", e);
return null;
}
}
private class GetASGName extends RetriableCallable<String> {
private static final int NUMBER_OF_RETRIES = 15;
private static final long WAIT_TIME = 30000;
private final String region;
private final String instanceId;
private final AmazonEC2 client;
public GetASGName(String region, String instanceId) {
super(NUMBER_OF_RETRIES, WAIT_TIME);
this.region = region;
this.instanceId = instanceId;
client = new AmazonEC2Client(provider.getAwsCredentialProvider());
client.setEndpoint("ec2." + region + ".amazonaws.com");
}
@Override
public String retriableCall() throws IllegalStateException {
DescribeInstancesRequest desc = new DescribeInstancesRequest().withInstanceIds(instanceId);
DescribeInstancesResult res = client.describeInstances(desc);
for (Reservation resr : res.getReservations()) {
for (Instance ins : resr.getInstances()) {
for (com.amazonaws.services.ec2.model.Tag tag : ins.getTags()) {
if (tag.getKey().equals("aws:autoscaling:groupName"))
return tag.getValue();
}
}
}
logger.warn("Couldn't determine ASG name");
throw new IllegalStateException("Couldn't determine ASG name");
}
}
/**
* Get the fist 3 available zones in the region
*/
public void setDefaultRACList(String region) {
AmazonEC2 client = new AmazonEC2Client(provider.getAwsCredentialProvider());
client.setEndpoint("ec2." + region + ".amazonaws.com");
DescribeAvailabilityZonesResult res = client.describeAvailabilityZones();
List<String> zone = Lists.newArrayList();
for (AvailabilityZone reg : res.getAvailabilityZones()) {
if (reg.getState().equals("available")) {
zone.add(reg.getZoneName());
}
if (zone.size() == 3) {
break;
}
}
DEFAULT_AVAILABILITY_ZONES = ImmutableList.copyOf(zone);
}
private void populateProps() {
config.set(CONFIG_ASG_NAME, ASG_NAME);
config.set(CONFIG_REGION_NAME, REGION);
}
@Override
public List<String> getRacs() {
return config.getList(CONFIG_AVAILABILITY_ZONES, DEFAULT_AVAILABILITY_ZONES);
}
@Override
public String getDC() {
return config.get(CONFIG_REGION_NAME, "");
}
@Override
public void setDC(String region) {
config.set(CONFIG_REGION_NAME, region);
}
@Override
public String getASGName() {
return config.get(CONFIG_ASG_NAME, ASG_NAME);
}
@Override
public String getStackName() {
return config.get(CONFIG_STACK_NAME, STACK_NAME);
}
@Override
public String getACLGroupName() {
return config.get(CONFIG_ACL_GROUP_NAME, this.getAppName());
}
@Override
public String getDataFileLocation() {
return DATA_LOCATION.get();
}
@Override
public String getLogFileLocation() {
return LOG_LOCATION.get();
}
@Override
public String getElasticsearchStartupScript() {
return ES_STARTUP_SCRIPT_LOCATION.get();
}
@Override
public String getYamlLocation() {
return DEFAULT_YAML_LOCATION;
}
@Override
public String getBackupLocation() {
return BUCKET_NAME.get();
}
@Override
public String getElasticsearchHome() {
return ES_HOME.get();
}
@Override
public String getElasticsearchStopScript() {
return ES_STOP_SCRIPT_LOCATION.get();
}
@Override
public String getFdPingInterval() {
return FD_PING_INTERVAL.get();
}
@Override
public String getFdPingTimeout() {
return FD_PING_TIMEOUT.get();
}
@Override
public int getHttpPort() {
return ES_HTTP_PORT.get();
}
@Override
public int getTransportTcpPort() {
return ES_TRANSPORT_TCP_PORT.get();
}
@Override
public int getMinimumMasterNodes() {
return MINIMUM_MASTER_NODES.get();
}
@Override
public int getNumOfReplicas() {
return NUM_REPLICAS.get();
}
@Override
public int getTotalShardsPerNode() {
return TOTAL_SHARDS_PER_NODES.get();
}
@Override
public int getNumOfShards() {
return NUM_SHARDS.get();
}
@Override
public String getPingTimeout() {
return PING_TIMEOUT.get();
}
@Override
public String getRefreshInterval() {
return INDEX_REFRESH_INTERVAL.get();
}
@Override
public boolean isMasterQuorumEnabled() {
return IS_MASTER_QUORUM_ENABLED.get();
}
@Override
public boolean isPingMulticastEnabled() {
return IS_PING_MULTICAST_ENABLED.get();
}
@Override
public String getHostIP() {
return PUBLIC_IP;
}
@Override
public String getHostname() {
return PUBLIC_HOSTNAME;
}
@Override
public String getInstanceName() {
return INSTANCE_ID;
}
@Override
public String getInstanceId() {
return INSTANCE_ID;
}
@Override
public String getHostLocalIP() {
return LOCAL_IP;
}
@Override
public String getRac() {
return RAC;
}
@Override
public String getAppName() {
return config.get(CONFIG_CLUSTER_NAME, DEFAULT_CLUSTER_NAME);
}
@Override
public String getBootClusterName() {
return BOOTCLUSTER_NAME.get();
}
@Override
public String getElasticsearchDiscoveryType() {
return ES_DISCOVERY_TYPE.get();
}
@Override
public boolean isMultiDC() {
return IS_MULTI_DC_ENABLED.get();
}
@Override
public String getClusterRoutingAttributes() {
return ES_CLUSTER_ROUTING_ATTRIBUTES.get();
}
@Override
public boolean isAsgBasedDedicatedDeployment() {
return IS_ASG_BASED_DEPLOYMENT_ENABLED.get();
}
@Override
public String getElasticsearchProcessName() {
return ES_PROCESS_NAME.get();
}
/**
* @return Elasticsearch Index Refresh Interval
*/
public String getIndexRefreshInterval() {
return INDEX_REFRESH_INTERVAL.get();
}
@Override
public boolean doesElasticsearchStartManually() {
return false;
}
@Override
public String getClusterShardAllocationAttribute() {
return ES_SHARD_ALLOCATION_ATTRIBUTE.get();
}
@Override
public boolean isCustomShardAllocationPolicyEnabled() {
return IS_SHARD_ALLOCATION_POLICY_ENABLED.get();
}
@Override
public String getEsKeyName(String escarKey) {
return config.get(escarKey);
}
@Override
public boolean isDebugEnabled() {
return IS_DEBUG_ENABLED.get();
}
@Override
public boolean isShardPerNodeEnabled() {
return IS_SHARDS_PER_NODE_ENABLED.get();
}
@Override
public boolean isIndexAutoCreationEnabled() {
return IS_INDEX_AUTOCREATION_ENABLED.get();
}
@Override
public String getIndexMetadata() {
return INDEX_METADATA.get();
}
@Override
public int getAutoCreateIndexTimeout() {
return AUTOCREATE_INDEX_TIMEOUT.get();
}
@Override
public int getAutoCreateIndexInitialStartDelaySeconds() {
return AUTOCREATE_INDEX_INITIAL_START_DELAY_SECONDS.get();
}
@Override
public int getAutoCreateIndexPeriodicScheduledHour() {
return AUTOCREATE_INDEX_PERIODIC_SCHEDULED_HOUR.get();
}
@Override
public String getExtraConfigParams() {
return EXTRA_PARAMS.get();
}
@Override
public int getBackupHour() {
return BACKUP_HOUR.get();
}
public boolean isSnapshotBackupEnabled() {
return IS_SNAPSHOT_BACKUP_ENABLED.get();
}
@Override
public String getCommaSeparatedIndicesToBackup() {
return COMMA_SEPARATED_INDICES_TO_BACKUP.get();
}
@Override
public boolean partiallyBackupIndices() {
return PARTIALLY_BACKUP_INDICES.get();
}
@Override
public boolean includeGlobalStateDuringBackup() {
return INCLUDE_GLOBAL_STATE_DURING_BACKUP.get();
}
@Override
public boolean waitForCompletionOfBackup() {
return WAIT_FOR_COMPLETION_OF_BACKUP.get();
}
@Override
public boolean includeIndexNameInSnapshot() {
return INCLUDE_INDEX_NAME_IN_SNAPSHOT_BACKUP.get();
}
@Override
public boolean isHourlySnapshotEnabled() {
return IS_HOURLY_SNAPSHOT_BACKUP_ENABLED.get();
}
@Override
public long getBackupCronTimerInSeconds() {
return BACKUP_CRON_TIMER_SECONDS.get();
}
@Override
public boolean isRestoreEnabled() {
return IS_RESTORE_ENABLED.get();
}
@Override
public String getRestoreRepositoryName() {
return RESTORE_REPOSITORY_NAME.get();
}
@Override
public String getRestoreSourceClusterName() {
return RESTORE_SOURCE_CLUSTER_NAME.get();
}
@Override
public String getRestoreSourceRepositoryRegion() {
return RESTORE_SOURCE_REPO_REGION.get();
}
@Override
public String getRestoreLocation() {
return RESTORE_LOCATION.get();
}
@Override
public String getRestoreRepositoryType() {
return RESTORE_REPOSITORY_TYPE.get();
}
@Override
public String getRestoreSnapshotName() {
return RESTORE_SNAPSHOT_NAME.get();
}
@Override
public String getCommaSeparatedIndicesToRestore() {
return COMMA_SEPARATED_INDICES_TO_RESTORE.get();
}
@Override
public int getRestoreTaskInitialDelayInSeconds() {
return RESTORE_TASK_INITIAL_START_DELAY_SECONDS.get();
}
@Override
public boolean amITribeNode() {
return AM_I_TRIBE_NODE.get();
}
@Override
public boolean amIWriteEnabledTribeNode() {
return AM_I_WRITE_ENABLED_TRIBE_NODE.get();
}
@Override
public boolean amIMetadataEnabledTribeNode() {
return AM_I_METADATA_ENABLED_TRIBE_NODE.get();
}
@Override
public String getCommaSeparatedSourceClustersForTribeNode() {
return COMMA_SEPARATED_SOURCE_CLUSTERS_IN_TRIBE.get();
}
@Override
public boolean amISourceClusterForTribeNode() {
return AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE.get();
}
@Override
public String getCommaSeparatedTribeClusterNames() {
return COMMA_SEPARATED_TRIBE_CLUSTERS.get();
}
@Override
public boolean isNodeMismatchWithDiscoveryEnabled() {
return IS_NODE_MISMATCH_WITH_DISCOVERY_ENABLED.get();
}
@Override
public int getDesiredNumberOfNodesInCluster() {
return DESIRED_NUM_NODES_IN_CLUSTER.get();
}
@Override
public boolean isEurekaHealthCheckEnabled() {
return IS_EUREKA_HEALTH_CHECK_ENABLED.get();
}
@Override
public boolean isLocalModeEnabled() {
return IS_LOCAL_MODE_ENABLED.get();
}
@Override
public String getCassandraKeyspaceName() {
return CASSANDRA_KEYSPACE_NAME.get();
}
@Override
public int getCassandraThriftPortForAstyanax() {
return CASSANDRA_THRIFT_PORT.get();
}
@Override
public boolean isEurekaHostSupplierEnabled() {
return IS_EUREKA_HOST_SUPPLIER_ENABLED.get();
}
@Override
public String getCommaSeparatedCassandraHostNames() {
return COMMA_SEPARATED_CASSANDRA_HOSTNAMES.get();
}
@Override
public boolean isSecutrityGroupInMultiDC() {
return IS_SECURITY_GROUP_IN_MULTI_DC.get();
}
@Override
public boolean isKibanaSetupRequired() {
return IS_KIBANA_SETUP_REQUIRED.get();
}
@Override
public int getKibanaPort() {
return KIBANA_PORT.get();
}
@Override
public boolean amISourceClusterForTribeNodeInMultiDC() {
return AM_I_SOURCE_CLUSTER_FOR_TRIBE_NODE_IN_MULTI_DC.get();
}
@Override
public boolean reportMetricsFromMasterOnly() {
return REPORT_METRICS_FROM_MASTER_ONLY.get();
}
@Override
public String getTribePreferredClusterIdOnConflict() {
return TRIBE_PREFERRED_CLUSTER_ID_ON_CONFLICT.get();
}
@Override
public String getEsNodeName() {
return ES_NODE_NAME;
}
@Override
public boolean isVPCMigrationModeEnabled() {
return IS_VPC_MIGRATION_MODE_ENABLED.get();
}
@Override
public boolean isDeployedInVPC() {
return IS_DEPLOYED_IN_VPC;
}
@Override
public boolean isVPCExternal() {
return IS_VPC_EXTERNAL;
}
@Override
public String getACLGroupNameForVPC() {
return ACL_GROUP_NAME_FOR_VPC.get();
}
@Override
public String getACLGroupIdForVPC() {
return ACL_GROUP_ID_FOR_VPC;
}
@Override
public void setACLGroupIdForVPC(String aclGroupIdForVPC) {
ACL_GROUP_ID_FOR_VPC = aclGroupIdForVPC;
}
@Override
public String getMacIdForInstance() {
return MAC_ID;
}
@Override
public void customizeSettings(Map<String, String> settings) {
}
@Override
public void customizePlugins(Collection<Class<? extends Plugin>> plugins) {
}
}