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  }