provider/opsgenie: Descriptions for Teams (#11391)
* updating the opsgenie dependency * Adding description to an OpsGenie team * Description for Teams * Added tests for an empty description
This commit is contained in:
parent
dd6d025dbb
commit
79024dbf09
|
@ -33,6 +33,30 @@ func TestAccOpsGenieTeam_importBasic(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccOpsGenieTeam_importWithEmptyDescription(t *testing.T) {
|
||||||
|
resourceName := "opsgenie_team.test"
|
||||||
|
|
||||||
|
ri := acctest.RandInt()
|
||||||
|
config := fmt.Sprintf(testAccOpsGenieTeam_withEmptyDescription, ri)
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testCheckOpsGenieTeamDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
{
|
||||||
|
Config: config,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
ResourceName: resourceName,
|
||||||
|
ImportState: true,
|
||||||
|
ImportStateVerify: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestAccOpsGenieTeam_importWithUser(t *testing.T) {
|
func TestAccOpsGenieTeam_importWithUser(t *testing.T) {
|
||||||
resourceName := "opsgenie_team.test"
|
resourceName := "opsgenie_team.test"
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"github.com/opsgenie/opsgenie-go-sdk/team"
|
"github.com/opsgenie/opsgenie-go-sdk/team"
|
||||||
"regexp"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceOpsGenieTeam() *schema.Resource {
|
func resourceOpsGenieTeam() *schema.Resource {
|
||||||
|
@ -26,6 +27,10 @@ func resourceOpsGenieTeam() *schema.Resource {
|
||||||
Required: true,
|
Required: true,
|
||||||
ValidateFunc: validateOpsGenieTeamName,
|
ValidateFunc: validateOpsGenieTeamName,
|
||||||
},
|
},
|
||||||
|
"description": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
},
|
||||||
"member": {
|
"member": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
@ -53,9 +58,11 @@ func resourceOpsGenieTeamCreate(d *schema.ResourceData, meta interface{}) error
|
||||||
client := meta.(*OpsGenieClient).teams
|
client := meta.(*OpsGenieClient).teams
|
||||||
|
|
||||||
name := d.Get("name").(string)
|
name := d.Get("name").(string)
|
||||||
|
description := d.Get("description").(string)
|
||||||
|
|
||||||
createRequest := team.CreateTeamRequest{
|
createRequest := team.CreateTeamRequest{
|
||||||
Name: name,
|
Name: name,
|
||||||
|
Description: description,
|
||||||
Members: expandOpsGenieTeamMembers(d),
|
Members: expandOpsGenieTeamMembers(d),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,6 +125,7 @@ func resourceOpsGenieTeamRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Set("name", getResponse.Name)
|
d.Set("name", getResponse.Name)
|
||||||
|
d.Set("description", getResponse.Description)
|
||||||
d.Set("member", flattenOpsGenieTeamMembers(getResponse.Members))
|
d.Set("member", flattenOpsGenieTeamMembers(getResponse.Members))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -126,10 +134,12 @@ func resourceOpsGenieTeamRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
func resourceOpsGenieTeamUpdate(d *schema.ResourceData, meta interface{}) error {
|
func resourceOpsGenieTeamUpdate(d *schema.ResourceData, meta interface{}) error {
|
||||||
client := meta.(*OpsGenieClient).teams
|
client := meta.(*OpsGenieClient).teams
|
||||||
name := d.Get("name").(string)
|
name := d.Get("name").(string)
|
||||||
|
description := d.Get("description").(string)
|
||||||
|
|
||||||
updateRequest := team.UpdateTeamRequest{
|
updateRequest := team.UpdateTeamRequest{
|
||||||
Id: d.Id(),
|
Id: d.Id(),
|
||||||
Name: name,
|
Name: name,
|
||||||
|
Description: description,
|
||||||
Members: expandOpsGenieTeamMembers(d),
|
Members: expandOpsGenieTeamMembers(d),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,25 @@ func TestAccOpsGenieTeam_basic(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccOpsGenieTeam_withEmptyDescription(t *testing.T) {
|
||||||
|
ri := acctest.RandInt()
|
||||||
|
config := fmt.Sprintf(testAccOpsGenieTeam_withEmptyDescription, ri)
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testCheckOpsGenieTeamDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
{
|
||||||
|
Config: config,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testCheckOpsGenieTeamExists("opsgenie_team.test"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestAccOpsGenieTeam_withUser(t *testing.T) {
|
func TestAccOpsGenieTeam_withUser(t *testing.T) {
|
||||||
ri := acctest.RandInt()
|
ri := acctest.RandInt()
|
||||||
config := fmt.Sprintf(testAccOpsGenieTeam_withUser, ri, ri)
|
config := fmt.Sprintf(testAccOpsGenieTeam_withUser, ri, ri)
|
||||||
|
@ -215,6 +234,13 @@ resource "opsgenie_team" "test" {
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
var testAccOpsGenieTeam_withEmptyDescription = `
|
||||||
|
resource "opsgenie_team" "test" {
|
||||||
|
name = "acctest%d"
|
||||||
|
description = ""
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
var testAccOpsGenieTeam_withUser = `
|
var testAccOpsGenieTeam_withUser = `
|
||||||
resource "opsgenie_user" "test" {
|
resource "opsgenie_user" "test" {
|
||||||
username = "acctest-%d@example.tld"
|
username = "acctest-%d@example.tld"
|
||||||
|
@ -239,6 +265,7 @@ resource "opsgenie_user" "test" {
|
||||||
|
|
||||||
resource "opsgenie_team" "test" {
|
resource "opsgenie_team" "test" {
|
||||||
name = "acctest%d"
|
name = "acctest%d"
|
||||||
|
description = "Some exmaple description"
|
||||||
member {
|
member {
|
||||||
username = "${opsgenie_user.test.username}"
|
username = "${opsgenie_user.test.username}"
|
||||||
role = "user"
|
role = "user"
|
||||||
|
@ -260,6 +287,7 @@ resource "opsgenie_user" "second" {
|
||||||
|
|
||||||
resource "opsgenie_team" "test" {
|
resource "opsgenie_team" "test" {
|
||||||
name = "acctest%d"
|
name = "acctest%d"
|
||||||
|
description = "Some exmaple description"
|
||||||
member {
|
member {
|
||||||
username = "${opsgenie_user.first.username}"
|
username = "${opsgenie_user.first.username}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
# How to contribute
|
|
||||||
|
|
||||||
Your contributions are more than welcomed at OpsGenie! You can contribute to OpsGenie Go SDK by submitting a pull request.
|
|
||||||
|
|
||||||
Before pushing your commits, please make sure you followed the steps described below:
|
|
||||||
|
|
||||||
1. Run `go fmt` to format your code.
|
|
||||||
2. Alternatively you can use [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports), it also formats import lines.
|
|
||||||
3. [golint](https://github.com/golang/lint) your code to detect style mistakes.
|
|
||||||
4. [govet](http://godoc.org/golang.org/x/tools/cmd/vet) your code to detect suspicious constructs.
|
|
|
@ -1,97 +0,0 @@
|
||||||
# opsgenie-go-sdk
|
|
||||||
## Aim and Scope
|
|
||||||
OpsGenie GO SDK aims to access OpsGenie Web API through HTTP calls
|
|
||||||
from a client application purely written in Go language.
|
|
||||||
|
|
||||||
OpsGenie Go SDK covers *the Alert API*, *the Heartbeat API*,
|
|
||||||
*the Integration API* and *the Policy API*. Future releases
|
|
||||||
are subject to be delivered for packing more APIs soon.
|
|
||||||
|
|
||||||
**Documentation:** [![](https://godoc.org/github.com/nathany/looper?status.svg)](http://godoc.org/github.com/opsgenie/opsgenie-go-sdk/client)
|
|
||||||
|
|
||||||
For more information about OpsGenie Go SDK, please refer to [OpsGenie Go API](https://www.opsgenie.com/docs/api-and-client-libraries/opsgenie-go-api) document.
|
|
||||||
|
|
||||||
## Pre-requisites
|
|
||||||
* The API is built using Go 1.4.2. Some features may not be
|
|
||||||
available or supported unless you have installed a relevant version of Go.
|
|
||||||
Please click [https://golang.org/dl/](https://golang.org/dl/) to download and
|
|
||||||
get more information about installing Go on your computer.
|
|
||||||
* Make sure you have properly set both `GOROOT` and `GOPATH`
|
|
||||||
environment variables.
|
|
||||||
|
|
||||||
* Before you can begin, you need to sign up [OpsGenie](http://www.opsgenie.com) if you
|
|
||||||
don't have a valid account yet. Create an API Integration and get your API key.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
To download all packages in the repo with their dependencies, simply run
|
|
||||||
|
|
||||||
`go get github.com/opsgenie/opsgenie-go-sdk/...`
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
One can start using OpsGenie Go SDK by initializing client and making a request. Example shown below demonstrates how to initialize an OpsGenie Alert client and make a create alert request.
|
|
||||||
```
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
alerts "github.com/opsgenie/opsgenie-go-sdk/alerts"
|
|
||||||
ogcli "github.com/opsgenie/opsgenie-go-sdk/client"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
cli := new(ogcli.OpsGenieClient)
|
|
||||||
cli.SetAPIKey("YOUR_API_KEY")
|
|
||||||
|
|
||||||
alertCli, cliErr := cli.Alert()
|
|
||||||
|
|
||||||
if cliErr != nil {
|
|
||||||
panic(cliErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// create the alert
|
|
||||||
req := alerts.CreateAlertRequest{Message: "Hello from OpsGenie Go Sdk"}
|
|
||||||
response, alertErr := alertCli.Create(req)
|
|
||||||
|
|
||||||
if alertErr != nil {
|
|
||||||
panic(alertErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("message: %s\n", response.Message)
|
|
||||||
fmt.Printf("alert id: %s\n", response.AlertId)
|
|
||||||
fmt.Printf("status: %s\n", response.Status)
|
|
||||||
fmt.Printf("code: %d\n", response.Code)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
There are many useful sample code snippets under `samples` directory for packages.
|
|
||||||
|
|
||||||
## Handling Zero value problem with 'omitempty' option in Json
|
|
||||||
|
|
||||||
Every golang type has a [zero value](http://golang.org/ref/spec#The_zero_value).
|
|
||||||
AddHeartbeat and UpdateHeartbeat requests have a boolean "Enabled" field to determine a heartbeat is enabled or disabled.
|
|
||||||
enabled is not a mandatory field in both requests so, it has "omitempty" flag.
|
|
||||||
|
|
||||||
When JSON is unmarshalling the requests, it omits the fields contains zero value of its type when this option is set.
|
|
||||||
|
|
||||||
The problem starts here:
|
|
||||||
When you want to set the Enabled field as false, JSON does not unmarshal it because it contains boolean zero value and has option omitempty.
|
|
||||||
This problem occurs with strings; when you want to reset a heartbeat's description. To set heartbeat's description as empty string, you should make the request with Description :"".
|
|
||||||
But JSON does not unmarshal it either.
|
|
||||||
|
|
||||||
So, to solve this we followed go-github's solution as mentioned [here](https://willnorris.com/2014/05/go-rest-apis-and-pointers).
|
|
||||||
We used pointers just for booleans, if you want to set a string's value to empty. please use " ", or "-" as new string value.
|
|
||||||
|
|
||||||
## The Web API
|
|
||||||
|
|
||||||
Please follow the links below for more information and details
|
|
||||||
about the Web API.
|
|
||||||
|
|
||||||
* [Alert API](https://www.opsgenie.com/docs/web-api/alert-api)
|
|
||||||
* [Heartbeat API](https://www.opsgenie.com/docs/web-api/heartbeat-api)
|
|
||||||
* [Integration API](https://www.opsgenie.com/docs/web-api/integration-api)
|
|
||||||
* [Policy API](https://www.opsgenie.com/docs/web-api/policy-api)
|
|
||||||
|
|
||||||
|
|
||||||
## Bug Reporting and Feature Requests
|
|
||||||
|
|
||||||
If you like to report a bug, or a feature request; please open an issue.
|
|
|
@ -164,6 +164,43 @@ type GetAlertResponse struct {
|
||||||
SystemData map[string]interface{} `json:"systemData"`
|
SystemData map[string]interface{} `json:"systemData"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnAcknowledgeAlertResponse holds the result data of the UnAcknowledgeAlertRequest
|
||||||
|
type UnAcknowledgeAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
Took int `json:"took"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SnoozeAlertResponse holds the result data of the SnoozeAlertRequest
|
||||||
|
type SnoozeAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveTagsAlertResponse holds the result data of the RemoveTagsAlertRequest
|
||||||
|
type RemoveTagsAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDetailsAlertResponse holds the result data of the AddDetailsAlertRequest
|
||||||
|
type AddDetailsAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveDetailsAlertResponse holds the result data of the RemoveDetailsAlertRequest
|
||||||
|
type RemoveDetailsAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// EscalateToNextAlertResponse holds the result data of the EscalateToNextAlertRequest
|
||||||
|
type EscalateToNextAlertResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
//IntegrationType returns extracted "integrationType" data from the retrieved alert' SystemData property.
|
//IntegrationType returns extracted "integrationType" data from the retrieved alert' SystemData property.
|
||||||
func (res *GetAlertResponse) IntegrationType() string {
|
func (res *GetAlertResponse) IntegrationType() string {
|
||||||
if val, ok := res.SystemData["integrationType"].(string); ok {
|
if val, ok := res.SystemData["integrationType"].(string); ok {
|
||||||
|
|
|
@ -181,6 +181,9 @@ type ListAlertsRequest struct {
|
||||||
Status string `url:"status,omitempty"`
|
Status string `url:"status,omitempty"`
|
||||||
SortBy string `url:"sortBy,omitempty"`
|
SortBy string `url:"sortBy,omitempty"`
|
||||||
Order string `url:"order,omitempty"`
|
Order string `url:"order,omitempty"`
|
||||||
|
Teams []string `url:"teams,omitempty"`
|
||||||
|
Tags []string `url:"tags,omitempty"`
|
||||||
|
TagsOperator string `url:"tagsOperator,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CountAlertRequest counts the alerts at OpsGenie.
|
// CountAlertRequest counts the alerts at OpsGenie.
|
||||||
|
@ -192,8 +195,8 @@ type CountAlertRequest struct {
|
||||||
UpdatedBefore uint64 `url:"updatedBefore,omitempty"`
|
UpdatedBefore uint64 `url:"updatedBefore,omitempty"`
|
||||||
Limit uint64 `url:"limit,omitempty"`
|
Limit uint64 `url:"limit,omitempty"`
|
||||||
Status string `url:"status,omitempty"`
|
Status string `url:"status,omitempty"`
|
||||||
Tags []string `json:"tags,omitempty"`
|
Tags []string `url:"tags,omitempty"`
|
||||||
TagsOperator string `url:"tagsoperator,omitempty"`
|
TagsOperator string `url:"tagsOperator,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenotifyAlertRequest provides necessary parameter structure to Re-notify recipients at OpsGenie.
|
// RenotifyAlertRequest provides necessary parameter structure to Re-notify recipients at OpsGenie.
|
||||||
|
@ -216,3 +219,70 @@ type TakeOwnershipAlertRequest struct {
|
||||||
Note string `json:"note,omitempty"`
|
Note string `json:"note,omitempty"`
|
||||||
Source string `json:"source,omitempty"`
|
Source string `json:"source,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnAcknowledgeAlertRequest provides necessary parameter structure to Unacknowledge an alert at OpsGenie.
|
||||||
|
type UnAcknowledgeAlertRequest struct {
|
||||||
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Alias string `json:"alias,omitempty"`
|
||||||
|
User string `json:"user,omitempty"`
|
||||||
|
Note string `json:"note,omitempty"`
|
||||||
|
Source string `json:"source,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SnoozeAlertRequest provides necessary parameter structure to Snooze an alert at OpsGenie.
|
||||||
|
type SnoozeAlertRequest struct {
|
||||||
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Alias string `json:"alias,omitempty"`
|
||||||
|
EndDate string `json:"endDate,omitempty"`
|
||||||
|
User string `json:"user,omitempty"`
|
||||||
|
Note string `json:"note,omitempty"`
|
||||||
|
Source string `json:"source,omitempty"`
|
||||||
|
TimeZone string `json:"timezone,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveTagsAlertRequest provides necessary parameter structure to Remove Tags from an alert at OpsGenie.
|
||||||
|
type RemoveTagsAlertRequest struct {
|
||||||
|
APIKey string `url:"apiKey,omitempty"`
|
||||||
|
ID string `url:"id,omitempty"`
|
||||||
|
Alias string `url:"alias,omitempty"`
|
||||||
|
Tags []string `url:"tags,omitempty"`
|
||||||
|
User string `url:"user,omitempty"`
|
||||||
|
Note string `url:"note,omitempty"`
|
||||||
|
Source string `url:"source,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDetailsAlertRequest provides necessary parameter structure to Add Details to an alert at OpsGenie.
|
||||||
|
type AddDetailsAlertRequest struct {
|
||||||
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Alias string `json:"alias,omitempty"`
|
||||||
|
Details map[string]string `json:"details,omitempty"`
|
||||||
|
User string `json:"user,omitempty"`
|
||||||
|
Note string `json:"note,omitempty"`
|
||||||
|
Source string `json:"source,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveDetailsAlertRequest provides necessary parameter structure to Remove Details from an alert at OpsGenie.
|
||||||
|
type RemoveDetailsAlertRequest struct {
|
||||||
|
APIKey string `url:"apiKey,omitempty"`
|
||||||
|
ID string `url:"id,omitempty"`
|
||||||
|
Alias string `url:"alias,omitempty"`
|
||||||
|
Keys []string `url:"keys,omitempty"`
|
||||||
|
User string `url:"user,omitempty"`
|
||||||
|
Note string `url:"note,omitempty"`
|
||||||
|
Source string `url:"source,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// EscalateToNextAlertRequest provides necessary parameter structure to Escalate To Next for and alert at OpsGenie.
|
||||||
|
type EscalateToNextAlertRequest struct {
|
||||||
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Alias string `json:"alias,omitempty"`
|
||||||
|
EscalationID string `json:"escalationId,omitempty"`
|
||||||
|
EscalationName string `json:"escalationName,omitempty"`
|
||||||
|
User string `json:"user,omitempty"`
|
||||||
|
Note string `json:"note,omitempty"`
|
||||||
|
Source string `json:"source,omitempty"`
|
||||||
|
}
|
|
@ -39,6 +39,12 @@ const (
|
||||||
executeActionAlertURL = "/v1/json/alert/executeAction"
|
executeActionAlertURL = "/v1/json/alert/executeAction"
|
||||||
attachFileAlertURL = "/v1/json/alert/attach"
|
attachFileAlertURL = "/v1/json/alert/attach"
|
||||||
countAlertURL = "/v1/json/alert/count"
|
countAlertURL = "/v1/json/alert/count"
|
||||||
|
unacknowledgeAlertURL = "/v1/json/alert/unacknowledge"
|
||||||
|
snoozeAlertURL = "/v1/json/alert/snooze"
|
||||||
|
removeTagsAlertURL = "/v1/json/alert/tags"
|
||||||
|
addDetailsAlertURL = "/v1/json/alert/details"
|
||||||
|
removeDetailsAlertURL = "/v1/json/alert/details"
|
||||||
|
escalateToNextAlertURL = "/v1/json/alert/escalateToNext"
|
||||||
)
|
)
|
||||||
|
|
||||||
// OpsGenieAlertClient is the data type to make Alert API requests.
|
// OpsGenieAlertClient is the data type to make Alert API requests.
|
||||||
|
@ -412,6 +418,126 @@ func (cli *OpsGenieAlertClient) ExecuteAction(req alerts.ExecuteActionAlertReque
|
||||||
return &executeActionAlertResp, nil
|
return &executeActionAlertResp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnAcknowledge method unacknowledges an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) UnAcknowledge(req alerts.UnAcknowledgeAlertRequest) (*alerts.UnAcknowledgeAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildPostRequest(unacknowledgeAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var unacknowledgeAlertResp alerts.UnAcknowledgeAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&unacknowledgeAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &unacknowledgeAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Snooze method snoozes an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) Snooze(req alerts.SnoozeAlertRequest) (*alerts.SnoozeAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildPostRequest(snoozeAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var snoozeAlertResp alerts.SnoozeAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&snoozeAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &snoozeAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveTags method removes tags from an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) RemoveTags(req alerts.RemoveTagsAlertRequest) (*alerts.RemoveTagsAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildDeleteRequest(removeTagsAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var removeTagsAlertResp alerts.RemoveTagsAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&removeTagsAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &removeTagsAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDetails method adds details to an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) AddDetails(req alerts.AddDetailsAlertRequest) (*alerts.AddDetailsAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildPostRequest(addDetailsAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var addDetailsAlertResp alerts.AddDetailsAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&addDetailsAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &addDetailsAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveDetails method removes details from an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) RemoveDetails(req alerts.RemoveDetailsAlertRequest) (*alerts.RemoveDetailsAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildDeleteRequest(removeDetailsAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var removeDetailsAlertResp alerts.RemoveDetailsAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&removeDetailsAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &removeDetailsAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnAcknowledge method unacknowledges an alert at OpsGenie.
|
||||||
|
func (cli *OpsGenieAlertClient) EscalateToNext(req alerts.EscalateToNextAlertRequest) (*alerts.EscalateToNextAlertResponse, error) {
|
||||||
|
req.APIKey = cli.apiKey
|
||||||
|
resp, err := cli.sendRequest(cli.buildPostRequest(escalateToNextAlertURL, req))
|
||||||
|
|
||||||
|
if resp == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
var escalateToNextAlertResp alerts.EscalateToNextAlertResponse
|
||||||
|
|
||||||
|
if err = resp.Body.FromJsonTo(&escalateToNextAlertResp); err != nil {
|
||||||
|
message := "Server response can not be parsed, " + err.Error()
|
||||||
|
logging.Logger().Warn(message)
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return &escalateToNextAlertResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
// AttachFile method attaches a file to an alert at OpsGenie.
|
// AttachFile method attaches a file to an alert at OpsGenie.
|
||||||
func (cli *OpsGenieAlertClient) AttachFile(req alerts.AttachFileAlertRequest) (*alerts.AttachFileAlertResponse, error) {
|
func (cli *OpsGenieAlertClient) AttachFile(req alerts.AttachFileAlertRequest) (*alerts.AttachFileAlertResponse, error) {
|
||||||
req.APIKey = cli.apiKey
|
req.APIKey = cli.apiKey
|
||||||
|
|
|
@ -16,6 +16,7 @@ type Member struct {
|
||||||
// CreateTeamRequest provides necessary parameter structure for creating team
|
// CreateTeamRequest provides necessary parameter structure for creating team
|
||||||
type CreateTeamRequest struct {
|
type CreateTeamRequest struct {
|
||||||
APIKey string `json:"apiKey,omitempty"`
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Members []Member `json:"members,omitempty"`
|
Members []Member `json:"members,omitempty"`
|
||||||
}
|
}
|
||||||
|
@ -23,6 +24,7 @@ type CreateTeamRequest struct {
|
||||||
// UpdateTeamRequest provides necessary parameter structure for updating a team
|
// UpdateTeamRequest provides necessary parameter structure for updating a team
|
||||||
type UpdateTeamRequest struct {
|
type UpdateTeamRequest struct {
|
||||||
APIKey string `json:"apiKey,omitempty"`
|
APIKey string `json:"apiKey,omitempty"`
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Members []Member `json:"members,omitempty"`
|
Members []Member `json:"members,omitempty"`
|
||||||
|
|
|
@ -21,6 +21,7 @@ type DeleteTeamResponse struct {
|
||||||
|
|
||||||
// Get team response structure
|
// Get team response structure
|
||||||
type GetTeamResponse struct {
|
type GetTeamResponse struct {
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
Id string `json:"id,omitempty"`
|
Id string `json:"id,omitempty"`
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Members []Member `json:"members,omitempty"`
|
Members []Member `json:"members,omitempty"`
|
||||||
|
|
|
@ -2236,64 +2236,64 @@
|
||||||
"revisionTime": "2013-12-21T20:05:32Z"
|
"revisionTime": "2013-12-21T20:05:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "pp5jNDEOaGDzOb1F0ajBNClK8og=",
|
"checksumSHA1": "0/RftERTKDVmV2jHzq7+vtmAgfk=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/alerts",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/alerts",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "kD80GYnlsh2/LOIAgGgGdULT0HU=",
|
"checksumSHA1": "hKn7WCXZXfVmwI20A6yoqpe0Mks=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/client",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/client",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "/qEw2SLQwcT3dTbBUaHvyRszM3U=",
|
"checksumSHA1": "/qEw2SLQwcT3dTbBUaHvyRszM3U=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/escalation",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/escalation",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "SHhmCqu+9Hh5e0Tyo6NtP+ofAuU=",
|
"checksumSHA1": "SHhmCqu+9Hh5e0Tyo6NtP+ofAuU=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/heartbeat",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/heartbeat",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "Z4UBwcb/EmhF2dSrxJs9r7pI6w8=",
|
"checksumSHA1": "Z4UBwcb/EmhF2dSrxJs9r7pI6w8=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/integration",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/integration",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "JI6oDq30yyH+Y1C4xfcKWfDMq/A=",
|
"checksumSHA1": "JI6oDq30yyH+Y1C4xfcKWfDMq/A=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/logging",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/logging",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "ON63VXFhw2kb9XTDRzN9AgPCmIc=",
|
"checksumSHA1": "ON63VXFhw2kb9XTDRzN9AgPCmIc=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/policy",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/policy",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "xhOHMc+dJEFYhFSGZBGsKV/AYBc=",
|
"checksumSHA1": "xhOHMc+dJEFYhFSGZBGsKV/AYBc=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/schedule",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/schedule",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "cXHPOWaBeihPn4GRQmqPF3qVdwY=",
|
"checksumSHA1": "TGsrNGsuIejIWfSWoFiWBGdYrFs=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/team",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/team",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "1O5b+oyDYkjze5MVH8YMBV3+FHI=",
|
"checksumSHA1": "1O5b+oyDYkjze5MVH8YMBV3+FHI=",
|
||||||
"path": "github.com/opsgenie/opsgenie-go-sdk/user",
|
"path": "github.com/opsgenie/opsgenie-go-sdk/user",
|
||||||
"revision": "82dfcf432a7ebd279d4db97812012bccce4bca89",
|
"revision": "2654b36ec837f913b546aec27f7717b5ac664cc8",
|
||||||
"revisionTime": "2016-11-24T11:28:56Z"
|
"revisionTime": "2017-01-24T12:11:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "d1VHczIGt2bhYR0BNkTedIS/9uk=",
|
"checksumSHA1": "d1VHczIGt2bhYR0BNkTedIS/9uk=",
|
||||||
|
|
|
@ -26,6 +26,7 @@ resource "opsgenie_user" "second" {
|
||||||
|
|
||||||
resource "opsgenie_team" "test" {
|
resource "opsgenie_team" "test" {
|
||||||
name = "example"
|
name = "example"
|
||||||
|
description = "This team deals with all the things"
|
||||||
|
|
||||||
member {
|
member {
|
||||||
username = "${opsgenie_user.first.username}"
|
username = "${opsgenie_user.first.username}"
|
||||||
|
@ -45,6 +46,8 @@ The following arguments are supported:
|
||||||
|
|
||||||
* `name` - (Required) The name associated with this team. OpsGenie defines that this must not be longer than 100 characters.
|
* `name` - (Required) The name associated with this team. OpsGenie defines that this must not be longer than 100 characters.
|
||||||
|
|
||||||
|
* `description` - (Optional) A description for this team.
|
||||||
|
|
||||||
* `member` - (Optional) A Member block as documented below.
|
* `member` - (Optional) A Member block as documented below.
|
||||||
|
|
||||||
`member` supports the following:
|
`member` supports the following:
|
||||||
|
|
Loading…
Reference in New Issue