From bf944f37c4419496bdfd1ba2de2d9d90b5ce5ff6 Mon Sep 17 00:00:00 2001 From: Evans Murithi Date: Tue, 27 Oct 2020 11:40:05 +0300 Subject: [PATCH] Add data source for monitors Fixes #91 --- .../data_source_uptimerobot_monitor.go | 70 +++++++++++++++++++ uptimerobot/provider.go | 3 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 uptimerobot/data_source_uptimerobot_monitor.go diff --git a/uptimerobot/data_source_uptimerobot_monitor.go b/uptimerobot/data_source_uptimerobot_monitor.go new file mode 100644 index 0000000..f6b640a --- /dev/null +++ b/uptimerobot/data_source_uptimerobot_monitor.go @@ -0,0 +1,70 @@ +package uptimerobot + +import ( + "fmt" + "reflect" + + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + uptimerobotapi "github.com/louy/terraform-provider-uptimerobot/uptimerobot/api" +) + +func dataSourceMonitor() *schema.Resource { + return &schema.Resource{ + Read: dataSourceMonitorRead, + Schema: map[string]*schema.Schema{ + "id": {Type: schema.TypeInt, Computed: true}, + "friendly_name": {Type: schema.TypeString, Required: true}, + "url": {Type: schema.TypeString, Computed: true}, + "type": {Type: schema.TypeString, Computed: true}, + "status": {Type: schema.TypeString, Computed: true}, + "interval": {Type: schema.TypeInt, Computed: true}, + "sub_type": {Type: schema.TypeString, Computed: true}, + "port": {Type: schema.TypeInt, Computed: true}, + "keyword_type": {Type: schema.TypeString, Computed: true}, + "keyword_value": {Type: schema.TypeString, Computed: true}, + "http_username": {Type: schema.TypeString, Computed: true}, + "http_password": {Type: schema.TypeString, Computed: true}, + "http_auth_type": {Type: schema.TypeString, Computed: true}, + "custom_http_headers": {Type: schema.TypeMap, Computed: true}, + "alert_contact": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": {Type: schema.TypeString, Computed: true}, + "threshold": {Type: schema.TypeInt, Computed: true}, + "recurrence": {Type: schema.TypeInt, Computed: true}, + }, + }, + }, + }, + } +} + +func dataSourceMonitorRead(d *schema.ResourceData, m interface{}) error { + monitors, err := m.(uptimerobotapi.UptimeRobotApiClient).GetMonitors() + if err != nil { + return err + } + + friendlyName := d.Get("friendly_name").(string) + + var monitor uptimerobotapi.Monitor + + for _, m := range monitors { + if friendlyName != "" && m.FriendlyName == friendlyName { + monitor = m + break + } + } + if reflect.DeepEqual(monitor, uptimerobotapi.Monitor{}) { + return fmt.Errorf("Failed to find monitor by name %s", friendlyName) + } + + d.SetId(fmt.Sprintf("%d", monitor.ID)) + if err := updateMonitorResource(d, monitor); err != nil { + return err + } + + return nil +} diff --git a/uptimerobot/provider.go b/uptimerobot/provider.go index 71f28f0..e50a32e 100644 --- a/uptimerobot/provider.go +++ b/uptimerobot/provider.go @@ -12,7 +12,7 @@ package uptimerobot import ( "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/terraform" - "github.com/louy/terraform-provider-uptimerobot/uptimerobot/api" + uptimerobotapi "github.com/louy/terraform-provider-uptimerobot/uptimerobot/api" ) // Provider returns a terraform.ResourceProvider. @@ -28,6 +28,7 @@ func Provider() terraform.ResourceProvider { DataSourcesMap: map[string]*schema.Resource{ "uptimerobot_account": dataSourceAccount(), "uptimerobot_alert_contact": dataSourceAlertContact(), + "uptimerobot_monitor": dataSourceMonitor(), }, ResourcesMap: map[string]*schema.Resource{ "uptimerobot_alert_contact": resourceAlertContact(),