github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/op_defs_utilities.go (about)

     1  package helpers
     2  
     3  type Janitor struct {
     4  	Timeout  int
     5  	Interval int
     6  	Script   string
     7  }
     8  
     9  func AddOpDefinition(ods *[]OpDefinition, defType string, defPath string, defValue interface{}) {
    10  	od := OpDefinition{
    11  		Type:  defType,
    12  		Path:  &defPath,
    13  		Value: &defValue,
    14  	}
    15  	*ods = append(*ods, od)
    16  }
    17  
    18  func Define_bbr_ops() []OpDefinition {
    19  	var ops []OpDefinition
    20  	var value interface{}
    21  	var path string
    22  
    23  	path = "/instance_groups/name=postgres/jobs/-"
    24  	value = map[interface{}]interface{}{
    25  		"name":    "bbr-postgres-db",
    26  		"release": "postgres",
    27  		"consumes": map[interface{}]interface{}{
    28  			"database": map[interface{}]interface{}{
    29  				"from": "postgres-database",
    30  			},
    31  		},
    32  		"properties": map[interface{}]interface{}{
    33  			"release_level_backup": true,
    34  		},
    35  	}
    36  	AddOpDefinition(&ops, "replace", path, value)
    37  	return ops
    38  }
    39  
    40  func Define_bbr_no_link_ops() []OpDefinition {
    41  	var ops []OpDefinition
    42  	var value interface{}
    43  	var path string
    44  
    45  	p := "/instance_groups/name=backup"
    46  	ops = append(ops, OpDefinition{Type: "remove", Path: &p})
    47  
    48  	path = "/instance_groups/name=postgres/jobs/name=postgres/provides"
    49  	value = map[interface{}]interface{}{
    50  		"postgres": "nil",
    51  	}
    52  	AddOpDefinition(&ops, "replace", path, value)
    53  
    54  	path = "/instance_groups/name=postgres/jobs/-"
    55  	value = map[interface{}]interface{}{
    56  		"name":    "bbr-postgres-db",
    57  		"release": "postgres",
    58  		"properties": map[interface{}]interface{}{
    59  			"release_level_backup": true,
    60  			"postgres": map[interface{}]interface{}{
    61  				"port": "5524",
    62  				"databases": []map[interface{}]interface{}{
    63  					{"name": "sandbox"},
    64  					{"name": "sandbox-2"},
    65  				},
    66  			},
    67  		},
    68  	}
    69  	AddOpDefinition(&ops, "replace", path, value)
    70  	return ops
    71  }
    72  
    73  func Define_bbr_not_colocated_ops() []OpDefinition {
    74  	var ops []OpDefinition
    75  	var value interface{}
    76  	var path string
    77  
    78  	path = "/instance_groups/name=backup/instances"
    79  	value = 1
    80  	AddOpDefinition(&ops, "replace", path, value)
    81  	return ops
    82  }
    83  
    84  func Define_bbr_ssl_verify_full() []OpDefinition {
    85  	var ops []OpDefinition
    86  
    87  	ops = Define_bbr_not_colocated_ops()
    88  	ops = append(ops, Define_ssl_ops()...)
    89  
    90  	return ops
    91  }
    92  
    93  func Define_bbr_ssl_verify_ca() []OpDefinition {
    94  	var ops []OpDefinition
    95  	var value interface{}
    96  	var path string
    97  
    98  	ops = Define_bbr_ssl_verify_full()
    99  
   100  	path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/ssl_verify_hostname"
   101  	value = false
   102  	AddOpDefinition(&ops, "replace", path, value)
   103  
   104  	return ops
   105  }
   106  
   107  func Define_bbr_client_certs() []OpDefinition {
   108  	var ops []OpDefinition
   109  	var value interface{}
   110  	var path string
   111  
   112  	bbruser := "bbruser"
   113  
   114  	ops = Define_bbr_not_colocated_ops()
   115  	ops = append(ops, Define_mutual_ssl_ops()...)
   116  
   117  	path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/client_certificate"
   118  	value = "((bbr_user_certs.certificate))"
   119  	AddOpDefinition(&ops, "replace", path, value)
   120  
   121  	path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/client_certificate_key"
   122  	value = "((bbr_user_certs.private_key))"
   123  	AddOpDefinition(&ops, "replace", path, value)
   124  
   125  	path = "/variables?/name=bbr_user_certs?"
   126  	value = map[interface{}]interface{}{
   127  		"name": "bbr_user_certs",
   128  		"type": "certificate",
   129  		"options": map[interface{}]interface{}{
   130  			"ca":                 "postgres_ca",
   131  			"common_name":        bbruser,
   132  			"alternative_names":  []interface{}{},
   133  			"extended_key_usage": []interface{}{"server_auth", "client_auth"},
   134  		},
   135  	}
   136  	AddOpDefinition(&ops, "replace", path, value)
   137  
   138  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=bbruser?"
   139  	value = map[interface{}]interface{}{
   140  		"name":        bbruser,
   141  		"permissions": []interface{}{"SUPERUSER"},
   142  	}
   143  	AddOpDefinition(&ops, "replace", path, value)
   144  
   145  	path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/dbuser"
   146  	value = bbruser
   147  	AddOpDefinition(&ops, "replace", path, value)
   148  
   149  	return ops
   150  }
   151  
   152  func Define_upgrade_no_copy_ops() []OpDefinition {
   153  	var ops []OpDefinition
   154  	var value interface{}
   155  	var path string
   156  
   157  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/skip_data_copy_in_minor?"
   158  	value = true
   159  	AddOpDefinition(&ops, "replace", path, value)
   160  	return ops
   161  }
   162  
   163  func Define_ssl_ops() []OpDefinition {
   164  	var ops []OpDefinition
   165  	var value interface{}
   166  	var path string
   167  
   168  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/certificate"
   169  	value = "((postgres_cert.certificate))"
   170  	AddOpDefinition(&ops, "replace", path, value)
   171  
   172  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/private_key"
   173  	value = "((postgres_cert.private_key))"
   174  	AddOpDefinition(&ops, "replace", path, value)
   175  
   176  	path = "/variables?/name=postgres_ca?"
   177  	value = map[interface{}]interface{}{
   178  		"name": "postgres_ca",
   179  		"type": "certificate",
   180  		"options": map[interface{}]interface{}{
   181  			"is_ca":       true,
   182  			"common_name": "postgres_ca",
   183  		},
   184  	}
   185  	AddOpDefinition(&ops, "replace", path, value)
   186  
   187  	path = "/variables?/name=postgres_cert?"
   188  	value = map[interface{}]interface{}{
   189  		"name": "postgres_cert",
   190  		"type": "certificate",
   191  		"options": map[interface{}]interface{}{
   192  			"ca":                 "postgres_ca",
   193  			"common_name":        "((postgres_host))",
   194  			"alternative_names":  []interface{}{"((postgres_host))", "((postgres_dns))"},
   195  			"extended_key_usage": []interface{}{"server_auth"},
   196  		},
   197  	}
   198  	AddOpDefinition(&ops, "replace", path, value)
   199  
   200  	path = "/variables?/name=((certs_matching_certs))?"
   201  	value = map[interface{}]interface{}{
   202  		"name": "((certs_matching_certs))",
   203  		"type": "certificate",
   204  		"options": map[interface{}]interface{}{
   205  			"ca":                 "postgres_ca",
   206  			"common_name":        "((certs_matching_name))",
   207  			"alternative_names":  []interface{}{},
   208  			"extended_key_usage": []interface{}{"server_auth", "client_auth"},
   209  		},
   210  	}
   211  	AddOpDefinition(&ops, "replace", path, value)
   212  
   213  	path = "/variables?/name=((certs_mapped_certs))?"
   214  	value = map[interface{}]interface{}{
   215  		"name": "((certs_mapped_certs))",
   216  		"type": "certificate",
   217  		"options": map[interface{}]interface{}{
   218  			"ca":                 "postgres_ca",
   219  			"common_name":        "((certs_mapped_cn))",
   220  			"alternative_names":  []interface{}{},
   221  			"extended_key_usage": []interface{}{"server_auth", "client_auth"},
   222  		},
   223  	}
   224  	AddOpDefinition(&ops, "replace", path, value)
   225  
   226  	path = "/variables?/name=((certs_wrong_certs))?"
   227  	value = map[interface{}]interface{}{
   228  		"name": "((certs_wrong_certs))",
   229  		"type": "certificate",
   230  		"options": map[interface{}]interface{}{
   231  			"ca":                 "postgres_ca",
   232  			"common_name":        "((certs_wrong_cn))",
   233  			"alternative_names":  []interface{}{},
   234  			"extended_key_usage": []interface{}{"server_auth", "client_auth"},
   235  		},
   236  	}
   237  	AddOpDefinition(&ops, "replace", path, value)
   238  
   239  	path = "/variables?/name=((certs_bad_ca))?"
   240  	value = map[interface{}]interface{}{
   241  		"name": "((certs_bad_ca))",
   242  		"type": "certificate",
   243  		"options": map[interface{}]interface{}{
   244  			"is_ca":       true,
   245  			"common_name": "bad_ca",
   246  		},
   247  	}
   248  	AddOpDefinition(&ops, "replace", path, value)
   249  
   250  	return ops
   251  }
   252  
   253  func Define_mutual_ssl_ops() []OpDefinition {
   254  	var value interface{}
   255  	var path string
   256  
   257  	ops := Define_ssl_ops()
   258  
   259  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/ca"
   260  	value = "((postgres_cert.ca))"
   261  	AddOpDefinition(&ops, "replace", path, value)
   262  
   263  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=aaa?"
   264  	value = map[interface{}]interface{}{
   265  		"name":        "aaa",
   266  		"common_name": "aaa_2",
   267  	}
   268  	AddOpDefinition(&ops, "replace", path, value)
   269  
   270  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=((certs_matching_name))?"
   271  	value = map[interface{}]interface{}{
   272  		"name": "((certs_matching_name))",
   273  	}
   274  	AddOpDefinition(&ops, "replace", path, value)
   275  
   276  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=((certs_mapped_name))?"
   277  	value = map[interface{}]interface{}{
   278  		"name":        "((certs_mapped_name))",
   279  		"common_name": "((certs_mapped_cn))",
   280  	}
   281  	AddOpDefinition(&ops, "replace", path, value)
   282  
   283  	return ops
   284  }
   285  
   286  func Define_add_bad_role() []OpDefinition {
   287  	var ops []OpDefinition
   288  	var value interface{}
   289  	var path string
   290  
   291  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/-"
   292  	var permissions []string
   293  	permissions = append(permissions, "DOESNOTEXIST")
   294  	value = map[interface{}]interface{}{
   295  		"name":        "foo",
   296  		"password":    "foo",
   297  		"permissions": permissions,
   298  	}
   299  	AddOpDefinition(&ops, "replace", path, value)
   300  
   301  	return ops
   302  }
   303  
   304  func DefineHooks(hooks_timeout string, pre_start string, post_start string, pre_stop string, post_stop string) []OpDefinition {
   305  	var ops []OpDefinition
   306  	var path string
   307  
   308  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/timeout?"
   309  	AddOpDefinition(&ops, "replace", path, hooks_timeout)
   310  
   311  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/pre_start?"
   312  	AddOpDefinition(&ops, "replace", path, pre_start)
   313  
   314  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/post_start?"
   315  	AddOpDefinition(&ops, "replace", path, post_start)
   316  
   317  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/pre_stop?"
   318  	AddOpDefinition(&ops, "replace", path, pre_stop)
   319  
   320  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/post_stop?"
   321  	AddOpDefinition(&ops, "replace", path, post_stop)
   322  
   323  	return ops
   324  }
   325  
   326  func (j Janitor) GetOpDefinitions() []OpDefinition {
   327  	var ops []OpDefinition
   328  	var path string
   329  
   330  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/timeout?"
   331  	AddOpDefinition(&ops, "replace", path, j.Timeout)
   332  
   333  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/interval?"
   334  	AddOpDefinition(&ops, "replace", path, j.Interval)
   335  
   336  	path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/script?"
   337  	AddOpDefinition(&ops, "replace", path, j.Script)
   338  
   339  	return ops
   340  }