NAME
Data::AnyXfer::Elastic::ServerDefinition - Stores node and cluster information
SYNOPSIS
use Data::AnyXfer::Elastic::ServerDefinition ();
# Load definitions...
# from a path
my @definitions =
Data::AnyXfer::Elastic::ServerDefinition
->load_json_file('servers.json');
# or from an open handle
open(my $open_fh, '<:encoding(UTF-8)', 'servers.json')
|| croak "Failed to open server definitions file ($!)";
my @definitions =
Data::AnyXfer::Elastic::ServerDefinition
->load_json_handle($open_fh);
# Or define them programatically...
my $definition = Data::AnyXfer::Elastic::ServerDefinition->new(
name => 'testserver',
env => 'live',
installed_version => '6.4.0',
silos => ["public_data"],
standalone_nodes => ["test-es-1.example.com:9200"],
cluser_nodes => ["test-es-1.example.com:9201"],
}
);
DESCRIPTION
The class represents the information required to interact with an Elasticsearch server.
This can consist of a traditional cluster, or a number of seperate instances acting as a cluster.
These definitions will usually be "load" in loaded from a JSON file.
CONSTANTS
ENV_VARNAME
-
This is the ENV variable name which "load_env" will use to source and load as a server definition JSON file.
ATTRIBUTES
name
-
E.g. -> 'my-test-name'
Type: SLUG/SIMPLE STRING
The name of the server cluster or standalone server group.
env
-
E.g. -> 'production'
Type: SLUG/SIMPLE STRING
An environment value for the definition. This will be used by calling code to find the correct definition for the runtime environment.
installed_version
-
E.g. -> '6.4.0'
Type: VERSION STRING
The installed elasticsearch version for the cluster or standalone server group.
This will be used to adjust queries and API calls to allow support for both the ES 3.5.x range and ES 6+ as there were major API and ABI breakages between these versions.
cluser_nodes
-
E.g. -> [ 'localhost:9200' ]
Type: ARRAY
An array of URI strings for each node in the cluster, without the protocol.
standalone_nodes
-
E.g. -> [ 'localhost:9200' ]
Type: ARRAY
An array of URI strings for each node in the standalone cluster, without the protocol.
These nodes should be kept in sync with the same data, and will act as multipel 1x1 node clusters operating as a single group for high availability without clustering and recovery overheads (and associated pitfalls).
silos
-
E.g. -> [ 'public_data', 'sensitive_data' ]
Type: ARRAY
An array of silo strings, used to "zone" servers and allow different servers to contain different datasets.
METHODS
BUILD
my $def =
Data::AnyXfer::Elastic::ServerDefinition->new;
# extra validation errors thrown
Extra validation of some attributes happens during the Moo (MOP) BUILD hook / phase.
load_json_handle
my @definitions =
Data::AnyXfer::Elastic::ServerDefinition->load_json_handle($fh);
Loads the server definition from the supplied JSON file handle.
load_json_file
my @definitions =
Data::AnyXfer::Elastic::ServerDefinition->load_json_file($file);
Loads the server definition from the supplied JSON file path.
load_from_env
# Launched with DATA_ANYXFER_SERVERS_FILE="~/servers.json" perl
my @definitions =
Data::AnyXfer::Elastic::ServerDefinition->load_from_env;
belongs_to
if ($server->belongs_to('public_data')) {
# do something with it
}
Checks if a server definition belongs to the supplied silo.
Return 1
if it does, otherwise returns 0
.
nodes
This will return the primary node information for data importing.
In an environment with standalone node clusters, it will return just these nodes, as these should be your heavy read nodes.
['node1'], ['node2'], ['node3']
A definition without standalone nodes will return the clustered nodes as such:
['node1', 'node2', 'node3']
Each element in the array returned by this method will be treated as a single target for population, this is why a multi-dimensional array is used, signifingy that all nodes in a real multicast ES cluster should be used for a single transport (they will be round-robined in the case connection failure).
COPYRIGHT
This software is copyright (c) 2019, Anthony Lucas.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.