Validated configuration for one storage instance.
Standalone remains the default. Cluster metadata, private transport, node control state, and replica-quorum values are typed and validated. Public cluster S3 remains off by default and requires explicit data-plane activation.
Summary
Types
@type cluster_topology() :: :none | :static | :dns
@type metadata_schema() :: :v1 | :v2
@type mode() :: :standalone | :cluster
@type node_role() :: :data | :metadata
@type t() :: %ExStorageService.InstanceConfig{ allow_degraded_writes: boolean(), auto_start: boolean(), blob_root: String.t(), cluster_bootstrap: boolean(), cluster_data_plane_enabled: boolean(), cluster_members: [cluster_member()], cluster_name: String.t(), cluster_seeds: [node() | String.t()], cluster_topology: cluster_topology(), data_root: String.t(), erlang_cookie: atom(), erlang_node: node(), instance: atom() | String.t(), internal_advertised_url: String.t() | nil, internal_auth_skew_seconds: pos_integer(), internal_bind: :inet.ip_address(), internal_port: :inet.port_number(), internal_secret: String.t() | nil, internal_tls_certfile: String.t() | nil, internal_tls_keyfile: String.t() | nil, internal_transport_enabled: boolean(), metadata_root: String.t(), metadata_schema: metadata_schema(), mode: mode(), node_capacity: pos_integer() | nil, node_draining: boolean(), node_enabled: boolean(), node_generation: pos_integer(), node_id: String.t(), node_role: node_role(), node_zone: String.t() | nil, orphan_grace_seconds: pos_integer(), public_s3_enabled: boolean(), ra_root: String.t(), repair_concurrency: pos_integer(), replica_concurrency: pos_integer(), replication_factor: pos_integer(), tmp_root: String.t(), web_enabled: boolean(), workers: %{required(atom()) => boolean()}, write_quorum: pos_integer() }