Skip to content

Commit 8d0e245

Browse files
committed
Add resource and data for ovh_dbaas_logs
1 parent 486f78c commit 8d0e245

9 files changed

+588
-3
lines changed

ovh/data_dbaas_logs.go

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package ovh
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/url"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func dataSourceDbaasLogs() *schema.Resource {
12+
return &schema.Resource{
13+
Read: func(d *schema.ResourceData, meta interface{}) error {
14+
return dataSourceDbaasLogsRead(d, meta)
15+
},
16+
Schema: map[string]*schema.Schema{
17+
"service_name": {
18+
Type: schema.TypeString,
19+
Description: "The service name",
20+
Required: true,
21+
},
22+
"cluster_type": {
23+
Type: schema.TypeString,
24+
Description: "Cluster type",
25+
Computed: true,
26+
},
27+
"dedicated_input_pem": {
28+
Type: schema.TypeString,
29+
Description: "PEM for dedicated inputs",
30+
Computed: true,
31+
},
32+
"archive_allowed_networks": {
33+
Type: schema.TypeSet,
34+
Elem: &schema.Schema{
35+
Type: schema.TypeString,
36+
},
37+
Description: "Allowed networks for ARCHIVE flow type",
38+
Computed: true,
39+
},
40+
"direct_input_allowed_networks": {
41+
Type: schema.TypeSet,
42+
Elem: &schema.Schema{
43+
Type: schema.TypeString,
44+
},
45+
Description: "Allowed networks for DIRECT_INPUT flow type",
46+
Computed: true,
47+
},
48+
"direct_input_pem": {
49+
Type: schema.TypeString,
50+
Description: "PEM for direct inputs",
51+
Computed: true,
52+
},
53+
"hostname": {
54+
Type: schema.TypeString,
55+
Description: "hostname",
56+
Computed: true,
57+
},
58+
"is_default": {
59+
Type: schema.TypeBool,
60+
Description: "All content generated by given service will be placed on this cluster",
61+
Computed: true,
62+
},
63+
"is_unlocked": {
64+
Type: schema.TypeBool,
65+
Description: "Allow given service to perform advanced operations on cluster",
66+
Computed: true,
67+
},
68+
"query_allowed_networks": {
69+
Type: schema.TypeSet,
70+
Elem: &schema.Schema{
71+
Type: schema.TypeString,
72+
},
73+
Description: "Allowed networks for QUERY flow type",
74+
Computed: true,
75+
},
76+
"region": {
77+
Type: schema.TypeString,
78+
Description: "Data center localization",
79+
Computed: true,
80+
},
81+
},
82+
}
83+
}
84+
85+
func dbaasGetClusterID(config *Config, serviceName string) (string, error) {
86+
res := []string{}
87+
88+
endpoint := fmt.Sprintf(
89+
"/dbaas/logs/%s/cluster",
90+
url.PathEscape(serviceName),
91+
)
92+
93+
if err := config.OVHClient.Get(endpoint, &res); err != nil {
94+
return "", fmt.Errorf("Error calling GET %s:\n\t %q", endpoint, err)
95+
}
96+
97+
return res[0], nil
98+
}
99+
100+
func dataSourceDbaasLogsRead(d *schema.ResourceData, meta interface{}) error {
101+
config := meta.(*Config)
102+
103+
serviceName := d.Get("service_name").(string)
104+
105+
log.Printf("[DEBUG] Will read dbaas logs cluster %s", serviceName)
106+
107+
cluster_id, err := dbaasGetClusterID(config, serviceName)
108+
109+
if err != nil {
110+
return fmt.Errorf("Error fetching info for %s:\n\t %q", serviceName, err)
111+
}
112+
113+
d.SetId(cluster_id)
114+
115+
endpoint := fmt.Sprintf(
116+
"/dbaas/logs/%s/cluster/%s",
117+
url.PathEscape(serviceName),
118+
url.PathEscape(cluster_id),
119+
)
120+
121+
res := map[string]interface{}{}
122+
if err := config.OVHClient.Get(endpoint, &res); err != nil {
123+
return fmt.Errorf("Error calling GET %s:\n\t %q", endpoint, err)
124+
}
125+
126+
d.Set("archive_allowed_networks", res["archiveAllowedNetworks"])
127+
d.Set("cluster_type", res["clusterType"])
128+
d.Set("dedicated_input_pem", res["dedicatedInputPEM"])
129+
d.Set("direct_input_allowed_networks", res["directInputAllowedNetworks"])
130+
d.Set("direct_input_pem", res["directInputPEM"])
131+
d.Set("hostname", res["hostname"])
132+
d.Set("is_default", res["isDefault"])
133+
d.Set("is_unlocked", res["isUnlocked"])
134+
d.Set("query_allowed_networks", res["queryAllowedNetworks"])
135+
d.Set("region", res["region"])
136+
137+
return nil
138+
}

