New Resource: Stackdriver uptime check

This commit is contained in:
Chris Stephens 2018-11-22 00:14:46 +00:00 committed by Nathan McKinley
parent 276f447890
commit f2dd796f8c
5 changed files with 1524 additions and 0 deletions

View File

@ -20,4 +20,5 @@ var GeneratedMonitoringResourcesMap = map[string]*schema.Resource{
"google_monitoring_alert_policy": resourceMonitoringAlertPolicy(),
"google_monitoring_group": resourceMonitoringGroup(),
"google_monitoring_notification_channel": resourceMonitoringNotificationChannel(),
"google_monitoring_uptime_check_config": resourceMonitoringUptimeCheckConfig(),
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,138 @@
// ----------------------------------------------------------------------------
//
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
//
// ----------------------------------------------------------------------------
//
// This file is automatically generated by Magic Modules and manual
// changes will be clobbered when the file is regenerated.
//
// Please read more about how to change this file in
// .github/CONTRIBUTING.md.
//
// ----------------------------------------------------------------------------
package google
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
func TestAccMonitoringUptimeCheckConfig_uptimeCheckConfigHttpExample(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckMonitoringUptimeCheckConfigDestroy,
Steps: []resource.TestStep{
{
Config: testAccMonitoringUptimeCheckConfig_uptimeCheckConfigHttpExample(acctest.RandString(10)),
},
{
ResourceName: "google_monitoring_uptime_check_config.http",
ImportState: true,
ImportStateVerify: true,
},
},
})
}
func testAccMonitoringUptimeCheckConfig_uptimeCheckConfigHttpExample(val string) string {
return fmt.Sprintf(`
resource "google_monitoring_uptime_check_config" "http" {
display_name = "http-uptime-check-%s"
timeout = "60s"
http_check = {
path = "/some-path"
port = "8010"
}
monitored_resource {
type = "uptime_url"
labels = {
project_id = "example"
host = "192.168.1.1"
}
}
content_matchers = {
content = "example"
}
}
`, val,
)
}
func TestAccMonitoringUptimeCheckConfig_uptimeCheckTcpExample(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckMonitoringUptimeCheckConfigDestroy,
Steps: []resource.TestStep{
{
Config: testAccMonitoringUptimeCheckConfig_uptimeCheckTcpExample(acctest.RandString(10)),
},
{
ResourceName: "google_monitoring_uptime_check_config.tcp_group",
ImportState: true,
ImportStateVerify: true,
},
},
})
}
func testAccMonitoringUptimeCheckConfig_uptimeCheckTcpExample(val string) string {
return fmt.Sprintf(`
resource "google_monitoring_uptime_check_config" "tcp_group" {
display_name = "tcp-uptime-check-%s"
timeout = "60s"
tcp_check = {
port = 888
}
resource_group {
resource_type = "INSTANCE"
group_id = "${google_monitoring_group.check.name}"
}
}
resource "google_monitoring_group" "check" {
display_name = "uptime-check-group-%s"
filter = "resource.metadata.name=has_substring(\"foo\")"
}
`, val, val,
)
}
func testAccCheckMonitoringUptimeCheckConfigDestroy(s *terraform.State) error {
for _, rs := range s.RootModule().Resources {
if rs.Type != "google_monitoring_uptime_check_config" {
continue
}
config := testAccProvider.Meta().(*Config)
url, err := replaceVarsForTest(rs, "https://monitoring.googleapis.com/v3/{{name}}")
if err != nil {
return err
}
_, err = sendRequest(config, "GET", url, nil)
if err == nil {
return fmt.Errorf("MonitoringUptimeCheckConfig still exists at %s", url)
}
}
return nil
}

View File

@ -0,0 +1,71 @@
package google
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
)
func TestAccMonitoringUptimeCheckConfig_update(t *testing.T) {
t.Parallel()
project := getTestProjectFromEnv()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckMonitoringUptimeCheckConfigDestroy,
Steps: []resource.TestStep{
{
Config: testAccMonitoringUptimeCheckConfig_update("mypath", "password1", project),
},
{
ResourceName: "google_monitoring_uptime_check_config.http",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"http_check.0.auth_info.0.password"},
},
{
Config: testAccMonitoringUptimeCheckConfig_update("", "password2", project),
},
{
ResourceName: "google_monitoring_uptime_check_config.http",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"http_check.0.auth_info.0.password"},
},
},
})
}
func testAccMonitoringUptimeCheckConfig_update(path, project, pwd string) string {
return fmt.Sprintf(`
resource "google_monitoring_uptime_check_config" "http" {
display_name = "http-uptime-check-%s"
timeout = "60s"
http_check = {
path = "/%s"
port = "8010"
auth_info = {
username = "name"
password = "%s"
}
}
monitored_resource {
type = "uptime_url"
labels = {
project_id = "%s"
host = "192.168.1.1"
}
}
content_matchers = {
content = "example"
}
}
`, acctest.RandString(4), path, project, pwd,
)
}

View File

