mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
8f42c5a024
Add nomad_sd_config support for service discovery
477 lines
11 KiB
Go
477 lines
11 KiB
Go
package nomad
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseAgentFailure(t *testing.T) {
|
|
f := func(s string) {
|
|
t.Helper()
|
|
a, err := parseAgent([]byte(s))
|
|
if err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
if a != nil {
|
|
t.Fatalf("unexpected non-nil Agent: %v", a)
|
|
}
|
|
}
|
|
f(``)
|
|
f(`[1,23]`)
|
|
}
|
|
|
|
func TestParseAgentSuccess(t *testing.T) {
|
|
data := `
|
|
{
|
|
"config": {
|
|
"ACL": {
|
|
"Enabled": false,
|
|
"PolicyTTL": 30000000000,
|
|
"ReplicationToken": "",
|
|
"RoleTTL": 30000000000,
|
|
"TokenMaxExpirationTTL": 0,
|
|
"TokenMinExpirationTTL": 0,
|
|
"TokenTTL": 30000000000
|
|
},
|
|
"Addresses": {
|
|
"HTTP": "0.0.0.0",
|
|
"RPC": "0.0.0.0",
|
|
"Serf": "0.0.0.0"
|
|
},
|
|
"AdvertiseAddrs": {
|
|
"HTTP": "192.168.29.76:4646",
|
|
"RPC": "192.168.29.76:4647",
|
|
"Serf": "192.168.29.76:4648"
|
|
},
|
|
"Audit": {
|
|
"Enabled": null,
|
|
"Filters": null,
|
|
"Sinks": null
|
|
},
|
|
"Autopilot": {
|
|
"CleanupDeadServers": null,
|
|
"DisableUpgradeMigration": null,
|
|
"EnableCustomUpgrades": null,
|
|
"EnableRedundancyZones": null,
|
|
"LastContactThreshold": 200000000,
|
|
"MaxTrailingLogs": 250,
|
|
"MinQuorum": 0,
|
|
"ServerStabilizationTime": 10000000000
|
|
},
|
|
"BindAddr": "0.0.0.0",
|
|
"Client": {
|
|
"AllocDir": "",
|
|
"Artifact": {
|
|
"GCSTimeout": "30m",
|
|
"GitTimeout": "30m",
|
|
"HTTPMaxSize": "100GB",
|
|
"HTTPReadTimeout": "30m",
|
|
"HgTimeout": "30m",
|
|
"S3Timeout": "30m"
|
|
},
|
|
"BindWildcardDefaultHostNetwork": true,
|
|
"BridgeNetworkName": "",
|
|
"BridgeNetworkSubnet": "",
|
|
"CNIConfigDir": "/opt/cni/config",
|
|
"CNIPath": "/opt/cni/bin",
|
|
"CgroupParent": "",
|
|
"ChrootEnv": {
|
|
"/run/resolvconf": "/run/resolvconf",
|
|
"/sbin": "/sbin",
|
|
"/usr": "/usr",
|
|
"/bin/": "/bin/",
|
|
"/etc/": "/etc/",
|
|
"/lib": "/lib",
|
|
"/lib32": "/lib32",
|
|
"/lib64": "/lib64"
|
|
},
|
|
"ClientMaxPort": 14512,
|
|
"ClientMinPort": 14000,
|
|
"CpuCompute": 0,
|
|
"DisableRemoteExec": false,
|
|
"Enabled": true,
|
|
"GCDiskUsageThreshold": 80,
|
|
"GCInodeUsageThreshold": 70,
|
|
"GCInterval": 60000000000,
|
|
"GCMaxAllocs": 50,
|
|
"GCParallelDestroys": 2,
|
|
"HostNetworks": null,
|
|
"HostVolumes": null,
|
|
"MaxDynamicPort": 32000,
|
|
"MaxKillTimeout": "30s",
|
|
"MemoryMB": 0,
|
|
"Meta": {
|
|
"stack": "zerodha",
|
|
"env": "dev"
|
|
},
|
|
"MinDynamicPort": 20000,
|
|
"NetworkInterface": "",
|
|
"NetworkSpeed": 0,
|
|
"NoHostUUID": true,
|
|
"NodeClass": "",
|
|
"NomadServiceDiscovery": true,
|
|
"Options": {},
|
|
"ReserveableCores": "",
|
|
"Reserved": {
|
|
"CPU": 0,
|
|
"Cores": "2",
|
|
"DiskMB": 1024,
|
|
"MemoryMB": 1024,
|
|
"ReservedPorts": "22"
|
|
},
|
|
"ServerJoin": {
|
|
"RetryInterval": 30000000000,
|
|
"RetryJoin": [],
|
|
"RetryMaxAttempts": 0,
|
|
"StartJoin": null
|
|
},
|
|
"Servers": null,
|
|
"StateDir": "",
|
|
"TemplateConfig": {
|
|
"BlockQueryWaitTime": null,
|
|
"BlockQueryWaitTimeHCL": "",
|
|
"ConsulRetry": null,
|
|
"DisableSandbox": false,
|
|
"FunctionBlacklist": null,
|
|
"FunctionDenylist": [
|
|
"plugin",
|
|
"writeToFile"
|
|
],
|
|
"MaxStale": null,
|
|
"MaxStaleHCL": "",
|
|
"NomadRetry": null,
|
|
"VaultRetry": null
|
|
}
|
|
},
|
|
"Consul": {
|
|
"Addr": "127.0.0.1:8500",
|
|
"AllowUnauthenticated": true,
|
|
"Auth": "",
|
|
"AutoAdvertise": true,
|
|
"CAFile": "",
|
|
"CertFile": "",
|
|
"ChecksUseAdvertise": false,
|
|
"ClientAutoJoin": true,
|
|
"ClientHTTPCheckName": "Nomad Client HTTP Check",
|
|
"ClientServiceName": "nomad-client",
|
|
"EnableSSL": false,
|
|
"GRPCAddr": "",
|
|
"KeyFile": "",
|
|
"Namespace": "",
|
|
"ServerAutoJoin": true,
|
|
"ServerHTTPCheckName": "Nomad Server HTTP Check",
|
|
"ServerRPCCheckName": "Nomad Server RPC Check",
|
|
"ServerSerfCheckName": "Nomad Server Serf Check",
|
|
"ServerServiceName": "nomad",
|
|
"ShareSSL": null,
|
|
"Tags": null,
|
|
"Timeout": 5000000000,
|
|
"Token": "",
|
|
"VerifySSL": true
|
|
},
|
|
"DataDir": "/opt/nomad/data",
|
|
"Datacenter": "dc1",
|
|
"DevMode": false,
|
|
"DisableAnonymousSignature": false,
|
|
"DisableUpdateCheck": false,
|
|
"EnableDebug": false,
|
|
"EnableSyslog": false,
|
|
"Files": [
|
|
"nomad.hcl"
|
|
],
|
|
"HTTPAPIResponseHeaders": {},
|
|
"LeaveOnInt": false,
|
|
"LeaveOnTerm": false,
|
|
"Limits": {
|
|
"HTTPMaxConnsPerClient": 100,
|
|
"HTTPSHandshakeTimeout": "5s",
|
|
"RPCHandshakeTimeout": "5s",
|
|
"RPCMaxConnsPerClient": 100
|
|
},
|
|
"LogFile": "",
|
|
"LogJson": false,
|
|
"LogLevel": "INFO",
|
|
"LogRotateBytes": 0,
|
|
"LogRotateDuration": "",
|
|
"LogRotateMaxFiles": 0,
|
|
"NodeName": "",
|
|
"PluginDir": "/opt/nomad/data/plugins",
|
|
"Plugins": [
|
|
{
|
|
"Args": null,
|
|
"Config": {
|
|
"allow_privileged": true,
|
|
"volumes": [
|
|
{
|
|
"enabled": true
|
|
}
|
|
],
|
|
"extra_labels": [
|
|
"job_name",
|
|
"job_id",
|
|
"task_group_name",
|
|
"task_name",
|
|
"namespace",
|
|
"node_name",
|
|
"node_id"
|
|
]
|
|
},
|
|
"Name": "docker"
|
|
},
|
|
{
|
|
"Args": null,
|
|
"Config": {
|
|
"enabled": true,
|
|
"no_cgroups": true
|
|
},
|
|
"Name": "raw_exec"
|
|
}
|
|
],
|
|
"Ports": {
|
|
"HTTP": 4646,
|
|
"RPC": 4647,
|
|
"Serf": 4648
|
|
},
|
|
"Region": "global",
|
|
"Sentinel": {
|
|
"Imports": null
|
|
},
|
|
"Server": {
|
|
"ACLTokenGCThreshold": "",
|
|
"AuthoritativeRegion": "",
|
|
"BootstrapExpect": 1,
|
|
"CSIPluginGCThreshold": "",
|
|
"CSIVolumeClaimGCThreshold": "",
|
|
"DataDir": "",
|
|
"DefaultSchedulerConfig": null,
|
|
"DeploymentGCThreshold": "",
|
|
"DeploymentQueryRateLimit": 0,
|
|
"EnableEventBroker": true,
|
|
"Enabled": true,
|
|
"EnabledSchedulers": null,
|
|
"EvalGCThreshold": "",
|
|
"EventBufferSize": 100,
|
|
"FailoverHeartbeatTTL": 0,
|
|
"HeartbeatGrace": 0,
|
|
"JobGCInterval": "",
|
|
"JobGCThreshold": "",
|
|
"LicenseEnv": "",
|
|
"LicensePath": "",
|
|
"MaxHeartbeatsPerSecond": 0,
|
|
"MinHeartbeatTTL": 0,
|
|
"NodeGCThreshold": "",
|
|
"NonVotingServer": false,
|
|
"NumSchedulers": null,
|
|
"PlanRejectionTracker": {
|
|
"Enabled": false,
|
|
"NodeThreshold": 100,
|
|
"NodeWindow": 300000000000
|
|
},
|
|
"RaftBoltConfig": null,
|
|
"RaftMultiplier": null,
|
|
"RaftProtocol": 3,
|
|
"RedundancyZone": "",
|
|
"RejoinAfterLeave": false,
|
|
"RetryInterval": 0,
|
|
"RetryJoin": [],
|
|
"RetryMaxAttempts": 0,
|
|
"RootKeyGCInterval": "",
|
|
"RootKeyGCThreshold": "",
|
|
"RootKeyRotationThreshold": "",
|
|
"Search": {
|
|
"FuzzyEnabled": true,
|
|
"LimitQuery": 20,
|
|
"LimitResults": 100,
|
|
"MinTermLength": 2
|
|
},
|
|
"ServerJoin": {
|
|
"RetryInterval": 30000000000,
|
|
"RetryJoin": [],
|
|
"RetryMaxAttempts": 0,
|
|
"StartJoin": null
|
|
},
|
|
"StartJoin": [],
|
|
"UpgradeVersion": ""
|
|
},
|
|
"SyslogFacility": "LOCAL0",
|
|
"TLSConfig": {
|
|
"CAFile": "",
|
|
"CertFile": "",
|
|
"Checksum": "",
|
|
"EnableHTTP": false,
|
|
"EnableRPC": false,
|
|
"KeyFile": "",
|
|
"KeyLoader": {},
|
|
"RPCUpgradeMode": false,
|
|
"TLSCipherSuites": "",
|
|
"TLSMinVersion": "",
|
|
"TLSPreferServerCipherSuites": false,
|
|
"VerifyHTTPSClient": false,
|
|
"VerifyServerHostname": false
|
|
},
|
|
"Telemetry": {
|
|
"CirconusAPIApp": "",
|
|
"CirconusAPIToken": "",
|
|
"CirconusAPIURL": "",
|
|
"CirconusBrokerID": "",
|
|
"CirconusBrokerSelectTag": "",
|
|
"CirconusCheckDisplayName": "",
|
|
"CirconusCheckForceMetricActivation": "",
|
|
"CirconusCheckID": "",
|
|
"CirconusCheckInstanceID": "",
|
|
"CirconusCheckSearchTag": "",
|
|
"CirconusCheckSubmissionURL": "",
|
|
"CirconusCheckTags": "",
|
|
"CirconusSubmissionInterval": "",
|
|
"CollectionInterval": "1s",
|
|
"DataDogAddr": "",
|
|
"DataDogTags": null,
|
|
"DisableDispatchedJobSummaryMetrics": false,
|
|
"DisableHostname": false,
|
|
"FilterDefault": null,
|
|
"PrefixFilter": null,
|
|
"PrometheusMetrics": false,
|
|
"PublishAllocationMetrics": false,
|
|
"PublishNodeMetrics": false,
|
|
"StatsdAddr": "",
|
|
"StatsiteAddr": "",
|
|
"UseNodeName": false
|
|
},
|
|
"UI": {
|
|
"Consul": {
|
|
"BaseUIURL": ""
|
|
},
|
|
"Enabled": true,
|
|
"Vault": {
|
|
"BaseUIURL": ""
|
|
}
|
|
},
|
|
"Vault": {
|
|
"Addr": "https://vault.service.consul:8200",
|
|
"AllowUnauthenticated": true,
|
|
"ConnectionRetryIntv": 30000000000,
|
|
"Enabled": null,
|
|
"Namespace": "",
|
|
"Role": "",
|
|
"TLSCaFile": "",
|
|
"TLSCaPath": "",
|
|
"TLSCertFile": "",
|
|
"TLSKeyFile": "",
|
|
"TLSServerName": "",
|
|
"TLSSkipVerify": null,
|
|
"TaskTokenTTL": "",
|
|
"Token": ""
|
|
},
|
|
"Version": {
|
|
"Revision": "f464aca721d222ae9c1f3df643b3c3aaa20e2da7",
|
|
"Version": "1.4.3",
|
|
"VersionMetadata": "",
|
|
"VersionPrerelease": ""
|
|
}
|
|
},
|
|
"member": {
|
|
"Addr": "192.168.29.76",
|
|
"DelegateCur": 4,
|
|
"DelegateMax": 5,
|
|
"DelegateMin": 2,
|
|
"Name": "pop-os.global",
|
|
"Port": 4648,
|
|
"ProtocolCur": 2,
|
|
"ProtocolMax": 5,
|
|
"ProtocolMin": 1,
|
|
"Status": "alive",
|
|
"Tags": {
|
|
"rpc_addr": "192.168.29.76",
|
|
"bootstrap": "1",
|
|
"expect": "1",
|
|
"role": "nomad",
|
|
"region": "global",
|
|
"build": "1.4.3",
|
|
"revision": "f464aca721d222ae9c1f3df643b3c3aaa20e2da7",
|
|
"port": "4647",
|
|
"vsn": "1",
|
|
"dc": "dc1",
|
|
"raft_vsn": "3",
|
|
"id": "d78cdda9-7e35-48d0-a0e0-36041f6df0ec"
|
|
}
|
|
},
|
|
"stats": {
|
|
"nomad": {
|
|
"leader": "true",
|
|
"leader_addr": "192.168.29.76:4647",
|
|
"bootstrap": "true",
|
|
"known_regions": "1",
|
|
"server": "true"
|
|
},
|
|
"raft": {
|
|
"term": "3",
|
|
"latest_configuration_index": "0",
|
|
"applied_index": "384",
|
|
"protocol_version_min": "0",
|
|
"protocol_version_max": "3",
|
|
"snapshot_version_min": "0",
|
|
"num_peers": "0",
|
|
"state": "Leader",
|
|
"last_log_term": "3",
|
|
"commit_index": "384",
|
|
"last_contact": "0",
|
|
"last_snapshot_index": "0",
|
|
"protocol_version": "3",
|
|
"snapshot_version_max": "1",
|
|
"latest_configuration": "[{Suffrage:Voter ID:d78cdda9-7e35-48d0-a0e0-36041f6df0ec Address:172.20.10.3:4647}]",
|
|
"last_log_index": "384",
|
|
"fsm_pending": "0",
|
|
"last_snapshot_term": "0"
|
|
},
|
|
"serf": {
|
|
"coordinate_resets": "0",
|
|
"health_score": "0",
|
|
"member_time": "1",
|
|
"query_time": "1",
|
|
"intent_queue": "0",
|
|
"event_queue": "0",
|
|
"encrypted": "false",
|
|
"members": "1",
|
|
"failed": "0",
|
|
"left": "0",
|
|
"event_time": "1",
|
|
"query_queue": "0"
|
|
},
|
|
"runtime": {
|
|
"arch": "amd64",
|
|
"version": "go1.19.3",
|
|
"max_procs": "8",
|
|
"goroutines": "294",
|
|
"cpu_count": "8",
|
|
"kernel.name": "linux"
|
|
},
|
|
"vault": {
|
|
"tracked_for_revoked": "0",
|
|
"token_ttl": "0s",
|
|
"token_expire_time": "",
|
|
"token_last_renewal_time": "",
|
|
"token_next_renewal_time": ""
|
|
},
|
|
"client": {
|
|
"node_id": "9e02c85b-db59-45f1-ddee-40d0317bd33d",
|
|
"known_servers": "192.168.29.76:4647",
|
|
"num_allocations": "3",
|
|
"last_heartbeat": "13.254411467s",
|
|
"heartbeat_ttl": "19.86001456s"
|
|
}
|
|
}
|
|
}
|
|
`
|
|
a, err := parseAgent([]byte(data))
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
aExpected := &Agent{
|
|
Config: AgentConfig{
|
|
Datacenter: "dc1",
|
|
},
|
|
}
|
|
if !reflect.DeepEqual(a, aExpected) {
|
|
t.Fatalf("unexpected Agent parsed;\ngot\n%v\nwant\n%v", a, aExpected)
|
|
}
|
|
}
|