ovh/data_dbaas_logs_test.go

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package ovh
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
)
10+
11+
const testAccDataSourceDbaasLogs_dedicated = `
12+
data "ovh_dbaas_logs" "ldp" {
13+
service_name = "%s"
14+
}
15+
`
16+
17+
func TestAccDataSourceDbaasLogs_dedicated(t *testing.T) {
18+
serviceName := os.Getenv("OVH_DBAAS_LOGS_SERVICE_TEST")
19+
20+
config := fmt.Sprintf(
21+
testAccDataSourceDbaasLogs_dedicated,
22+
serviceName,
23+
)
24+
25+
resource.Test(t, resource.TestCase{
26+
PreCheck: func() { testAccPreCheckDbaasLogs(t) },
27+
28+
Providers: testAccProviders,
29+
Steps: []resource.TestStep{
30+
{
31+
Config: config,
32+
Check: resource.ComposeTestCheckFunc(
33+
resource.TestCheckResourceAttr(
34+
"data.ovh_dbaas_logs.ldp",
35+
"cluster_type",
36+
"DEDICATED",
37+
),
38+
resource.TestCheckResourceAttr(
39+
"data.ovh_dbaas_logs.ldp",
40+
"region",
41+
"GRA",
42+
),
43+
),
44+
},
45+
},
46+
})
47+
}

ovh/provider.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package ovh
22

33
import (
44
"context"
5-
ini "gopkg.in/ini.v1"
65
"os"
76
"sync"
87

8+
ini "gopkg.in/ini.v1"
9+
910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112
"github.com/mitchellh/go-homedir"
@@ -86,6 +87,7 @@ func Provider() *schema.Provider {
8687
"ovh_cloud_project_user_s3_credentials": dataCloudProjectUserS3Credentials(),
8788
"ovh_cloud_project_user_s3_policy": dataCloudProjectUserS3Policy(),
8889
"ovh_cloud_project_users": datasourceCloudProjectUsers(),
90+
"ovh_dbaas_logs": dataSourceDbaasLogs(),
8991
"ovh_dbaas_logs_input_engine": dataSourceDbaasLogsInputEngine(),
9092
"ovh_dbaas_logs_output_graylog_stream": dataSourceDbaasLogsOutputGraylogStream(),
9193
"ovh_dedicated_ceph": dataSourceDedicatedCeph(),
@@ -154,6 +156,7 @@ func Provider() *schema.Provider {
154156
"ovh_cloud_project_user": resourceCloudProjectUser(),
155157
"ovh_cloud_project_user_s3_credential": resourceCloudProjectUserS3Credential(),
156158
"ovh_cloud_project_user_s3_policy": resourceCloudProjectUserS3Policy(),
159+
"ovh_dbaas_logs_cluster": resourceDbaasLogsCluster(),
157160
"ovh_dbaas_logs_input": resourceDbaasLogsInput(),
158161
"ovh_dbaas_logs_output_graylog_stream": resourceDbaasLogsOutputGraylogStream(),
159162
"ovh_dedicated_ceph_acl": resourceDedicatedCephACL(),

ovh/provider_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func testAccPreCheckHostingPrivateDatabaseWhitelist(t *testing.T) {
161161
checkEnvOrSkip(t, "OVH_HOSTING_PRIVATEDATABASE_WHITELIST_SFTP_TEST")
162162
}
163163

164-
// Checks that the environment variables needed for the /cloud acceptance tests
164+
// Checks that the environment variables needed for the /dbaas acceptance tests
165165
// are set.
166166
func testAccPreCheckDbaasLogs(t *testing.T) {
167167
testAccPreCheckCredentials(t)

0 commit comments

Comments
 (0)