-
Notifications
You must be signed in to change notification settings - Fork 132
/
resource_cloud_project_database_postgresql_connection_pool.go
137 lines (121 loc) · 4.32 KB
/
resource_cloud_project_database_postgresql_connection_pool.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
129
130
131
132
133
134
135
136
137
package ovh
import (
"context"
"fmt"
"log"
"net/url"
"time"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/ovh/terraform-provider-ovh/ovh/helpers"
)
func resourceCloudProjectDatabasePostgresqlConnectionPool() *schema.Resource {
return &schema.Resource{
CreateContext: resourceCloudProjectDatabasePostgresqlConnectionPoolCreate,
ReadContext: resourceCloudProjectDatabasePostgresqlConnectionPoolRead,
DeleteContext: resourceCloudProjectDatabasePostgresqlConnectionPoolDelete,
UpdateContext: resourceCloudProjectDatabasePostgresqlConnectionPoolUpdate,
Importer: &schema.ResourceImporter{
State: resourceCloudProjectDatabasePostgresqlConnectionPoolImportState,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(20 * time.Minute),
Update: schema.DefaultTimeout(20 * time.Minute),
Delete: schema.DefaultTimeout(20 * time.Minute),
},
Schema: map[string]*schema.Schema{
"service_name": {
Type: schema.TypeString,
ForceNew: true,
Required: true,
DefaultFunc: schema.EnvDefaultFunc("OVH_CLOUD_PROJECT_SERVICE", nil),
},
"cluster_id": {
Type: schema.TypeString,
Description: "Id of the database cluster",
ForceNew: true,
Required: true,
},
"name": {
Type: schema.TypeString,
Description: "Name of the connection pool",
ForceNew: true,
Required: true,
},
"database_id": {
Type: schema.TypeString,
Description: "Database used for the connection pool",
Required: true,
},
"mode": {
Type: schema.TypeString,
Description: "Connection mode to the connection pool",
Required: true,
},
"size": {
Type: schema.TypeInt,
Description: "Size of the connection pool",
Required: true,
},
// Optional
"user_id": {
Type: schema.TypeString,
Description: "Database user authorized to connect to the pool, if none all the users are allowed",
Optional: true,
},
//Computed
"port": {
Type: schema.TypeInt,
Description: "Port of the connection pool",
Computed: true,
},
"ssl_mode": {
Type: schema.TypeString,
Description: "SSL connection mode for the pool",
Computed: true,
},
"uri": {
Type: schema.TypeString,
Description: "Connection URI to the pool",
Computed: true,
},
},
}
}
func resourceCloudProjectDatabasePostgresqlConnectionPoolImportState(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
return importCloudProjectDatabasePostgresqlConnectionPool(d, meta)
}
func resourceCloudProjectDatabasePostgresqlConnectionPoolCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
return postCloudProjectDatabasePostgresqlConnectionPool(ctx, d, meta, resourceCloudProjectDatabasePostgresqlConnectionPoolRead)
}
func resourceCloudProjectDatabasePostgresqlConnectionPoolRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*Config)
serviceName := d.Get("service_name").(string)
clusterId := d.Get("cluster_id").(string)
id := d.Id()
endpoint := fmt.Sprintf("/cloud/project/%s/database/postgresql/%s/connectionPool/%s",
url.PathEscape(serviceName),
url.PathEscape(clusterId),
url.PathEscape(id),
)
res := &CloudProjectDatabasePostgresqlConnectionPoolResponse{}
log.Printf("[DEBUG] Will read connectionPool %s from cluster %s from project %s", id, clusterId, serviceName)
if err := config.OVHClient.Get(endpoint, res); err != nil {
return diag.FromErr(helpers.CheckDeleted(d, err, endpoint))
}
for k, v := range res.ToMap() {
if k != "id" {
d.Set(k, v)
} else {
d.SetId(fmt.Sprint(v))
}
}
log.Printf("[DEBUG] Read connectionPool %+v", res)
return nil
}
func resourceCloudProjectDatabasePostgresqlConnectionPoolUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
return updateCloudProjectDatabasePostgresqlConnectionPool(ctx, d, meta, resourceCloudProjectDatabasePostgresqlConnectionPoolRead)
}
func resourceCloudProjectDatabasePostgresqlConnectionPoolDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
return deleteCloudProjectDatabasePostgresqlConnectionPool(ctx, d, meta)
}