gomod: update `go-tfe`
This commit is contained in:
parent
ffcf9fc51b
commit
8a430113f6
8
go.mod
8
go.mod
|
@ -52,11 +52,11 @@ require (
|
||||||
github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c // indirect
|
github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c // indirect
|
||||||
github.com/hashicorp/go-multierror v1.0.0
|
github.com/hashicorp/go-multierror v1.0.0
|
||||||
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856
|
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1
|
github.com/hashicorp/go-retryablehttp v0.5.2
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0
|
github.com/hashicorp/go-rootcerts v1.0.0
|
||||||
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 // indirect
|
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 // indirect
|
||||||
github.com/hashicorp/go-tfe v0.3.11
|
github.com/hashicorp/go-tfe v0.3.14
|
||||||
github.com/hashicorp/go-uuid v1.0.0
|
github.com/hashicorp/go-uuid v1.0.1
|
||||||
github.com/hashicorp/go-version v1.1.0
|
github.com/hashicorp/go-version v1.1.0
|
||||||
github.com/hashicorp/golang-lru v0.5.0 // indirect
|
github.com/hashicorp/golang-lru v0.5.0 // indirect
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f
|
||||||
|
@ -117,4 +117,6 @@ require (
|
||||||
google.golang.org/api v0.1.0
|
google.golang.org/api v0.1.0
|
||||||
google.golang.org/grpc v1.18.0
|
google.golang.org/grpc v1.18.0
|
||||||
gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect
|
gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect
|
||||||
|
labix.org/v2/mgo v0.0.0-20140701140051-000000000287 // indirect
|
||||||
|
launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect
|
||||||
)
|
)
|
||||||
|
|
22
go.sum
22
go.sum
|
@ -179,20 +179,22 @@ github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uP
|
||||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||||
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856 h1:FHiCaU46W1WoqApsaGGIKbNkhQ6v71hJrOf2INQMLUo=
|
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856 h1:FHiCaU46W1WoqApsaGGIKbNkhQ6v71hJrOf2INQMLUo=
|
||||||
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1 h1:Vsx5XKPqPs3M6sM4U4GWyUqFS8aBiL9U5gkgvpkg4SE=
|
github.com/hashicorp/go-retryablehttp v0.5.2 h1:AoISa4P4IsW0/m4T6St8Yw38gTl5GtBAgfkhYh1xAz4=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
github.com/hashicorp/go-retryablehttp v0.5.2/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=
|
github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||||
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
|
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
|
||||||
github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
|
github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
|
||||||
github.com/hashicorp/go-slug v0.2.0 h1:MVdZAkTmDsUi1AT+3NQDsn8n3ssnVSIHwiM6RcUHvE8=
|
github.com/hashicorp/go-slug v0.3.0 h1:L0c+AvH/J64iMNF4VqRaRku2DMTEuHioPVS7kMjWIU8=
|
||||||
github.com/hashicorp/go-slug v0.2.0/go.mod h1:+zDycQOzGqOqMW7Kn2fp9vz/NtqpMLQlgb9JUF+0km4=
|
github.com/hashicorp/go-slug v0.3.0/go.mod h1:I5tq5Lv0E2xcNXNkmx7BSfzi1PsJ2cNjs3cC3LwyhK8=
|
||||||
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 h1:7YOlAIO2YWnJZkQp7B5eFykaIY7C9JndqAFQyVV5BhM=
|
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 h1:7YOlAIO2YWnJZkQp7B5eFykaIY7C9JndqAFQyVV5BhM=
|
||||||
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
github.com/hashicorp/go-tfe v0.3.11 h1:PHw0f1XeriVkqBikhXgZm/t65GR/fEH1iUl/d/9qKbU=
|
github.com/hashicorp/go-tfe v0.3.14 h1:1eWmq4RAICGufydNUWu7ahb0gtq24pN9jatD2FkdxdE=
|
||||||
github.com/hashicorp/go-tfe v0.3.11/go.mod h1:LHLchj07PCYgQqcyE5Sz+g4zrMNW+nALKbiSNTZedEs=
|
github.com/hashicorp/go-tfe v0.3.14/go.mod h1:SuPHR+OcxvzBZNye7nGPfwZTEyd3rWPfLVbCgyZPezM=
|
||||||
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
||||||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0=
|
github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0=
|
||||||
github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
||||||
|
@ -200,8 +202,6 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20181208003705-670926858200/go.mod h1:ShfpTh661oAaxo7VcNxg0zcZW6jvMa7Moy2oFx7e5dE=
|
github.com/hashicorp/hcl2 v0.0.0-20181208003705-670926858200/go.mod h1:ShfpTh661oAaxo7VcNxg0zcZW6jvMa7Moy2oFx7e5dE=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190327223817-3fb4ed0d9260 h1:C3vhYEXk8ihs+Xvq093axRyYhfLERrZ6Uv5tfRw9yvw=
|
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190327223817-3fb4ed0d9260/go.mod h1:HtEzazM5AZ9fviNEof8QZB4T1Vz9UhHrGhnMPzl//Ek=
|
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190402200843-8b450a7d58f9 h1:zCITwiA0cog6aYr/a/McDHKtgsEpYxXvTIgugv5iu8o=
|
github.com/hashicorp/hcl2 v0.0.0-20190402200843-8b450a7d58f9 h1:zCITwiA0cog6aYr/a/McDHKtgsEpYxXvTIgugv5iu8o=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190402200843-8b450a7d58f9/go.mod h1:HtEzazM5AZ9fviNEof8QZB4T1Vz9UhHrGhnMPzl//Ek=
|
github.com/hashicorp/hcl2 v0.0.0-20190402200843-8b450a7d58f9/go.mod h1:HtEzazM5AZ9fviNEof8QZB4T1Vz9UhHrGhnMPzl//Ek=
|
||||||
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590 h1:2yzhWGdgQUWZUCNK+AoO35V+HTsgEmcM4J9IkArh7PI=
|
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590 h1:2yzhWGdgQUWZUCNK+AoO35V+HTsgEmcM4J9IkArh7PI=
|
||||||
|
@ -471,6 +471,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
|
||||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
||||||
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||||
|
@ -512,5 +514,9 @@ grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJd
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
|
howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
|
||||||
|
labix.org/v2/mgo v0.0.0-20140701140051-000000000287 h1:L0cnkNl4TfAXzvdrqsYEmxOHOCv2p5I3taaReO8BWFs=
|
||||||
|
labix.org/v2/mgo v0.0.0-20140701140051-000000000287/go.mod h1:Lg7AYkt1uXJoR9oeSZ3W/8IXLdvOfIITgZnommstyz4=
|
||||||
|
launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54=
|
||||||
|
launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
|
||||||
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
||||||
|
|
|
@ -36,7 +36,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-cleanhttp"
|
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -81,6 +81,28 @@ func (r *Request) WithContext(ctx context.Context) *Request {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BodyBytes allows accessing the request body. It is an analogue to
|
||||||
|
// http.Request's Body variable, but it returns a copy of the underlying data
|
||||||
|
// rather than consuming it.
|
||||||
|
//
|
||||||
|
// This function is not thread-safe; do not call it at the same time as another
|
||||||
|
// call, or at the same time this request is being used with Client.Do.
|
||||||
|
func (r *Request) BodyBytes() ([]byte, error) {
|
||||||
|
if r.body == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
body, err := r.body()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
_, err = buf.ReadFrom(body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return buf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewRequest creates a new wrapped request.
|
// NewRequest creates a new wrapped request.
|
||||||
func NewRequest(method, url string, rawBody interface{}) (*Request, error) {
|
func NewRequest(method, url string, rawBody interface{}) (*Request, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
module github.com/hashicorp/go-slug
|
module github.com/hashicorp/go-slug
|
||||||
|
|
||||||
|
go 1.12
|
||||||
|
|
|
@ -75,11 +75,20 @@ func packWalkFn(root, src, dst string, tarW *tar.Writer, meta *Meta, dereference
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip the .terraform directory, except for the modules subdirectory.
|
// Ignore the .terraform directory itself.
|
||||||
if strings.Contains(subpath, ".terraform") && info.Name() != ".terraform" {
|
if info.IsDir() && info.Name() == ".terraform" {
|
||||||
if !strings.Contains(subpath, filepath.Clean(".terraform/modules")) {
|
return nil
|
||||||
return filepath.SkipDir
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ignore any files in the .terraform directory.
|
||||||
|
if !info.IsDir() && filepath.Dir(subpath) == ".terraform" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip .terraform subdirectories, except for the modules subdirectory.
|
||||||
|
if strings.HasPrefix(subpath, ".terraform"+string(filepath.Separator)) &&
|
||||||
|
!strings.HasPrefix(subpath, filepath.Clean(".terraform/modules")) {
|
||||||
|
return filepath.SkipDir
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the relative path from the initial root directory.
|
// Get the relative path from the initial root directory.
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
module github.com/hashicorp/go-tfe
|
module github.com/hashicorp/go-tfe
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/google/go-querystring v1.0.0
|
github.com/google/go-querystring v1.0.0
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0
|
github.com/hashicorp/go-cleanhttp v0.5.0
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1
|
github.com/hashicorp/go-retryablehttp v0.5.2
|
||||||
github.com/hashicorp/go-slug v0.2.0
|
github.com/hashicorp/go-slug v0.3.0
|
||||||
github.com/hashicorp/go-uuid v1.0.0
|
github.com/hashicorp/go-uuid v1.0.1
|
||||||
github.com/stretchr/testify v1.3.0
|
github.com/stretchr/testify v1.3.0
|
||||||
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d
|
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig=
|
github.com/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1 h1:Vsx5XKPqPs3M6sM4U4GWyUqFS8aBiL9U5gkgvpkg4SE=
|
github.com/hashicorp/go-retryablehttp v0.5.2 h1:AoISa4P4IsW0/m4T6St8Yw38gTl5GtBAgfkhYh1xAz4=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.1/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
github.com/hashicorp/go-retryablehttp v0.5.2/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
github.com/hashicorp/go-slug v0.2.0 h1:MVdZAkTmDsUi1AT+3NQDsn8n3ssnVSIHwiM6RcUHvE8=
|
github.com/hashicorp/go-slug v0.3.0 h1:L0c+AvH/J64iMNF4VqRaRku2DMTEuHioPVS7kMjWIU8=
|
||||||
github.com/hashicorp/go-slug v0.2.0/go.mod h1:+zDycQOzGqOqMW7Kn2fp9vz/NtqpMLQlgb9JUF+0km4=
|
github.com/hashicorp/go-slug v0.3.0/go.mod h1:I5tq5Lv0E2xcNXNkmx7BSfzi1PsJ2cNjs3cC3LwyhK8=
|
||||||
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
|
||||||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
@ -17,5 +19,5 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d h1:Z4EH+5EffvBEhh37F0C0DnpklTMh00JOkjW5zK3ofBI=
|
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d h1:Z4EH+5EffvBEhh37F0C0DnpklTMh00JOkjW5zK3ofBI=
|
||||||
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d/go.mod h1:BSTlc8jOjh0niykqEGVXOLXdi9o0r0kR8tCYiMvjFgw=
|
github.com/svanharmelen/jsonapi v0.0.0-20180618144545-0c0828c3f16d/go.mod h1:BSTlc8jOjh0niykqEGVXOLXdi9o0r0kR8tCYiMvjFgw=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
|
|
@ -0,0 +1,294 @@
|
||||||
|
package tfe
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Compile-time proof of interface implementation.
|
||||||
|
var _ NotificationConfigurations = (*notificationConfigurations)(nil)
|
||||||
|
|
||||||
|
// NotificationConfigurations describes all the Notification Configuration
|
||||||
|
// related methods that the Terraform Enterprise API supports.
|
||||||
|
//
|
||||||
|
// TFE API docs:
|
||||||
|
// https://www.terraform.io/docs/enterprise/api/notification-configurations.html
|
||||||
|
type NotificationConfigurations interface {
|
||||||
|
// List all the notification configurations within a workspace.
|
||||||
|
List(ctx context.Context, workspaceID string, options NotificationConfigurationListOptions) (*NotificationConfigurationList, error)
|
||||||
|
|
||||||
|
// Create a new notification configuration with the given options.
|
||||||
|
Create(ctx context.Context, workspaceID string, options NotificationConfigurationCreateOptions) (*NotificationConfiguration, error)
|
||||||
|
|
||||||
|
// Read a notification configuration by its ID.
|
||||||
|
Read(ctx context.Context, notificationConfigurationID string) (*NotificationConfiguration, error)
|
||||||
|
|
||||||
|
// Update an existing notification configuration.
|
||||||
|
Update(ctx context.Context, notificationConfigurationID string, options NotificationConfigurationUpdateOptions) (*NotificationConfiguration, error)
|
||||||
|
|
||||||
|
// Delete a notification configuration by its ID.
|
||||||
|
Delete(ctx context.Context, notificationConfigurationID string) error
|
||||||
|
|
||||||
|
// Verify a notification configuration by its ID.
|
||||||
|
Verify(ctx context.Context, notificationConfigurationID string) (*NotificationConfiguration, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// notificationConfigurations implements NotificationConfigurations.
|
||||||
|
type notificationConfigurations struct {
|
||||||
|
client *Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// List of available notification triggers.
|
||||||
|
const (
|
||||||
|
NotificationTriggerCreated string = "run:created"
|
||||||
|
NotificationTriggerPlanning string = "run:planning"
|
||||||
|
NotificationTriggerNeedsAttention string = "run:needs_attention"
|
||||||
|
NotificationTriggerApplying string = "run:applying"
|
||||||
|
NotificationTriggerCompleted string = "run:completed"
|
||||||
|
NotificationTriggerErrored string = "run:errored"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NotificationDestinationType represents the destination type of the
|
||||||
|
// notification configuration.
|
||||||
|
type NotificationDestinationType string
|
||||||
|
|
||||||
|
// List of available notification destination types.
|
||||||
|
const (
|
||||||
|
NotificationDestinationTypeSlack NotificationDestinationType = "slack"
|
||||||
|
NotificationDestinationTypeGeneric NotificationDestinationType = "generic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NotificationConfigurationList represents a list of Notification
|
||||||
|
// Configurations.
|
||||||
|
type NotificationConfigurationList struct {
|
||||||
|
*Pagination
|
||||||
|
Items []*NotificationConfiguration
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationConfiguration represents a Notification Configuration.
|
||||||
|
type NotificationConfiguration struct {
|
||||||
|
ID string `jsonapi:"primary,notification-configurations"`
|
||||||
|
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
|
||||||
|
DeliveryResponses []*DeliveryResponse `jsonapi:"attr,delivery-responses"`
|
||||||
|
DestinationType NotificationDestinationType `jsonapi:"attr,destination-type"`
|
||||||
|
Enabled bool `jsonapi:"attr,enabled"`
|
||||||
|
Name string `jsonapi:"attr,name"`
|
||||||
|
Token string `jsonapi:"attr,token"`
|
||||||
|
Triggers []string `jsonapi:"attr,triggers"`
|
||||||
|
UpdatedAt time.Time `jsonapi:"attr,updated-at,iso8601"`
|
||||||
|
URL string `jsonapi:"attr,url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeliveryResponse represents a notification configuration delivery response.
|
||||||
|
type DeliveryResponse struct {
|
||||||
|
Body string `json:"body"`
|
||||||
|
Code int `json:"code"`
|
||||||
|
Headers http.Header `json:"headers"`
|
||||||
|
SentAt time.Time `json:"sent-at,iso8601"`
|
||||||
|
Successful bool `json:"successful"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationConfigurationListOptions represents the options for listing
|
||||||
|
// notification configurations.
|
||||||
|
type NotificationConfigurationListOptions struct {
|
||||||
|
ListOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
// List all the notification configurations associated with a workspace.
|
||||||
|
func (s *notificationConfigurations) List(ctx context.Context, workspaceID string, options NotificationConfigurationListOptions) (*NotificationConfigurationList, error) {
|
||||||
|
if !validStringID(&workspaceID) {
|
||||||
|
return nil, errors.New("invalid value for workspace ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
u := fmt.Sprintf("workspaces/%s/notification-configurations", url.QueryEscape(workspaceID))
|
||||||
|
req, err := s.client.newRequest("GET", u, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ncl := &NotificationConfigurationList{}
|
||||||
|
err = s.client.do(ctx, req, ncl)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ncl, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationConfigurationCreateOptions represents the options for
|
||||||
|
// creating a new notification configuration.
|
||||||
|
type NotificationConfigurationCreateOptions struct {
|
||||||
|
// For internal use only!
|
||||||
|
ID string `jsonapi:"primary,notification-configurations"`
|
||||||
|
|
||||||
|
// The destination type of the notification configuration
|
||||||
|
DestinationType *NotificationDestinationType `jsonapi:"attr,destination-type"`
|
||||||
|
|
||||||
|
// Whether the notification configuration should be enabled or not
|
||||||
|
Enabled *bool `jsonapi:"attr,enabled"`
|
||||||
|
|
||||||
|
// The name of the notification configuration
|
||||||
|
Name *string `jsonapi:"attr,name"`
|
||||||
|
|
||||||
|
// The token of the notification configuration
|
||||||
|
Token *string `jsonapi:"attr,token,omitempty"`
|
||||||
|
|
||||||
|
// The destination type of the notification configuration
|
||||||
|
Triggers []string `jsonapi:"attr,triggers,omitempty"`
|
||||||
|
|
||||||
|
// The url of the notification configuration
|
||||||
|
URL *string `jsonapi:"attr,url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o NotificationConfigurationCreateOptions) valid() error {
|
||||||
|
if o.DestinationType == nil {
|
||||||
|
return errors.New("destination type is required")
|
||||||
|
}
|
||||||
|
if o.Enabled == nil {
|
||||||
|
return errors.New("enabled is required")
|
||||||
|
}
|
||||||
|
if !validString(o.Name) {
|
||||||
|
return errors.New("name is required")
|
||||||
|
}
|
||||||
|
if !validString(o.URL) {
|
||||||
|
return errors.New("url is required")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates a notification configuration with the given options.
|
||||||
|
func (s *notificationConfigurations) Create(ctx context.Context, workspaceID string, options NotificationConfigurationCreateOptions) (*NotificationConfiguration, error) {
|
||||||
|
if !validStringID(&workspaceID) {
|
||||||
|
return nil, errors.New("invalid value for workspace ID")
|
||||||
|
}
|
||||||
|
if err := options.valid(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we don't send a user provided ID.
|
||||||
|
options.ID = ""
|
||||||
|
|
||||||
|
u := fmt.Sprintf("workspaces/%s/notification-configurations", url.QueryEscape(workspaceID))
|
||||||
|
req, err := s.client.newRequest("POST", u, &options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nc := &NotificationConfiguration{}
|
||||||
|
err = s.client.do(ctx, req, nc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read a notitification configuration by its ID.
|
||||||
|
func (s *notificationConfigurations) Read(ctx context.Context, notificationConfigurationID string) (*NotificationConfiguration, error) {
|
||||||
|
if !validStringID(¬ificationConfigurationID) {
|
||||||
|
return nil, errors.New("invalid value for notification configuration ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
u := fmt.Sprintf("notification-configurations/%s", url.QueryEscape(notificationConfigurationID))
|
||||||
|
req, err := s.client.newRequest("GET", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nc := &NotificationConfiguration{}
|
||||||
|
err = s.client.do(ctx, req, nc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationConfigurationUpdateOptions represents the options for
|
||||||
|
// updating a existing notification configuration.
|
||||||
|
type NotificationConfigurationUpdateOptions struct {
|
||||||
|
// For internal use only!
|
||||||
|
ID string `jsonapi:"primary,notification-configurations"`
|
||||||
|
|
||||||
|
// Whether the notification configuration should be enabled or not
|
||||||
|
Enabled *bool `jsonapi:"attr,enabled,omitempty"`
|
||||||
|
|
||||||
|
// The name of the notification configuration
|
||||||
|
Name *string `jsonapi:"attr,name,omitempty"`
|
||||||
|
|
||||||
|
// The token of the notification configuration
|
||||||
|
Token *string `jsonapi:"attr,token,omitempty"`
|
||||||
|
|
||||||
|
// The destination type of the notification configuration
|
||||||
|
Triggers []string `jsonapi:"attr,triggers,omitempty"`
|
||||||
|
|
||||||
|
// The url of the notification configuration
|
||||||
|
URL *string `jsonapi:"attr,url,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Updates a notification configuration with the given options.
|
||||||
|
func (s *notificationConfigurations) Update(ctx context.Context, notificationConfigurationID string, options NotificationConfigurationUpdateOptions) (*NotificationConfiguration, error) {
|
||||||
|
if !validStringID(¬ificationConfigurationID) {
|
||||||
|
return nil, errors.New("invalid value for notification configuration ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we don't send a user provided ID.
|
||||||
|
options.ID = ""
|
||||||
|
|
||||||
|
u := fmt.Sprintf("notification-configurations/%s", url.QueryEscape(notificationConfigurationID))
|
||||||
|
req, err := s.client.newRequest("PATCH", u, &options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nc := &NotificationConfiguration{}
|
||||||
|
err = s.client.do(ctx, req, nc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete a notifications configuration by its ID.
|
||||||
|
func (s *notificationConfigurations) Delete(ctx context.Context, notificationConfigurationID string) error {
|
||||||
|
if !validStringID(¬ificationConfigurationID) {
|
||||||
|
return errors.New("invalid value for notification configuration ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
u := fmt.Sprintf("notification-configurations/%s", url.QueryEscape(notificationConfigurationID))
|
||||||
|
req, err := s.client.newRequest("DELETE", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.do(ctx, req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verifies a notification configuration by delivering a verification
|
||||||
|
// payload to the configured url.
|
||||||
|
func (s *notificationConfigurations) Verify(ctx context.Context, notificationConfigurationID string) (*NotificationConfiguration, error) {
|
||||||
|
if !validStringID(¬ificationConfigurationID) {
|
||||||
|
return nil, errors.New("invalid value for notification configuration ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
u := fmt.Sprintf(
|
||||||
|
"notification-configurations/%s/actions/verify", url.QueryEscape(notificationConfigurationID))
|
||||||
|
req, err := s.client.newRequest("POST", u, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
nc := &NotificationConfiguration{}
|
||||||
|
err = s.client.do(ctx, req, nc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nc, nil
|
||||||
|
}
|
|
@ -112,6 +112,10 @@ type StateVersionCreateOptions struct {
|
||||||
// The base64 encoded state.
|
// The base64 encoded state.
|
||||||
State *string `jsonapi:"attr,state"`
|
State *string `jsonapi:"attr,state"`
|
||||||
|
|
||||||
|
// Force can be set to skip certain validations. Wrong use
|
||||||
|
// of this flag can cause data loss, so USE WITH CAUTION!
|
||||||
|
Force *bool `jsonapi:"attr,force"`
|
||||||
|
|
||||||
// Specifies the run to associate the state with.
|
// Specifies the run to associate the state with.
|
||||||
Run *Run `jsonapi:"relation,run,omitempty"`
|
Run *Run `jsonapi:"relation,run,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,7 @@ type Client struct {
|
||||||
|
|
||||||
Applies Applies
|
Applies Applies
|
||||||
ConfigurationVersions ConfigurationVersions
|
ConfigurationVersions ConfigurationVersions
|
||||||
|
NotificationConfigurations NotificationConfigurations
|
||||||
OAuthClients OAuthClients
|
OAuthClients OAuthClients
|
||||||
OAuthTokens OAuthTokens
|
OAuthTokens OAuthTokens
|
||||||
Organizations Organizations
|
Organizations Organizations
|
||||||
|
@ -194,6 +195,7 @@ func NewClient(cfg *Config) (*Client, error) {
|
||||||
// Create the services.
|
// Create the services.
|
||||||
client.Applies = &applies{client: client}
|
client.Applies = &applies{client: client}
|
||||||
client.ConfigurationVersions = &configurationVersions{client: client}
|
client.ConfigurationVersions = &configurationVersions{client: client}
|
||||||
|
client.NotificationConfigurations = ¬ificationConfigurations{client: client}
|
||||||
client.OAuthClients = &oAuthClients{client: client}
|
client.OAuthClients = &oAuthClients{client: client}
|
||||||
client.OAuthTokens = &oAuthTokens{client: client}
|
client.OAuthTokens = &oAuthTokens{client: client}
|
||||||
client.Organizations = &organizations{client: client}
|
client.Organizations = &organizations{client: client}
|
||||||
|
@ -297,6 +299,7 @@ func (c *Client) configureLimiter() error {
|
||||||
req.Header[k] = v
|
req.Header[k] = v
|
||||||
}
|
}
|
||||||
req.Header.Set("Accept", "application/vnd.api+json")
|
req.Header.Set("Accept", "application/vnd.api+json")
|
||||||
|
req.Header.Set("Authorization", "Bearer "+c.token)
|
||||||
|
|
||||||
// Make a single request to retrieve the rate limit headers.
|
// Make a single request to retrieve the rate limit headers.
|
||||||
resp, err := c.http.HTTPClient.Do(req)
|
resp, err := c.http.HTTPClient.Do(req)
|
||||||
|
|
|
@ -35,6 +35,11 @@ func Int64(v int64) *int64 {
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotificationDestination returns a pointer to the given notification configuration destination type
|
||||||
|
func NotificationDestination(v NotificationDestinationType) *NotificationDestinationType {
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
// ServiceProvider returns a pointer to the given service provider type.
|
// ServiceProvider returns a pointer to the given service provider type.
|
||||||
func ServiceProvider(v ServiceProviderType) *ServiceProviderType {
|
func ServiceProvider(v ServiceProviderType) *ServiceProviderType {
|
||||||
return &v
|
return &v
|
||||||
|
|
|
@ -110,7 +110,7 @@ type VariableCreateOptions struct {
|
||||||
Key *string `jsonapi:"attr,key"`
|
Key *string `jsonapi:"attr,key"`
|
||||||
|
|
||||||
// The value of the variable.
|
// The value of the variable.
|
||||||
Value *string `jsonapi:"attr,value"`
|
Value *string `jsonapi:"attr,value,omitempty"`
|
||||||
|
|
||||||
// Whether this is a Terraform or environment variable.
|
// Whether this is a Terraform or environment variable.
|
||||||
Category *CategoryType `jsonapi:"attr,category"`
|
Category *CategoryType `jsonapi:"attr,category"`
|
||||||
|
@ -129,9 +129,6 @@ func (o VariableCreateOptions) valid() error {
|
||||||
if !validString(o.Key) {
|
if !validString(o.Key) {
|
||||||
return errors.New("key is required")
|
return errors.New("key is required")
|
||||||
}
|
}
|
||||||
if !validString(o.Value) {
|
|
||||||
return errors.New("value is required")
|
|
||||||
}
|
|
||||||
if o.Category == nil {
|
if o.Category == nil {
|
||||||
return errors.New("category is required")
|
return errors.New("category is required")
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,11 @@ func GenerateRandomBytes(size int) ([]byte, error) {
|
||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uuidLen = 16
|
||||||
|
|
||||||
// GenerateUUID is used to generate a random UUID
|
// GenerateUUID is used to generate a random UUID
|
||||||
func GenerateUUID() (string, error) {
|
func GenerateUUID() (string, error) {
|
||||||
buf, err := GenerateRandomBytes(16)
|
buf, err := GenerateRandomBytes(uuidLen)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -25,11 +27,11 @@ func GenerateUUID() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatUUID(buf []byte) (string, error) {
|
func FormatUUID(buf []byte) (string, error) {
|
||||||
if len(buf) != 16 {
|
if buflen := len(buf); buflen != uuidLen {
|
||||||
return "", fmt.Errorf("wrong length byte slice (%d)", len(buf))
|
return "", fmt.Errorf("wrong length byte slice (%d)", buflen)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
|
return fmt.Sprintf("%x-%x-%x-%x-%x",
|
||||||
buf[0:4],
|
buf[0:4],
|
||||||
buf[4:6],
|
buf[4:6],
|
||||||
buf[6:8],
|
buf[6:8],
|
||||||
|
@ -38,16 +40,14 @@ func FormatUUID(buf []byte) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseUUID(uuid string) ([]byte, error) {
|
func ParseUUID(uuid string) ([]byte, error) {
|
||||||
if len(uuid) != 36 {
|
if len(uuid) != 2 * uuidLen + 4 {
|
||||||
return nil, fmt.Errorf("uuid string is wrong length")
|
return nil, fmt.Errorf("uuid string is wrong length")
|
||||||
}
|
}
|
||||||
|
|
||||||
hyph := []byte("-")
|
if uuid[8] != '-' ||
|
||||||
|
uuid[13] != '-' ||
|
||||||
if uuid[8] != hyph[0] ||
|
uuid[18] != '-' ||
|
||||||
uuid[13] != hyph[0] ||
|
uuid[23] != '-' {
|
||||||
uuid[18] != hyph[0] ||
|
|
||||||
uuid[23] != hyph[0] {
|
|
||||||
return nil, fmt.Errorf("uuid is improperly formatted")
|
return nil, fmt.Errorf("uuid is improperly formatted")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ func ParseUUID(uuid string) ([]byte, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(ret) != 16 {
|
if len(ret) != uuidLen {
|
||||||
return nil, fmt.Errorf("decoded hex is the wrong length")
|
return nil, fmt.Errorf("decoded hex is the wrong length")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -282,17 +282,17 @@ github.com/hashicorp/go-multierror
|
||||||
# github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856
|
# github.com/hashicorp/go-plugin v0.0.0-20190322172744-52e1c4730856
|
||||||
github.com/hashicorp/go-plugin
|
github.com/hashicorp/go-plugin
|
||||||
github.com/hashicorp/go-plugin/internal/plugin
|
github.com/hashicorp/go-plugin/internal/plugin
|
||||||
# github.com/hashicorp/go-retryablehttp v0.5.1
|
# github.com/hashicorp/go-retryablehttp v0.5.2
|
||||||
github.com/hashicorp/go-retryablehttp
|
github.com/hashicorp/go-retryablehttp
|
||||||
# github.com/hashicorp/go-rootcerts v1.0.0
|
# github.com/hashicorp/go-rootcerts v1.0.0
|
||||||
github.com/hashicorp/go-rootcerts
|
github.com/hashicorp/go-rootcerts
|
||||||
# github.com/hashicorp/go-safetemp v1.0.0
|
# github.com/hashicorp/go-safetemp v1.0.0
|
||||||
github.com/hashicorp/go-safetemp
|
github.com/hashicorp/go-safetemp
|
||||||
# github.com/hashicorp/go-slug v0.2.0
|
# github.com/hashicorp/go-slug v0.3.0
|
||||||
github.com/hashicorp/go-slug
|
github.com/hashicorp/go-slug
|
||||||
# github.com/hashicorp/go-tfe v0.3.11
|
# github.com/hashicorp/go-tfe v0.3.14
|
||||||
github.com/hashicorp/go-tfe
|
github.com/hashicorp/go-tfe
|
||||||
# github.com/hashicorp/go-uuid v1.0.0
|
# github.com/hashicorp/go-uuid v1.0.1
|
||||||
github.com/hashicorp/go-uuid
|
github.com/hashicorp/go-uuid
|
||||||
# github.com/hashicorp/go-version v1.1.0
|
# github.com/hashicorp/go-version v1.1.0
|
||||||
github.com/hashicorp/go-version
|
github.com/hashicorp/go-version
|
||||||
|
@ -522,7 +522,7 @@ golang.org/x/text/internal/language/compact
|
||||||
golang.org/x/text/internal/utf8internal
|
golang.org/x/text/internal/utf8internal
|
||||||
golang.org/x/text/runes
|
golang.org/x/text/runes
|
||||||
golang.org/x/text/internal/tag
|
golang.org/x/text/internal/tag
|
||||||
# golang.org/x/time v0.0.0-20181108054448-85acf8d2951c
|
# golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
golang.org/x/time/rate
|
golang.org/x/time/rate
|
||||||
# google.golang.org/api v0.1.0
|
# google.golang.org/api v0.1.0
|
||||||
google.golang.org/api/iterator
|
google.golang.org/api/iterator
|
||||||
|
|
Loading…
Reference in New Issue