github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/common_funcs.go (about) 1 package helpers 2 3 import ( 4 "fmt" 5 "strconv" 6 ) 7 8 const DeployLatestVersion = -1 9 10 type DeployHelper struct { 11 director BOSHDirector 12 name string 13 manifestPath string 14 pgVersion int 15 variables map[string]interface{} 16 opDefs []OpDefinition 17 printDiffs bool 18 networkName string 19 } 20 21 func NewDeployHelper(params PgatsConfig, prefix string, pgVersion int) (DeployHelper, error) { 22 var deployHelper DeployHelper 23 var err error 24 25 releases := make(map[string]string) 26 releases["postgres"] = params.PGReleaseVersion 27 28 deployHelper.director, err = NewBOSHDirector(params.Bosh, params.BoshCC, releases) 29 if err != nil { 30 return DeployHelper{}, err 31 } 32 33 deployHelper.manifestPath = "../testing/templates/postgres_simple.yml" 34 deployHelper.SetDeploymentName(prefix) 35 deployHelper.SetPGVersion(pgVersion) 36 deployHelper.networkName = params.BoshCC.Networks[0].Name 37 deployHelper.InitializeVariables() 38 deployHelper.opDefs = nil 39 deployHelper.printDiffs = false 40 return deployHelper, nil 41 } 42 43 func (d *DeployHelper) SetDeploymentName(prefix string) { 44 d.name = GenerateEnvName(prefix) 45 } 46 47 func (d *DeployHelper) EnablePrintDiffs() { 48 d.printDiffs = true 49 } 50 51 func (d *DeployHelper) SetPGVersion(version int) { 52 d.pgVersion = version 53 } 54 55 func (d *DeployHelper) InitializeVariables() { 56 d.variables = make(map[string]interface{}) 57 d.variables["defuser_name"] = "pgadmin" 58 d.variables["defuser_password"] = "adm$in!" 59 60 d.variables["certs_matching_certs"] = "certuser_matching_certs" 61 d.variables["certs_matching_name"] = "certuser_matching_name" 62 63 d.variables["certs_mapped_certs"] = "certuser_mapped_certs" 64 d.variables["certs_mapped_name"] = "certuser_mapped_name" 65 d.variables["certs_mapped_cn"] = "certuser mapped cn" 66 67 d.variables["certs_wrong_certs"] = "certuser_wrong_certs" 68 d.variables["certs_wrong_cn"] = "certuser_wrong_cn" 69 70 d.variables["certs_bad_ca"] = "bad_ca" 71 72 d.variables["superuser_name"] = "superuser" 73 d.variables["superuser_password"] = "superpsw" 74 d.variables["testuser_name"] = "sshuser" 75 d.variables["postgres_dns"] = fmt.Sprintf("q-s0.postgres.%s.%s.bosh", d.networkName, d.name) 76 } 77 78 func (d *DeployHelper) SetVariable(name string, value interface{}) { 79 d.variables[name] = value 80 } 81 82 func (d DeployHelper) GetVariable(name string) interface{} { 83 return d.variables[name] 84 } 85 86 func (d *DeployHelper) SetOpDefs(opDefs []OpDefinition) { 87 d.opDefs = opDefs 88 } 89 90 func (d DeployHelper) GetDeployment() *DeploymentData { 91 return d.director.GetEnv(d.name) 92 } 93 94 func (d DeployHelper) GetDeploymentName() string { 95 return d.name 96 } 97 98 func (d DeployHelper) UploadLatestReleaseFromURL(organization string, project string) error { 99 return d.director.UploadLatestReleaseFromURL(organization, project) 100 } 101 102 func (d DeployHelper) runDeploy() error { 103 var err error 104 if d.printDiffs { 105 err := d.GetDeployment().PrintDeploymentDiffs() 106 if err != nil { 107 return fmt.Errorf("%v%v", "error printing diffs:", err.Error()) 108 } 109 } 110 err = d.GetDeployment().CreateOrUpdateDeployment() 111 if err != nil { 112 return err 113 } 114 return nil 115 } 116 117 func (d DeployHelper) Deploy() error { 118 var err error 119 var vars map[string]interface{} 120 if d.variables != nil { 121 vars = d.variables 122 } else { 123 vars = make(map[string]interface{}) 124 } 125 releases := make(map[string]string) 126 if d.pgVersion != DeployLatestVersion { 127 releases["postgres"] = strconv.Itoa(d.pgVersion) 128 err = d.director.UploadPostgresReleaseFromURL(d.pgVersion) 129 if err != nil { 130 return err 131 } 132 } 133 134 err = d.director.SetDeploymentFromManifest(d.manifestPath, releases, d.name) 135 if err != nil { 136 return err 137 } 138 139 if d.GetDeployment().ContainsVariables() || d.variables != nil { 140 if d.GetDeployment().ContainsVariables() { 141 if _, err = d.GetDeployment().GetVmAddress("postgres"); err != nil { 142 143 vars["postgres_host"] = "1.1.1.1" 144 err = d.GetDeployment().EvaluateTemplate(vars, d.opDefs, EvaluateOptions{}) 145 if err != nil { 146 return err 147 } 148 err = d.runDeploy() 149 if err != nil { 150 return err 151 } 152 } 153 var pgHost string 154 pgHost, err = d.GetDeployment().GetVmDNS("postgres") 155 if err != nil { 156 pgHost, err = d.GetDeployment().GetVmAddress("postgres") 157 if err != nil { 158 return err 159 } 160 } 161 vars["postgres_host"] = pgHost 162 163 err = d.director.SetDeploymentFromManifest(d.manifestPath, releases, d.name) 164 if err != nil { 165 return err 166 } 167 } 168 err = d.GetDeployment().EvaluateTemplate(vars, d.opDefs, EvaluateOptions{}) 169 if err != nil { 170 return err 171 } 172 } 173 err = d.runDeploy() 174 if err != nil { 175 return err 176 } 177 178 return nil 179 } 180 func (d DeployHelper) GetPostgresJobProps() (Properties, error) { 181 var err error 182 manifestProps, err := d.GetDeployment().GetJobsProperties() 183 if err != nil { 184 return Properties{}, err 185 } 186 pgprops := manifestProps.GetJobProperties("postgres")[0] 187 return pgprops, nil 188 } 189 190 func (d DeployHelper) GetPGPropsAndHost() (Properties, string, error) { 191 192 pgprops, err := d.GetPostgresJobProps() 193 if err != nil { 194 return Properties{}, "", err 195 } 196 var pgHost string 197 pgHost, err = d.GetDeployment().GetVmDNS("postgres") 198 if err != nil { 199 pgHost, err = d.GetDeployment().GetVmAddress("postgres") 200 if err != nil { 201 return pgprops, "", err 202 } 203 } 204 return pgprops, pgHost, nil 205 } 206 207 func (d DeployHelper) WriteSSHKey() (string, error) { 208 sshKey := d.GetDeployment().GetVariable("sshkey") 209 keyPath, err := WriteFile(sshKey.(map[interface{}]interface{})["private_key"].(string)) 210 if err != nil { 211 // set permission to 600 212 err = SetPermissions(keyPath, 0600) 213 } 214 return keyPath, err 215 } 216 217 func (d DeployHelper) ConnectToPostgres(pgHost string, pgprops Properties) (PGData, error) { 218 219 pgc := PGCommon{ 220 Address: pgHost, 221 Port: pgprops.Databases.Port, 222 DefUser: User{ 223 Name: d.variables["defuser_name"].(string), 224 Password: d.variables["defuser_password"].(string), 225 }, 226 AdminUser: User{ 227 Name: d.variables["superuser_name"].(string), 228 Password: d.variables["superuser_password"].(string), 229 }, 230 CertUser: User{}, 231 } 232 DB, err := NewPostgres(pgc) 233 if err != nil { 234 return PGData{}, err 235 } 236 return DB, nil 237 }