-
Notifications
You must be signed in to change notification settings - Fork 111
/
externalpostgresqlcheck.go
128 lines (105 loc) · 4.42 KB
/
externalpostgresqlcheck.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package externalpostgresqlchecktrigger
import (
"net"
"net/http"
"github.com/chef/automate/components/automate-cli/pkg/verifyserver/constants"
"github.com/chef/automate/components/automate-cli/pkg/verifyserver/models"
"github.com/chef/automate/components/automate-cli/pkg/verifyserver/services/batchcheckservice/trigger"
"github.com/chef/automate/components/automate-cli/pkg/verifyserver/utils/checkutils"
"github.com/chef/automate/lib/logger"
)
type ExternalPostgresCheck struct {
log logger.Logger
port string
}
func NewExternalPostgresCheck(log logger.Logger, port string) *ExternalPostgresCheck {
return &ExternalPostgresCheck{
log: log,
port: port,
}
}
func (epc *ExternalPostgresCheck) Run(config *models.Config) []models.CheckTriggerResponse {
// Check for nil or empty req body
if config.Hardware == nil {
return trigger.HardwareNil(constants.EXTERNAL_POSTGRESQL, constants.SKIP_MISSING_HARDWARE_MESSAGE, false, false, false)
}
if config.ExternalPG == nil {
return externalPGNillResp(config, constants.EXTERNAL_POSTGRESQL, constants.SKIP_MANAGED_PG_TEST_MESSAGE)
}
if isEmptyExternalPG(config.ExternalPG) {
return externalPGEmptyResp(config, constants.EXTERNAL_POSTGRESQL)
}
return runCheckForPostgresql(config, epc.port, epc.log)
}
func (ss *ExternalPostgresCheck) GetPortsForMockServer() map[string]map[string][]int {
nodeTypePortMap := make(map[string]map[string][]int)
return nodeTypePortMap
}
func runCheckForPostgresql(config *models.Config, port string, log logger.Logger) []models.CheckTriggerResponse {
log.Debug("Trigger Postgresql check for automate and chef server nodes")
req := getPostgresRequest(config.ExternalPG)
var result []models.CheckTriggerResponse
outputCh := make(chan models.CheckTriggerResponse)
count := 0
for _, ip := range config.Hardware.AutomateNodeIps {
log.Debugf("Trigger Postgresql check for automate ip %s", ip)
count++
endPoint := checkutils.PrepareEndPoint(ip, port, constants.EXTERNAL_POSTGRESQL_API_PATH)
go trigger.TriggerCheckAPI(endPoint, ip, constants.AUTOMATE, http.MethodPost, outputCh, req)
}
for _, ip := range config.Hardware.ChefInfraServerNodeIps {
log.Debugf("Trigger Postgresql check for chefserver ip %s", ip)
count++
endPoint := checkutils.PrepareEndPoint(ip, port, constants.EXTERNAL_POSTGRESQL_API_PATH)
go trigger.TriggerCheckAPI(endPoint, ip, constants.CHEF_INFRA_SERVER, http.MethodPost, outputCh, req)
}
for i := 0; i < count; i++ {
res := <-outputCh
result = append(result, res)
}
close(outputCh)
return result
}
func getPostgresRequest(details *models.ExternalPG) models.ExternalPgRequest {
host, port, _ := net.SplitHostPort(details.PGInstanceURL)
return models.ExternalPgRequest{
PostgresqlInstanceUrl: host,
PostgresqlInstancePort: port,
PostgresqlSuperUserUserName: details.PGSuperuserName,
PostgresqlSuperUserPassword: details.PGSuperuserPassword,
PostgresqlDbUserUserName: details.PGDbUserName,
PostgresqlDbUserPassword: details.PGDbUserPassword,
PostgresqlRootCert: details.PGRootCert,
}
}
func externalPGNillResp(config *models.Config, checkType, message string) []models.CheckTriggerResponse {
var triggerResps []models.CheckTriggerResponse
for _, ip := range config.Hardware.AutomateNodeIps {
triggerResps = append(triggerResps, trigger.SkippedTriggerCheckResp(ip, checkType, constants.AUTOMATE, message))
}
for _, ip := range config.Hardware.ChefInfraServerNodeIps {
triggerResps = append(triggerResps, trigger.SkippedTriggerCheckResp(ip, checkType, constants.CHEF_INFRA_SERVER, message))
}
return triggerResps
}
func isEmptyExternalPG(externalPG *models.ExternalPG) bool {
return externalPG.PGInstanceURL == "" ||
externalPG.PGSuperuserName == "" ||
externalPG.PGSuperuserPassword == "" ||
externalPG.PGDbUserName == "" ||
externalPG.PGDbUserPassword == "" ||
externalPG.PGRootCert == ""
}
func externalPGEmptyResp(config *models.Config, checkType string) []models.CheckTriggerResponse {
var triggerResps []models.CheckTriggerResponse
count := 0
for _, ip := range config.Hardware.AutomateNodeIps {
triggerResps = append(triggerResps, trigger.ErrTriggerCheckResp(ip, checkType, constants.AUTOMATE, constants.PG_DETAILS_MISSING))
count++
}
for _, ip := range config.Hardware.ChefInfraServerNodeIps {
triggerResps = append(triggerResps, trigger.ErrTriggerCheckResp(ip, checkType, constants.CHEF_INFRA_SERVER, constants.PG_DETAILS_MISSING))
count++
}
return triggerResps
}