// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
// Package config contains the command line and config file code for the
// consul agent.
//
// The consul agent configuration is generated from multiple sources:
//
// * config files
// * environment variables (which?)
// * cmd line args
//
// Each of these argument sets needs to be parsed, validated and then
// merged with the other sources to build the final configuration.
//
// This patch introduces a distinction between the user and the runtime
// configuration. The user configuration defines the external interface for
// the user, i.e. the command line flags, the environment variables and the
// config file format which cannot be changed without breaking the users'
// setup.
//
// The runtime configuration is the merged, validated and mangled
// configuration structure suitable for the consul agent. Both structures
// are similar but different and the runtime configuration can be
// refactored at will without affecting the user configuration format.
//
// For this, the user configuration consists of several structures for
// config files and command line arguments. Again, the config file and
// command line structs are similar but not identical for historical
// reasons and to allow evolving them differently.
//
// All of the user configuration structs have pointer values to
// unambiguously merge values from several sources into the final value.
//
// The runtime configuration has no pointer values and should be passed by
// value to avoid accidental or malicious runtime configuration changes.
// Runtime updates need to be handled through a new configuration
// instances.
// # Removed command line flags
//
// * "-atlas" is deprecated and is no longer used. Please remove it from your configuration.
// * "-atlas-token" is deprecated and is no longer used. Please remove it from your configuration.
// * "-atlas-join" is deprecated and is no longer used. Please remove it from your configuration.
// * "-atlas-endpoint" is deprecated and is no longer used. Please remove it from your configuration.
// * "-dc" is deprecated. Please use "-datacenter" instead
// * "-retry-join-azure-tag-name" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-azure-tag-value" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-ec2-region" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-ec2-tag-key" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-ec2-tag-value" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-gce-credentials-file" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-gce-project-name" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-gce-tag-name" is deprecated. Please use "-retry-join" instead.
// * "-retry-join-gce-zone-pattern" is deprecated. Please use "-retry-join" instead.
//
// # Removed configuration fields
//
// * "addresses.rpc" is deprecated and is no longer used. Please remove it from your configuration.
// * "ports.rpc" is deprecated and is no longer used. Please remove it from your configuration.
// * "atlas_infrastructure" is deprecated and is no longer used. Please remove it from your configuration.
// * "atlas_token" is deprecated and is no longer used. Please remove it from your configuration.
// * "atlas_acl_token" is deprecated and is no longer used. Please remove it from your configuration.
// * "atlas_join" is deprecated and is no longer used. Please remove it from your configuration.
// * "atlas_endpoint" is deprecated and is no longer used. Please remove it from your configuration.
// * "http_api_response_headers" is deprecated. Please use "http_config.response_headers" instead.
// * "dogstatsd_addr" is deprecated. Please use "telemetry.dogstatsd_addr" instead.
// * "dogstatsd_tags" is deprecated. Please use "telemetry.dogstatsd_tags" instead.
// * "recursor" is deprecated. Please use "recursors" instead.
// * "statsd_addr" is deprecated. Please use "telemetry.statsd_addr" instead.
// * "statsite_addr" is deprecated. Please use "telemetry.statsite_addr" instead.
// * "statsite_prefix" is deprecated. Please use "telemetry.metrics_prefix" instead.
// * "telemetry.statsite_prefix" is deprecated. Please use "telemetry.metrics_prefix" instead.
// * "retry_join_azure" is deprecated. Please use "retry_join" instead.
// * "retry_join_ec2" is deprecated. Please use "retry_join" instead.
// * "retry_join_gce" is deprecated. Please use "retry_join" instead.
//
// # Removed service config alias fields
//
// * "serviceid" is deprecated in service definitions. Please use "service_id" instead.
// * "dockercontainerid" is deprecated in service definitions. Please use "docker_container_id" instead.
// * "tlsskipverify" is deprecated in service definitions. Please use "tls_skip_verify" instead.
// * "deregistercriticalserviceafter" is deprecated in service definitions. Please use "deregister_critical_service_after" instead.
package config