HTTPS SSH

Pingdom provider

This currently only supports working with:
- Basic HTTP
- Ping checks.

Build and install

Dependencies

You should have a working Go environment setup. If not check out the Go getting started guide.

This use dep for dependency management. To fetch all dependencies run dep ensure.

Build

go get bitbucket.org/devops_sysops/pingdom-provider

The binary will then be available at ~/go/bin/pingdom-provider, unless you've set $GOPATH, in which case you'll find it at $GOPATH/bin

Install

You will need to install the binary as a terraform third party plugin. Terraform will then pick up the binary from the local filesystem when you run terraform init.

ln -s ~/go/bin/pingdom-provider ~/.terraform.d/plugins/$(uname | tr '[:upper:]' '[:lower:]')_amd64/terraform-provider-pingdom_v$(date +%Y.%m.%d)

Updates can now be applied by re-running go get bitbucket.org/devops_sysops/pingdom-provider.

Usage

Basic Check

variable "pingdom_user" {}
variable "pingdom_password" {}
variable "pingdom_api_key" {}
variable "pingdom_account_email" {} # Optional: only required for multi-user accounts

provider "pingdom" {
    user = "${var.pingdom_user}"
    password = "${var.pingdom_password}"
    api_key = "${var.pingdom_api_key}"
    account_email = "${var.pingdom_account_email}" # Optional: only required for multi-user accounts
}

resource "pingdom_check" "example" {
    type = "http"
    name = "my http check"
    host = "example.com"
    resolution = 5
}

resource "pingdom_check" "example_with_alert" {
    type = "http"
    name = "my http check"
    host = "example.com"
    resolution = 5
    sendnotificationwhendown = 2
    integrationids = [
      12345678,
      23456789
    ]
}

resource "pingdom_check" "ping_example" {
    type = "ping"
    name = "my ping check"
    host = "example.com"
    resolution = 1
}

Apply with:

 terraform apply \
    -var 'pingdom_user=YOUR_USERNAME' \
    -var 'pingdom_password=YOUR_PASSWORD' \
    -var 'pingdom_api_key=YOUR_API_KEY'

Using attributes from other resources

variable "heroku_email" {}
variable "heroku_api_key" {}

variable "pingdom_user" {}
variable "pingdom_password" {}
variable "pingdom_api_key" {}

provider "heroku" {
    email = "${var.heroku_email}"
    api_key = "${var.heroku_api_key}"
}

provider "pingdom" {
    user = "${var.pingdom_user}"
    password = "${var.pingdom_password}"
    api_key = "${var.pingdom_api_key}"
}

resource "heroku_app" "example" {
    name = "my-app"
    region = "us"
}

resource "pingdom_check" "example" {
    name = "my check"
    host = "${heroku_app.example.heroku_hostname}"
    resolution = 5
}

Resources

Pingdom Check

Common Attibutes

The following common attributes for all check types can be set:

  • name - (Required) The name of the check

  • host - (Required) The hostname to check. Should be in the format example.com.

  • resolution - (Required) The time in minutes between each check. Allowed values: (1,5,15,30,60).

  • type - (Required) The check type. Allowed values: (http, ping).

  • sendnotificationwhendown - The number of consecutive failed checks required to trigger an alert. Values of 0 are ignored.

  • notifyagainevery - Notify again after n results. A value of 0 means no additional notifications will be sent.

  • notifywhenbackup - Notify when backup.

  • integrationids - List of integer integration IDs (defined by webhook URL) that will be triggered by the alerts. The ID can be extracted from the integrations page URL on the pingdom website.

  • userids - List of integer user IDs that will be notified when the check is down.

  • teamids - List of integer team IDs that will be notified when the check is down.

HTTP specific attibutes

For the HTTP checks, you can set these attributes:

  • url - Target path on server.

  • encryption - Enable encryption in the HTTP check (aka HTTPS).

  • port - Target port for HTTP checks.

  • username - Username for target HTTP authentication.

  • password - Password for target HTTP authentication.

  • shouldcontain - Target site should contain this string.

  • shouldnotcontain - Target site should NOT contain this string. Not allowed defined together with shouldcontain.

  • postdata - Data that should be posted to the web page, for example submission data for a sign-up or login form. The data needs to be formatted in the same way as a web browser would send it to the web server.

  • requestheaders - Custom HTTP headers. It should be a hash with pairs, like { "header_name" = "header_content" }

  • tags - List of tags the check should contain. Should be in the format "tagA,tagB"

  • probefilters - Region from which the check should originate. One of NA, EU, APAC, or LATAM. Should be in the format "region:NA"

The following attributes are exported: id The ID of the Pingdom check