@ -0,0 +1,257 @@
---
# ----------------------------------------------------------------------------
#
# *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
#
# ----------------------------------------------------------------------------
#
# This file is automatically generated by Magic Modules and manual
# changes will be clobbered when the file is regenerated.
#
# Please read more about how to change this file in
# .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
layout: "google"
page_title: "Google: google_monitoring_uptime_check_config"
sidebar_current: "docs-google-monitoring-uptime-check-config"
description: |-
This message configures which resources and services to monitor for availability.
---
# google\_monitoring\_uptime\_check\_config
This message configures which resources and services to monitor for availability.
To get more information about UptimeCheckConfig, see:
* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs)
* How-to Guides
* [Official Documentation](https://cloud.google.com/monitoring/api/v3/)
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=uptime_check_config_http&cloudshell_image=gcr.io%2Fgraphite-cloud-shell-images%2Fterraform%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
</a>
</div>
## Example Usage - Uptime Check Config Http
```hcl
resource "google_monitoring_uptime_check_config" "http" {
display_name = "http-uptime-check"
timeout = "60s"
http_check = {
path = "/some-path"
port = "8010"
}
monitored_resource {
type = "uptime_url"
labels = {
project_id = "example"
host = "192.168.1.1"
}
}
content_matchers = {
content = "example"
}
}
```
<div class = "oics-button" style="float: right; margin: 0 0 -15px">
<a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=uptime_check_tcp&cloudshell_image=gcr.io%2Fgraphite-cloud-shell-images%2Fterraform%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank">
<img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;">
</a>
</div>
## Example Usage - Uptime Check Tcp
```hcl
resource "google_monitoring_uptime_check_config" "tcp_group" {
display_name = "tcp-uptime-check"
timeout = "60s"
tcp_check = {
port = 888
}
resource_group {
resource_type = "INSTANCE"
group_id = "${google_monitoring_group.check.name}"
}
}
resource "google_monitoring_group" "check" {
display_name = "uptime-check-group"
filter = "resource.metadata.name=has_substring(\"foo\")"
}
```
## Argument Reference
The following arguments are supported:
* `display_name` -
(Required)
A human-friendly name for the uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
* `timeout` -
(Required)
The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Accepted formats https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration
- - -
* `period` -
(Optional)
How often, in seconds, the uptime check is performed. Currently, the only supported values are 60s (1 minute), 300s (5 minutes), 600s (10 minutes), and 900s (15 minutes). Optional, defaults to 300s.
* `content_matchers` -
(Optional)
The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required. Structure is documented below.
* `selected_regions` -
(Optional)
The list of regions from which the check will be run. Some regions contain one location, and others contain more than one. If this field is specified, enough regions to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
* `is_internal` -
(Optional)
If this is true, then checks are made only from the 'internal_checkers'. If it is false, then checks are made only from the 'selected_regions'. It is an error to provide 'selected_regions' when is_internal is true, or to provide 'internal_checkers' when is_internal is false.
* `internal_checkers` -
(Optional)
The internal checkers that this check will egress from. If is_internal is true and this list is empty, the check will egress from all the InternalCheckers configured for the project that owns this CheckConfig. Structure is documented below.
* `http_check` -
(Optional)
Contains information needed to make an HTTP or HTTPS check. Structure is documented below.
* `tcp_check` -
(Optional)
Contains information needed to make a TCP check. Structure is documented below.
* `resource_group` -
(Optional)
The group resource associated with the configuration. Structure is documented below.
* `monitored_resource` -
(Optional)
The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks: uptime_url gce_instance gae_app aws_ec2_instance aws_elb_load_balancer Structure is documented below.
* `project` - (Optional) The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
The `content_matchers` block supports:
* `content` -
(Optional)
String or regex content to match (max 1024 bytes)
The `internal_checkers` block supports:
* `gcp_zone` -
(Optional)
The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
* `peer_project_id` -
(Optional)
The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
* `name` -
(Optional)
A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
* `network` -
(Optional)
The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
* `display_name` -
(Optional)
The checker's human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
The `http_check` block supports:
* `auth_info` -
(Optional)
The authentication information. Optional when creating an HTTP check; defaults to empty. Structure is documented below.
* `port` -
(Optional)
The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
* `headers` -
(Optional)
The list of headers to send as part of the uptime check request. If two headers have the same key and different values, they should be entered as a single header, with the value being a comma-separated list of all the desired values as described at https://www.w3.org/Protocols/rfc2616/rfc2616.txt (page 31). Entering two separate headers with the same key in a Create call will cause the first to be overwritten by the second. The maximum number of headers allowed is 100.
* `path` -
(Optional)
The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/").
* `use_ssl` -
(Optional)
If true, use HTTPS instead of HTTP to run the check.
* `mask_headers` -
(Optional)
Boolean specifiying whether to encrypt the header information. Encryption should be specified for any headers related to authentication that you do not wish to be seen when retrieving the configuration. The server will be responsible for encrypting the headers. On Get/List calls, if mask_headers is set to True then the headers will be obscured with ******.
The `auth_info` block supports:
* `password` -
(Optional)
The password to authenticate.
* `username` -
(Optional)
The username to authenticate.
The `tcp_check` block supports:
* `port` -
(Required)
The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL.
The `resource_group` block supports:
* `resource_type` -
(Optional)
The resource type of the group members.
* `group_id` -
(Optional)
The group of resources being monitored. Should be the `name` of a group
The `monitored_resource` block supports:
* `type` -
(Required)
The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.monitoredResourceDescriptors#MonitoredResourceDescriptor) object. For example, the type of a Compute Engine VM instance is gce_instance. For a list of types, see Monitoring resource types (https://cloud.google.com/monitoring/api/resources) and Logging resource types (https://cloud.google.com/logging/docs/api/v2/resource-list).
* `labels` -
(Required)
Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels "project_id", "instance_id", and "zone".
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `name` -
A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]. on create the resource name is assigned by the server and included in the response.
## Import
UptimeCheckConfig can be imported using any of these accepted formats:
```
$ terraform import google_monitoring_uptime_check_config.default {{name}}
```