Skip to content

Commit 08dde79

Browse files
committed
Add Stackdriver Uptime Check IPs data source (#674)
Use naming semantics from the UptimeCheckIps API.
1 parent 1c8eb9a commit 08dde79

File tree

7 files changed

+8243
-10
lines changed

7 files changed

+8243
-10
lines changed

google/config.go

+9
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"google.golang.org/api/dns/v1"
2929
"google.golang.org/api/iam/v1"
3030
cloudlogging "google.golang.org/api/logging/v2"
31+
"google.golang.org/api/monitoring/v3"
3132
"google.golang.org/api/pubsub/v1"
3233
"google.golang.org/api/runtimeconfig/v1beta1"
3334
"google.golang.org/api/servicemanagement/v1"
@@ -63,6 +64,7 @@ type Config struct {
6364
clientIAM *iam.Service
6465
clientServiceMan *servicemanagement.APIService
6566
clientBigQuery *bigquery.Service
67+
clientMonitoring *monitoring.Service
6668

6769
bigtableClientFactory *BigtableClientFactory
6870
}
@@ -269,6 +271,13 @@ func (c *Config) loadAndValidate() error {
269271
}
270272
c.clientDataproc.UserAgent = userAgent
271273

274+
log.Printf("[INFO] Instantiating Stackdriver Monitoring Client...")
275+
c.clientMonitoring, err = monitoring.New(client)
276+
if err != nil {
277+
return err
278+
}
279+
c.clientMonitoring.UserAgent = userAgent
280+
272281
return nil
273282
}
274283

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package google
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"sort"
7+
"time"
8+
9+
"github.com/hashicorp/terraform/helper/schema"
10+
"google.golang.org/api/monitoring/v3"
11+
)
12+
13+
func dataSourceStackdriverUptimeCheckIps() *schema.Resource {
14+
return &schema.Resource{
15+
Read: dataSourceStackdriverUptimeCheckIpsRead,
16+
17+
Schema: map[string]*schema.Schema{
18+
"uptime_check_ips": {
19+
Type: schema.TypeList,
20+
Elem: &schema.Schema{Type: schema.TypeString},
21+
Computed: true,
22+
},
23+
},
24+
}
25+
}
26+
27+
func dataSourceStackdriverUptimeCheckIpsRead(d *schema.ResourceData, meta interface{}) error {
28+
29+
config := meta.(*Config)
30+
31+
// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/uptimeCheckIps/list
32+
33+
resp, err := config.clientMonitoring.UptimeCheckIps.List().Do()
34+
if err != nil {
35+
return fmt.Errorf("Error retrieving Stackdriver Uptime Check IPs: %s", err.Error())
36+
}
37+
38+
uptimeCheckIps := flattenUptimeCheckIpAddresses(resp.UptimeCheckIps)
39+
d.Set("uptime_check_ips", uptimeCheckIps)
40+
41+
log.Printf("[DEBUG] Received Stackdriver Uptime Check IPs: %q", uptimeCheckIps)
42+
43+
d.SetId(time.Now().UTC().String())
44+
45+
return nil
46+
}
47+
48+
func flattenUptimeCheckIpAddresses(uptimeCheckIps []*monitoring.UptimeCheckIp) []string {
49+
result := make([]string, len(uptimeCheckIps), len(uptimeCheckIps))
50+
for i, uptimeCheckIp := range uptimeCheckIps {
51+
result[i] = uptimeCheckIp.IpAddress
52+
}
53+
sort.Strings(result)
54+
return result
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package google
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform/helper/resource"
8+
)
9+
10+
func TestAccDataSourceStackdriverUptimeCheckIps_basic(t *testing.T) {
11+
t.Parallel()
12+
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() { testAccPreCheck(t) },
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
resource.TestStep{
18+
Config: testAccStackdriverUptimeCheckIpsConfig,
19+
Check: resource.ComposeTestCheckFunc(
20+
resource.TestMatchResourceAttr("data.google_stackdriver_uptime_check_ips.some",
21+
"uptime_check_ips.#", regexp.MustCompile("^[1-9]+[0-9]*$")),
22+
resource.TestMatchResourceAttr("data.google_stackdriver_uptime_check_ips.some",
23+
"uptime_check_ips.0", regexp.MustCompile("^[0-9./]+$")),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
const testAccStackdriverUptimeCheckIpsConfig = `
31+
data "google_stackdriver_uptime_check_ips" "some" {}
32+
`

google/provider.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,17 @@ func Provider() terraform.ResourceProvider {
4949
},
5050

5151
DataSourcesMap: map[string]*schema.Resource{
52-
"google_dns_managed_zone": dataSourceDnsManagedZone(),
53-
"google_client_config": dataSourceGoogleClientConfig(),
54-
"google_compute_lb_ip_ranges": dataSourceGoogleComputeLbIpRanges(),
55-
"google_compute_network": dataSourceGoogleComputeNetwork(),
56-
"google_compute_subnetwork": dataSourceGoogleComputeSubnetwork(),
57-
"google_compute_zones": dataSourceGoogleComputeZones(),
58-
"google_compute_instance_group": dataSourceGoogleComputeInstanceGroup(),
59-
"google_container_engine_versions": dataSourceGoogleContainerEngineVersions(),
60-
"google_iam_policy": dataSourceGoogleIamPolicy(),
61-
"google_storage_object_signed_url": dataSourceGoogleSignedUrl(),
52+
"google_dns_managed_zone": dataSourceDnsManagedZone(),
53+
"google_client_config": dataSourceGoogleClientConfig(),
54+
"google_compute_lb_ip_ranges": dataSourceGoogleComputeLbIpRanges(),
55+
"google_compute_network": dataSourceGoogleComputeNetwork(),
56+
"google_compute_subnetwork": dataSourceGoogleComputeSubnetwork(),
57+
"google_compute_zones": dataSourceGoogleComputeZones(),
58+
"google_compute_instance_group": dataSourceGoogleComputeInstanceGroup(),
59+
"google_container_engine_versions": dataSourceGoogleContainerEngineVersions(),
60+
"google_iam_policy": dataSourceGoogleIamPolicy(),
61+
"google_storage_object_signed_url": dataSourceGoogleSignedUrl(),
62+
"google_stackdriver_uptime_check_ips": dataSourceStackdriverUptimeCheckIps(),
6263
},
6364

6465
ResourcesMap: map[string]*schema.Resource{

0 commit comments

Comments
 (0)