Documentation ¶
Index ¶
- Constants
- func AddFlags(fs *flag.FlagSet, f *Flags)
- func DefaultRPCProtocol() (int, error)
- func FormatFrom(name string) string
- func TranslateKeys(v map[string]interface{}, dict map[string]string)
- type Addresses
- type AdvertiseAddrsConfig
- type Autopilot
- type Builder
- type CheckDefinition
- type Config
- type Consul
- type DNS
- type Flags
- type HTTPConfig
- type Limits
- type Performance
- type Ports
- type RetryJoinAzure
- type RetryJoinEC2
- type RetryJoinGCE
- type RuntimeConfig
- type Segment
- type ServiceDefinition
- type Source
- type Telemetry
- type UnixSocket
Constants ¶
const ( SerfLANKeyring = "serf/local.keyring" SerfWANKeyring = "serf/remote.keyring" )
Variables ¶
This section is empty.
Functions ¶
func DefaultRPCProtocol ¶
func FormatFrom ¶
func TranslateKeys ¶
TranslateKeys recursively translates all keys from m in-place to their canonical form as defined in dict which maps an alias name to the canonical name. If m already has a value for the canonical name then that one is used and the value for the alias name is discarded. Alias names are matched case-insensitive.
Example:
m = TranslateKeys(m, map[string]string{"CamelCase": "snake_case"})
Types ¶
type AdvertiseAddrsConfig ¶
type Autopilot ¶
type Autopilot struct { CleanupDeadServers *bool `json:"cleanup_dead_servers,omitempty" hcl:"cleanup_dead_servers" mapstructure:"cleanup_dead_servers"` DisableUpgradeMigration *bool `json:"disable_upgrade_migration,omitempty" hcl:"disable_upgrade_migration" mapstructure:"disable_upgrade_migration"` LastContactThreshold *string `json:"last_contact_threshold,omitempty" hcl:"last_contact_threshold" mapstructure:"last_contact_threshold"` MaxTrailingLogs *int `json:"max_trailing_logs,omitempty" hcl:"max_trailing_logs" mapstructure:"max_trailing_logs"` RedundancyZoneTag *string `json:"redundancy_zone_tag,omitempty" hcl:"redundancy_zone_tag" mapstructure:"redundancy_zone_tag"` ServerStabilizationTime *string `json:"server_stabilization_time,omitempty" hcl:"server_stabilization_time" mapstructure:"server_stabilization_time"` UpgradeVersionTag *string `json:"upgrade_version_tag,omitempty" hcl:"upgrade_version_tag" mapstructure:"upgrade_version_tag"` }
type Builder ¶
type Builder struct { // Flags contains the parsed command line arguments. Flags Flags // Head, Sources, and Tail are used to manage the order of the // config sources, as described in the comments above. Head []Source Sources []Source Tail []Source // Warnings contains the warnings encountered when // parsing the configuration. Warnings []string // Hostname returns the hostname of the machine. If nil, os.Hostname // is called. Hostname func() (string, error) // GetPrivateIPv4 and GetPublicIPv6 return suitable default addresses // for cases when the user doesn't supply them. GetPrivateIPv4 func() ([]*net.IPAddr, error) GetPublicIPv6 func() ([]*net.IPAddr, error) // contains filtered or unexported fields }
Builder constructs a valid runtime configuration from multiple configuration sources.
To build the runtime configuration first call Build() which merges the sources in a pre-defined order, converts the data types and structures into their final form and performs the syntactic validation.
The sources are merged in the following order:
- default configuration
- config files in alphabetical order
- command line arguments
The config sources are merged sequentially and later values overwrite previously set values. Slice values are merged by concatenating the two slices.
Then call Validate() to perform the semantic validation to ensure that the configuration is ready to be used.
Splitting the construction into two phases greatly simplifies testing since not all pre-conditions have to be satisfied when performing syntactical tests.
func NewBuilder ¶
NewBuilder returns a new configuration builder based on the given command line flags.
func (*Builder) Build ¶
func (b *Builder) Build() (rt RuntimeConfig, err error)
Build constructs the runtime configuration from the config sources and the command line flags. The config sources are processed in the order they were added with the flags being processed last to give precedence over the other sources. If the error is nil then warnings can still contain deprecation or format warnings that should be presented to the user.
func (*Builder) BuildAndValidate ¶
func (b *Builder) BuildAndValidate() (RuntimeConfig, error)
func (*Builder) ReadFile ¶
ReadFile parses a JSON or HCL config file and appends it to the list of config sources.
func (*Builder) ReadPath ¶
ReadPath reads a single config file or all files in a directory (but not its sub-directories) and appends them to the list of config sources. If path refers to a file then the format is assumed to be JSON unless the file has a '.hcl' suffix. If path refers to a directory then the format is determined by the suffix and only files with a '.json' or '.hcl' suffix are processed.
func (*Builder) Validate ¶
func (b *Builder) Validate(rt RuntimeConfig) error
Validate performs semantical validation of the runtime configuration.
type CheckDefinition ¶
type CheckDefinition struct { ID *string `json:"id,omitempty" hcl:"id" mapstructure:"id"` Name *string `json:"name,omitempty" hcl:"name" mapstructure:"name"` Notes *string `json:"notes,omitempty" hcl:"notes" mapstructure:"notes"` ServiceID *string `json:"service_id,omitempty" hcl:"service_id" mapstructure:"service_id"` Token *string `json:"token,omitempty" hcl:"token" mapstructure:"token"` Status *string `json:"status,omitempty" hcl:"status" mapstructure:"status"` Script *string `json:"script,omitempty" hcl:"script" mapstructure:"script"` ScriptArgs []string `json:"args,omitempty" hcl:"args" mapstructure:"args"` HTTP *string `json:"http,omitempty" hcl:"http" mapstructure:"http"` Header map[string][]string `json:"header,omitempty" hcl:"header" mapstructure:"header"` Method *string `json:"method,omitempty" hcl:"method" mapstructure:"method"` TCP *string `json:"tcp,omitempty" hcl:"tcp" mapstructure:"tcp"` Interval *string `json:"interval,omitempty" hcl:"interval" mapstructure:"interval"` DockerContainerID *string `json:"docker_container_id,omitempty" hcl:"docker_container_id" mapstructure:"docker_container_id"` Shell *string `json:"shell,omitempty" hcl:"shell" mapstructure:"shell"` TLSSkipVerify *bool `json:"tls_skip_verify,omitempty" hcl:"tls_skip_verify" mapstructure:"tls_skip_verify"` Timeout *string `json:"timeout,omitempty" hcl:"timeout" mapstructure:"timeout"` TTL *string `json:"ttl,omitempty" hcl:"ttl" mapstructure:"ttl"` DeregisterCriticalServiceAfter *string `` /* 139-byte string literal not displayed */ }
type Config ¶
type Config struct { ACLAgentMasterToken *string `json:"acl_agent_master_token,omitempty" hcl:"acl_agent_master_token" mapstructure:"acl_agent_master_token"` ACLAgentToken *string `json:"acl_agent_token,omitempty" hcl:"acl_agent_token" mapstructure:"acl_agent_token"` ACLDatacenter *string `json:"acl_datacenter,omitempty" hcl:"acl_datacenter" mapstructure:"acl_datacenter"` ACLDefaultPolicy *string `json:"acl_default_policy,omitempty" hcl:"acl_default_policy" mapstructure:"acl_default_policy"` ACLDownPolicy *string `json:"acl_down_policy,omitempty" hcl:"acl_down_policy" mapstructure:"acl_down_policy"` ACLEnableKeyListPolicy *bool `json:"acl_enable_key_list_policy,omitempty" hcl:"acl_enable_key_list_policy" mapstructure:"acl_enable_key_list_policy"` ACLEnforceVersion8 *bool `json:"acl_enforce_version_8,omitempty" hcl:"acl_enforce_version_8" mapstructure:"acl_enforce_version_8"` ACLMasterToken *string `json:"acl_master_token,omitempty" hcl:"acl_master_token" mapstructure:"acl_master_token"` ACLReplicationToken *string `json:"acl_replication_token,omitempty" hcl:"acl_replication_token" mapstructure:"acl_replication_token"` ACLTTL *string `json:"acl_ttl,omitempty" hcl:"acl_ttl" mapstructure:"acl_ttl"` ACLToken *string `json:"acl_token,omitempty" hcl:"acl_token" mapstructure:"acl_token"` Addresses Addresses `json:"addresses,omitempty" hcl:"addresses" mapstructure:"addresses"` AdvertiseAddrLAN *string `json:"advertise_addr,omitempty" hcl:"advertise_addr" mapstructure:"advertise_addr"` AdvertiseAddrWAN *string `json:"advertise_addr_wan,omitempty" hcl:"advertise_addr_wan" mapstructure:"advertise_addr_wan"` Autopilot Autopilot `json:"autopilot,omitempty" hcl:"autopilot" mapstructure:"autopilot"` BindAddr *string `json:"bind_addr,omitempty" hcl:"bind_addr" mapstructure:"bind_addr"` Bootstrap *bool `json:"bootstrap,omitempty" hcl:"bootstrap" mapstructure:"bootstrap"` BootstrapExpect *int `json:"bootstrap_expect,omitempty" hcl:"bootstrap_expect" mapstructure:"bootstrap_expect"` CAFile *string `json:"ca_file,omitempty" hcl:"ca_file" mapstructure:"ca_file"` CAPath *string `json:"ca_path,omitempty" hcl:"ca_path" mapstructure:"ca_path"` CertFile *string `json:"cert_file,omitempty" hcl:"cert_file" mapstructure:"cert_file"` Check *CheckDefinition `json:"check,omitempty" hcl:"check" mapstructure:"check"` // needs to be a pointer to avoid partial merges CheckUpdateInterval *string `json:"check_update_interval,omitempty" hcl:"check_update_interval" mapstructure:"check_update_interval"` Checks []CheckDefinition `json:"checks,omitempty" hcl:"checks" mapstructure:"checks"` ClientAddr *string `json:"client_addr,omitempty" hcl:"client_addr" mapstructure:"client_addr"` DNS DNS `json:"dns_config,omitempty" hcl:"dns_config" mapstructure:"dns_config"` DNSDomain *string `json:"domain,omitempty" hcl:"domain" mapstructure:"domain"` DNSRecursors []string `json:"recursors,omitempty" hcl:"recursors" mapstructure:"recursors"` DataDir *string `json:"data_dir,omitempty" hcl:"data_dir" mapstructure:"data_dir"` Datacenter *string `json:"datacenter,omitempty" hcl:"datacenter" mapstructure:"datacenter"` DisableAnonymousSignature *bool `json:"disable_anonymous_signature,omitempty" hcl:"disable_anonymous_signature" mapstructure:"disable_anonymous_signature"` DisableCoordinates *bool `json:"disable_coordinates,omitempty" hcl:"disable_coordinates" mapstructure:"disable_coordinates"` DisableHostNodeID *bool `json:"disable_host_node_id,omitempty" hcl:"disable_host_node_id" mapstructure:"disable_host_node_id"` DisableKeyringFile *bool `json:"disable_keyring_file,omitempty" hcl:"disable_keyring_file" mapstructure:"disable_keyring_file"` DisableRemoteExec *bool `json:"disable_remote_exec,omitempty" hcl:"disable_remote_exec" mapstructure:"disable_remote_exec"` DisableUpdateCheck *bool `json:"disable_update_check,omitempty" hcl:"disable_update_check" mapstructure:"disable_update_check"` DiscardCheckOutput *bool `json:"discard_check_output" hcl:"discard_check_output" mapstructure:"discard_check_output"` EnableACLReplication *bool `json:"enable_acl_replication,omitempty" hcl:"enable_acl_replication" mapstructure:"enable_acl_replication"` EnableDebug *bool `json:"enable_debug,omitempty" hcl:"enable_debug" mapstructure:"enable_debug"` EnableScriptChecks *bool `json:"enable_script_checks,omitempty" hcl:"enable_script_checks" mapstructure:"enable_script_checks"` EnableSyslog *bool `json:"enable_syslog,omitempty" hcl:"enable_syslog" mapstructure:"enable_syslog"` EncryptKey *string `json:"encrypt,omitempty" hcl:"encrypt" mapstructure:"encrypt"` EncryptVerifyIncoming *bool `json:"encrypt_verify_incoming,omitempty" hcl:"encrypt_verify_incoming" mapstructure:"encrypt_verify_incoming"` EncryptVerifyOutgoing *bool `json:"encrypt_verify_outgoing,omitempty" hcl:"encrypt_verify_outgoing" mapstructure:"encrypt_verify_outgoing"` HTTPConfig HTTPConfig `json:"http_config,omitempty" hcl:"http_config" mapstructure:"http_config"` KeyFile *string `json:"key_file,omitempty" hcl:"key_file" mapstructure:"key_file"` LeaveOnTerm *bool `json:"leave_on_terminate,omitempty" hcl:"leave_on_terminate" mapstructure:"leave_on_terminate"` Limits Limits `json:"limits,omitempty" hcl:"limits" mapstructure:"limits"` LogLevel *string `json:"log_level,omitempty" hcl:"log_level" mapstructure:"log_level"` NodeID *string `json:"node_id,omitempty" hcl:"node_id" mapstructure:"node_id"` NodeMeta map[string]string `json:"node_meta,omitempty" hcl:"node_meta" mapstructure:"node_meta"` NodeName *string `json:"node_name,omitempty" hcl:"node_name" mapstructure:"node_name"` NonVotingServer *bool `json:"non_voting_server,omitempty" hcl:"non_voting_server" mapstructure:"non_voting_server"` Performance Performance `json:"performance,omitempty" hcl:"performance" mapstructure:"performance"` PidFile *string `json:"pid_file,omitempty" hcl:"pid_file" mapstructure:"pid_file"` Ports Ports `json:"ports,omitempty" hcl:"ports" mapstructure:"ports"` RPCProtocol *int `json:"protocol,omitempty" hcl:"protocol" mapstructure:"protocol"` RaftProtocol *int `json:"raft_protocol,omitempty" hcl:"raft_protocol" mapstructure:"raft_protocol"` ReconnectTimeoutLAN *string `json:"reconnect_timeout,omitempty" hcl:"reconnect_timeout" mapstructure:"reconnect_timeout"` ReconnectTimeoutWAN *string `json:"reconnect_timeout_wan,omitempty" hcl:"reconnect_timeout_wan" mapstructure:"reconnect_timeout_wan"` RejoinAfterLeave *bool `json:"rejoin_after_leave,omitempty" hcl:"rejoin_after_leave" mapstructure:"rejoin_after_leave"` RetryJoinIntervalLAN *string `json:"retry_interval,omitempty" hcl:"retry_interval" mapstructure:"retry_interval"` RetryJoinIntervalWAN *string `json:"retry_interval_wan,omitempty" hcl:"retry_interval_wan" mapstructure:"retry_interval_wan"` RetryJoinLAN []string `json:"retry_join,omitempty" hcl:"retry_join" mapstructure:"retry_join"` RetryJoinMaxAttemptsLAN *int `json:"retry_max,omitempty" hcl:"retry_max" mapstructure:"retry_max"` RetryJoinMaxAttemptsWAN *int `json:"retry_max_wan,omitempty" hcl:"retry_max_wan" mapstructure:"retry_max_wan"` RetryJoinWAN []string `json:"retry_join_wan,omitempty" hcl:"retry_join_wan" mapstructure:"retry_join_wan"` SegmentName *string `json:"segment,omitempty" hcl:"segment" mapstructure:"segment"` Segments []Segment `json:"segments,omitempty" hcl:"segments" mapstructure:"segments"` SerfBindAddrLAN *string `json:"serf_lan,omitempty" hcl:"serf_lan" mapstructure:"serf_lan"` SerfBindAddrWAN *string `json:"serf_wan,omitempty" hcl:"serf_wan" mapstructure:"serf_wan"` ServerMode *bool `json:"server,omitempty" hcl:"server" mapstructure:"server"` ServerName *string `json:"server_name,omitempty" hcl:"server_name" mapstructure:"server_name"` Service *ServiceDefinition `json:"service,omitempty" hcl:"service" mapstructure:"service"` Services []ServiceDefinition `json:"services,omitempty" hcl:"services" mapstructure:"services"` SessionTTLMin *string `json:"session_ttl_min,omitempty" hcl:"session_ttl_min" mapstructure:"session_ttl_min"` SkipLeaveOnInt *bool `json:"skip_leave_on_interrupt,omitempty" hcl:"skip_leave_on_interrupt" mapstructure:"skip_leave_on_interrupt"` StartJoinAddrsLAN []string `json:"start_join,omitempty" hcl:"start_join" mapstructure:"start_join"` StartJoinAddrsWAN []string `json:"start_join_wan,omitempty" hcl:"start_join_wan" mapstructure:"start_join_wan"` SyslogFacility *string `json:"syslog_facility,omitempty" hcl:"syslog_facility" mapstructure:"syslog_facility"` TLSCipherSuites *string `json:"tls_cipher_suites,omitempty" hcl:"tls_cipher_suites" mapstructure:"tls_cipher_suites"` TLSMinVersion *string `json:"tls_min_version,omitempty" hcl:"tls_min_version" mapstructure:"tls_min_version"` TLSPreferServerCipherSuites *bool `` /* 133-byte string literal not displayed */ TaggedAddresses map[string]string `json:"tagged_addresses,omitempty" hcl:"tagged_addresses" mapstructure:"tagged_addresses"` Telemetry Telemetry `json:"telemetry,omitempty" hcl:"telemetry" mapstructure:"telemetry"` TranslateWANAddrs *bool `json:"translate_wan_addrs,omitempty" hcl:"translate_wan_addrs" mapstructure:"translate_wan_addrs"` UI *bool `json:"ui,omitempty" hcl:"ui" mapstructure:"ui"` UIDir *string `json:"ui_dir,omitempty" hcl:"ui_dir" mapstructure:"ui_dir"` UnixSocket UnixSocket `json:"unix_sockets,omitempty" hcl:"unix_sockets" mapstructure:"unix_sockets"` VerifyIncoming *bool `json:"verify_incoming,omitempty" hcl:"verify_incoming" mapstructure:"verify_incoming"` VerifyIncomingHTTPS *bool `json:"verify_incoming_https,omitempty" hcl:"verify_incoming_https" mapstructure:"verify_incoming_https"` VerifyIncomingRPC *bool `json:"verify_incoming_rpc,omitempty" hcl:"verify_incoming_rpc" mapstructure:"verify_incoming_rpc"` VerifyOutgoing *bool `json:"verify_outgoing,omitempty" hcl:"verify_outgoing" mapstructure:"verify_outgoing"` VerifyServerHostname *bool `json:"verify_server_hostname,omitempty" hcl:"verify_server_hostname" mapstructure:"verify_server_hostname"` Watches []map[string]interface{} `json:"watches,omitempty" hcl:"watches" mapstructure:"watches"` // non-user configurable values ACLDisabledTTL *string `json:"acl_disabled_ttl,omitempty" hcl:"acl_disabled_ttl" mapstructure:"acl_disabled_ttl"` AEInterval *string `json:"ae_interval,omitempty" hcl:"ae_interval" mapstructure:"ae_interval"` CheckDeregisterIntervalMin *string `` /* 127-byte string literal not displayed */ CheckReapInterval *string `json:"check_reap_interval,omitempty" hcl:"check_reap_interval" mapstructure:"check_reap_interval"` Consul Consul `json:"consul,omitempty" hcl:"consul" mapstructure:"consul"` Revision *string `json:"revision,omitempty" hcl:"revision" mapstructure:"revision"` SegmentLimit *int `json:"segment_limit,omitempty" hcl:"segment_limit" mapstructure:"segment_limit"` SegmentNameLimit *int `json:"segment_name_limit,omitempty" hcl:"segment_name_limit" mapstructure:"segment_name_limit"` SyncCoordinateIntervalMin *string `json:"sync_coordinate_interval_min,omitempty" hcl:"sync_coordinate_interval_min" mapstructure:"sync_coordinate_interval_min"` SyncCoordinateRateTarget *float64 `json:"sync_coordinate_rate_target,omitempty" hcl:"sync_coordinate_rate_target" mapstructure:"sync_coordinate_rate_target"` Version *string `json:"version,omitempty" hcl:"version" mapstructure:"version"` VersionPrerelease *string `json:"version_prerelease,omitempty" hcl:"version_prerelease" mapstructure:"version_prerelease"` }
Config defines the format of a configuration file in either JSON or HCL format.
It must contain only pointer values, slices and maps to support standardized merging of multiple Config structs into one.
Since this is the format which users use to specify their configuration it should be treated as an external API which cannot be changed and refactored at will since this will break existing setups.
func Merge ¶
Merge recursively combines a set of config file structures into a single structure according to the following rules:
* only values of type struct, slice, map and pointer to simple types are allowed. Other types panic. * when merging two structs the result is the recursive merge of all fields according to the rules below * when merging two slices the result is the second slice appended to the first * when merging two maps the result is the second map if it is not empty, otherwise the first * when merging two pointer values the result is the second value if it is not nil, otherwise the first
type Consul ¶
type Consul struct { Coordinate struct { UpdateBatchSize *int `json:"update_batch_size,omitempty" hcl:"update_batch_size" mapstructure:"update_batch_size"` UpdateMaxBatches *int `json:"update_max_batches,omitempty" hcl:"update_max_batches" mapstructure:"update_max_batches"` UpdatePeriod *string `json:"update_period,omitempty" hcl:"update_period" mapstructure:"update_period"` } `json:"coordinate,omitempty" hcl:"coordinate" mapstructure:"coordinate"` Raft struct { ElectionTimeout *string `json:"election_timeout,omitempty" hcl:"election_timeout" mapstructure:"election_timeout"` HeartbeatTimeout *string `json:"heartbeat_timeout,omitempty" hcl:"heartbeat_timeout" mapstructure:"heartbeat_timeout"` LeaderLeaseTimeout *string `json:"leader_lease_timeout,omitempty" hcl:"leader_lease_timeout" mapstructure:"leader_lease_timeout"` } `json:"raft,omitempty" hcl:"raft" mapstructure:"raft"` SerfLAN struct { Memberlist struct { GossipInterval *string `json:"gossip_interval,omitempty" hcl:"gossip_interval" mapstructure:"gossip_interval"` ProbeInterval *string `json:"probe_interval,omitempty" hcl:"probe_interval" mapstructure:"probe_interval"` ProbeTimeout *string `json:"probe_timeout,omitempty" hcl:"probe_timeout" mapstructure:"probe_timeout"` SuspicionMult *int `json:"suspicion_mult,omitempty" hcl:"suspicion_mult" mapstructure:"suspicion_mult"` } `json:"memberlist,omitempty" hcl:"memberlist" mapstructure:"memberlist"` } `json:"serf_lan,omitempty" hcl:"serf_lan" mapstructure:"serf_lan"` SerfWAN struct { Memberlist struct { GossipInterval *string `json:"gossip_interval,omitempty" hcl:"gossip_interval" mapstructure:"gossip_interval"` ProbeInterval *string `json:"probe_interval,omitempty" hcl:"probe_interval" mapstructure:"probe_interval"` ProbeTimeout *string `json:"probe_timeout,omitempty" hcl:"probe_timeout" mapstructure:"probe_timeout"` SuspicionMult *int `json:"suspicion_mult,omitempty" hcl:"suspicion_mult" mapstructure:"suspicion_mult"` } `json:"memberlist,omitempty" hcl:"memberlist" mapstructure:"memberlist"` } `json:"serf_wan,omitempty" hcl:"serf_wan" mapstructure:"serf_wan"` Server struct { HealthInterval *string `json:"health_interval,omitempty" hcl:"health_interval" mapstructure:"health_interval"` } `json:"server,omitempty" hcl:"server" mapstructure:"server"` }
type DNS ¶
type DNS struct { AllowStale *bool `json:"allow_stale,omitempty" hcl:"allow_stale" mapstructure:"allow_stale"` DisableCompression *bool `json:"disable_compression,omitempty" hcl:"disable_compression" mapstructure:"disable_compression"` EnableTruncate *bool `json:"enable_truncate,omitempty" hcl:"enable_truncate" mapstructure:"enable_truncate"` MaxStale *string `json:"max_stale,omitempty" hcl:"max_stale" mapstructure:"max_stale"` NodeTTL *string `json:"node_ttl,omitempty" hcl:"node_ttl" mapstructure:"node_ttl"` OnlyPassing *bool `json:"only_passing,omitempty" hcl:"only_passing" mapstructure:"only_passing"` RecursorTimeout *string `json:"recursor_timeout,omitempty" hcl:"recursor_timeout" mapstructure:"recursor_timeout"` ServiceTTL map[string]string `json:"service_ttl,omitempty" hcl:"service_ttl" mapstructure:"service_ttl"` UDPAnswerLimit *int `json:"udp_answer_limit,omitempty" hcl:"udp_answer_limit" mapstructure:"udp_answer_limit"` }
type Flags ¶
type Flags struct { // Config contains the command line arguments that can also be set // in a config file. Config Config // ConfigFiles contains the list of config files and directories // that should be read. ConfigFiles []string // DevMode indicates whether the agent should be started in development // mode. This cannot be configured in a config file. DevMode *bool // HCL contains an arbitrary config in hcl format. HCL []string }
Flags defines the command line flags.
func ParseFlags ¶
ParseFlag parses the arguments into a Flags struct.
type HTTPConfig ¶
type Performance ¶
type Performance struct { LeaveDrainTime *string `json:"leave_drain_time,omitempty" hcl:"leave_drain_time" mapstructure:"leave_drain_time"` RaftMultiplier *int `json:"raft_multiplier,omitempty" hcl:"raft_multiplier" mapstructure:"raft_multiplier"` // todo(fs): validate as uint RPCHoldTimeout *string `json:"rpc_hold_timeout" hcl:"rpc_hold_timeout" mapstructure:"rpc_hold_timeout"` }
type Ports ¶
type Ports struct { DNS *int `json:"dns,omitempty" hcl:"dns" mapstructure:"dns"` HTTP *int `json:"http,omitempty" hcl:"http" mapstructure:"http"` HTTPS *int `json:"https,omitempty" hcl:"https" mapstructure:"https"` SerfLAN *int `json:"serf_lan,omitempty" hcl:"serf_lan" mapstructure:"serf_lan"` SerfWAN *int `json:"serf_wan,omitempty" hcl:"serf_wan" mapstructure:"serf_wan"` Server *int `json:"server,omitempty" hcl:"server" mapstructure:"server"` }
type RetryJoinAzure ¶
type RetryJoinAzure struct { ClientID *string `json:"client_id,omitempty" hcl:"client_id" mapstructure:"client_id"` SecretAccessKey *string `json:"secret_access_key,omitempty" hcl:"secret_access_key" mapstructure:"secret_access_key"` SubscriptionID *string `json:"subscription_id,omitempty" hcl:"subscription_id" mapstructure:"subscription_id"` TagName *string `json:"tag_name,omitempty" hcl:"tag_name" mapstructure:"tag_name"` TagValue *string `json:"tag_value,omitempty" hcl:"tag_value" mapstructure:"tag_value"` TenantID *string `json:"tenant_id,omitempty" hcl:"tenant_id" mapstructure:"tenant_id"` }
type RetryJoinEC2 ¶
type RetryJoinEC2 struct { AccessKeyID *string `json:"access_key_id,omitempty" hcl:"access_key_id" mapstructure:"access_key_id"` Region *string `json:"region,omitempty" hcl:"region" mapstructure:"region"` SecretAccessKey *string `json:"secret_access_key,omitempty" hcl:"secret_access_key" mapstructure:"secret_access_key"` TagKey *string `json:"tag_key,omitempty" hcl:"tag_key" mapstructure:"tag_key"` TagValue *string `json:"tag_value,omitempty" hcl:"tag_value" mapstructure:"tag_value"` }
type RetryJoinGCE ¶
type RetryJoinGCE struct { CredentialsFile *string `json:"credentials_file,omitempty" hcl:"credentials_file" mapstructure:"credentials_file"` ProjectName *string `json:"project_name,omitempty" hcl:"project_name" mapstructure:"project_name"` TagValue *string `json:"tag_value,omitempty" hcl:"tag_value" mapstructure:"tag_value"` ZonePattern *string `json:"zone_pattern,omitempty" hcl:"zone_pattern" mapstructure:"zone_pattern"` }
type RuntimeConfig ¶
type RuntimeConfig struct { // non-user configurable values AEInterval time.Duration ACLDisabledTTL time.Duration CheckDeregisterIntervalMin time.Duration CheckReapInterval time.Duration SegmentLimit int SegmentNameLimit int SyncCoordinateRateTarget float64 SyncCoordinateIntervalMin time.Duration Revision string Version string VersionPrerelease string // consul config ConsulCoordinateUpdateMaxBatches int ConsulCoordinateUpdateBatchSize int ConsulCoordinateUpdatePeriod time.Duration ConsulRaftElectionTimeout time.Duration ConsulRaftHeartbeatTimeout time.Duration ConsulRaftLeaderLeaseTimeout time.Duration ConsulSerfLANGossipInterval time.Duration ConsulSerfLANProbeInterval time.Duration ConsulSerfLANProbeTimeout time.Duration ConsulSerfLANSuspicionMult int ConsulSerfWANGossipInterval time.Duration ConsulSerfWANProbeInterval time.Duration ConsulSerfWANProbeTimeout time.Duration ConsulSerfWANSuspicionMult int ConsulServerHealthInterval time.Duration ACLAgentMasterToken string ACLAgentToken string ACLDatacenter string ACLDefaultPolicy string ACLDownPolicy string ACLEnforceVersion8 bool ACLEnableKeyListPolicy bool ACLMasterToken string ACLReplicationToken string ACLTTL time.Duration ACLToken string AutopilotCleanupDeadServers bool AutopilotDisableUpgradeMigration bool AutopilotLastContactThreshold time.Duration AutopilotMaxTrailingLogs int AutopilotRedundancyZoneTag string AutopilotServerStabilizationTime time.Duration AutopilotUpgradeVersionTag string DNSAllowStale bool DNSDisableCompression bool DNSDomain string DNSEnableTruncate bool DNSMaxStale time.Duration DNSNodeTTL time.Duration DNSOnlyPassing bool DNSRecursorTimeout time.Duration DNSServiceTTL map[string]time.Duration DNSUDPAnswerLimit int DNSRecursors []string HTTPBlockEndpoints []string HTTPResponseHeaders map[string]string TelemetryCirconusAPIApp string TelemetryCirconusAPIToken string TelemetryCirconusAPIURL string TelemetryCirconusBrokerID string TelemetryCirconusBrokerSelectTag string TelemetryCirconusCheckDisplayName string TelemetryCirconusCheckForceMetricActivation string TelemetryCirconusCheckID string TelemetryCirconusCheckInstanceID string TelemetryCirconusCheckSearchTag string TelemetryCirconusCheckTags string TelemetryCirconusSubmissionInterval string TelemetryCirconusSubmissionURL string TelemetryDisableHostname bool TelemetryDogstatsdAddr string TelemetryDogstatsdTags []string TelemetryFilterDefault bool TelemetryAllowedPrefixes []string TelemetryBlockedPrefixes []string TelemetryMetricsPrefix string TelemetryStatsdAddr string TelemetryStatsiteAddr string // Datacenter and NodeName are exposed via /v1/agent/self from here and // used in lots of places like CLI commands. Treat this as an interface // that must be stable. Datacenter string NodeName string AdvertiseAddrLAN *net.IPAddr AdvertiseAddrWAN *net.IPAddr BindAddr *net.IPAddr Bootstrap bool BootstrapExpect int CAFile string CAPath string CertFile string CheckUpdateInterval time.Duration Checks []*structs.CheckDefinition ClientAddrs []*net.IPAddr DNSAddrs []net.Addr DNSPort int DataDir string DevMode bool DisableAnonymousSignature bool DisableCoordinates bool DisableHostNodeID bool DisableKeyringFile bool DisableRemoteExec bool DisableUpdateCheck bool DiscardCheckOutput bool EnableACLReplication bool EnableDebug bool EnableScriptChecks bool EnableSyslog bool EnableUI bool EncryptKey string EncryptVerifyIncoming bool EncryptVerifyOutgoing bool HTTPAddrs []net.Addr HTTPPort int HTTPSAddrs []net.Addr HTTPSPort int KeyFile string LeaveDrainTime time.Duration LeaveOnTerm bool LogLevel string NodeID types.NodeID NodeMeta map[string]string NonVotingServer bool PidFile string RPCAdvertiseAddr *net.TCPAddr RPCBindAddr *net.TCPAddr RPCHoldTimeout time.Duration RPCMaxBurst int RPCProtocol int RPCRateLimit rate.Limit RaftProtocol int ReconnectTimeoutLAN time.Duration ReconnectTimeoutWAN time.Duration RejoinAfterLeave bool RetryJoinIntervalLAN time.Duration RetryJoinIntervalWAN time.Duration RetryJoinLAN []string RetryJoinMaxAttemptsLAN int RetryJoinMaxAttemptsWAN int RetryJoinWAN []string SegmentName string Segments []structs.NetworkSegment SerfAdvertiseAddrLAN *net.TCPAddr SerfAdvertiseAddrWAN *net.TCPAddr SerfBindAddrLAN *net.TCPAddr SerfBindAddrWAN *net.TCPAddr SerfPortLAN int SerfPortWAN int ServerMode bool ServerName string ServerPort int Services []*structs.ServiceDefinition SessionTTLMin time.Duration SkipLeaveOnInt bool StartJoinAddrsLAN []string StartJoinAddrsWAN []string SyslogFacility string TLSCipherSuites []uint16 TLSMinVersion string TLSPreferServerCipherSuites bool TaggedAddresses map[string]string TranslateWANAddrs bool UIDir string UnixSocketGroup string UnixSocketMode string UnixSocketUser string VerifyIncoming bool VerifyIncomingHTTPS bool VerifyIncomingRPC bool VerifyOutgoing bool VerifyServerHostname bool Watches []map[string]interface{} }
RuntimeConfig specifies the configuration the consul agent actually uses. Is is derived from one or more Config structures which can come from files, flags and/or environment variables.
func DefaultRuntimeConfig ¶
func DefaultRuntimeConfig(hcl string) *RuntimeConfig
func (*RuntimeConfig) IncomingHTTPSConfig ¶
func (c *RuntimeConfig) IncomingHTTPSConfig() (*tls.Config, error)
IncomingHTTPSConfig returns the TLS configuration for HTTPS connections to consul.
func (*RuntimeConfig) Sanitized ¶
func (c *RuntimeConfig) Sanitized() map[string]interface{}
Sanitized returns a JSON/HCL compatible representation of the runtime configuration where all fields with potential secrets had their values replaced by 'hidden'. In addition, network addresses and time.Duration values are formatted to improve readability.
type Segment ¶
type Segment struct { Advertise *string `json:"advertise,omitempty" hcl:"advertise" mapstructure:"advertise"` Bind *string `json:"bind,omitempty" hcl:"bind" mapstructure:"bind"` Name *string `json:"name,omitempty" hcl:"name" mapstructure:"name"` Port *int `json:"port,omitempty" hcl:"port" mapstructure:"port"` RPCListener *bool `json:"rpc_listener,omitempty" hcl:"rpc_listener" mapstructure:"rpc_listener"` }
type ServiceDefinition ¶
type ServiceDefinition struct { ID *string `json:"id,omitempty" hcl:"id" mapstructure:"id"` Name *string `json:"name,omitempty" hcl:"name" mapstructure:"name"` Tags []string `json:"tags,omitempty" hcl:"tags" mapstructure:"tags"` Address *string `json:"address,omitempty" hcl:"address" mapstructure:"address"` Port *int `json:"port,omitempty" hcl:"port" mapstructure:"port"` Check *CheckDefinition `json:"check,omitempty" hcl:"check" mapstructure:"check"` Checks []CheckDefinition `json:"checks,omitempty" hcl:"checks" mapstructure:"checks"` Token *string `json:"token,omitempty" hcl:"token" mapstructure:"token"` EnableTagOverride *bool `json:"enable_tag_override,omitempty" hcl:"enable_tag_override" mapstructure:"enable_tag_override"` }
type Source ¶
func DefaultConsulSource ¶
func DefaultConsulSource() Source
DefaultConsulSource returns the default configuration for the consul agent. This should be merged in the tail since these values are not user configurable.
func DefaultSource ¶
func DefaultSource() Source
DefaultSource is the default agent configuration. This needs to be merged first in the head. todo(fs): The values are sourced from multiple sources. todo(fs): IMO, this should be the definitive default for all configurable values todo(fs): and whatever is in here should clobber every default value. Hence, no sourcing.
func DefaultVersionSource ¶
func DefaultVersionSource() Source
DefaultVersionSource returns the version config source for the embedded version numbers.
func DevConsulSource ¶
func DevConsulSource() Source
DevConsulSource returns the consul agent configuration for the dev mode. This should be merged in the tail after the DefaultConsulSource.
func DevSource ¶
func DevSource() Source
DevSource is the additional default configuration for dev mode. This should be merged in the head after the default configuration.
func NonUserSource ¶
func NonUserSource() Source
NonUserSource contains the values the user cannot configure. This needs to be merged in the tail.
func VersionSource ¶
VersionSource creates a config source for the version parameters. This should be merged in the tail since these values are not user configurable.
type Telemetry ¶
type Telemetry struct { CirconusAPIApp *string `json:"circonus_api_app,omitempty" hcl:"circonus_api_app" mapstructure:"circonus_api_app"` CirconusAPIToken *string `json:"circonus_api_token,omitempty" json:"-" hcl:"circonus_api_token" mapstructure:"circonus_api_token" json:"-"` CirconusAPIURL *string `json:"circonus_api_url,omitempty" hcl:"circonus_api_url" mapstructure:"circonus_api_url"` CirconusBrokerID *string `json:"circonus_broker_id,omitempty" hcl:"circonus_broker_id" mapstructure:"circonus_broker_id"` CirconusBrokerSelectTag *string `json:"circonus_broker_select_tag,omitempty" hcl:"circonus_broker_select_tag" mapstructure:"circonus_broker_select_tag"` CirconusCheckDisplayName *string `json:"circonus_check_display_name,omitempty" hcl:"circonus_check_display_name" mapstructure:"circonus_check_display_name"` CirconusCheckForceMetricActivation *string `` /* 154-byte string literal not displayed */ CirconusCheckID *string `json:"circonus_check_id,omitempty" hcl:"circonus_check_id" mapstructure:"circonus_check_id"` CirconusCheckInstanceID *string `json:"circonus_check_instance_id,omitempty" hcl:"circonus_check_instance_id" mapstructure:"circonus_check_instance_id"` CirconusCheckSearchTag *string `json:"circonus_check_search_tag,omitempty" hcl:"circonus_check_search_tag" mapstructure:"circonus_check_search_tag"` CirconusCheckTags *string `json:"circonus_check_tags,omitempty" hcl:"circonus_check_tags" mapstructure:"circonus_check_tags"` CirconusSubmissionInterval *string `json:"circonus_submission_interval,omitempty" hcl:"circonus_submission_interval" mapstructure:"circonus_submission_interval"` CirconusSubmissionURL *string `json:"circonus_submission_url,omitempty" hcl:"circonus_submission_url" mapstructure:"circonus_submission_url"` DisableHostname *bool `json:"disable_hostname,omitempty" hcl:"disable_hostname" mapstructure:"disable_hostname"` DogstatsdAddr *string `json:"dogstatsd_addr,omitempty" hcl:"dogstatsd_addr" mapstructure:"dogstatsd_addr"` DogstatsdTags []string `json:"dogstatsd_tags,omitempty" hcl:"dogstatsd_tags" mapstructure:"dogstatsd_tags"` FilterDefault *bool `json:"filter_default,omitempty" hcl:"filter_default" mapstructure:"filter_default"` PrefixFilter []string `json:"prefix_filter,omitempty" hcl:"prefix_filter" mapstructure:"prefix_filter"` MetricsPrefix *string `json:"metrics_prefix,omitempty" hcl:"metrics_prefix" mapstructure:"metrics_prefix"` StatsdAddr *string `json:"statsd_address,omitempty" hcl:"statsd_address" mapstructure:"statsd_address"` StatsiteAddr *string `json:"statsite_address,omitempty" hcl:"statsite_address" mapstructure:"statsite_address"` EnableDeprecatedNames *bool `json:"enable_deprecated_names" hcl:"enable_deprecated_names" mapstructure:"enable_deprecated_names"` }