Skip to content

Commit

Permalink
Add resource and data for ovh_dbaas_logs
Browse files Browse the repository at this point in the history
  • Loading branch information
vaxvms committed Feb 13, 2023
1 parent 486f78c commit f274f66
Show file tree
Hide file tree
Showing 9 changed files with 596 additions and 3 deletions.
138 changes: 138 additions & 0 deletions ovh/data_dbaas_logs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package ovh

import (
"fmt"
"log"
"net/url"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceDbaasLogs() *schema.Resource {
return &schema.Resource{
Read: func(d *schema.ResourceData, meta interface{}) error {
return dataSourceDbaasLogsRead(d, meta)
},
Schema: map[string]*schema.Schema{
"service_name": {
Type: schema.TypeString,
Description: "The service name",
Required: true,
},
"cluster_type": {
Type: schema.TypeString,
Description: "Cluster type",
Computed: true,
},
"dedicated_input_pem": {
Type: schema.TypeString,
Description: "PEM for dedicated inputs",
Computed: true,
},
"archive_allowed_networks": {
Type: schema.TypeSet,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Description: "Allowed networks for ARCHIVE flow type",
Computed: true,
},
"direct_input_allowed_networks": {
Type: schema.TypeSet,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Description: "Allowed networks for DIRECT_INPUT flow type",
Computed: true,
},
"direct_input_pem": {
Type: schema.TypeString,
Description: "PEM for direct inputs",
Computed: true,
},
"hostname": {
Type: schema.TypeString,
Description: "hostname",
Computed: true,
},
"is_default": {
Type: schema.TypeBool,
Description: "All content generated by given service will be placed on this cluster",
Computed: true,
},
"is_unlocked": {
Type: schema.TypeBool,
Description: "Allow given service to perform advanced operations on cluster",
Computed: true,
},
"query_allowed_networks": {
Type: schema.TypeSet,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Description: "Allowed networks for QUERY flow type",
Computed: true,
},
"region": {
Type: schema.TypeString,
Description: "Data center localization",
Computed: true,
},
},
}
}

func dbaasGetClusterID(config *Config, serviceName string) (string, error) {
res := []string{}

endpoint := fmt.Sprintf(
"/dbaas/logs/%s/cluster",
url.PathEscape(serviceName),
)

if err := config.OVHClient.Get(endpoint, &res); err != nil {
return "", fmt.Errorf("Error calling GET %s:\n\t %q", endpoint, err)
}

return res[0], nil
}

func dataSourceDbaasLogsRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)

serviceName := d.Get("service_name").(string)

log.Printf("[DEBUG] Will read dbaas logs cluster %s", serviceName)

cluster_id, err := dbaasGetClusterID(config, serviceName)

if err != nil {
return fmt.Errorf("Error fetching info for %s:\n\t %q", serviceName, err)
}

d.SetId(cluster_id)

endpoint := fmt.Sprintf(
"/dbaas/logs/%s/cluster/%s",
url.PathEscape(serviceName),
url.PathEscape(cluster_id),
)

res := map[string]interface{}{}
if err := config.OVHClient.Get(endpoint, &res); err != nil {
return fmt.Errorf("Error calling GET %s:\n\t %q", endpoint, err)
}

d.Set("archive_allowed_networks", res["archiveAllowedNetworks"])
d.Set("cluster_type", res["clusterType"])
d.Set("dedicated_input_pem", res["dedicatedInputPEM"])
d.Set("direct_input_allowed_networks", res["directInputAllowedNetworks"])
d.Set("direct_input_pem", res["directInputPEM"])
d.Set("hostname", res["hostname"])
d.Set("is_default", res["isDefault"])
d.Set("is_unlocked", res["isUnlocked"])
d.Set("query_allowed_networks", res["queryAllowedNetworks"])
d.Set("region", res["region"])

return nil
}
47 changes: 47 additions & 0 deletions ovh/data_dbaas_logs_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package ovh

import (
"fmt"
"os"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

const testAccDataSourceDbaasLogs_dedicated = `
data "ovh_dbaas_logs" "ldp" {
service_name = "%s"
}
`

func TestAccDataSourceDbaasLogs_dedicated(t *testing.T) {
serviceName := os.Getenv("OVH_DBAAS_LOGS_SERVICE_TEST")

config := fmt.Sprintf(
testAccDataSourceDbaasLogs_dedicated,
serviceName,
)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheckDbaasLogs(t) },

Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: config,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
"data.ovh_dbaas_logs.ldp",
"cluster_type",
"DEDICATED",
),
resource.TestCheckResourceAttr(
"data.ovh_dbaas_logs.ldp",
"region",
"GRA",
),
),
},
},
})
}
5 changes: 4 additions & 1 deletion ovh/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package ovh

import (
"context"
ini "gopkg.in/ini.v1"
"os"
"sync"

ini "gopkg.in/ini.v1"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/mitchellh/go-homedir"
Expand Down Expand Up @@ -86,6 +87,7 @@ func Provider() *schema.Provider {
"ovh_cloud_project_user_s3_credentials": dataCloudProjectUserS3Credentials(),
"ovh_cloud_project_user_s3_policy": dataCloudProjectUserS3Policy(),
"ovh_cloud_project_users": datasourceCloudProjectUsers(),
"ovh_dbaas_logs": dataSourceDbaasLogs(),
"ovh_dbaas_logs_input_engine": dataSourceDbaasLogsInputEngine(),
"ovh_dbaas_logs_output_graylog_stream": dataSourceDbaasLogsOutputGraylogStream(),
"ovh_dedicated_ceph": dataSourceDedicatedCeph(),
Expand Down Expand Up @@ -154,6 +156,7 @@ func Provider() *schema.Provider {
"ovh_cloud_project_user": resourceCloudProjectUser(),
"ovh_cloud_project_user_s3_credential": resourceCloudProjectUserS3Credential(),
"ovh_cloud_project_user_s3_policy": resourceCloudProjectUserS3Policy(),
"ovh_dbaas_logs_cluster": resourceDbaasLogsCluster(),
"ovh_dbaas_logs_input": resourceDbaasLogsInput(),
"ovh_dbaas_logs_output_graylog_stream": resourceDbaasLogsOutputGraylogStream(),
"ovh_dedicated_ceph_acl": resourceDedicatedCephACL(),
Expand Down
2 changes: 1 addition & 1 deletion ovh/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ func testAccPreCheckHostingPrivateDatabaseWhitelist(t *testing.T) {
checkEnvOrSkip(t, "OVH_HOSTING_PRIVATEDATABASE_WHITELIST_SFTP_TEST")
}

// Checks that the environment variables needed for the /cloud acceptance tests
// Checks that the environment variables needed for the /dbaas acceptance tests
// are set.
func testAccPreCheckDbaasLogs(t *testing.T) {
testAccPreCheckCredentials(t)
Expand Down
Loading

0 comments on commit f274f66

Please sign in to comment.