mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 18:35:44 +03:00
Merge pull request #4399 from hashicorp/r-reload-refactor
Refactor logic for dynamic reloading
This commit is contained in:
@@ -866,16 +866,16 @@ func (a *Agent) Stats() map[string]map[string]string {
|
||||
|
||||
// ShouldReload determines if we should reload the configuration and agent
|
||||
// connections. If the TLS Configuration has not changed, we shouldn't reload.
|
||||
func (a *Agent) ShouldReload(newConfig *Config) (agent, http, rpc bool) {
|
||||
func (a *Agent) ShouldReload(newConfig *Config) (agent, http bool) {
|
||||
a.configLock.Lock()
|
||||
defer a.configLock.Unlock()
|
||||
|
||||
isEqual, err := a.config.TLSConfig.CertificateInfoIsEqual(newConfig.TLSConfig)
|
||||
if err != nil {
|
||||
a.logger.Printf("[INFO] agent: error when parsing TLS certificate %v", err)
|
||||
return false, false, false
|
||||
return false, false
|
||||
} else if !isEqual {
|
||||
return true, true, true
|
||||
return true, true
|
||||
}
|
||||
|
||||
// Allow the ability to only reload HTTP connections
|
||||
@@ -886,11 +886,10 @@ func (a *Agent) ShouldReload(newConfig *Config) (agent, http, rpc bool) {
|
||||
|
||||
// Allow the ability to only reload HTTP connections
|
||||
if a.config.TLSConfig.EnableRPC != newConfig.TLSConfig.EnableRPC {
|
||||
rpc = true
|
||||
agent = true
|
||||
}
|
||||
|
||||
return agent, http, rpc
|
||||
return agent, http
|
||||
}
|
||||
|
||||
// Reload handles configuration changes for the agent. Provides a method that
|
||||
|
||||
@@ -769,10 +769,9 @@ func TestServer_ShouldReload_ReturnFalseForNoChanges(t *testing.T) {
|
||||
})
|
||||
defer agent.Shutdown()
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(sameAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(sameAgentConfig)
|
||||
assert.False(shouldReloadAgent)
|
||||
assert.False(shouldReloadHTTP)
|
||||
assert.False(shouldReloadRPC)
|
||||
}
|
||||
|
||||
func TestServer_ShouldReload_ReturnTrueForOnlyHTTPChanges(t *testing.T) {
|
||||
@@ -810,10 +809,9 @@ func TestServer_ShouldReload_ReturnTrueForOnlyHTTPChanges(t *testing.T) {
|
||||
})
|
||||
defer agent.Shutdown()
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(sameAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(sameAgentConfig)
|
||||
require.True(shouldReloadAgent)
|
||||
require.True(shouldReloadHTTP)
|
||||
require.False(shouldReloadRPC)
|
||||
}
|
||||
|
||||
func TestServer_ShouldReload_ReturnTrueForOnlyRPCChanges(t *testing.T) {
|
||||
@@ -851,10 +849,9 @@ func TestServer_ShouldReload_ReturnTrueForOnlyRPCChanges(t *testing.T) {
|
||||
})
|
||||
defer agent.Shutdown()
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(sameAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(sameAgentConfig)
|
||||
assert.True(shouldReloadAgent)
|
||||
assert.False(shouldReloadHTTP)
|
||||
assert.True(shouldReloadRPC)
|
||||
}
|
||||
|
||||
func TestServer_ShouldReload_ReturnTrueForConfigChanges(t *testing.T) {
|
||||
@@ -894,10 +891,9 @@ func TestServer_ShouldReload_ReturnTrueForConfigChanges(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(newConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(newConfig)
|
||||
assert.True(shouldReloadAgent)
|
||||
assert.True(shouldReloadHTTP)
|
||||
assert.True(shouldReloadRPC)
|
||||
}
|
||||
|
||||
func TestServer_ShouldReload_ReturnTrueForFileChanges(t *testing.T) {
|
||||
@@ -959,10 +955,9 @@ func TestServer_ShouldReload_ReturnTrueForFileChanges(t *testing.T) {
|
||||
}
|
||||
agent.config.TLSConfig.SetChecksum()
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(agentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(agentConfig)
|
||||
require.False(shouldReloadAgent)
|
||||
require.False(shouldReloadHTTP)
|
||||
require.False(shouldReloadRPC)
|
||||
|
||||
newCertificate := `
|
||||
-----BEGIN CERTIFICATE-----
|
||||
@@ -999,10 +994,9 @@ func TestServer_ShouldReload_ReturnTrueForFileChanges(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC = agent.ShouldReload(newAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP = agent.ShouldReload(newAgentConfig)
|
||||
require.True(shouldReloadAgent)
|
||||
require.True(shouldReloadHTTP)
|
||||
require.True(shouldReloadRPC)
|
||||
}
|
||||
|
||||
func TestServer_ShouldReload_ShouldHandleMultipleChanges(t *testing.T) {
|
||||
@@ -1043,20 +1037,18 @@ func TestServer_ShouldReload_ShouldHandleMultipleChanges(t *testing.T) {
|
||||
defer agent.Shutdown()
|
||||
|
||||
{
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(sameAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(sameAgentConfig)
|
||||
require.True(shouldReloadAgent)
|
||||
require.True(shouldReloadHTTP)
|
||||
require.True(shouldReloadRPC)
|
||||
}
|
||||
|
||||
err := agent.Reload(sameAgentConfig)
|
||||
require.Nil(err)
|
||||
|
||||
{
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := agent.ShouldReload(sameAgentConfig)
|
||||
shouldReloadAgent, shouldReloadHTTP := agent.ShouldReload(sameAgentConfig)
|
||||
require.False(shouldReloadAgent)
|
||||
require.False(shouldReloadHTTP)
|
||||
require.False(shouldReloadRPC)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -730,7 +730,7 @@ func (c *Command) handleReload() {
|
||||
newConf.LogLevel = c.agent.GetConfig().LogLevel
|
||||
}
|
||||
|
||||
shouldReloadAgent, shouldReloadHTTP, shouldReloadRPC := c.agent.ShouldReload(newConf)
|
||||
shouldReloadAgent, shouldReloadHTTP := c.agent.ShouldReload(newConf)
|
||||
if shouldReloadAgent {
|
||||
c.agent.logger.Printf("[DEBUG] agent: starting reload of agent config")
|
||||
err := c.agent.Reload(newConf)
|
||||
@@ -754,19 +754,16 @@ func (c *Command) handleReload() {
|
||||
}
|
||||
}
|
||||
|
||||
if shouldReloadRPC {
|
||||
|
||||
if s := c.agent.Client(); s != nil {
|
||||
clientConfig, err := c.agent.clientConfig()
|
||||
c.agent.logger.Printf("[DEBUG] agent: starting reload of client config")
|
||||
if err != nil {
|
||||
c.agent.logger.Printf("[ERR] agent: reloading client config failed: %v", err)
|
||||
return
|
||||
}
|
||||
if err := c.agent.Client().Reload(clientConfig); err != nil {
|
||||
c.agent.logger.Printf("[ERR] agent: reloading client config failed: %v", err)
|
||||
return
|
||||
}
|
||||
if s := c.agent.Client(); s != nil {
|
||||
clientConfig, err := c.agent.clientConfig()
|
||||
c.agent.logger.Printf("[DEBUG] agent: starting reload of client config")
|
||||
if err != nil {
|
||||
c.agent.logger.Printf("[ERR] agent: reloading client config failed: %v", err)
|
||||
return
|
||||
}
|
||||
if err := c.agent.Client().Reload(clientConfig); err != nil {
|
||||
c.agent.logger.Printf("[ERR] agent: reloading client config failed: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user