Merge pull request #19651 from hashicorp/d-terraform-provider-aws-v1.52.0
deps: github.com/aws/aws-sdk-go@v1.16.4 and github.com/terraform-providers/terraform-provider-aws@v1.52.0
This commit is contained in:
commit
882b6e1daa
7
go.mod
7
go.mod
|
@ -17,12 +17,13 @@ require (
|
|||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
|
||||
github.com/armon/go-radix v0.0.0-20160115234725-4239b77079c7 // indirect
|
||||
github.com/aws/aws-sdk-go v1.15.55
|
||||
github.com/aws/aws-sdk-go v1.16.4
|
||||
github.com/beevik/etree v0.0.0-20171015221209-af219c0c7ea1 // indirect
|
||||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
|
||||
github.com/bgentry/speakeasy v0.0.0-20161015143505-675b82c74c0e // indirect
|
||||
github.com/blang/semver v0.0.0-20170202183821-4a1e882c79dc
|
||||
github.com/boltdb/bolt v1.3.1 // indirect
|
||||
github.com/boombuler/barcode v1.0.0 // indirect
|
||||
github.com/chzyer/logex v1.1.10 // indirect
|
||||
github.com/chzyer/readline v0.0.0-20161106042343-c914be64f07d
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect
|
||||
|
@ -78,7 +79,6 @@ require (
|
|||
github.com/hashicorp/serf v0.0.0-20160124182025-e4ec8cc423bb // indirect
|
||||
github.com/hashicorp/vault v0.0.0-20161029210149-9a60bf2a50e4
|
||||
github.com/jen20/awspolicyequivalence v0.0.0-20170831201602-3d48364a137a // indirect
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7 // indirect
|
||||
github.com/jonboulle/clockwork v0.1.0 // indirect
|
||||
github.com/joyent/triton-go v0.0.0-20180313100802-d8f9c0314926
|
||||
github.com/jtolds/gls v4.2.1+incompatible // indirect
|
||||
|
@ -109,6 +109,7 @@ require (
|
|||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c // indirect
|
||||
github.com/pkg/errors v0.0.0-20170505043639-c605e284fe17 // indirect
|
||||
github.com/posener/complete v0.0.0-20171219111128-6bee943216c8
|
||||
github.com/pquerna/otp v1.0.0 // indirect
|
||||
github.com/satori/go.uuid v0.0.0-20160927100844-b061729afc07 // indirect
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
|
||||
github.com/sirupsen/logrus v1.1.1 // indirect
|
||||
|
@ -116,7 +117,7 @@ require (
|
|||
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
|
||||
github.com/soheilhy/cmux v0.1.4 // indirect
|
||||
github.com/spf13/afero v1.0.2
|
||||
github.com/terraform-providers/terraform-provider-aws v1.41.0
|
||||
github.com/terraform-providers/terraform-provider-aws v1.52.0
|
||||
github.com/terraform-providers/terraform-provider-openstack v0.0.0-20170616075611-4080a521c6ea
|
||||
github.com/terraform-providers/terraform-provider-template v1.0.0 // indirect
|
||||
github.com/terraform-providers/terraform-provider-tls v1.2.0 // indirect
|
||||
|
|
29
go.sum
29
go.sum
|
@ -33,8 +33,8 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZ
|
|||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-radix v0.0.0-20160115234725-4239b77079c7 h1:MBXhrxjNkjdqJysfNbKMMPFNXlz6EzpOnPcsoYBeD3E=
|
||||
github.com/armon/go-radix v0.0.0-20160115234725-4239b77079c7/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/aws/aws-sdk-go v1.15.55 h1:GHqCuxkZSNKWdubIADOCrZSeg42JxREPnXaoklBg2zg=
|
||||
github.com/aws/aws-sdk-go v1.15.55/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
|
||||
github.com/aws/aws-sdk-go v1.16.4 h1:HQaquRQLvsZ8fRBbmFw6/+RJolhtjGMkkB0IhTM+hf8=
|
||||
github.com/aws/aws-sdk-go v1.16.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/beevik/etree v0.0.0-20171015221209-af219c0c7ea1 h1:6fqkBkx5cRbd8Pq0UEMxyteIAPoE1KiPptnx1yEzJLU=
|
||||
github.com/beevik/etree v0.0.0-20171015221209-af219c0c7ea1/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
||||
|
@ -47,6 +47,8 @@ github.com/blang/semver v0.0.0-20170202183821-4a1e882c79dc h1:J/iAaGTCZYfT/allw6
|
|||
github.com/blang/semver v0.0.0-20170202183821-4a1e882c79dc/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
|
||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||
github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc=
|
||||
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||
github.com/bsm/go-vlq v0.0.0-20150828105119-ec6e8d4f5f4e/go.mod h1:N+BjUcTjSxc2mtRGSCPsat1kze3CUtvJN3/jTXlp29k=
|
||||
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
|
@ -66,8 +68,6 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbp
|
|||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
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/dgrijalva/jwt-go v0.0.0-20160617170158-f0777076321a h1:pzKxqfSfp4kqrm6jfyVYYkWhf+e1hPRt3rX+Yj/3UBU=
|
||||
github.com/dgrijalva/jwt-go v0.0.0-20160617170158-f0777076321a/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dimchansky/utfbom v1.0.0 h1:fGC2kkf4qOoKqZ4q7iIh+Vef4ubC1c38UDsEyZynZPc=
|
||||
|
@ -81,8 +81,6 @@ github.com/dylanmei/winrmtest v0.0.0-20170819153634-c2fbb09e6c08/go.mod h1:VBVDF
|
|||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-ini/ini v1.25.4 h1:Mujh4R/dH6YL8bxuISne3xX2+qcQ9p0IxKAP6ExWoUo=
|
||||
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg=
|
||||
github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||
github.com/gogo/protobuf v0.0.0-20180821102207-98f6aa8b3bcf h1:0nBDY6WfT0ChlHhvNcGw3BTjyDOtCom2yQTVBJv3MHg=
|
||||
|
@ -91,8 +89,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekf
|
|||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7 h1:u4bArs140e9+AfE52mFHOXVFnOSBJBRlzTHrOPLOIhE=
|
||||
github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
|
||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
|
@ -123,8 +119,6 @@ github.com/hashicorp/consul v0.0.0-20171026175957-610f3c86a089/go.mod h1:mFrjN1m
|
|||
github.com/hashicorp/errwrap v0.0.0-20180715044906-d6c0cd880357/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-azure-helpers v0.0.0-20181122151743-c51a3103be3b h1:AJjRaIeZiWlhYVf2skNYOjooaaIOcQzS94a3iSKnXKE=
|
||||
github.com/hashicorp/go-azure-helpers v0.0.0-20181122151743-c51a3103be3b/go.mod h1:e+GPy2nvD+spqsdjUyw5tbo73rBbu955QBaV9GZoBEA=
|
||||
github.com/hashicorp/go-azure-helpers v0.0.0-20181126135526-ec113df69f49 h1:jkGYE3AQEm95w4n8o/iR59duXnuSjMCf1MCNSwOJxAw=
|
||||
github.com/hashicorp/go-azure-helpers v0.0.0-20181126135526-ec113df69f49/go.mod h1:Y5ejHZY3jQby82dOASJzyQ2xZw37zs+D5x6AaOC6O5E=
|
||||
github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de h1:XDCSythtg8aWSRSO29uwhgh7b127fWr+m5SemqjSUL8=
|
||||
|
@ -143,8 +137,6 @@ github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c/go.mod h1:ahL
|
|||
github.com/hashicorp/go-multierror v0.0.0-20180717150148-3d5d8f294aa0/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
|
||||
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
|
||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||
github.com/hashicorp/go-plugin v0.0.0-20181205205220-20341d70f4ff h1:z9Nk32P4kDgdYMZU4OGX1Nfpm2q9E++10TSQ6sltD/k=
|
||||
github.com/hashicorp/go-plugin v0.0.0-20181205205220-20341d70f4ff/go.mod h1:Ft7ju2vWzhO0ETMKUVo12XmXmII6eSUS4rsPTkY/siA=
|
||||
github.com/hashicorp/go-plugin v0.0.0-20181212150838-f444068e8f5a h1:z9eTtDWoxYrJvtAD+xAepmTEfEmYgouWUytJ84UWAr8=
|
||||
github.com/hashicorp/go-plugin v0.0.0-20181212150838-f444068e8f5a/go.mod h1:Ft7ju2vWzhO0ETMKUVo12XmXmII6eSUS4rsPTkY/siA=
|
||||
github.com/hashicorp/go-retryablehttp v0.5.0 h1:aVN0FYnPwAgZI/hVzqwfMiM86ttcHTlQKbBVeVmXPIs=
|
||||
|
@ -191,9 +183,8 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
|
|||
github.com/jen20/awspolicyequivalence v0.0.0-20170831201602-3d48364a137a h1:FyS/ubzBR5xJlnJGRTwe7GUHpJOR4ukYK3y+LFNffuA=
|
||||
github.com/jen20/awspolicyequivalence v0.0.0-20170831201602-3d48364a137a/go.mod h1:uoIMjNxUfXi48Ci40IXkPRbghZ1vbti6v9LCbNqRgHY=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7 h1:SMvOWPJCES2GdFracYbBQh93GXac8fq7HeN6JnpduB8=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
github.com/joyent/triton-go v0.0.0-20180313100802-d8f9c0314926 h1:kie3qOosvRKqwij2HGzXWffwpXvcqfPPXRUw8I4F/mg=
|
||||
|
@ -239,8 +230,6 @@ github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286 h1:KHyL+3mQO
|
|||
github.com/mitchellh/colorstring v0.0.0-20150917214807-8631ce90f286/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
||||
github.com/mitchellh/copystructure v0.0.0-20170525013902-d23ffcb85de3 h1:dECZqiJYhKdj9QlLpiQaRDXHDXRTdiyZI3owdDGhlYY=
|
||||
github.com/mitchellh/copystructure v0.0.0-20170525013902-d23ffcb85de3/go.mod h1:eOsF2yLPlBBJPvD+nhl5QMTBSOBbOph6N7j/IDUw7PY=
|
||||
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 h1:eQox4Rh4ewJF+mqYPxCkmBAirRnPaHEB26UkNuPyjlk=
|
||||
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0=
|
||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/go-linereader v0.0.0-20141013185533-07bab5fdd958 h1:wN+5lV34eSnVSZgBLWRGHr6L4giR3/wI2B9DLmVnlfI=
|
||||
|
@ -279,6 +268,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v0.0.0-20171219111128-6bee943216c8 h1:lcb1zvdlaZyEbl2OXifN3uOYYyIvllofUbmp9bwbL+0=
|
||||
github.com/posener/complete v0.0.0-20171219111128-6bee943216c8/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/pquerna/otp v1.0.0 h1:TBZrpfnzVbgmpYhiYBK+bJ4Ig0+ye+GGNMe2pTrvxCo=
|
||||
github.com/pquerna/otp v1.0.0/go.mod h1:Zad1CMQfSQZI5KLpahDiSUX4tMMREnXw98IvL1nhgMk=
|
||||
github.com/prometheus/client_golang v0.8.0 h1:1921Yw9Gc3iSc4VQh3PIoOqgPCZS7G/4xQNVUp8Mda8=
|
||||
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
|
||||
|
@ -308,8 +299,8 @@ github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1
|
|||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
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/terraform-providers/terraform-provider-aws v1.41.0 h1:ZOuxMXREOtJ+SHMX5SnbZbiqYhl9GNfZDl4f0H6CaOM=
|
||||
github.com/terraform-providers/terraform-provider-aws v1.41.0/go.mod h1:uvqaeKnm2ydZ2LuKuW1NDNBu6heC/7IDGXWm36/6oKs=
|
||||
github.com/terraform-providers/terraform-provider-aws v1.52.0 h1:hfFaKOUtL/ud9Y4PFgFT7F8Ss61lMIK1P+ndPEhPA7s=
|
||||
github.com/terraform-providers/terraform-provider-aws v1.52.0/go.mod h1:uvqaeKnm2ydZ2LuKuW1NDNBu6heC/7IDGXWm36/6oKs=
|
||||
github.com/terraform-providers/terraform-provider-openstack v0.0.0-20170616075611-4080a521c6ea h1:IfuzHOI3XwwYZS2Xw8SQbxOtGXlIUrKtXtuDCTNxmsQ=
|
||||
github.com/terraform-providers/terraform-provider-openstack v0.0.0-20170616075611-4080a521c6ea/go.mod h1:2aQ6n/BtChAl1y2S60vebhyJyZXBsuAI5G4+lHrT1Ew=
|
||||
github.com/terraform-providers/terraform-provider-template v1.0.0 h1:g2pyFaAJu369iAb7qGWmVwtQ15/35lRAfW91Je8wLjE=
|
||||
|
|
|
@ -23,28 +23,27 @@ func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {
|
|||
case reflect.Struct:
|
||||
buf.WriteString("{\n")
|
||||
|
||||
names := []string{}
|
||||
for i := 0; i < v.Type().NumField(); i++ {
|
||||
name := v.Type().Field(i).Name
|
||||
f := v.Field(i)
|
||||
if name[0:1] == strings.ToLower(name[0:1]) {
|
||||
ft := v.Type().Field(i)
|
||||
fv := v.Field(i)
|
||||
|
||||
if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) {
|
||||
continue // ignore unexported fields
|
||||
}
|
||||
if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() {
|
||||
if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() {
|
||||
continue // ignore unset fields
|
||||
}
|
||||
names = append(names, name)
|
||||
}
|
||||
|
||||
for i, n := range names {
|
||||
val := v.FieldByName(n)
|
||||
buf.WriteString(strings.Repeat(" ", indent+2))
|
||||
buf.WriteString(n + ": ")
|
||||
stringValue(val, indent+2, buf)
|
||||
buf.WriteString(ft.Name + ": ")
|
||||
|
||||
if i < len(names)-1 {
|
||||
buf.WriteString(",\n")
|
||||
if tag := ft.Tag.Get("sensitive"); tag == "true" {
|
||||
buf.WriteString("<sensitive>")
|
||||
} else {
|
||||
stringValue(fv, indent+2, buf)
|
||||
}
|
||||
|
||||
buf.WriteString(",\n")
|
||||
}
|
||||
|
||||
buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
|
||||
|
|
|
@ -45,8 +45,8 @@ type Config struct {
|
|||
// that overrides the default generated endpoint for a client. Set this
|
||||
// to `""` to use the default generated endpoint.
|
||||
//
|
||||
// @note You must still provide a `Region` value when specifying an
|
||||
// endpoint for a client.
|
||||
// Note: You must still provide a `Region` value when specifying an
|
||||
// endpoint for a client.
|
||||
Endpoint *string
|
||||
|
||||
// The resolver to use for looking up endpoints for AWS service clients
|
||||
|
@ -65,8 +65,8 @@ type Config struct {
|
|||
// noted. A full list of regions is found in the "Regions and Endpoints"
|
||||
// document.
|
||||
//
|
||||
// @see http://docs.aws.amazon.com/general/latest/gr/rande.html
|
||||
// AWS Regions and Endpoints
|
||||
// See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS
|
||||
// Regions and Endpoints.
|
||||
Region *string
|
||||
|
||||
// Set this to `true` to disable SSL when sending requests. Defaults
|
||||
|
@ -120,9 +120,10 @@ type Config struct {
|
|||
// will use virtual hosted bucket addressing when possible
|
||||
// (`http://BUCKET.s3.amazonaws.com/KEY`).
|
||||
//
|
||||
// @note This configuration option is specific to the Amazon S3 service.
|
||||
// @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
||||
// Amazon S3: Virtual Hosting of Buckets
|
||||
// Note: This configuration option is specific to the Amazon S3 service.
|
||||
//
|
||||
// See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
||||
// for Amazon S3: Virtual Hosting of Buckets
|
||||
S3ForcePathStyle *bool
|
||||
|
||||
// Set this to `true` to disable the SDK adding the `Expect: 100-Continue`
|
||||
|
@ -223,6 +224,28 @@ type Config struct {
|
|||
// Key: aws.String("//foo//bar//moo"),
|
||||
// })
|
||||
DisableRestProtocolURICleaning *bool
|
||||
|
||||
// EnableEndpointDiscovery will allow for endpoint discovery on operations that
|
||||
// have the definition in its model. By default, endpoint discovery is off.
|
||||
//
|
||||
// Example:
|
||||
// sess := session.Must(session.NewSession(&aws.Config{
|
||||
// EnableEndpointDiscovery: aws.Bool(true),
|
||||
// }))
|
||||
//
|
||||
// svc := s3.New(sess)
|
||||
// out, err := svc.GetObject(&s3.GetObjectInput {
|
||||
// Bucket: aws.String("bucketname"),
|
||||
// Key: aws.String("/foo/bar/moo"),
|
||||
// })
|
||||
EnableEndpointDiscovery *bool
|
||||
|
||||
// DisableEndpointHostPrefix will disable the SDK's behavior of prefixing
|
||||
// request endpoint hosts with modeled information.
|
||||
//
|
||||
// Disabling this feature is useful when you want to use local endpoints
|
||||
// for testing that do not support the modeled host prefix pattern.
|
||||
DisableEndpointHostPrefix *bool
|
||||
}
|
||||
|
||||
// NewConfig returns a new Config pointer that can be chained with builder
|
||||
|
@ -377,6 +400,19 @@ func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
|
|||
return c
|
||||
}
|
||||
|
||||
// WithEndpointDiscovery will set whether or not to use endpoint discovery.
|
||||
func (c *Config) WithEndpointDiscovery(t bool) *Config {
|
||||
c.EnableEndpointDiscovery = &t
|
||||
return c
|
||||
}
|
||||
|
||||
// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix
|
||||
// when making requests.
|
||||
func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {
|
||||
c.DisableEndpointHostPrefix = &t
|
||||
return c
|
||||
}
|
||||
|
||||
// MergeIn merges the passed in configs into the existing config object.
|
||||
func (c *Config) MergeIn(cfgs ...*Config) {
|
||||
for _, other := range cfgs {
|
||||
|
@ -476,6 +512,14 @@ func mergeInConfig(dst *Config, other *Config) {
|
|||
if other.EnforceShouldRetryCheck != nil {
|
||||
dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck
|
||||
}
|
||||
|
||||
if other.EnableEndpointDiscovery != nil {
|
||||
dst.EnableEndpointDiscovery = other.EnableEndpointDiscovery
|
||||
}
|
||||
|
||||
if other.DisableEndpointHostPrefix != nil {
|
||||
dst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix
|
||||
}
|
||||
}
|
||||
|
||||
// Copy will return a shallow copy of the Config object. If any additional
|
||||
|
|
|
@ -72,9 +72,9 @@ var ValidateReqSigHandler = request.NamedHandler{
|
|||
signedTime = r.LastSignedAt
|
||||
}
|
||||
|
||||
// 10 minutes to allow for some clock skew/delays in transmission.
|
||||
// 5 minutes to allow for some clock skew/delays in transmission.
|
||||
// Would be improved with aws/aws-sdk-go#423
|
||||
if signedTime.Add(10 * time.Minute).After(time.Now()) {
|
||||
if signedTime.Add(5 * time.Minute).After(time.Now()) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -9,9 +9,7 @@ var (
|
|||
// providers in the ChainProvider.
|
||||
//
|
||||
// This has been deprecated. For verbose error messaging set
|
||||
// aws.Config.CredentialsChainVerboseErrors to true
|
||||
//
|
||||
// @readonly
|
||||
// aws.Config.CredentialsChainVerboseErrors to true.
|
||||
ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders",
|
||||
`no valid providers in chain. Deprecated.
|
||||
For verbose messaging see aws.Config.CredentialsChainVerboseErrors`,
|
||||
|
|
|
@ -64,8 +64,6 @@ import (
|
|||
// Credentials: credentials.AnonymousCredentials,
|
||||
// })))
|
||||
// // Access public S3 buckets.
|
||||
//
|
||||
// @readonly
|
||||
var AnonymousCredentials = NewStaticCredentials("", "", "")
|
||||
|
||||
// A Value is the AWS credentials value for individual credential fields.
|
||||
|
|
|
@ -12,14 +12,10 @@ const EnvProviderName = "EnvProvider"
|
|||
var (
|
||||
// ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be
|
||||
// found in the process's environment.
|
||||
//
|
||||
// @readonly
|
||||
ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil)
|
||||
|
||||
// ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key
|
||||
// can't be found in the process's environment.
|
||||
//
|
||||
// @readonly
|
||||
ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil)
|
||||
)
|
||||
|
||||
|
|
425
vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
generated
vendored
Normal file
425
vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
generated
vendored
Normal file
|
@ -0,0 +1,425 @@
|
|||
/*
|
||||
Package processcreds is a credential Provider to retrieve `credential_process`
|
||||
credentials.
|
||||
|
||||
WARNING: The following describes a method of sourcing credentials from an external
|
||||
process. This can potentially be dangerous, so proceed with caution. Other
|
||||
credential providers should be preferred if at all possible. If using this
|
||||
option, you should make sure that the config file is as locked down as possible
|
||||
using security best practices for your operating system.
|
||||
|
||||
You can use credentials from a `credential_process` in a variety of ways.
|
||||
|
||||
One way is to setup your shared config file, located in the default
|
||||
location, with the `credential_process` key and the command you want to be
|
||||
called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable
|
||||
(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file.
|
||||
|
||||
[default]
|
||||
credential_process = /command/to/call
|
||||
|
||||
Creating a new session will use the credential process to retrieve credentials.
|
||||
NOTE: If there are credentials in the profile you are using, the credential
|
||||
process will not be used.
|
||||
|
||||
// Initialize a session to load credentials.
|
||||
sess, _ := session.NewSession(&aws.Config{
|
||||
Region: aws.String("us-east-1")},
|
||||
)
|
||||
|
||||
// Create S3 service client to use the credentials.
|
||||
svc := s3.New(sess)
|
||||
|
||||
Another way to use the `credential_process` method is by using
|
||||
`credentials.NewCredentials()` and providing a command to be executed to
|
||||
retrieve credentials:
|
||||
|
||||
// Create credentials using the ProcessProvider.
|
||||
creds := processcreds.NewCredentials("/path/to/command")
|
||||
|
||||
// Create service client value configured for credentials.
|
||||
svc := s3.New(sess, &aws.Config{Credentials: creds})
|
||||
|
||||
You can set a non-default timeout for the `credential_process` with another
|
||||
constructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To
|
||||
set a one minute timeout:
|
||||
|
||||
// Create credentials using the ProcessProvider.
|
||||
creds := processcreds.NewCredentialsTimeout(
|
||||
"/path/to/command",
|
||||
time.Duration(500) * time.Millisecond)
|
||||
|
||||
If you need more control, you can set any configurable options in the
|
||||
credentials using one or more option functions. For example, you can set a two
|
||||
minute timeout, a credential duration of 60 minutes, and a maximum stdout
|
||||
buffer size of 2k.
|
||||
|
||||
creds := processcreds.NewCredentials(
|
||||
"/path/to/command",
|
||||
func(opt *ProcessProvider) {
|
||||
opt.Timeout = time.Duration(2) * time.Minute
|
||||
opt.Duration = time.Duration(60) * time.Minute
|
||||
opt.MaxBufSize = 2048
|
||||
})
|
||||
|
||||
You can also use your own `exec.Cmd`:
|
||||
|
||||
// Create an exec.Cmd
|
||||
myCommand := exec.Command("/path/to/command")
|
||||
|
||||
// Create credentials using your exec.Cmd and custom timeout
|
||||
creds := processcreds.NewCredentialsCommand(
|
||||
myCommand,
|
||||
func(opt *processcreds.ProcessProvider) {
|
||||
opt.Timeout = time.Duration(1) * time.Second
|
||||
})
|
||||
*/
|
||||
package processcreds
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
)
|
||||
|
||||
const (
|
||||
// ProviderName is the name this credentials provider will label any
|
||||
// returned credentials Value with.
|
||||
ProviderName = `ProcessProvider`
|
||||
|
||||
// ErrCodeProcessProviderParse error parsing process output
|
||||
ErrCodeProcessProviderParse = "ProcessProviderParseError"
|
||||
|
||||
// ErrCodeProcessProviderVersion version error in output
|
||||
ErrCodeProcessProviderVersion = "ProcessProviderVersionError"
|
||||
|
||||
// ErrCodeProcessProviderRequired required attribute missing in output
|
||||
ErrCodeProcessProviderRequired = "ProcessProviderRequiredError"
|
||||
|
||||
// ErrCodeProcessProviderExecution execution of command failed
|
||||
ErrCodeProcessProviderExecution = "ProcessProviderExecutionError"
|
||||
|
||||
// errMsgProcessProviderTimeout process took longer than allowed
|
||||
errMsgProcessProviderTimeout = "credential process timed out"
|
||||
|
||||
// errMsgProcessProviderProcess process error
|
||||
errMsgProcessProviderProcess = "error in credential_process"
|
||||
|
||||
// errMsgProcessProviderParse problem parsing output
|
||||
errMsgProcessProviderParse = "parse failed of credential_process output"
|
||||
|
||||
// errMsgProcessProviderVersion version error in output
|
||||
errMsgProcessProviderVersion = "wrong version in process output (not 1)"
|
||||
|
||||
// errMsgProcessProviderMissKey missing access key id in output
|
||||
errMsgProcessProviderMissKey = "missing AccessKeyId in process output"
|
||||
|
||||
// errMsgProcessProviderMissSecret missing secret acess key in output
|
||||
errMsgProcessProviderMissSecret = "missing SecretAccessKey in process output"
|
||||
|
||||
// errMsgProcessProviderPrepareCmd prepare of command failed
|
||||
errMsgProcessProviderPrepareCmd = "failed to prepare command"
|
||||
|
||||
// errMsgProcessProviderEmptyCmd command must not be empty
|
||||
errMsgProcessProviderEmptyCmd = "command must not be empty"
|
||||
|
||||
// errMsgProcessProviderPipe failed to initialize pipe
|
||||
errMsgProcessProviderPipe = "failed to initialize pipe"
|
||||
|
||||
// DefaultDuration is the default amount of time in minutes that the
|
||||
// credentials will be valid for.
|
||||
DefaultDuration = time.Duration(15) * time.Minute
|
||||
|
||||
// DefaultBufSize limits buffer size from growing to an enormous
|
||||
// amount due to a faulty process.
|
||||
DefaultBufSize = 1024
|
||||
|
||||
// DefaultTimeout default limit on time a process can run.
|
||||
DefaultTimeout = time.Duration(1) * time.Minute
|
||||
)
|
||||
|
||||
// ProcessProvider satisfies the credentials.Provider interface, and is a
|
||||
// client to retrieve credentials from a process.
|
||||
type ProcessProvider struct {
|
||||
staticCreds bool
|
||||
credentials.Expiry
|
||||
originalCommand []string
|
||||
|
||||
// Expiry duration of the credentials. Defaults to 15 minutes if not set.
|
||||
Duration time.Duration
|
||||
|
||||
// ExpiryWindow will allow the credentials to trigger refreshing prior to
|
||||
// the credentials actually expiring. This is beneficial so race conditions
|
||||
// with expiring credentials do not cause request to fail unexpectedly
|
||||
// due to ExpiredTokenException exceptions.
|
||||
//
|
||||
// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
|
||||
// 10 seconds before the credentials are actually expired.
|
||||
//
|
||||
// If ExpiryWindow is 0 or less it will be ignored.
|
||||
ExpiryWindow time.Duration
|
||||
|
||||
// A string representing an os command that should return a JSON with
|
||||
// credential information.
|
||||
command *exec.Cmd
|
||||
|
||||
// MaxBufSize limits memory usage from growing to an enormous
|
||||
// amount due to a faulty process.
|
||||
MaxBufSize int
|
||||
|
||||
// Timeout limits the time a process can run.
|
||||
Timeout time.Duration
|
||||
}
|
||||
|
||||
// NewCredentials returns a pointer to a new Credentials object wrapping the
|
||||
// ProcessProvider. The credentials will expire every 15 minutes by default.
|
||||
func NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials {
|
||||
p := &ProcessProvider{
|
||||
command: exec.Command(command),
|
||||
Duration: DefaultDuration,
|
||||
Timeout: DefaultTimeout,
|
||||
MaxBufSize: DefaultBufSize,
|
||||
}
|
||||
|
||||
for _, option := range options {
|
||||
option(p)
|
||||
}
|
||||
|
||||
return credentials.NewCredentials(p)
|
||||
}
|
||||
|
||||
// NewCredentialsTimeout returns a pointer to a new Credentials object with
|
||||
// the specified command and timeout, and default duration and max buffer size.
|
||||
func NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials {
|
||||
p := NewCredentials(command, func(opt *ProcessProvider) {
|
||||
opt.Timeout = timeout
|
||||
})
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
// NewCredentialsCommand returns a pointer to a new Credentials object with
|
||||
// the specified command, and default timeout, duration and max buffer size.
|
||||
func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials {
|
||||
p := &ProcessProvider{
|
||||
command: command,
|
||||
Duration: DefaultDuration,
|
||||
Timeout: DefaultTimeout,
|
||||
MaxBufSize: DefaultBufSize,
|
||||
}
|
||||
|
||||
for _, option := range options {
|
||||
option(p)
|
||||
}
|
||||
|
||||
return credentials.NewCredentials(p)
|
||||
}
|
||||
|
||||
type credentialProcessResponse struct {
|
||||
Version int
|
||||
AccessKeyID string `json:"AccessKeyId"`
|
||||
SecretAccessKey string
|
||||
SessionToken string
|
||||
Expiration *time.Time
|
||||
}
|
||||
|
||||
// Retrieve executes the 'credential_process' and returns the credentials.
|
||||
func (p *ProcessProvider) Retrieve() (credentials.Value, error) {
|
||||
out, err := p.executeCredentialProcess()
|
||||
if err != nil {
|
||||
return credentials.Value{ProviderName: ProviderName}, err
|
||||
}
|
||||
|
||||
// Serialize and validate response
|
||||
resp := &credentialProcessResponse{}
|
||||
if err = json.Unmarshal(out, resp); err != nil {
|
||||
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||
ErrCodeProcessProviderParse,
|
||||
fmt.Sprintf("%s: %s", errMsgProcessProviderParse, string(out)),
|
||||
err)
|
||||
}
|
||||
|
||||
if resp.Version != 1 {
|
||||
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||
ErrCodeProcessProviderVersion,
|
||||
errMsgProcessProviderVersion,
|
||||
nil)
|
||||
}
|
||||
|
||||
if len(resp.AccessKeyID) == 0 {
|
||||
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||
ErrCodeProcessProviderRequired,
|
||||
errMsgProcessProviderMissKey,
|
||||
nil)
|
||||
}
|
||||
|
||||
if len(resp.SecretAccessKey) == 0 {
|
||||
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||
ErrCodeProcessProviderRequired,
|
||||
errMsgProcessProviderMissSecret,
|
||||
nil)
|
||||
}
|
||||
|
||||
// Handle expiration
|
||||
p.staticCreds = resp.Expiration == nil
|
||||
if resp.Expiration != nil {
|
||||
p.SetExpiration(*resp.Expiration, p.ExpiryWindow)
|
||||
}
|
||||
|
||||
return credentials.Value{
|
||||
ProviderName: ProviderName,
|
||||
AccessKeyID: resp.AccessKeyID,
|
||||
SecretAccessKey: resp.SecretAccessKey,
|
||||
SessionToken: resp.SessionToken,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// IsExpired returns true if the credentials retrieved are expired, or not yet
|
||||
// retrieved.
|
||||
func (p *ProcessProvider) IsExpired() bool {
|
||||
if p.staticCreds {
|
||||
return false
|
||||
}
|
||||
return p.Expiry.IsExpired()
|
||||
}
|
||||
|
||||
// prepareCommand prepares the command to be executed.
|
||||
func (p *ProcessProvider) prepareCommand() error {
|
||||
|
||||
var cmdArgs []string
|
||||
if runtime.GOOS == "windows" {
|
||||
cmdArgs = []string{"cmd.exe", "/C"}
|
||||
} else {
|
||||
cmdArgs = []string{"sh", "-c"}
|
||||
}
|
||||
|
||||
if len(p.originalCommand) == 0 {
|
||||
p.originalCommand = make([]string, len(p.command.Args))
|
||||
copy(p.originalCommand, p.command.Args)
|
||||
|
||||
// check for empty command because it succeeds
|
||||
if len(strings.TrimSpace(p.originalCommand[0])) < 1 {
|
||||
return awserr.New(
|
||||
ErrCodeProcessProviderExecution,
|
||||
fmt.Sprintf(
|
||||
"%s: %s",
|
||||
errMsgProcessProviderPrepareCmd,
|
||||
errMsgProcessProviderEmptyCmd),
|
||||
nil)
|
||||
}
|
||||
}
|
||||
|
||||
cmdArgs = append(cmdArgs, p.originalCommand...)
|
||||
p.command = exec.Command(cmdArgs[0], cmdArgs[1:]...)
|
||||
p.command.Env = os.Environ()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// executeCredentialProcess starts the credential process on the OS and
|
||||
// returns the results or an error.
|
||||
func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) {
|
||||
|
||||
if err := p.prepareCommand(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Setup the pipes
|
||||
outReadPipe, outWritePipe, err := os.Pipe()
|
||||
if err != nil {
|
||||
return nil, awserr.New(
|
||||
ErrCodeProcessProviderExecution,
|
||||
errMsgProcessProviderPipe,
|
||||
err)
|
||||
}
|
||||
|
||||
p.command.Stderr = os.Stderr // display stderr on console for MFA
|
||||
p.command.Stdout = outWritePipe // get creds json on process's stdout
|
||||
p.command.Stdin = os.Stdin // enable stdin for MFA
|
||||
|
||||
output := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize))
|
||||
|
||||
stdoutCh := make(chan error, 1)
|
||||
go readInput(
|
||||
io.LimitReader(outReadPipe, int64(p.MaxBufSize)),
|
||||
output,
|
||||
stdoutCh)
|
||||
|
||||
execCh := make(chan error, 1)
|
||||
go executeCommand(*p.command, execCh)
|
||||
|
||||
finished := false
|
||||
var errors []error
|
||||
for !finished {
|
||||
select {
|
||||
case readError := <-stdoutCh:
|
||||
errors = appendError(errors, readError)
|
||||
finished = true
|
||||
case execError := <-execCh:
|
||||
err := outWritePipe.Close()
|
||||
errors = appendError(errors, err)
|
||||
errors = appendError(errors, execError)
|
||||
if errors != nil {
|
||||
return output.Bytes(), awserr.NewBatchError(
|
||||
ErrCodeProcessProviderExecution,
|
||||
errMsgProcessProviderProcess,
|
||||
errors)
|
||||
}
|
||||
case <-time.After(p.Timeout):
|
||||
finished = true
|
||||
return output.Bytes(), awserr.NewBatchError(
|
||||
ErrCodeProcessProviderExecution,
|
||||
errMsgProcessProviderTimeout,
|
||||
errors) // errors can be nil
|
||||
}
|
||||
}
|
||||
|
||||
out := output.Bytes()
|
||||
|
||||
if runtime.GOOS == "windows" {
|
||||
// windows adds slashes to quotes
|
||||
out = []byte(strings.Replace(string(out), `\"`, `"`, -1))
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// appendError conveniently checks for nil before appending slice
|
||||
func appendError(errors []error, err error) []error {
|
||||
if err != nil {
|
||||
return append(errors, err)
|
||||
}
|
||||
return errors
|
||||
}
|
||||
|
||||
func executeCommand(cmd exec.Cmd, exec chan error) {
|
||||
// Start the command
|
||||
err := cmd.Start()
|
||||
if err == nil {
|
||||
err = cmd.Wait()
|
||||
}
|
||||
|
||||
exec <- err
|
||||
}
|
||||
|
||||
func readInput(r io.Reader, w io.Writer, read chan error) {
|
||||
tee := io.TeeReader(r, w)
|
||||
|
||||
_, err := ioutil.ReadAll(tee)
|
||||
|
||||
if err == io.EOF {
|
||||
err = nil
|
||||
}
|
||||
|
||||
read <- err // will only arrive here when write end of pipe is closed
|
||||
}
|
30
vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
generated
vendored
30
vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
generated
vendored
|
@ -4,9 +4,8 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/go-ini/ini"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/internal/ini"
|
||||
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
||||
)
|
||||
|
||||
|
@ -77,36 +76,37 @@ func (p *SharedCredentialsProvider) IsExpired() bool {
|
|||
// The credentials retrieved from the profile will be returned or error. Error will be
|
||||
// returned if it fails to read from the file, or the data is invalid.
|
||||
func loadProfile(filename, profile string) (Value, error) {
|
||||
config, err := ini.Load(filename)
|
||||
config, err := ini.OpenFile(filename)
|
||||
if err != nil {
|
||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err)
|
||||
}
|
||||
iniProfile, err := config.GetSection(profile)
|
||||
if err != nil {
|
||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", err)
|
||||
|
||||
iniProfile, ok := config.GetSection(profile)
|
||||
if !ok {
|
||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", nil)
|
||||
}
|
||||
|
||||
id, err := iniProfile.GetKey("aws_access_key_id")
|
||||
if err != nil {
|
||||
id := iniProfile.String("aws_access_key_id")
|
||||
if len(id) == 0 {
|
||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey",
|
||||
fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename),
|
||||
err)
|
||||
nil)
|
||||
}
|
||||
|
||||
secret, err := iniProfile.GetKey("aws_secret_access_key")
|
||||
if err != nil {
|
||||
secret := iniProfile.String("aws_secret_access_key")
|
||||
if len(secret) == 0 {
|
||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret",
|
||||
fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename),
|
||||
nil)
|
||||
}
|
||||
|
||||
// Default to empty string if not found
|
||||
token := iniProfile.Key("aws_session_token")
|
||||
token := iniProfile.String("aws_session_token")
|
||||
|
||||
return Value{
|
||||
AccessKeyID: id.String(),
|
||||
SecretAccessKey: secret.String(),
|
||||
SessionToken: token.String(),
|
||||
AccessKeyID: id,
|
||||
SecretAccessKey: secret,
|
||||
SessionToken: token,
|
||||
ProviderName: SharedCredsProviderName,
|
||||
}, nil
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ const StaticProviderName = "StaticProvider"
|
|||
|
||||
var (
|
||||
// ErrStaticCredentialsEmpty is emitted when static credentials are empty.
|
||||
//
|
||||
// @readonly
|
||||
ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil)
|
||||
)
|
||||
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
package crr
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
// EndpointCache is an LRU cache that holds a series of endpoints
|
||||
// based on some key. The datastructure makes use of a read write
|
||||
// mutex to enable asynchronous use.
|
||||
type EndpointCache struct {
|
||||
endpoints syncMap
|
||||
endpointLimit int64
|
||||
// size is used to count the number elements in the cache.
|
||||
// The atomic package is used to ensure this size is accurate when
|
||||
// using multiple goroutines.
|
||||
size int64
|
||||
}
|
||||
|
||||
// NewEndpointCache will return a newly initialized cache with a limit
|
||||
// of endpointLimit entries.
|
||||
func NewEndpointCache(endpointLimit int64) *EndpointCache {
|
||||
return &EndpointCache{
|
||||
endpointLimit: endpointLimit,
|
||||
endpoints: newSyncMap(),
|
||||
}
|
||||
}
|
||||
|
||||
// get is a concurrent safe get operation that will retrieve an endpoint
|
||||
// based on endpointKey. A boolean will also be returned to illustrate whether
|
||||
// or not the endpoint had been found.
|
||||
func (c *EndpointCache) get(endpointKey string) (Endpoint, bool) {
|
||||
endpoint, ok := c.endpoints.Load(endpointKey)
|
||||
if !ok {
|
||||
return Endpoint{}, false
|
||||
}
|
||||
|
||||
c.endpoints.Store(endpointKey, endpoint)
|
||||
return endpoint.(Endpoint), true
|
||||
}
|
||||
|
||||
// Has returns if the enpoint cache contains a valid entry for the endpoint key
|
||||
// provided.
|
||||
func (c *EndpointCache) Has(endpointKey string) bool {
|
||||
endpoint, ok := c.get(endpointKey)
|
||||
_, found := endpoint.GetValidAddress()
|
||||
|
||||
return ok && found
|
||||
}
|
||||
|
||||
// Get will retrieve a weighted address based off of the endpoint key. If an endpoint
|
||||
// should be retrieved, due to not existing or the current endpoint has expired
|
||||
// the Discoverer object that was passed in will attempt to discover a new endpoint
|
||||
// and add that to the cache.
|
||||
func (c *EndpointCache) Get(d Discoverer, endpointKey string, required bool) (WeightedAddress, error) {
|
||||
var err error
|
||||
endpoint, ok := c.get(endpointKey)
|
||||
weighted, found := endpoint.GetValidAddress()
|
||||
shouldGet := !ok || !found
|
||||
|
||||
if required && shouldGet {
|
||||
if endpoint, err = c.discover(d, endpointKey); err != nil {
|
||||
return WeightedAddress{}, err
|
||||
}
|
||||
|
||||
weighted, _ = endpoint.GetValidAddress()
|
||||
} else if shouldGet {
|
||||
go c.discover(d, endpointKey)
|
||||
}
|
||||
|
||||
return weighted, nil
|
||||
}
|
||||
|
||||
// Add is a concurrent safe operation that will allow new endpoints to be added
|
||||
// to the cache. If the cache is full, the number of endpoints equal endpointLimit,
|
||||
// then this will remove the oldest entry before adding the new endpoint.
|
||||
func (c *EndpointCache) Add(endpoint Endpoint) {
|
||||
// de-dups multiple adds of an endpoint with a pre-existing key
|
||||
if iface, ok := c.endpoints.Load(endpoint.Key); ok {
|
||||
e := iface.(Endpoint)
|
||||
if e.Len() > 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
c.endpoints.Store(endpoint.Key, endpoint)
|
||||
|
||||
size := atomic.AddInt64(&c.size, 1)
|
||||
if size > 0 && size > c.endpointLimit {
|
||||
c.deleteRandomKey()
|
||||
}
|
||||
}
|
||||
|
||||
// deleteRandomKey will delete a random key from the cache. If
|
||||
// no key was deleted false will be returned.
|
||||
func (c *EndpointCache) deleteRandomKey() bool {
|
||||
atomic.AddInt64(&c.size, -1)
|
||||
found := false
|
||||
|
||||
c.endpoints.Range(func(key, value interface{}) bool {
|
||||
found = true
|
||||
c.endpoints.Delete(key)
|
||||
|
||||
return false
|
||||
})
|
||||
|
||||
return found
|
||||
}
|
||||
|
||||
// discover will get and store and endpoint using the Discoverer.
|
||||
func (c *EndpointCache) discover(d Discoverer, endpointKey string) (Endpoint, error) {
|
||||
endpoint, err := d.Discover()
|
||||
if err != nil {
|
||||
return Endpoint{}, err
|
||||
}
|
||||
|
||||
endpoint.Key = endpointKey
|
||||
c.Add(endpoint)
|
||||
|
||||
return endpoint, nil
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package crr
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
)
|
||||
|
||||
// Endpoint represents an endpoint used in endpoint discovery.
|
||||
type Endpoint struct {
|
||||
Key string
|
||||
Addresses WeightedAddresses
|
||||
}
|
||||
|
||||
// WeightedAddresses represents a list of WeightedAddress.
|
||||
type WeightedAddresses []WeightedAddress
|
||||
|
||||
// WeightedAddress represents an address with a given weight.
|
||||
type WeightedAddress struct {
|
||||
URL *url.URL
|
||||
Expired time.Time
|
||||
}
|
||||
|
||||
// HasExpired will return whether or not the endpoint has expired with
|
||||
// the exception of a zero expiry meaning does not expire.
|
||||
func (e WeightedAddress) HasExpired() bool {
|
||||
return e.Expired.Before(time.Now())
|
||||
}
|
||||
|
||||
// Add will add a given WeightedAddress to the address list of Endpoint.
|
||||
func (e *Endpoint) Add(addr WeightedAddress) {
|
||||
e.Addresses = append(e.Addresses, addr)
|
||||
}
|
||||
|
||||
// Len returns the number of valid endpoints where valid means the endpoint
|
||||
// has not expired.
|
||||
func (e *Endpoint) Len() int {
|
||||
validEndpoints := 0
|
||||
for _, endpoint := range e.Addresses {
|
||||
if endpoint.HasExpired() {
|
||||
continue
|
||||
}
|
||||
|
||||
validEndpoints++
|
||||
}
|
||||
return validEndpoints
|
||||
}
|
||||
|
||||
// GetValidAddress will return a non-expired weight endpoint
|
||||
func (e *Endpoint) GetValidAddress() (WeightedAddress, bool) {
|
||||
for i := 0; i < len(e.Addresses); i++ {
|
||||
we := e.Addresses[i]
|
||||
|
||||
if we.HasExpired() {
|
||||
e.Addresses = append(e.Addresses[:i], e.Addresses[i+1:]...)
|
||||
i--
|
||||
continue
|
||||
}
|
||||
|
||||
return we, true
|
||||
}
|
||||
|
||||
return WeightedAddress{}, false
|
||||
}
|
||||
|
||||
// Discoverer is an interface used to discovery which endpoint hit. This
|
||||
// allows for specifics about what parameters need to be used to be contained
|
||||
// in the Discoverer implementor.
|
||||
type Discoverer interface {
|
||||
Discover() (Endpoint, error)
|
||||
}
|
||||
|
||||
// BuildEndpointKey will sort the keys in alphabetical order and then retrieve
|
||||
// the values in that order. Those values are then concatenated together to form
|
||||
// the endpoint key.
|
||||
func BuildEndpointKey(params map[string]*string) string {
|
||||
keys := make([]string, len(params))
|
||||
i := 0
|
||||
|
||||
for k := range params {
|
||||
keys[i] = k
|
||||
i++
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
values := make([]string, len(params))
|
||||
for i, k := range keys {
|
||||
if params[k] == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
values[i] = aws.StringValue(params[k])
|
||||
}
|
||||
|
||||
return strings.Join(values, ".")
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
// +build go1.9
|
||||
|
||||
package crr
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type syncMap sync.Map
|
||||
|
||||
func newSyncMap() syncMap {
|
||||
return syncMap{}
|
||||
}
|
||||
|
||||
func (m *syncMap) Load(key interface{}) (interface{}, bool) {
|
||||
return (*sync.Map)(m).Load(key)
|
||||
}
|
||||
|
||||
func (m *syncMap) Store(key interface{}, value interface{}) {
|
||||
(*sync.Map)(m).Store(key, value)
|
||||
}
|
||||
|
||||
func (m *syncMap) Delete(key interface{}) {
|
||||
(*sync.Map)(m).Delete(key)
|
||||
}
|
||||
|
||||
func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
|
||||
(*sync.Map)(m).Range(f)
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
// +build !go1.9
|
||||
|
||||
package crr
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
type syncMap struct {
|
||||
container map[interface{}]interface{}
|
||||
lock sync.RWMutex
|
||||
}
|
||||
|
||||
func newSyncMap() syncMap {
|
||||
return syncMap{
|
||||
container: map[interface{}]interface{}{},
|
||||
}
|
||||
}
|
||||
|
||||
func (m *syncMap) Load(key interface{}) (interface{}, bool) {
|
||||
m.lock.RLock()
|
||||
defer m.lock.RUnlock()
|
||||
|
||||
v, ok := m.container[key]
|
||||
return v, ok
|
||||
}
|
||||
|
||||
func (m *syncMap) Store(key interface{}, value interface{}) {
|
||||
m.lock.Lock()
|
||||
defer m.lock.Unlock()
|
||||
|
||||
m.container[key] = value
|
||||
}
|
||||
|
||||
func (m *syncMap) Delete(key interface{}) {
|
||||
m.lock.Lock()
|
||||
defer m.lock.Unlock()
|
||||
|
||||
delete(m.container, key)
|
||||
}
|
||||
|
||||
func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
|
||||
for k, v := range m.container {
|
||||
if !f(k, v) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
|
@ -227,9 +227,7 @@ func (rep *Reporter) InjectHandlers(handlers *request.Handlers) {
|
|||
apiCallAttemptHandler := request.NamedHandler{Name: APICallAttemptMetricHandlerName, Fn: rep.sendAPICallAttemptMetric}
|
||||
|
||||
handlers.Complete.PushFrontNamed(apiCallHandler)
|
||||
handlers.Complete.PushFrontNamed(apiCallAttemptHandler)
|
||||
|
||||
handlers.AfterRetry.PushFrontNamed(apiCallAttemptHandler)
|
||||
handlers.CompleteAttempt.PushFrontNamed(apiCallAttemptHandler)
|
||||
}
|
||||
|
||||
// boolIntValue return 1 for true and 0 for false.
|
||||
|
|
|
@ -95,7 +95,12 @@ func custAddS3DualStack(p *partition) {
|
|||
return
|
||||
}
|
||||
|
||||
s, ok := p.Services["s3"]
|
||||
custAddDualstack(p, "s3")
|
||||
custAddDualstack(p, "s3-control")
|
||||
}
|
||||
|
||||
func custAddDualstack(p *partition, svcName string) {
|
||||
s, ok := p.Services[svcName]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
@ -103,7 +108,7 @@ func custAddS3DualStack(p *partition) {
|
|||
s.Defaults.HasDualStack = boxedTrue
|
||||
s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}"
|
||||
|
||||
p.Services["s3"] = s
|
||||
p.Services[svcName] = s
|
||||
}
|
||||
|
||||
func custAddEC2Metadata(p *partition) {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
141
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
Normal file
141
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
Normal file
|
@ -0,0 +1,141 @@
|
|||
package endpoints
|
||||
|
||||
// Service identifiers
|
||||
//
|
||||
// Deprecated: Use client package's EndpointID value instead of these
|
||||
// ServiceIDs. These IDs are not maintained, and are out of date.
|
||||
const (
|
||||
A4bServiceID = "a4b" // A4b.
|
||||
AcmServiceID = "acm" // Acm.
|
||||
AcmPcaServiceID = "acm-pca" // AcmPca.
|
||||
ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor.
|
||||
ApiPricingServiceID = "api.pricing" // ApiPricing.
|
||||
ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker.
|
||||
ApigatewayServiceID = "apigateway" // Apigateway.
|
||||
ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling.
|
||||
Appstream2ServiceID = "appstream2" // Appstream2.
|
||||
AppsyncServiceID = "appsync" // Appsync.
|
||||
AthenaServiceID = "athena" // Athena.
|
||||
AutoscalingServiceID = "autoscaling" // Autoscaling.
|
||||
AutoscalingPlansServiceID = "autoscaling-plans" // AutoscalingPlans.
|
||||
BatchServiceID = "batch" // Batch.
|
||||
BudgetsServiceID = "budgets" // Budgets.
|
||||
CeServiceID = "ce" // Ce.
|
||||
ChimeServiceID = "chime" // Chime.
|
||||
Cloud9ServiceID = "cloud9" // Cloud9.
|
||||
ClouddirectoryServiceID = "clouddirectory" // Clouddirectory.
|
||||
CloudformationServiceID = "cloudformation" // Cloudformation.
|
||||
CloudfrontServiceID = "cloudfront" // Cloudfront.
|
||||
CloudhsmServiceID = "cloudhsm" // Cloudhsm.
|
||||
Cloudhsmv2ServiceID = "cloudhsmv2" // Cloudhsmv2.
|
||||
CloudsearchServiceID = "cloudsearch" // Cloudsearch.
|
||||
CloudtrailServiceID = "cloudtrail" // Cloudtrail.
|
||||
CodebuildServiceID = "codebuild" // Codebuild.
|
||||
CodecommitServiceID = "codecommit" // Codecommit.
|
||||
CodedeployServiceID = "codedeploy" // Codedeploy.
|
||||
CodepipelineServiceID = "codepipeline" // Codepipeline.
|
||||
CodestarServiceID = "codestar" // Codestar.
|
||||
CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity.
|
||||
CognitoIdpServiceID = "cognito-idp" // CognitoIdp.
|
||||
CognitoSyncServiceID = "cognito-sync" // CognitoSync.
|
||||
ComprehendServiceID = "comprehend" // Comprehend.
|
||||
ConfigServiceID = "config" // Config.
|
||||
CurServiceID = "cur" // Cur.
|
||||
DatapipelineServiceID = "datapipeline" // Datapipeline.
|
||||
DaxServiceID = "dax" // Dax.
|
||||
DevicefarmServiceID = "devicefarm" // Devicefarm.
|
||||
DirectconnectServiceID = "directconnect" // Directconnect.
|
||||
DiscoveryServiceID = "discovery" // Discovery.
|
||||
DmsServiceID = "dms" // Dms.
|
||||
DsServiceID = "ds" // Ds.
|
||||
DynamodbServiceID = "dynamodb" // Dynamodb.
|
||||
Ec2ServiceID = "ec2" // Ec2.
|
||||
Ec2metadataServiceID = "ec2metadata" // Ec2metadata.
|
||||
EcrServiceID = "ecr" // Ecr.
|
||||
EcsServiceID = "ecs" // Ecs.
|
||||
ElasticacheServiceID = "elasticache" // Elasticache.
|
||||
ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk.
|
||||
ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem.
|
||||
ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing.
|
||||
ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce.
|
||||
ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder.
|
||||
EmailServiceID = "email" // Email.
|
||||
EntitlementMarketplaceServiceID = "entitlement.marketplace" // EntitlementMarketplace.
|
||||
EsServiceID = "es" // Es.
|
||||
EventsServiceID = "events" // Events.
|
||||
FirehoseServiceID = "firehose" // Firehose.
|
||||
FmsServiceID = "fms" // Fms.
|
||||
GameliftServiceID = "gamelift" // Gamelift.
|
||||
GlacierServiceID = "glacier" // Glacier.
|
||||
GlueServiceID = "glue" // Glue.
|
||||
GreengrassServiceID = "greengrass" // Greengrass.
|
||||
GuarddutyServiceID = "guardduty" // Guardduty.
|
||||
HealthServiceID = "health" // Health.
|
||||
IamServiceID = "iam" // Iam.
|
||||
ImportexportServiceID = "importexport" // Importexport.
|
||||
InspectorServiceID = "inspector" // Inspector.
|
||||
IotServiceID = "iot" // Iot.
|
||||
IotanalyticsServiceID = "iotanalytics" // Iotanalytics.
|
||||
KinesisServiceID = "kinesis" // Kinesis.
|
||||
KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics.
|
||||
KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo.
|
||||
KmsServiceID = "kms" // Kms.
|
||||
LambdaServiceID = "lambda" // Lambda.
|
||||
LightsailServiceID = "lightsail" // Lightsail.
|
||||
LogsServiceID = "logs" // Logs.
|
||||
MachinelearningServiceID = "machinelearning" // Machinelearning.
|
||||
MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics.
|
||||
MediaconvertServiceID = "mediaconvert" // Mediaconvert.
|
||||
MedialiveServiceID = "medialive" // Medialive.
|
||||
MediapackageServiceID = "mediapackage" // Mediapackage.
|
||||
MediastoreServiceID = "mediastore" // Mediastore.
|
||||
MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace.
|
||||
MghServiceID = "mgh" // Mgh.
|
||||
MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics.
|
||||
ModelsLexServiceID = "models.lex" // ModelsLex.
|
||||
MonitoringServiceID = "monitoring" // Monitoring.
|
||||
MturkRequesterServiceID = "mturk-requester" // MturkRequester.
|
||||
NeptuneServiceID = "neptune" // Neptune.
|
||||
OpsworksServiceID = "opsworks" // Opsworks.
|
||||
OpsworksCmServiceID = "opsworks-cm" // OpsworksCm.
|
||||
OrganizationsServiceID = "organizations" // Organizations.
|
||||
PinpointServiceID = "pinpoint" // Pinpoint.
|
||||
PollyServiceID = "polly" // Polly.
|
||||
RdsServiceID = "rds" // Rds.
|
||||
RedshiftServiceID = "redshift" // Redshift.
|
||||
RekognitionServiceID = "rekognition" // Rekognition.
|
||||
ResourceGroupsServiceID = "resource-groups" // ResourceGroups.
|
||||
Route53ServiceID = "route53" // Route53.
|
||||
Route53domainsServiceID = "route53domains" // Route53domains.
|
||||
RuntimeLexServiceID = "runtime.lex" // RuntimeLex.
|
||||
RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker.
|
||||
S3ServiceID = "s3" // S3.
|
||||
S3ControlServiceID = "s3-control" // S3Control.
|
||||
SagemakerServiceID = "api.sagemaker" // Sagemaker.
|
||||
SdbServiceID = "sdb" // Sdb.
|
||||
SecretsmanagerServiceID = "secretsmanager" // Secretsmanager.
|
||||
ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo.
|
||||
ServicecatalogServiceID = "servicecatalog" // Servicecatalog.
|
||||
ServicediscoveryServiceID = "servicediscovery" // Servicediscovery.
|
||||
ShieldServiceID = "shield" // Shield.
|
||||
SmsServiceID = "sms" // Sms.
|
||||
SnowballServiceID = "snowball" // Snowball.
|
||||
SnsServiceID = "sns" // Sns.
|
||||
SqsServiceID = "sqs" // Sqs.
|
||||
SsmServiceID = "ssm" // Ssm.
|
||||
StatesServiceID = "states" // States.
|
||||
StoragegatewayServiceID = "storagegateway" // Storagegateway.
|
||||
StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb.
|
||||
StsServiceID = "sts" // Sts.
|
||||
SupportServiceID = "support" // Support.
|
||||
SwfServiceID = "swf" // Swf.
|
||||
TaggingServiceID = "tagging" // Tagging.
|
||||
TransferServiceID = "transfer" // Transfer.
|
||||
TranslateServiceID = "translate" // Translate.
|
||||
WafServiceID = "waf" // Waf.
|
||||
WafRegionalServiceID = "waf-regional" // WafRegional.
|
||||
WorkdocsServiceID = "workdocs" // Workdocs.
|
||||
WorkmailServiceID = "workmail" // Workmail.
|
||||
WorkspacesServiceID = "workspaces" // Workspaces.
|
||||
XrayServiceID = "xray" // Xray.
|
||||
)
|
|
@ -16,6 +16,10 @@ import (
|
|||
type CodeGenOptions struct {
|
||||
// Options for how the model will be decoded.
|
||||
DecodeModelOptions DecodeModelOptions
|
||||
|
||||
// Disables code generation of the service endpoint prefix IDs defined in
|
||||
// the model.
|
||||
DisableGenerateServiceIDs bool
|
||||
}
|
||||
|
||||
// Set combines all of the option functions together
|
||||
|
@ -39,8 +43,16 @@ func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGe
|
|||
return err
|
||||
}
|
||||
|
||||
v := struct {
|
||||
Resolver
|
||||
CodeGenOptions
|
||||
}{
|
||||
Resolver: resolver,
|
||||
CodeGenOptions: opts,
|
||||
}
|
||||
|
||||
tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl))
|
||||
if err := tmpl.ExecuteTemplate(outFile, "defaults", resolver); err != nil {
|
||||
if err := tmpl.ExecuteTemplate(outFile, "defaults", v); err != nil {
|
||||
return fmt.Errorf("failed to execute template, %v", err)
|
||||
}
|
||||
|
||||
|
@ -166,15 +178,17 @@ import (
|
|||
"regexp"
|
||||
)
|
||||
|
||||
{{ template "partition consts" . }}
|
||||
{{ template "partition consts" $.Resolver }}
|
||||
|
||||
{{ range $_, $partition := . }}
|
||||
{{ range $_, $partition := $.Resolver }}
|
||||
{{ template "partition region consts" $partition }}
|
||||
{{ end }}
|
||||
|
||||
{{ template "service consts" . }}
|
||||
{{ if not $.DisableGenerateServiceIDs -}}
|
||||
{{ template "service consts" $.Resolver }}
|
||||
{{- end }}
|
||||
|
||||
{{ template "endpoint resolvers" . }}
|
||||
{{ template "endpoint resolvers" $.Resolver }}
|
||||
{{- end }}
|
||||
|
||||
{{ define "partition consts" }}
|
||||
|
|
|
@ -5,13 +5,9 @@ import "github.com/aws/aws-sdk-go/aws/awserr"
|
|||
var (
|
||||
// ErrMissingRegion is an error that is returned if region configuration is
|
||||
// not found.
|
||||
//
|
||||
// @readonly
|
||||
ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil)
|
||||
|
||||
// ErrMissingEndpoint is an error that is returned if an endpoint cannot be
|
||||
// resolved for a service.
|
||||
//
|
||||
// @readonly
|
||||
ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil)
|
||||
)
|
||||
|
|
|
@ -19,6 +19,7 @@ type Handlers struct {
|
|||
UnmarshalError HandlerList
|
||||
Retry HandlerList
|
||||
AfterRetry HandlerList
|
||||
CompleteAttempt HandlerList
|
||||
Complete HandlerList
|
||||
}
|
||||
|
||||
|
@ -36,6 +37,7 @@ func (h *Handlers) Copy() Handlers {
|
|||
UnmarshalMeta: h.UnmarshalMeta.copy(),
|
||||
Retry: h.Retry.copy(),
|
||||
AfterRetry: h.AfterRetry.copy(),
|
||||
CompleteAttempt: h.CompleteAttempt.copy(),
|
||||
Complete: h.Complete.copy(),
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +55,7 @@ func (h *Handlers) Clear() {
|
|||
h.ValidateResponse.Clear()
|
||||
h.Retry.Clear()
|
||||
h.AfterRetry.Clear()
|
||||
h.CompleteAttempt.Clear()
|
||||
h.Complete.Clear()
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,6 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
|
|||
Handlers: handlers.Copy(),
|
||||
|
||||
Retryer: retryer,
|
||||
AttemptTime: time.Now(),
|
||||
Time: time.Now(),
|
||||
ExpireTime: 0,
|
||||
Operation: operation,
|
||||
|
@ -266,7 +265,9 @@ func (r *Request) SetReaderBody(reader io.ReadSeeker) {
|
|||
}
|
||||
|
||||
// Presign returns the request's signed URL. Error will be returned
|
||||
// if the signing fails.
|
||||
// if the signing fails. The expire parameter is only used for presigned Amazon
|
||||
// S3 API requests. All other AWS services will use a fixed expriation
|
||||
// time of 15 minutes.
|
||||
//
|
||||
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
||||
// error is returned if expire duration is 0 or less.
|
||||
|
@ -283,7 +284,9 @@ func (r *Request) Presign(expire time.Duration) (string, error) {
|
|||
}
|
||||
|
||||
// PresignRequest behaves just like presign, with the addition of returning a
|
||||
// set of headers that were signed.
|
||||
// set of headers that were signed. The expire parameter is only used for
|
||||
// presigned Amazon S3 API requests. All other AWS services will use a fixed
|
||||
// expriation time of 15 minutes.
|
||||
//
|
||||
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
||||
// error is returned if expire duration is 0 or less.
|
||||
|
@ -462,80 +465,78 @@ func (r *Request) Send() error {
|
|||
r.Handlers.Complete.Run(r)
|
||||
}()
|
||||
|
||||
if err := r.Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
r.Error = nil
|
||||
r.AttemptTime = time.Now()
|
||||
if aws.BoolValue(r.Retryable) {
|
||||
if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {
|
||||
r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d",
|
||||
r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))
|
||||
}
|
||||
|
||||
// The previous http.Request will have a reference to the r.Body
|
||||
// and the HTTP Client's Transport may still be reading from
|
||||
// the request's body even though the Client's Do returned.
|
||||
r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)
|
||||
r.ResetBody()
|
||||
|
||||
// Closing response body to ensure that no response body is leaked
|
||||
// between retry attempts.
|
||||
if r.HTTPResponse != nil && r.HTTPResponse.Body != nil {
|
||||
r.HTTPResponse.Body.Close()
|
||||
}
|
||||
if err := r.Sign(); err != nil {
|
||||
debugLogReqError(r, "Sign Request", false, err)
|
||||
return err
|
||||
}
|
||||
|
||||
r.Sign()
|
||||
if r.Error != nil {
|
||||
return r.Error
|
||||
}
|
||||
|
||||
r.Retryable = nil
|
||||
|
||||
r.Handlers.Send.Run(r)
|
||||
if r.Error != nil {
|
||||
if !shouldRetryCancel(r) {
|
||||
return r.Error
|
||||
}
|
||||
|
||||
err := r.Error
|
||||
if err := r.sendRequest(); err == nil {
|
||||
return nil
|
||||
} else if !shouldRetryCancel(r) {
|
||||
return err
|
||||
} else {
|
||||
r.Handlers.Retry.Run(r)
|
||||
r.Handlers.AfterRetry.Run(r)
|
||||
if r.Error != nil {
|
||||
debugLogReqError(r, "Send Request", false, err)
|
||||
|
||||
if r.Error != nil || !aws.BoolValue(r.Retryable) {
|
||||
return r.Error
|
||||
}
|
||||
debugLogReqError(r, "Send Request", true, err)
|
||||
|
||||
r.prepareRetry()
|
||||
continue
|
||||
}
|
||||
r.Handlers.UnmarshalMeta.Run(r)
|
||||
r.Handlers.ValidateResponse.Run(r)
|
||||
if r.Error != nil {
|
||||
r.Handlers.UnmarshalError.Run(r)
|
||||
err := r.Error
|
||||
}
|
||||
}
|
||||
|
||||
r.Handlers.Retry.Run(r)
|
||||
r.Handlers.AfterRetry.Run(r)
|
||||
if r.Error != nil {
|
||||
debugLogReqError(r, "Validate Response", false, err)
|
||||
return r.Error
|
||||
}
|
||||
debugLogReqError(r, "Validate Response", true, err)
|
||||
continue
|
||||
}
|
||||
func (r *Request) prepareRetry() {
|
||||
if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {
|
||||
r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d",
|
||||
r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))
|
||||
}
|
||||
|
||||
r.Handlers.Unmarshal.Run(r)
|
||||
if r.Error != nil {
|
||||
err := r.Error
|
||||
r.Handlers.Retry.Run(r)
|
||||
r.Handlers.AfterRetry.Run(r)
|
||||
if r.Error != nil {
|
||||
debugLogReqError(r, "Unmarshal Response", false, err)
|
||||
return r.Error
|
||||
}
|
||||
debugLogReqError(r, "Unmarshal Response", true, err)
|
||||
continue
|
||||
}
|
||||
// The previous http.Request will have a reference to the r.Body
|
||||
// and the HTTP Client's Transport may still be reading from
|
||||
// the request's body even though the Client's Do returned.
|
||||
r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)
|
||||
r.ResetBody()
|
||||
|
||||
break
|
||||
// Closing response body to ensure that no response body is leaked
|
||||
// between retry attempts.
|
||||
if r.HTTPResponse != nil && r.HTTPResponse.Body != nil {
|
||||
r.HTTPResponse.Body.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Request) sendRequest() (sendErr error) {
|
||||
defer r.Handlers.CompleteAttempt.Run(r)
|
||||
|
||||
r.Retryable = nil
|
||||
r.Handlers.Send.Run(r)
|
||||
if r.Error != nil {
|
||||
debugLogReqError(r, "Send Request", r.WillRetry(), r.Error)
|
||||
return r.Error
|
||||
}
|
||||
|
||||
r.Handlers.UnmarshalMeta.Run(r)
|
||||
r.Handlers.ValidateResponse.Run(r)
|
||||
if r.Error != nil {
|
||||
r.Handlers.UnmarshalError.Run(r)
|
||||
debugLogReqError(r, "Validate Response", r.WillRetry(), r.Error)
|
||||
return r.Error
|
||||
}
|
||||
|
||||
r.Handlers.Unmarshal.Run(r)
|
||||
if r.Error != nil {
|
||||
debugLogReqError(r, "Unmarshal Response", r.WillRetry(), r.Error)
|
||||
return r.Error
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -40,6 +40,7 @@ var throttleCodes = map[string]struct{}{
|
|||
"RequestThrottled": {},
|
||||
"TooManyRequestsException": {}, // Lambda functions
|
||||
"PriorRequestNotComplete": {}, // Route53
|
||||
"TransactionInProgressException": {},
|
||||
}
|
||||
|
||||
// credsExpiredCodes is a collection of error codes which signify the credentials
|
||||
|
|
|
@ -17,6 +17,8 @@ const (
|
|||
ParamMinValueErrCode = "ParamMinValueError"
|
||||
// ParamMinLenErrCode is the error code for fields without enough elements.
|
||||
ParamMinLenErrCode = "ParamMinLenError"
|
||||
// ParamMaxLenErrCode is the error code for value being too long.
|
||||
ParamMaxLenErrCode = "ParamMaxLenError"
|
||||
|
||||
// ParamFormatErrCode is the error code for a field with invalid
|
||||
// format or characters.
|
||||
|
@ -237,6 +239,29 @@ func (e *ErrParamMinLen) MinLen() int {
|
|||
return e.min
|
||||
}
|
||||
|
||||
// An ErrParamMaxLen represents a maximum length parameter error.
|
||||
type ErrParamMaxLen struct {
|
||||
errInvalidParam
|
||||
max int
|
||||
}
|
||||
|
||||
// NewErrParamMaxLen creates a new maximum length parameter error.
|
||||
func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen {
|
||||
return &ErrParamMaxLen{
|
||||
errInvalidParam: errInvalidParam{
|
||||
code: ParamMaxLenErrCode,
|
||||
field: field,
|
||||
msg: fmt.Sprintf("maximum size of %v, %v", max, value),
|
||||
},
|
||||
max: max,
|
||||
}
|
||||
}
|
||||
|
||||
// MaxLen returns the field's required minimum length.
|
||||
func (e *ErrParamMaxLen) MaxLen() int {
|
||||
return e.max
|
||||
}
|
||||
|
||||
// An ErrParamFormat represents a invalid format parameter error.
|
||||
type ErrParamFormat struct {
|
||||
errInvalidParam
|
||||
|
|
|
@ -99,7 +99,7 @@ handler logs every request and its payload made by a service client:
|
|||
|
||||
sess.Handlers.Send.PushFront(func(r *request.Request) {
|
||||
// Log every request made and its payload
|
||||
logger.Println("Request: %s/%s, Payload: %s",
|
||||
logger.Printf("Request: %s/%s, Payload: %s",
|
||||
r.ClientInfo.ServiceName, r.Operation, r.Params)
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||
)
|
||||
|
@ -101,6 +102,12 @@ type envConfig struct {
|
|||
CSMEnabled bool
|
||||
CSMPort string
|
||||
CSMClientID string
|
||||
|
||||
enableEndpointDiscovery string
|
||||
// Enables endpoint discovery via environment variables.
|
||||
//
|
||||
// AWS_ENABLE_ENDPOINT_DISCOVERY=true
|
||||
EnableEndpointDiscovery *bool
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -125,6 +132,10 @@ var (
|
|||
"AWS_SESSION_TOKEN",
|
||||
}
|
||||
|
||||
enableEndpointDiscoveryEnvKey = []string{
|
||||
"AWS_ENABLE_ENDPOINT_DISCOVERY",
|
||||
}
|
||||
|
||||
regionEnvKeys = []string{
|
||||
"AWS_REGION",
|
||||
"AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set
|
||||
|
@ -194,6 +205,12 @@ func envConfigLoad(enableSharedConfig bool) envConfig {
|
|||
setFromEnvVal(&cfg.Region, regionKeys)
|
||||
setFromEnvVal(&cfg.Profile, profileKeys)
|
||||
|
||||
// endpoint discovery is in reference to it being enabled.
|
||||
setFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey)
|
||||
if len(cfg.enableEndpointDiscovery) > 0 {
|
||||
cfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != "false")
|
||||
}
|
||||
|
||||
setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey)
|
||||
setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey)
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws/client"
|
||||
"github.com/aws/aws-sdk-go/aws/corehandlers"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials/processcreds"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||
"github.com/aws/aws-sdk-go/aws/csm"
|
||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||
|
@ -452,6 +453,14 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||
}
|
||||
}
|
||||
|
||||
if cfg.EnableEndpointDiscovery == nil {
|
||||
if envCfg.EnableEndpointDiscovery != nil {
|
||||
cfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery)
|
||||
} else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil {
|
||||
cfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery)
|
||||
}
|
||||
}
|
||||
|
||||
// Configure credentials if not already set
|
||||
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
|
||||
|
||||
|
@ -526,6 +535,10 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
||||
sharedCfg.Creds,
|
||||
)
|
||||
} else if len(sharedCfg.CredentialProcess) > 0 {
|
||||
cfg.Credentials = processcreds.NewCredentials(
|
||||
sharedCfg.CredentialProcess,
|
||||
)
|
||||
} else {
|
||||
// Fallback to default credentials provider, include mock errors
|
||||
// for the credential chain so user can identify why credentials
|
||||
|
|
|
@ -2,11 +2,11 @@ package session
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||
"github.com/go-ini/ini"
|
||||
|
||||
"github.com/aws/aws-sdk-go/internal/ini"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -26,6 +26,11 @@ const (
|
|||
// Additional Config fields
|
||||
regionKey = `region`
|
||||
|
||||
// endpoint discovery group
|
||||
enableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional
|
||||
// External Credential Process
|
||||
credentialProcessKey = `credential_process`
|
||||
|
||||
// DefaultSharedConfigProfile is the default profile to be used when
|
||||
// loading configuration from the config files if another profile name
|
||||
// is not provided.
|
||||
|
@ -57,16 +62,25 @@ type sharedConfig struct {
|
|||
AssumeRole assumeRoleConfig
|
||||
AssumeRoleSource *sharedConfig
|
||||
|
||||
// An external process to request credentials
|
||||
CredentialProcess string
|
||||
|
||||
// Region is the region the SDK should use for looking up AWS service endpoints
|
||||
// and signing requests.
|
||||
//
|
||||
// region
|
||||
Region string
|
||||
|
||||
// EnableEndpointDiscovery can be enabled in the shared config by setting
|
||||
// endpoint_discovery_enabled to true
|
||||
//
|
||||
// endpoint_discovery_enabled = true
|
||||
EnableEndpointDiscovery *bool
|
||||
}
|
||||
|
||||
type sharedConfigFile struct {
|
||||
Filename string
|
||||
IniData *ini.File
|
||||
IniData ini.Sections
|
||||
}
|
||||
|
||||
// loadSharedConfig retrieves the configuration from the list of files
|
||||
|
@ -107,19 +121,16 @@ func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) {
|
|||
files := make([]sharedConfigFile, 0, len(filenames))
|
||||
|
||||
for _, filename := range filenames {
|
||||
b, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
sections, err := ini.OpenFile(filename)
|
||||
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile {
|
||||
// Skip files which can't be opened and read for whatever reason
|
||||
continue
|
||||
}
|
||||
|
||||
f, err := ini.Load(b)
|
||||
if err != nil {
|
||||
} else if err != nil {
|
||||
return nil, SharedConfigLoadError{Filename: filename, Err: err}
|
||||
}
|
||||
|
||||
files = append(files, sharedConfigFile{
|
||||
Filename: filename, IniData: f,
|
||||
Filename: filename, IniData: sections,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -180,48 +191,59 @@ func (cfg *sharedConfig) setFromIniFiles(profile string, files []sharedConfigFil
|
|||
// if a config file only includes aws_access_key_id but no aws_secret_access_key
|
||||
// the aws_access_key_id will be ignored.
|
||||
func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error {
|
||||
section, err := file.IniData.GetSection(profile)
|
||||
if err != nil {
|
||||
section, ok := file.IniData.GetSection(profile)
|
||||
if !ok {
|
||||
// Fallback to to alternate profile name: profile <name>
|
||||
section, err = file.IniData.GetSection(fmt.Sprintf("profile %s", profile))
|
||||
if err != nil {
|
||||
return SharedConfigProfileNotExistsError{Profile: profile, Err: err}
|
||||
section, ok = file.IniData.GetSection(fmt.Sprintf("profile %s", profile))
|
||||
if !ok {
|
||||
return SharedConfigProfileNotExistsError{Profile: profile, Err: nil}
|
||||
}
|
||||
}
|
||||
|
||||
// Shared Credentials
|
||||
akid := section.Key(accessKeyIDKey).String()
|
||||
secret := section.Key(secretAccessKey).String()
|
||||
akid := section.String(accessKeyIDKey)
|
||||
secret := section.String(secretAccessKey)
|
||||
if len(akid) > 0 && len(secret) > 0 {
|
||||
cfg.Creds = credentials.Value{
|
||||
AccessKeyID: akid,
|
||||
SecretAccessKey: secret,
|
||||
SessionToken: section.Key(sessionTokenKey).String(),
|
||||
SessionToken: section.String(sessionTokenKey),
|
||||
ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename),
|
||||
}
|
||||
}
|
||||
|
||||
// Assume Role
|
||||
roleArn := section.Key(roleArnKey).String()
|
||||
srcProfile := section.Key(sourceProfileKey).String()
|
||||
credentialSource := section.Key(credentialSourceKey).String()
|
||||
roleArn := section.String(roleArnKey)
|
||||
srcProfile := section.String(sourceProfileKey)
|
||||
credentialSource := section.String(credentialSourceKey)
|
||||
hasSource := len(srcProfile) > 0 || len(credentialSource) > 0
|
||||
if len(roleArn) > 0 && hasSource {
|
||||
cfg.AssumeRole = assumeRoleConfig{
|
||||
RoleARN: roleArn,
|
||||
SourceProfile: srcProfile,
|
||||
CredentialSource: credentialSource,
|
||||
ExternalID: section.Key(externalIDKey).String(),
|
||||
MFASerial: section.Key(mfaSerialKey).String(),
|
||||
RoleSessionName: section.Key(roleSessionNameKey).String(),
|
||||
ExternalID: section.String(externalIDKey),
|
||||
MFASerial: section.String(mfaSerialKey),
|
||||
RoleSessionName: section.String(roleSessionNameKey),
|
||||
}
|
||||
}
|
||||
|
||||
// `credential_process`
|
||||
if credProc := section.String(credentialProcessKey); len(credProc) > 0 {
|
||||
cfg.CredentialProcess = credProc
|
||||
}
|
||||
|
||||
// Region
|
||||
if v := section.Key(regionKey).String(); len(v) > 0 {
|
||||
if v := section.String(regionKey); len(v) > 0 {
|
||||
cfg.Region = v
|
||||
}
|
||||
|
||||
// Endpoint discovery
|
||||
if section.Has(enableEndpointDiscoveryKey) {
|
||||
v := section.Bool(enableEndpointDiscoveryKey)
|
||||
cfg.EnableEndpointDiscovery = &v
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -98,25 +98,25 @@ var ignoredHeaders = rules{
|
|||
var requiredSignedHeaders = rules{
|
||||
whitelist{
|
||||
mapRule{
|
||||
"Cache-Control": struct{}{},
|
||||
"Content-Disposition": struct{}{},
|
||||
"Content-Encoding": struct{}{},
|
||||
"Content-Language": struct{}{},
|
||||
"Content-Md5": struct{}{},
|
||||
"Content-Type": struct{}{},
|
||||
"Expires": struct{}{},
|
||||
"If-Match": struct{}{},
|
||||
"If-Modified-Since": struct{}{},
|
||||
"If-None-Match": struct{}{},
|
||||
"If-Unmodified-Since": struct{}{},
|
||||
"Range": struct{}{},
|
||||
"X-Amz-Acl": struct{}{},
|
||||
"X-Amz-Copy-Source": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Match": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Modified-Since": struct{}{},
|
||||
"X-Amz-Copy-Source-If-None-Match": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
|
||||
"X-Amz-Copy-Source-Range": struct{}{},
|
||||
"Cache-Control": struct{}{},
|
||||
"Content-Disposition": struct{}{},
|
||||
"Content-Encoding": struct{}{},
|
||||
"Content-Language": struct{}{},
|
||||
"Content-Md5": struct{}{},
|
||||
"Content-Type": struct{}{},
|
||||
"Expires": struct{}{},
|
||||
"If-Match": struct{}{},
|
||||
"If-Modified-Since": struct{}{},
|
||||
"If-None-Match": struct{}{},
|
||||
"If-Unmodified-Since": struct{}{},
|
||||
"Range": struct{}{},
|
||||
"X-Amz-Acl": struct{}{},
|
||||
"X-Amz-Copy-Source": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Match": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Modified-Since": struct{}{},
|
||||
"X-Amz-Copy-Source-If-None-Match": struct{}{},
|
||||
"X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
|
||||
"X-Amz-Copy-Source-Range": struct{}{},
|
||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{},
|
||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||
|
@ -134,6 +134,7 @@ var requiredSignedHeaders = rules{
|
|||
"X-Amz-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||
"X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||
"X-Amz-Storage-Class": struct{}{},
|
||||
"X-Amz-Tagging": struct{}{},
|
||||
"X-Amz-Website-Redirect-Location": struct{}{},
|
||||
"X-Amz-Content-Sha256": struct{}{},
|
||||
},
|
||||
|
@ -421,7 +422,7 @@ var SignRequestHandler = request.NamedHandler{
|
|||
// If the credentials of the request's config are set to
|
||||
// credentials.AnonymousCredentials the request will not be signed.
|
||||
func SignSDKRequest(req *request.Request) {
|
||||
signSDKRequestWithCurrTime(req, time.Now)
|
||||
SignSDKRequestWithCurrentTime(req, time.Now)
|
||||
}
|
||||
|
||||
// BuildNamedHandler will build a generic handler for signing.
|
||||
|
@ -429,12 +430,15 @@ func BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler
|
|||
return request.NamedHandler{
|
||||
Name: name,
|
||||
Fn: func(req *request.Request) {
|
||||
signSDKRequestWithCurrTime(req, time.Now, opts...)
|
||||
SignSDKRequestWithCurrentTime(req, time.Now, opts...)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) {
|
||||
// SignSDKRequestWithCurrentTime will sign the SDK's request using the time
|
||||
// function passed in. Behaves the same as SignSDKRequest with the exception
|
||||
// the request is signed with the value returned by the current time function.
|
||||
func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) {
|
||||
// If the request does not need to be signed ignore the signing of the
|
||||
// request if the AnonymousCredentials object is used.
|
||||
if req.Config.Credentials == credentials.AnonymousCredentials {
|
||||
|
@ -470,13 +474,9 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time
|
|||
opt(v4)
|
||||
}
|
||||
|
||||
signingTime := req.Time
|
||||
if !req.LastSignedAt.IsZero() {
|
||||
signingTime = req.LastSignedAt
|
||||
}
|
||||
|
||||
curTime := curTimeFn()
|
||||
signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(),
|
||||
name, region, req.ExpireTime, req.ExpireTime > 0, signingTime,
|
||||
name, region, req.ExpireTime, req.ExpireTime > 0, curTime,
|
||||
)
|
||||
if err != nil {
|
||||
req.Error = err
|
||||
|
@ -485,7 +485,7 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time
|
|||
}
|
||||
|
||||
req.SignedHeaderVals = signedHeaders
|
||||
req.LastSignedAt = curTimeFn()
|
||||
req.LastSignedAt = curTime
|
||||
}
|
||||
|
||||
const logSignInfoMsg = `DEBUG: Request Signature:
|
||||
|
|
|
@ -5,4 +5,4 @@ package aws
|
|||
const SDKName = "aws-sdk-go"
|
||||
|
||||
// SDKVersion is the version of this SDK
|
||||
const SDKVersion = "1.15.55"
|
||||
const SDKVersion = "1.16.4"
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
package ini
|
||||
|
||||
// ASTKind represents different states in the parse table
|
||||
// and the type of AST that is being constructed
|
||||
type ASTKind int
|
||||
|
||||
// ASTKind* is used in the parse table to transition between
|
||||
// the different states
|
||||
const (
|
||||
ASTKindNone = ASTKind(iota)
|
||||
ASTKindStart
|
||||
ASTKindExpr
|
||||
ASTKindEqualExpr
|
||||
ASTKindStatement
|
||||
ASTKindSkipStatement
|
||||
ASTKindExprStatement
|
||||
ASTKindSectionStatement
|
||||
ASTKindNestedSectionStatement
|
||||
ASTKindCompletedNestedSectionStatement
|
||||
ASTKindCommentStatement
|
||||
ASTKindCompletedSectionStatement
|
||||
)
|
||||
|
||||
func (k ASTKind) String() string {
|
||||
switch k {
|
||||
case ASTKindNone:
|
||||
return "none"
|
||||
case ASTKindStart:
|
||||
return "start"
|
||||
case ASTKindExpr:
|
||||
return "expr"
|
||||
case ASTKindStatement:
|
||||
return "stmt"
|
||||
case ASTKindSectionStatement:
|
||||
return "section_stmt"
|
||||
case ASTKindExprStatement:
|
||||
return "expr_stmt"
|
||||
case ASTKindCommentStatement:
|
||||
return "comment"
|
||||
case ASTKindNestedSectionStatement:
|
||||
return "nested_section_stmt"
|
||||
case ASTKindCompletedSectionStatement:
|
||||
return "completed_stmt"
|
||||
case ASTKindSkipStatement:
|
||||
return "skip"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// AST interface allows us to determine what kind of node we
|
||||
// are on and casting may not need to be necessary.
|
||||
//
|
||||
// The root is always the first node in Children
|
||||
type AST struct {
|
||||
Kind ASTKind
|
||||
Root Token
|
||||
RootToken bool
|
||||
Children []AST
|
||||
}
|
||||
|
||||
func newAST(kind ASTKind, root AST, children ...AST) AST {
|
||||
return AST{
|
||||
Kind: kind,
|
||||
Children: append([]AST{root}, children...),
|
||||
}
|
||||
}
|
||||
|
||||
func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST {
|
||||
return AST{
|
||||
Kind: kind,
|
||||
Root: root,
|
||||
RootToken: true,
|
||||
Children: children,
|
||||
}
|
||||
}
|
||||
|
||||
// AppendChild will append to the list of children an AST has.
|
||||
func (a *AST) AppendChild(child AST) {
|
||||
a.Children = append(a.Children, child)
|
||||
}
|
||||
|
||||
// GetRoot will return the root AST which can be the first entry
|
||||
// in the children list or a token.
|
||||
func (a *AST) GetRoot() AST {
|
||||
if a.RootToken {
|
||||
return *a
|
||||
}
|
||||
|
||||
if len(a.Children) == 0 {
|
||||
return AST{}
|
||||
}
|
||||
|
||||
return a.Children[0]
|
||||
}
|
||||
|
||||
// GetChildren will return the current AST's list of children
|
||||
func (a *AST) GetChildren() []AST {
|
||||
if len(a.Children) == 0 {
|
||||
return []AST{}
|
||||
}
|
||||
|
||||
if a.RootToken {
|
||||
return a.Children
|
||||
}
|
||||
|
||||
return a.Children[1:]
|
||||
}
|
||||
|
||||
// SetChildren will set and override all children of the AST.
|
||||
func (a *AST) SetChildren(children []AST) {
|
||||
if a.RootToken {
|
||||
a.Children = children
|
||||
} else {
|
||||
a.Children = append(a.Children[:1], children...)
|
||||
}
|
||||
}
|
||||
|
||||
// Start is used to indicate the starting state of the parse table.
|
||||
var Start = newAST(ASTKindStart, AST{})
|
|
@ -0,0 +1,11 @@
|
|||
package ini
|
||||
|
||||
var commaRunes = []rune(",")
|
||||
|
||||
func isComma(b rune) bool {
|
||||
return b == ','
|
||||
}
|
||||
|
||||
func newCommaToken() Token {
|
||||
return newToken(TokenComma, commaRunes, NoneType)
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package ini
|
||||
|
||||
// isComment will return whether or not the next byte(s) is a
|
||||
// comment.
|
||||
func isComment(b []rune) bool {
|
||||
if len(b) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
switch b[0] {
|
||||
case ';':
|
||||
return true
|
||||
case '#':
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// newCommentToken will create a comment token and
|
||||
// return how many bytes were read.
|
||||
func newCommentToken(b []rune) (Token, int, error) {
|
||||
i := 0
|
||||
for ; i < len(b); i++ {
|
||||
if b[i] == '\n' {
|
||||
break
|
||||
}
|
||||
|
||||
if len(b)-i > 2 && b[i] == '\r' && b[i+1] == '\n' {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return newToken(TokenComment, b[:i], NoneType), i, nil
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
// Package ini is an LL(1) parser for configuration files.
|
||||
//
|
||||
// Example:
|
||||
// sections, err := ini.OpenFile("/path/to/file")
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
//
|
||||
// profile := "foo"
|
||||
// section, ok := sections.GetSection(profile)
|
||||
// if !ok {
|
||||
// fmt.Printf("section %q could not be found", profile)
|
||||
// }
|
||||
//
|
||||
// Below is the BNF that describes this parser
|
||||
// Grammar:
|
||||
// stmt -> value stmt'
|
||||
// stmt' -> epsilon | op stmt
|
||||
// value -> number | string | boolean | quoted_string
|
||||
//
|
||||
// section -> [ section'
|
||||
// section' -> value section_close
|
||||
// section_close -> ]
|
||||
//
|
||||
// SkipState will skip (NL WS)+
|
||||
//
|
||||
// comment -> # comment' | ; comment'
|
||||
// comment' -> epsilon | value
|
||||
package ini
|
|
@ -0,0 +1,4 @@
|
|||
package ini
|
||||
|
||||
// emptyToken is used to satisfy the Token interface
|
||||
var emptyToken = newToken(TokenNone, []rune{}, NoneType)
|
|
@ -0,0 +1,24 @@
|
|||
package ini
|
||||
|
||||
// newExpression will return an expression AST.
|
||||
// Expr represents an expression
|
||||
//
|
||||
// grammar:
|
||||
// expr -> string | number
|
||||
func newExpression(tok Token) AST {
|
||||
return newASTWithRootToken(ASTKindExpr, tok)
|
||||
}
|
||||
|
||||
func newEqualExpr(left AST, tok Token) AST {
|
||||
return newASTWithRootToken(ASTKindEqualExpr, tok, left)
|
||||
}
|
||||
|
||||
// EqualExprKey will return a LHS value in the equal expr
|
||||
func EqualExprKey(ast AST) string {
|
||||
children := ast.GetChildren()
|
||||
if len(children) == 0 || ast.Kind != ASTKindEqualExpr {
|
||||
return ""
|
||||
}
|
||||
|
||||
return string(children[0].Root.Raw())
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
// +build gofuzz
|
||||
|
||||
package ini
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
)
|
||||
|
||||
func Fuzz(data []byte) int {
|
||||
b := bytes.NewReader(data)
|
||||
|
||||
if _, err := Parse(b); err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
)
|
||||
|
||||
// OpenFile takes a path to a given file, and will open and parse
|
||||
// that file.
|
||||
func OpenFile(path string) (Sections, error) {
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return Parse(f)
|
||||
}
|
||||
|
||||
// Parse will parse the given file using the shared config
|
||||
// visitor.
|
||||
func Parse(f io.Reader) (Sections, error) {
|
||||
tree, err := ParseAST(f)
|
||||
if err != nil {
|
||||
return Sections{}, err
|
||||
}
|
||||
|
||||
v := NewDefaultVisitor()
|
||||
if err = Walk(tree, v); err != nil {
|
||||
return Sections{}, err
|
||||
}
|
||||
|
||||
return v.Sections, nil
|
||||
}
|
||||
|
||||
// ParseBytes will parse the given bytes and return the parsed sections.
|
||||
func ParseBytes(b []byte) (Sections, error) {
|
||||
tree, err := ParseASTBytes(b)
|
||||
if err != nil {
|
||||
return Sections{}, err
|
||||
}
|
||||
|
||||
v := NewDefaultVisitor()
|
||||
if err = Walk(tree, v); err != nil {
|
||||
return Sections{}, err
|
||||
}
|
||||
|
||||
return v.Sections, nil
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
)
|
||||
|
||||
const (
|
||||
// ErrCodeUnableToReadFile is used when a file is failed to be
|
||||
// opened or read from.
|
||||
ErrCodeUnableToReadFile = "FailedRead"
|
||||
)
|
||||
|
||||
// TokenType represents the various different tokens types
|
||||
type TokenType int
|
||||
|
||||
func (t TokenType) String() string {
|
||||
switch t {
|
||||
case TokenNone:
|
||||
return "none"
|
||||
case TokenLit:
|
||||
return "literal"
|
||||
case TokenSep:
|
||||
return "sep"
|
||||
case TokenOp:
|
||||
return "op"
|
||||
case TokenWS:
|
||||
return "ws"
|
||||
case TokenNL:
|
||||
return "newline"
|
||||
case TokenComment:
|
||||
return "comment"
|
||||
case TokenComma:
|
||||
return "comma"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// TokenType enums
|
||||
const (
|
||||
TokenNone = TokenType(iota)
|
||||
TokenLit
|
||||
TokenSep
|
||||
TokenComma
|
||||
TokenOp
|
||||
TokenWS
|
||||
TokenNL
|
||||
TokenComment
|
||||
)
|
||||
|
||||
type iniLexer struct{}
|
||||
|
||||
// Tokenize will return a list of tokens during lexical analysis of the
|
||||
// io.Reader.
|
||||
func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) {
|
||||
b, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, awserr.New(ErrCodeUnableToReadFile, "unable to read file", err)
|
||||
}
|
||||
|
||||
return l.tokenize(b)
|
||||
}
|
||||
|
||||
func (l *iniLexer) tokenize(b []byte) ([]Token, error) {
|
||||
runes := bytes.Runes(b)
|
||||
var err error
|
||||
n := 0
|
||||
tokenAmount := countTokens(runes)
|
||||
tokens := make([]Token, tokenAmount)
|
||||
count := 0
|
||||
|
||||
for len(runes) > 0 && count < tokenAmount {
|
||||
switch {
|
||||
case isWhitespace(runes[0]):
|
||||
tokens[count], n, err = newWSToken(runes)
|
||||
case isComma(runes[0]):
|
||||
tokens[count], n = newCommaToken(), 1
|
||||
case isComment(runes):
|
||||
tokens[count], n, err = newCommentToken(runes)
|
||||
case isNewline(runes):
|
||||
tokens[count], n, err = newNewlineToken(runes)
|
||||
case isSep(runes):
|
||||
tokens[count], n, err = newSepToken(runes)
|
||||
case isOp(runes):
|
||||
tokens[count], n, err = newOpToken(runes)
|
||||
default:
|
||||
tokens[count], n, err = newLitToken(runes)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
count++
|
||||
|
||||
runes = runes[n:]
|
||||
}
|
||||
|
||||
return tokens[:count], nil
|
||||
}
|
||||
|
||||
func countTokens(runes []rune) int {
|
||||
count, n := 0, 0
|
||||
var err error
|
||||
|
||||
for len(runes) > 0 {
|
||||
switch {
|
||||
case isWhitespace(runes[0]):
|
||||
_, n, err = newWSToken(runes)
|
||||
case isComma(runes[0]):
|
||||
_, n = newCommaToken(), 1
|
||||
case isComment(runes):
|
||||
_, n, err = newCommentToken(runes)
|
||||
case isNewline(runes):
|
||||
_, n, err = newNewlineToken(runes)
|
||||
case isSep(runes):
|
||||
_, n, err = newSepToken(runes)
|
||||
case isOp(runes):
|
||||
_, n, err = newOpToken(runes)
|
||||
default:
|
||||
_, n, err = newLitToken(runes)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
count++
|
||||
runes = runes[n:]
|
||||
}
|
||||
|
||||
return count + 1
|
||||
}
|
||||
|
||||
// Token indicates a metadata about a given value.
|
||||
type Token struct {
|
||||
t TokenType
|
||||
ValueType ValueType
|
||||
base int
|
||||
raw []rune
|
||||
}
|
||||
|
||||
var emptyValue = Value{}
|
||||
|
||||
func newToken(t TokenType, raw []rune, v ValueType) Token {
|
||||
return Token{
|
||||
t: t,
|
||||
raw: raw,
|
||||
ValueType: v,
|
||||
}
|
||||
}
|
||||
|
||||
// Raw return the raw runes that were consumed
|
||||
func (tok Token) Raw() []rune {
|
||||
return tok.raw
|
||||
}
|
||||
|
||||
// Type returns the token type
|
||||
func (tok Token) Type() TokenType {
|
||||
return tok.t
|
||||
}
|
|
@ -0,0 +1,347 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
// State enums for the parse table
|
||||
const (
|
||||
InvalidState = iota
|
||||
// stmt -> value stmt'
|
||||
StatementState
|
||||
// stmt' -> MarkComplete | op stmt
|
||||
StatementPrimeState
|
||||
// value -> number | string | boolean | quoted_string
|
||||
ValueState
|
||||
// section -> [ section'
|
||||
OpenScopeState
|
||||
// section' -> value section_close
|
||||
SectionState
|
||||
// section_close -> ]
|
||||
CloseScopeState
|
||||
// SkipState will skip (NL WS)+
|
||||
SkipState
|
||||
// SkipTokenState will skip any token and push the previous
|
||||
// state onto the stack.
|
||||
SkipTokenState
|
||||
// comment -> # comment' | ; comment'
|
||||
// comment' -> MarkComplete | value
|
||||
CommentState
|
||||
// MarkComplete state will complete statements and move that
|
||||
// to the completed AST list
|
||||
MarkCompleteState
|
||||
// TerminalState signifies that the tokens have been fully parsed
|
||||
TerminalState
|
||||
)
|
||||
|
||||
// parseTable is a state machine to dictate the grammar above.
|
||||
var parseTable = map[ASTKind]map[TokenType]int{
|
||||
ASTKindStart: map[TokenType]int{
|
||||
TokenLit: StatementState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipTokenState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: TerminalState,
|
||||
},
|
||||
ASTKindCommentStatement: map[TokenType]int{
|
||||
TokenLit: StatementState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipTokenState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: MarkCompleteState,
|
||||
},
|
||||
ASTKindExpr: map[TokenType]int{
|
||||
TokenOp: StatementPrimeState,
|
||||
TokenLit: ValueState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenWS: ValueState,
|
||||
TokenNL: SkipState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: MarkCompleteState,
|
||||
},
|
||||
ASTKindEqualExpr: map[TokenType]int{
|
||||
TokenLit: ValueState,
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipState,
|
||||
},
|
||||
ASTKindStatement: map[TokenType]int{
|
||||
TokenLit: SectionState,
|
||||
TokenSep: CloseScopeState,
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipTokenState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: MarkCompleteState,
|
||||
},
|
||||
ASTKindExprStatement: map[TokenType]int{
|
||||
TokenLit: ValueState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenOp: ValueState,
|
||||
TokenWS: ValueState,
|
||||
TokenNL: MarkCompleteState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: TerminalState,
|
||||
TokenComma: SkipState,
|
||||
},
|
||||
ASTKindSectionStatement: map[TokenType]int{
|
||||
TokenLit: SectionState,
|
||||
TokenOp: SectionState,
|
||||
TokenSep: CloseScopeState,
|
||||
TokenWS: SectionState,
|
||||
TokenNL: SkipTokenState,
|
||||
},
|
||||
ASTKindCompletedSectionStatement: map[TokenType]int{
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipTokenState,
|
||||
TokenLit: StatementState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: MarkCompleteState,
|
||||
},
|
||||
ASTKindSkipStatement: map[TokenType]int{
|
||||
TokenLit: StatementState,
|
||||
TokenSep: OpenScopeState,
|
||||
TokenWS: SkipTokenState,
|
||||
TokenNL: SkipTokenState,
|
||||
TokenComment: CommentState,
|
||||
TokenNone: TerminalState,
|
||||
},
|
||||
}
|
||||
|
||||
// ParseAST will parse input from an io.Reader using
|
||||
// an LL(1) parser.
|
||||
func ParseAST(r io.Reader) ([]AST, error) {
|
||||
lexer := iniLexer{}
|
||||
tokens, err := lexer.Tokenize(r)
|
||||
if err != nil {
|
||||
return []AST{}, err
|
||||
}
|
||||
|
||||
return parse(tokens)
|
||||
}
|
||||
|
||||
// ParseASTBytes will parse input from a byte slice using
|
||||
// an LL(1) parser.
|
||||
func ParseASTBytes(b []byte) ([]AST, error) {
|
||||
lexer := iniLexer{}
|
||||
tokens, err := lexer.tokenize(b)
|
||||
if err != nil {
|
||||
return []AST{}, err
|
||||
}
|
||||
|
||||
return parse(tokens)
|
||||
}
|
||||
|
||||
func parse(tokens []Token) ([]AST, error) {
|
||||
start := Start
|
||||
stack := newParseStack(3, len(tokens))
|
||||
|
||||
stack.Push(start)
|
||||
s := newSkipper()
|
||||
|
||||
loop:
|
||||
for stack.Len() > 0 {
|
||||
k := stack.Pop()
|
||||
|
||||
var tok Token
|
||||
if len(tokens) == 0 {
|
||||
// this occurs when all the tokens have been processed
|
||||
// but reduction of what's left on the stack needs to
|
||||
// occur.
|
||||
tok = emptyToken
|
||||
} else {
|
||||
tok = tokens[0]
|
||||
}
|
||||
|
||||
step := parseTable[k.Kind][tok.Type()]
|
||||
if s.ShouldSkip(tok) {
|
||||
// being in a skip state with no tokens will break out of
|
||||
// the parse loop since there is nothing left to process.
|
||||
if len(tokens) == 0 {
|
||||
break loop
|
||||
}
|
||||
|
||||
step = SkipTokenState
|
||||
}
|
||||
|
||||
switch step {
|
||||
case TerminalState:
|
||||
// Finished parsing. Push what should be the last
|
||||
// statement to the stack. If there is anything left
|
||||
// on the stack, an error in parsing has occurred.
|
||||
if k.Kind != ASTKindStart {
|
||||
stack.MarkComplete(k)
|
||||
}
|
||||
break loop
|
||||
case SkipTokenState:
|
||||
// When skipping a token, the previous state was popped off the stack.
|
||||
// To maintain the correct state, the previous state will be pushed
|
||||
// onto the stack.
|
||||
stack.Push(k)
|
||||
case StatementState:
|
||||
if k.Kind != ASTKindStart {
|
||||
stack.MarkComplete(k)
|
||||
}
|
||||
expr := newExpression(tok)
|
||||
stack.Push(expr)
|
||||
case StatementPrimeState:
|
||||
if tok.Type() != TokenOp {
|
||||
stack.MarkComplete(k)
|
||||
continue
|
||||
}
|
||||
|
||||
if k.Kind != ASTKindExpr {
|
||||
return nil, NewParseError(
|
||||
fmt.Sprintf("invalid expression: expected Expr type, but found %T type", k),
|
||||
)
|
||||
}
|
||||
|
||||
k = trimSpaces(k)
|
||||
expr := newEqualExpr(k, tok)
|
||||
stack.Push(expr)
|
||||
case ValueState:
|
||||
// ValueState requires the previous state to either be an equal expression
|
||||
// or an expression statement.
|
||||
//
|
||||
// This grammar occurs when the RHS is a number, word, or quoted string.
|
||||
// equal_expr -> lit op equal_expr'
|
||||
// equal_expr' -> number | string | quoted_string
|
||||
// quoted_string -> " quoted_string'
|
||||
// quoted_string' -> string quoted_string_end
|
||||
// quoted_string_end -> "
|
||||
//
|
||||
// otherwise
|
||||
// expr_stmt -> equal_expr (expr_stmt')*
|
||||
// expr_stmt' -> ws S | op S | MarkComplete
|
||||
// S -> equal_expr' expr_stmt'
|
||||
switch k.Kind {
|
||||
case ASTKindEqualExpr:
|
||||
// assiging a value to some key
|
||||
k.AppendChild(newExpression(tok))
|
||||
stack.Push(newExprStatement(k))
|
||||
case ASTKindExpr:
|
||||
k.Root.raw = append(k.Root.raw, tok.Raw()...)
|
||||
stack.Push(k)
|
||||
case ASTKindExprStatement:
|
||||
root := k.GetRoot()
|
||||
children := root.GetChildren()
|
||||
if len(children) == 0 {
|
||||
return nil, NewParseError(
|
||||
fmt.Sprintf("invalid expression: AST contains no children %s", k.Kind),
|
||||
)
|
||||
}
|
||||
|
||||
rhs := children[len(children)-1]
|
||||
|
||||
if rhs.Root.ValueType != QuotedStringType {
|
||||
rhs.Root.ValueType = StringType
|
||||
rhs.Root.raw = append(rhs.Root.raw, tok.Raw()...)
|
||||
|
||||
}
|
||||
|
||||
children[len(children)-1] = rhs
|
||||
k.SetChildren(children)
|
||||
|
||||
stack.Push(k)
|
||||
}
|
||||
case OpenScopeState:
|
||||
if !runeCompare(tok.Raw(), openBrace) {
|
||||
return nil, NewParseError("expected '['")
|
||||
}
|
||||
|
||||
stmt := newStatement()
|
||||
stack.Push(stmt)
|
||||
case CloseScopeState:
|
||||
if !runeCompare(tok.Raw(), closeBrace) {
|
||||
return nil, NewParseError("expected ']'")
|
||||
}
|
||||
|
||||
k = trimSpaces(k)
|
||||
stack.Push(newCompletedSectionStatement(k))
|
||||
case SectionState:
|
||||
var stmt AST
|
||||
|
||||
switch k.Kind {
|
||||
case ASTKindStatement:
|
||||
// If there are multiple literals inside of a scope declaration,
|
||||
// then the current token's raw value will be appended to the Name.
|
||||
//
|
||||
// This handles cases like [ profile default ]
|
||||
//
|
||||
// k will represent a SectionStatement with the children representing
|
||||
// the label of the section
|
||||
stmt = newSectionStatement(tok)
|
||||
case ASTKindSectionStatement:
|
||||
k.Root.raw = append(k.Root.raw, tok.Raw()...)
|
||||
stmt = k
|
||||
default:
|
||||
return nil, NewParseError(
|
||||
fmt.Sprintf("invalid statement: expected statement: %v", k.Kind),
|
||||
)
|
||||
}
|
||||
|
||||
stack.Push(stmt)
|
||||
case MarkCompleteState:
|
||||
if k.Kind != ASTKindStart {
|
||||
stack.MarkComplete(k)
|
||||
}
|
||||
|
||||
if stack.Len() == 0 {
|
||||
stack.Push(start)
|
||||
}
|
||||
case SkipState:
|
||||
stack.Push(newSkipStatement(k))
|
||||
s.Skip()
|
||||
case CommentState:
|
||||
if k.Kind == ASTKindStart {
|
||||
stack.Push(k)
|
||||
} else {
|
||||
stack.MarkComplete(k)
|
||||
}
|
||||
|
||||
stmt := newCommentStatement(tok)
|
||||
stack.Push(stmt)
|
||||
default:
|
||||
return nil, NewParseError(fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", k, tok))
|
||||
}
|
||||
|
||||
if len(tokens) > 0 {
|
||||
tokens = tokens[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// this occurs when a statement has not been completed
|
||||
if stack.top > 1 {
|
||||
return nil, NewParseError(fmt.Sprintf("incomplete expression: %v", stack.container))
|
||||
}
|
||||
|
||||
// returns a sublist which exludes the start symbol
|
||||
return stack.List(), nil
|
||||
}
|
||||
|
||||
// trimSpaces will trim spaces on the left and right hand side of
|
||||
// the literal.
|
||||
func trimSpaces(k AST) AST {
|
||||
// trim left hand side of spaces
|
||||
for i := 0; i < len(k.Root.raw); i++ {
|
||||
if !isWhitespace(k.Root.raw[i]) {
|
||||
break
|
||||
}
|
||||
|
||||
k.Root.raw = k.Root.raw[1:]
|
||||
i--
|
||||
}
|
||||
|
||||
// trim right hand side of spaces
|
||||
for i := len(k.Root.raw) - 1; i >= 0; i-- {
|
||||
if !isWhitespace(k.Root.raw[i]) {
|
||||
break
|
||||
}
|
||||
|
||||
k.Root.raw = k.Root.raw[:len(k.Root.raw)-1]
|
||||
}
|
||||
|
||||
return k
|
||||
}
|
|
@ -0,0 +1,324 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
runesTrue = []rune("true")
|
||||
runesFalse = []rune("false")
|
||||
)
|
||||
|
||||
var literalValues = [][]rune{
|
||||
runesTrue,
|
||||
runesFalse,
|
||||
}
|
||||
|
||||
func isBoolValue(b []rune) bool {
|
||||
for _, lv := range literalValues {
|
||||
if isLitValue(lv, b) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func isLitValue(want, have []rune) bool {
|
||||
if len(have) < len(want) {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := 0; i < len(want); i++ {
|
||||
if want[i] != have[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// isNumberValue will return whether not the leading characters in
|
||||
// a byte slice is a number. A number is delimited by whitespace or
|
||||
// the newline token.
|
||||
//
|
||||
// A number is defined to be in a binary, octal, decimal (int | float), hex format,
|
||||
// or in scientific notation.
|
||||
func isNumberValue(b []rune) bool {
|
||||
negativeIndex := 0
|
||||
helper := numberHelper{}
|
||||
needDigit := false
|
||||
|
||||
for i := 0; i < len(b); i++ {
|
||||
negativeIndex++
|
||||
|
||||
switch b[i] {
|
||||
case '-':
|
||||
if helper.IsNegative() || negativeIndex != 1 {
|
||||
return false
|
||||
}
|
||||
helper.Determine(b[i])
|
||||
needDigit = true
|
||||
continue
|
||||
case 'e', 'E':
|
||||
if err := helper.Determine(b[i]); err != nil {
|
||||
return false
|
||||
}
|
||||
negativeIndex = 0
|
||||
needDigit = true
|
||||
continue
|
||||
case 'b':
|
||||
if helper.numberFormat == hex {
|
||||
break
|
||||
}
|
||||
fallthrough
|
||||
case 'o', 'x':
|
||||
needDigit = true
|
||||
if i == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
fallthrough
|
||||
case '.':
|
||||
if err := helper.Determine(b[i]); err != nil {
|
||||
return false
|
||||
}
|
||||
needDigit = true
|
||||
continue
|
||||
}
|
||||
|
||||
if i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) {
|
||||
return !needDigit
|
||||
}
|
||||
|
||||
if !helper.CorrectByte(b[i]) {
|
||||
return false
|
||||
}
|
||||
needDigit = false
|
||||
}
|
||||
|
||||
return !needDigit
|
||||
}
|
||||
|
||||
func isValid(b []rune) (bool, int, error) {
|
||||
if len(b) == 0 {
|
||||
// TODO: should probably return an error
|
||||
return false, 0, nil
|
||||
}
|
||||
|
||||
return isValidRune(b[0]), 1, nil
|
||||
}
|
||||
|
||||
func isValidRune(r rune) bool {
|
||||
return r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\n'
|
||||
}
|
||||
|
||||
// ValueType is an enum that will signify what type
|
||||
// the Value is
|
||||
type ValueType int
|
||||
|
||||
func (v ValueType) String() string {
|
||||
switch v {
|
||||
case NoneType:
|
||||
return "NONE"
|
||||
case DecimalType:
|
||||
return "FLOAT"
|
||||
case IntegerType:
|
||||
return "INT"
|
||||
case StringType:
|
||||
return "STRING"
|
||||
case BoolType:
|
||||
return "BOOL"
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// ValueType enums
|
||||
const (
|
||||
NoneType = ValueType(iota)
|
||||
DecimalType
|
||||
IntegerType
|
||||
StringType
|
||||
QuotedStringType
|
||||
BoolType
|
||||
)
|
||||
|
||||
// Value is a union container
|
||||
type Value struct {
|
||||
Type ValueType
|
||||
raw []rune
|
||||
|
||||
integer int64
|
||||
decimal float64
|
||||
boolean bool
|
||||
str string
|
||||
}
|
||||
|
||||
func newValue(t ValueType, base int, raw []rune) (Value, error) {
|
||||
v := Value{
|
||||
Type: t,
|
||||
raw: raw,
|
||||
}
|
||||
var err error
|
||||
|
||||
switch t {
|
||||
case DecimalType:
|
||||
v.decimal, err = strconv.ParseFloat(string(raw), 64)
|
||||
case IntegerType:
|
||||
if base != 10 {
|
||||
raw = raw[2:]
|
||||
}
|
||||
|
||||
v.integer, err = strconv.ParseInt(string(raw), base, 64)
|
||||
case StringType:
|
||||
v.str = string(raw)
|
||||
case QuotedStringType:
|
||||
v.str = string(raw[1 : len(raw)-1])
|
||||
case BoolType:
|
||||
v.boolean = runeCompare(v.raw, runesTrue)
|
||||
}
|
||||
|
||||
// issue 2253
|
||||
//
|
||||
// if the value trying to be parsed is too large, then we will use
|
||||
// the 'StringType' and raw value instead.
|
||||
if nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange {
|
||||
v.Type = StringType
|
||||
v.str = string(raw)
|
||||
err = nil
|
||||
}
|
||||
|
||||
return v, err
|
||||
}
|
||||
|
||||
// Append will append values and change the type to a string
|
||||
// type.
|
||||
func (v *Value) Append(tok Token) {
|
||||
r := tok.Raw()
|
||||
if v.Type != QuotedStringType {
|
||||
v.Type = StringType
|
||||
r = tok.raw[1 : len(tok.raw)-1]
|
||||
}
|
||||
if tok.Type() != TokenLit {
|
||||
v.raw = append(v.raw, tok.Raw()...)
|
||||
} else {
|
||||
v.raw = append(v.raw, r...)
|
||||
}
|
||||
}
|
||||
|
||||
func (v Value) String() string {
|
||||
switch v.Type {
|
||||
case DecimalType:
|
||||
return fmt.Sprintf("decimal: %f", v.decimal)
|
||||
case IntegerType:
|
||||
return fmt.Sprintf("integer: %d", v.integer)
|
||||
case StringType:
|
||||
return fmt.Sprintf("string: %s", string(v.raw))
|
||||
case QuotedStringType:
|
||||
return fmt.Sprintf("quoted string: %s", string(v.raw))
|
||||
case BoolType:
|
||||
return fmt.Sprintf("bool: %t", v.boolean)
|
||||
default:
|
||||
return "union not set"
|
||||
}
|
||||
}
|
||||
|
||||
func newLitToken(b []rune) (Token, int, error) {
|
||||
n := 0
|
||||
var err error
|
||||
|
||||
token := Token{}
|
||||
if b[0] == '"' {
|
||||
n, err = getStringValue(b)
|
||||
if err != nil {
|
||||
return token, n, err
|
||||
}
|
||||
|
||||
token = newToken(TokenLit, b[:n], QuotedStringType)
|
||||
} else if isNumberValue(b) {
|
||||
var base int
|
||||
base, n, err = getNumericalValue(b)
|
||||
if err != nil {
|
||||
return token, 0, err
|
||||
}
|
||||
|
||||
value := b[:n]
|
||||
vType := IntegerType
|
||||
if contains(value, '.') || hasExponent(value) {
|
||||
vType = DecimalType
|
||||
}
|
||||
token = newToken(TokenLit, value, vType)
|
||||
token.base = base
|
||||
} else if isBoolValue(b) {
|
||||
n, err = getBoolValue(b)
|
||||
|
||||
token = newToken(TokenLit, b[:n], BoolType)
|
||||
} else {
|
||||
n, err = getValue(b)
|
||||
token = newToken(TokenLit, b[:n], StringType)
|
||||
}
|
||||
|
||||
return token, n, err
|
||||
}
|
||||
|
||||
// IntValue returns an integer value
|
||||
func (v Value) IntValue() int64 {
|
||||
return v.integer
|
||||
}
|
||||
|
||||
// FloatValue returns a float value
|
||||
func (v Value) FloatValue() float64 {
|
||||
return v.decimal
|
||||
}
|
||||
|
||||
// BoolValue returns a bool value
|
||||
func (v Value) BoolValue() bool {
|
||||
return v.boolean
|
||||
}
|
||||
|
||||
func isTrimmable(r rune) bool {
|
||||
switch r {
|
||||
case '\n', ' ':
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// StringValue returns the string value
|
||||
func (v Value) StringValue() string {
|
||||
switch v.Type {
|
||||
case StringType:
|
||||
return strings.TrimFunc(string(v.raw), isTrimmable)
|
||||
case QuotedStringType:
|
||||
// preserve all characters in the quotes
|
||||
return string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1]))
|
||||
default:
|
||||
return strings.TrimFunc(string(v.raw), isTrimmable)
|
||||
}
|
||||
}
|
||||
|
||||
func contains(runes []rune, c rune) bool {
|
||||
for i := 0; i < len(runes); i++ {
|
||||
if runes[i] == c {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func runeCompare(v1 []rune, v2 []rune) bool {
|
||||
if len(v1) != len(v2) {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := 0; i < len(v1); i++ {
|
||||
if v1[i] != v2[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package ini
|
||||
|
||||
func isNewline(b []rune) bool {
|
||||
if len(b) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
if b[0] == '\n' {
|
||||
return true
|
||||
}
|
||||
|
||||
if len(b) < 2 {
|
||||
return false
|
||||
}
|
||||
|
||||
return b[0] == '\r' && b[1] == '\n'
|
||||
}
|
||||
|
||||
func newNewlineToken(b []rune) (Token, int, error) {
|
||||
i := 1
|
||||
if b[0] == '\r' && isNewline(b[1:]) {
|
||||
i++
|
||||
}
|
||||
|
||||
if !isNewline([]rune(b[:i])) {
|
||||
return emptyToken, 0, NewParseError("invalid new line token")
|
||||
}
|
||||
|
||||
return newToken(TokenNL, b[:i], NoneType), i, nil
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
none = numberFormat(iota)
|
||||
binary
|
||||
octal
|
||||
decimal
|
||||
hex
|
||||
exponent
|
||||
)
|
||||
|
||||
type numberFormat int
|
||||
|
||||
// numberHelper is used to dictate what format a number is in
|
||||
// and what to do for negative values. Since -1e-4 is a valid
|
||||
// number, we cannot just simply check for duplicate negatives.
|
||||
type numberHelper struct {
|
||||
numberFormat numberFormat
|
||||
|
||||
negative bool
|
||||
negativeExponent bool
|
||||
}
|
||||
|
||||
func (b numberHelper) Exists() bool {
|
||||
return b.numberFormat != none
|
||||
}
|
||||
|
||||
func (b numberHelper) IsNegative() bool {
|
||||
return b.negative || b.negativeExponent
|
||||
}
|
||||
|
||||
func (b *numberHelper) Determine(c rune) error {
|
||||
if b.Exists() {
|
||||
return NewParseError(fmt.Sprintf("multiple number formats: 0%v", string(c)))
|
||||
}
|
||||
|
||||
switch c {
|
||||
case 'b':
|
||||
b.numberFormat = binary
|
||||
case 'o':
|
||||
b.numberFormat = octal
|
||||
case 'x':
|
||||
b.numberFormat = hex
|
||||
case 'e', 'E':
|
||||
b.numberFormat = exponent
|
||||
case '-':
|
||||
if b.numberFormat != exponent {
|
||||
b.negative = true
|
||||
} else {
|
||||
b.negativeExponent = true
|
||||
}
|
||||
case '.':
|
||||
b.numberFormat = decimal
|
||||
default:
|
||||
return NewParseError(fmt.Sprintf("invalid number character: %v", string(c)))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b numberHelper) CorrectByte(c rune) bool {
|
||||
switch {
|
||||
case b.numberFormat == binary:
|
||||
if !isBinaryByte(c) {
|
||||
return false
|
||||
}
|
||||
case b.numberFormat == octal:
|
||||
if !isOctalByte(c) {
|
||||
return false
|
||||
}
|
||||
case b.numberFormat == hex:
|
||||
if !isHexByte(c) {
|
||||
return false
|
||||
}
|
||||
case b.numberFormat == decimal:
|
||||
if !isDigit(c) {
|
||||
return false
|
||||
}
|
||||
case b.numberFormat == exponent:
|
||||
if !isDigit(c) {
|
||||
return false
|
||||
}
|
||||
case b.negativeExponent:
|
||||
if !isDigit(c) {
|
||||
return false
|
||||
}
|
||||
case b.negative:
|
||||
if !isDigit(c) {
|
||||
return false
|
||||
}
|
||||
default:
|
||||
if !isDigit(c) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (b numberHelper) Base() int {
|
||||
switch b.numberFormat {
|
||||
case binary:
|
||||
return 2
|
||||
case octal:
|
||||
return 8
|
||||
case hex:
|
||||
return 16
|
||||
default:
|
||||
return 10
|
||||
}
|
||||
}
|
||||
|
||||
func (b numberHelper) String() string {
|
||||
buf := bytes.Buffer{}
|
||||
i := 0
|
||||
|
||||
switch b.numberFormat {
|
||||
case binary:
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": binary format\n")
|
||||
case octal:
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": octal format\n")
|
||||
case hex:
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": hex format\n")
|
||||
case exponent:
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": exponent format\n")
|
||||
default:
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": integer format\n")
|
||||
}
|
||||
|
||||
if b.negative {
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": negative format\n")
|
||||
}
|
||||
|
||||
if b.negativeExponent {
|
||||
i++
|
||||
buf.WriteString(strconv.Itoa(i) + ": negative exponent format\n")
|
||||
}
|
||||
|
||||
return buf.String()
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var (
|
||||
equalOp = []rune("=")
|
||||
equalColonOp = []rune(":")
|
||||
)
|
||||
|
||||
func isOp(b []rune) bool {
|
||||
if len(b) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
switch b[0] {
|
||||
case '=':
|
||||
return true
|
||||
case ':':
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func newOpToken(b []rune) (Token, int, error) {
|
||||
tok := Token{}
|
||||
|
||||
switch b[0] {
|
||||
case '=':
|
||||
tok = newToken(TokenOp, equalOp, NoneType)
|
||||
case ':':
|
||||
tok = newToken(TokenOp, equalColonOp, NoneType)
|
||||
default:
|
||||
return tok, 0, NewParseError(fmt.Sprintf("unexpected op type, %v", b[0]))
|
||||
}
|
||||
return tok, 1, nil
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package ini
|
||||
|
||||
import "fmt"
|
||||
|
||||
const (
|
||||
// ErrCodeParseError is returned when a parsing error
|
||||
// has occurred.
|
||||
ErrCodeParseError = "INIParseError"
|
||||
)
|
||||
|
||||
// ParseError is an error which is returned during any part of
|
||||
// the parsing process.
|
||||
type ParseError struct {
|
||||
msg string
|
||||
}
|
||||
|
||||
// NewParseError will return a new ParseError where message
|
||||
// is the description of the error.
|
||||
func NewParseError(message string) *ParseError {
|
||||
return &ParseError{
|
||||
msg: message,
|
||||
}
|
||||
}
|
||||
|
||||
// Code will return the ErrCodeParseError
|
||||
func (err *ParseError) Code() string {
|
||||
return ErrCodeParseError
|
||||
}
|
||||
|
||||
// Message returns the error's message
|
||||
func (err *ParseError) Message() string {
|
||||
return err.msg
|
||||
}
|
||||
|
||||
// OrigError return nothing since there will never be any
|
||||
// original error.
|
||||
func (err *ParseError) OrigError() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (err *ParseError) Error() string {
|
||||
return fmt.Sprintf("%s: %s", err.Code(), err.Message())
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// ParseStack is a stack that contains a container, the stack portion,
|
||||
// and the list which is the list of ASTs that have been successfully
|
||||
// parsed.
|
||||
type ParseStack struct {
|
||||
top int
|
||||
container []AST
|
||||
list []AST
|
||||
index int
|
||||
}
|
||||
|
||||
func newParseStack(sizeContainer, sizeList int) ParseStack {
|
||||
return ParseStack{
|
||||
container: make([]AST, sizeContainer),
|
||||
list: make([]AST, sizeList),
|
||||
}
|
||||
}
|
||||
|
||||
// Pop will return and truncate the last container element.
|
||||
func (s *ParseStack) Pop() AST {
|
||||
s.top--
|
||||
return s.container[s.top]
|
||||
}
|
||||
|
||||
// Push will add the new AST to the container
|
||||
func (s *ParseStack) Push(ast AST) {
|
||||
s.container[s.top] = ast
|
||||
s.top++
|
||||
}
|
||||
|
||||
// MarkComplete will append the AST to the list of completed statements
|
||||
func (s *ParseStack) MarkComplete(ast AST) {
|
||||
s.list[s.index] = ast
|
||||
s.index++
|
||||
}
|
||||
|
||||
// List will return the completed statements
|
||||
func (s ParseStack) List() []AST {
|
||||
return s.list[:s.index]
|
||||
}
|
||||
|
||||
// Len will return the length of the container
|
||||
func (s *ParseStack) Len() int {
|
||||
return s.top
|
||||
}
|
||||
|
||||
func (s ParseStack) String() string {
|
||||
buf := bytes.Buffer{}
|
||||
for i, node := range s.list {
|
||||
buf.WriteString(fmt.Sprintf("%d: %v\n", i+1, node))
|
||||
}
|
||||
|
||||
return buf.String()
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var (
|
||||
emptyRunes = []rune{}
|
||||
)
|
||||
|
||||
func isSep(b []rune) bool {
|
||||
if len(b) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
switch b[0] {
|
||||
case '[', ']':
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
openBrace = []rune("[")
|
||||
closeBrace = []rune("]")
|
||||
)
|
||||
|
||||
func newSepToken(b []rune) (Token, int, error) {
|
||||
tok := Token{}
|
||||
|
||||
switch b[0] {
|
||||
case '[':
|
||||
tok = newToken(TokenSep, openBrace, NoneType)
|
||||
case ']':
|
||||
tok = newToken(TokenSep, closeBrace, NoneType)
|
||||
default:
|
||||
return tok, 0, NewParseError(fmt.Sprintf("unexpected sep type, %v", b[0]))
|
||||
}
|
||||
return tok, 1, nil
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package ini
|
||||
|
||||
// skipper is used to skip certain blocks of an ini file.
|
||||
// Currently skipper is used to skip nested blocks of ini
|
||||
// files. See example below
|
||||
//
|
||||
// [ foo ]
|
||||
// nested = ; this section will be skipped
|
||||
// a=b
|
||||
// c=d
|
||||
// bar=baz ; this will be included
|
||||
type skipper struct {
|
||||
shouldSkip bool
|
||||
TokenSet bool
|
||||
prevTok Token
|
||||
}
|
||||
|
||||
func newSkipper() skipper {
|
||||
return skipper{
|
||||
prevTok: emptyToken,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *skipper) ShouldSkip(tok Token) bool {
|
||||
if s.shouldSkip &&
|
||||
s.prevTok.Type() == TokenNL &&
|
||||
tok.Type() != TokenWS {
|
||||
|
||||
s.Continue()
|
||||
return false
|
||||
}
|
||||
s.prevTok = tok
|
||||
|
||||
return s.shouldSkip
|
||||
}
|
||||
|
||||
func (s *skipper) Skip() {
|
||||
s.shouldSkip = true
|
||||
s.prevTok = emptyToken
|
||||
}
|
||||
|
||||
func (s *skipper) Continue() {
|
||||
s.shouldSkip = false
|
||||
s.prevTok = emptyToken
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package ini
|
||||
|
||||
// Statement is an empty AST mostly used for transitioning states.
|
||||
func newStatement() AST {
|
||||
return newAST(ASTKindStatement, AST{})
|
||||
}
|
||||
|
||||
// SectionStatement represents a section AST
|
||||
func newSectionStatement(tok Token) AST {
|
||||
return newASTWithRootToken(ASTKindSectionStatement, tok)
|
||||
}
|
||||
|
||||
// ExprStatement represents a completed expression AST
|
||||
func newExprStatement(ast AST) AST {
|
||||
return newAST(ASTKindExprStatement, ast)
|
||||
}
|
||||
|
||||
// CommentStatement represents a comment in the ini defintion.
|
||||
//
|
||||
// grammar:
|
||||
// comment -> #comment' | ;comment'
|
||||
// comment' -> epsilon | value
|
||||
func newCommentStatement(tok Token) AST {
|
||||
return newAST(ASTKindCommentStatement, newExpression(tok))
|
||||
}
|
||||
|
||||
// CompletedSectionStatement represents a completed section
|
||||
func newCompletedSectionStatement(ast AST) AST {
|
||||
return newAST(ASTKindCompletedSectionStatement, ast)
|
||||
}
|
||||
|
||||
// SkipStatement is used to skip whole statements
|
||||
func newSkipStatement(ast AST) AST {
|
||||
return newAST(ASTKindSkipStatement, ast)
|
||||
}
|
|
@ -0,0 +1,284 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// getStringValue will return a quoted string and the amount
|
||||
// of bytes read
|
||||
//
|
||||
// an error will be returned if the string is not properly formatted
|
||||
func getStringValue(b []rune) (int, error) {
|
||||
if b[0] != '"' {
|
||||
return 0, NewParseError("strings must start with '\"'")
|
||||
}
|
||||
|
||||
endQuote := false
|
||||
i := 1
|
||||
|
||||
for ; i < len(b) && !endQuote; i++ {
|
||||
if escaped := isEscaped(b[:i], b[i]); b[i] == '"' && !escaped {
|
||||
endQuote = true
|
||||
break
|
||||
} else if escaped {
|
||||
/*c, err := getEscapedByte(b[i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
b[i-1] = c
|
||||
b = append(b[:i], b[i+1:]...)
|
||||
i--*/
|
||||
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if !endQuote {
|
||||
return 0, NewParseError("missing '\"' in string value")
|
||||
}
|
||||
|
||||
return i + 1, nil
|
||||
}
|
||||
|
||||
// getBoolValue will return a boolean and the amount
|
||||
// of bytes read
|
||||
//
|
||||
// an error will be returned if the boolean is not of a correct
|
||||
// value
|
||||
func getBoolValue(b []rune) (int, error) {
|
||||
if len(b) < 4 {
|
||||
return 0, NewParseError("invalid boolean value")
|
||||
}
|
||||
|
||||
n := 0
|
||||
for _, lv := range literalValues {
|
||||
if len(lv) > len(b) {
|
||||
continue
|
||||
}
|
||||
|
||||
if isLitValue(lv, b) {
|
||||
n = len(lv)
|
||||
}
|
||||
}
|
||||
|
||||
if n == 0 {
|
||||
return 0, NewParseError("invalid boolean value")
|
||||
}
|
||||
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// getNumericalValue will return a numerical string, the amount
|
||||
// of bytes read, and the base of the number
|
||||
//
|
||||
// an error will be returned if the number is not of a correct
|
||||
// value
|
||||
func getNumericalValue(b []rune) (int, int, error) {
|
||||
if !isDigit(b[0]) {
|
||||
return 0, 0, NewParseError("invalid digit value")
|
||||
}
|
||||
|
||||
i := 0
|
||||
helper := numberHelper{}
|
||||
|
||||
loop:
|
||||
for negativeIndex := 0; i < len(b); i++ {
|
||||
negativeIndex++
|
||||
|
||||
if !isDigit(b[i]) {
|
||||
switch b[i] {
|
||||
case '-':
|
||||
if helper.IsNegative() || negativeIndex != 1 {
|
||||
return 0, 0, NewParseError("parse error '-'")
|
||||
}
|
||||
|
||||
n := getNegativeNumber(b[i:])
|
||||
i += (n - 1)
|
||||
helper.Determine(b[i])
|
||||
continue
|
||||
case '.':
|
||||
if err := helper.Determine(b[i]); err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
case 'e', 'E':
|
||||
if err := helper.Determine(b[i]); err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
negativeIndex = 0
|
||||
case 'b':
|
||||
if helper.numberFormat == hex {
|
||||
break
|
||||
}
|
||||
fallthrough
|
||||
case 'o', 'x':
|
||||
if i == 0 && b[i] != '0' {
|
||||
return 0, 0, NewParseError("incorrect base format, expected leading '0'")
|
||||
}
|
||||
|
||||
if i != 1 {
|
||||
return 0, 0, NewParseError(fmt.Sprintf("incorrect base format found %s at %d index", string(b[i]), i))
|
||||
}
|
||||
|
||||
if err := helper.Determine(b[i]); err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
default:
|
||||
if isWhitespace(b[i]) {
|
||||
break loop
|
||||
}
|
||||
|
||||
if isNewline(b[i:]) {
|
||||
break loop
|
||||
}
|
||||
|
||||
if !(helper.numberFormat == hex && isHexByte(b[i])) {
|
||||
if i+2 < len(b) && !isNewline(b[i:i+2]) {
|
||||
return 0, 0, NewParseError("invalid numerical character")
|
||||
} else if !isNewline([]rune{b[i]}) {
|
||||
return 0, 0, NewParseError("invalid numerical character")
|
||||
}
|
||||
|
||||
break loop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return helper.Base(), i, nil
|
||||
}
|
||||
|
||||
// isDigit will return whether or not something is an integer
|
||||
func isDigit(b rune) bool {
|
||||
return b >= '0' && b <= '9'
|
||||
}
|
||||
|
||||
func hasExponent(v []rune) bool {
|
||||
return contains(v, 'e') || contains(v, 'E')
|
||||
}
|
||||
|
||||
func isBinaryByte(b rune) bool {
|
||||
switch b {
|
||||
case '0', '1':
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func isOctalByte(b rune) bool {
|
||||
switch b {
|
||||
case '0', '1', '2', '3', '4', '5', '6', '7':
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func isHexByte(b rune) bool {
|
||||
if isDigit(b) {
|
||||
return true
|
||||
}
|
||||
return (b >= 'A' && b <= 'F') ||
|
||||
(b >= 'a' && b <= 'f')
|
||||
}
|
||||
|
||||
func getValue(b []rune) (int, error) {
|
||||
i := 0
|
||||
|
||||
for i < len(b) {
|
||||
if isNewline(b[i:]) {
|
||||
break
|
||||
}
|
||||
|
||||
if isOp(b[i:]) {
|
||||
break
|
||||
}
|
||||
|
||||
valid, n, err := isValid(b[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if !valid {
|
||||
break
|
||||
}
|
||||
|
||||
i += n
|
||||
}
|
||||
|
||||
return i, nil
|
||||
}
|
||||
|
||||
// getNegativeNumber will return a negative number from a
|
||||
// byte slice. This will iterate through all characters until
|
||||
// a non-digit has been found.
|
||||
func getNegativeNumber(b []rune) int {
|
||||
if b[0] != '-' {
|
||||
return 0
|
||||
}
|
||||
|
||||
i := 1
|
||||
for ; i < len(b); i++ {
|
||||
if !isDigit(b[i]) {
|
||||
return i
|
||||
}
|
||||
}
|
||||
|
||||
return i
|
||||
}
|
||||
|
||||
// isEscaped will return whether or not the character is an escaped
|
||||
// character.
|
||||
func isEscaped(value []rune, b rune) bool {
|
||||
if len(value) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
switch b {
|
||||
case '\'': // single quote
|
||||
case '"': // quote
|
||||
case 'n': // newline
|
||||
case 't': // tab
|
||||
case '\\': // backslash
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
||||
return value[len(value)-1] == '\\'
|
||||
}
|
||||
|
||||
func getEscapedByte(b rune) (rune, error) {
|
||||
switch b {
|
||||
case '\'': // single quote
|
||||
return '\'', nil
|
||||
case '"': // quote
|
||||
return '"', nil
|
||||
case 'n': // newline
|
||||
return '\n', nil
|
||||
case 't': // table
|
||||
return '\t', nil
|
||||
case '\\': // backslash
|
||||
return '\\', nil
|
||||
default:
|
||||
return b, NewParseError(fmt.Sprintf("invalid escaped character %c", b))
|
||||
}
|
||||
}
|
||||
|
||||
func removeEscapedCharacters(b []rune) []rune {
|
||||
for i := 0; i < len(b); i++ {
|
||||
if isEscaped(b[:i], b[i]) {
|
||||
c, err := getEscapedByte(b[i])
|
||||
if err != nil {
|
||||
return b
|
||||
}
|
||||
|
||||
b[i-1] = c
|
||||
b = append(b[:i], b[i+1:]...)
|
||||
i--
|
||||
}
|
||||
}
|
||||
|
||||
return b
|
||||
}
|
|
@ -0,0 +1,166 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
|
||||
// Visitor is an interface used by walkers that will
|
||||
// traverse an array of ASTs.
|
||||
type Visitor interface {
|
||||
VisitExpr(AST) error
|
||||
VisitStatement(AST) error
|
||||
}
|
||||
|
||||
// DefaultVisitor is used to visit statements and expressions
|
||||
// and ensure that they are both of the correct format.
|
||||
// In addition, upon visiting this will build sections and populate
|
||||
// the Sections field which can be used to retrieve profile
|
||||
// configuration.
|
||||
type DefaultVisitor struct {
|
||||
scope string
|
||||
Sections Sections
|
||||
}
|
||||
|
||||
// NewDefaultVisitor return a DefaultVisitor
|
||||
func NewDefaultVisitor() *DefaultVisitor {
|
||||
return &DefaultVisitor{
|
||||
Sections: Sections{
|
||||
container: map[string]Section{},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// VisitExpr visits expressions...
|
||||
func (v *DefaultVisitor) VisitExpr(expr AST) error {
|
||||
t := v.Sections.container[v.scope]
|
||||
if t.values == nil {
|
||||
t.values = values{}
|
||||
}
|
||||
|
||||
switch expr.Kind {
|
||||
case ASTKindExprStatement:
|
||||
opExpr := expr.GetRoot()
|
||||
switch opExpr.Kind {
|
||||
case ASTKindEqualExpr:
|
||||
children := opExpr.GetChildren()
|
||||
if len(children) <= 1 {
|
||||
return NewParseError("unexpected token type")
|
||||
}
|
||||
|
||||
rhs := children[1]
|
||||
|
||||
if rhs.Root.Type() != TokenLit {
|
||||
return NewParseError("unexpected token type")
|
||||
}
|
||||
|
||||
key := EqualExprKey(opExpr)
|
||||
v, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t.values[key] = v
|
||||
default:
|
||||
return NewParseError(fmt.Sprintf("unsupported expression %v", expr))
|
||||
}
|
||||
default:
|
||||
return NewParseError(fmt.Sprintf("unsupported expression %v", expr))
|
||||
}
|
||||
|
||||
v.Sections.container[v.scope] = t
|
||||
return nil
|
||||
}
|
||||
|
||||
// VisitStatement visits statements...
|
||||
func (v *DefaultVisitor) VisitStatement(stmt AST) error {
|
||||
switch stmt.Kind {
|
||||
case ASTKindCompletedSectionStatement:
|
||||
child := stmt.GetRoot()
|
||||
if child.Kind != ASTKindSectionStatement {
|
||||
return NewParseError(fmt.Sprintf("unsupported child statement: %T", child))
|
||||
}
|
||||
|
||||
name := string(child.Root.Raw())
|
||||
v.Sections.container[name] = Section{}
|
||||
v.scope = name
|
||||
default:
|
||||
return NewParseError(fmt.Sprintf("unsupported statement: %s", stmt.Kind))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Sections is a map of Section structures that represent
|
||||
// a configuration.
|
||||
type Sections struct {
|
||||
container map[string]Section
|
||||
}
|
||||
|
||||
// GetSection will return section p. If section p does not exist,
|
||||
// false will be returned in the second parameter.
|
||||
func (t Sections) GetSection(p string) (Section, bool) {
|
||||
v, ok := t.container[p]
|
||||
return v, ok
|
||||
}
|
||||
|
||||
// values represents a map of union values.
|
||||
type values map[string]Value
|
||||
|
||||
// List will return a list of all sections that were successfully
|
||||
// parsed.
|
||||
func (t Sections) List() []string {
|
||||
keys := make([]string, len(t.container))
|
||||
i := 0
|
||||
for k := range t.container {
|
||||
keys[i] = k
|
||||
i++
|
||||
}
|
||||
|
||||
sort.Strings(keys)
|
||||
return keys
|
||||
}
|
||||
|
||||
// Section contains a name and values. This represent
|
||||
// a sectioned entry in a configuration file.
|
||||
type Section struct {
|
||||
Name string
|
||||
values values
|
||||
}
|
||||
|
||||
// Has will return whether or not an entry exists in a given section
|
||||
func (t Section) Has(k string) bool {
|
||||
_, ok := t.values[k]
|
||||
return ok
|
||||
}
|
||||
|
||||
// ValueType will returned what type the union is set to. If
|
||||
// k was not found, the NoneType will be returned.
|
||||
func (t Section) ValueType(k string) (ValueType, bool) {
|
||||
v, ok := t.values[k]
|
||||
return v.Type, ok
|
||||
}
|
||||
|
||||
// Bool returns a bool value at k
|
||||
func (t Section) Bool(k string) bool {
|
||||
return t.values[k].BoolValue()
|
||||
}
|
||||
|
||||
// Int returns an integer value at k
|
||||
func (t Section) Int(k string) int64 {
|
||||
return t.values[k].IntValue()
|
||||
}
|
||||
|
||||
// Float64 returns a float value at k
|
||||
func (t Section) Float64(k string) float64 {
|
||||
return t.values[k].FloatValue()
|
||||
}
|
||||
|
||||
// String returns the string value at k
|
||||
func (t Section) String(k string) string {
|
||||
_, ok := t.values[k]
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
return t.values[k].StringValue()
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package ini
|
||||
|
||||
// Walk will traverse the AST using the v, the Visitor.
|
||||
func Walk(tree []AST, v Visitor) error {
|
||||
for _, node := range tree {
|
||||
switch node.Kind {
|
||||
case ASTKindExpr,
|
||||
ASTKindExprStatement:
|
||||
|
||||
if err := v.VisitExpr(node); err != nil {
|
||||
return err
|
||||
}
|
||||
case ASTKindStatement,
|
||||
ASTKindCompletedSectionStatement,
|
||||
ASTKindNestedSectionStatement,
|
||||
ASTKindCompletedNestedSectionStatement:
|
||||
|
||||
if err := v.VisitStatement(node); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package ini
|
||||
|
||||
import (
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// isWhitespace will return whether or not the character is
|
||||
// a whitespace character.
|
||||
//
|
||||
// Whitespace is defined as a space or tab.
|
||||
func isWhitespace(c rune) bool {
|
||||
return unicode.IsSpace(c) && c != '\n' && c != '\r'
|
||||
}
|
||||
|
||||
func newWSToken(b []rune) (Token, int, error) {
|
||||
i := 0
|
||||
for ; i < len(b); i++ {
|
||||
if !isWhitespace(b[i]) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return newToken(TokenWS, b[:i], NoneType), i, nil
|
||||
}
|
|
@ -1,7 +1,54 @@
|
|||
package protocol
|
||||
|
||||
// ValidHostLabel returns if the label is a valid RFC 1123 Section 2.1 domain
|
||||
// host label name.
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
)
|
||||
|
||||
// ValidateEndpointHostHandler is a request handler that will validate the
|
||||
// request endpoint's hosts is a valid RFC 3986 host.
|
||||
var ValidateEndpointHostHandler = request.NamedHandler{
|
||||
Name: "awssdk.protocol.ValidateEndpointHostHandler",
|
||||
Fn: func(r *request.Request) {
|
||||
err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host)
|
||||
if err != nil {
|
||||
r.Error = err
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
// ValidateEndpointHost validates that the host string passed in is a valid RFC
|
||||
// 3986 host. Returns error if the host is not valid.
|
||||
func ValidateEndpointHost(opName, host string) error {
|
||||
paramErrs := request.ErrInvalidParams{Context: opName}
|
||||
labels := strings.Split(host, ".")
|
||||
|
||||
for i, label := range labels {
|
||||
if i == len(labels)-1 && len(label) == 0 {
|
||||
// Allow trailing dot for FQDN hosts.
|
||||
continue
|
||||
}
|
||||
|
||||
if !ValidHostLabel(label) {
|
||||
paramErrs.Add(request.NewErrParamFormat(
|
||||
"endpoint host label", "[a-zA-Z0-9-]{1,63}", label))
|
||||
}
|
||||
}
|
||||
|
||||
if len(host) > 255 {
|
||||
paramErrs.Add(request.NewErrParamMaxLen(
|
||||
"endpoint host", 255, host,
|
||||
))
|
||||
}
|
||||
|
||||
if paramErrs.Len() > 0 {
|
||||
return paramErrs
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidHostLabel returns if the label is a valid RFC 3986 host label.
|
||||
func ValidHostLabel(label string) bool {
|
||||
if l := len(label); l == 0 || l > 63 {
|
||||
return false
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
package protocol
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
)
|
||||
|
||||
// HostPrefixHandlerName is the handler name for the host prefix request
|
||||
// handler.
|
||||
const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler"
|
||||
|
||||
// NewHostPrefixHandler constructs a build handler
|
||||
func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler {
|
||||
builder := HostPrefixBuilder{
|
||||
Prefix: prefix,
|
||||
LabelsFn: labelsFn,
|
||||
}
|
||||
|
||||
return request.NamedHandler{
|
||||
Name: HostPrefixHandlerName,
|
||||
Fn: builder.Build,
|
||||
}
|
||||
}
|
||||
|
||||
// HostPrefixBuilder provides the request handler to expand and prepend
|
||||
// the host prefix into the operation's request endpoint host.
|
||||
type HostPrefixBuilder struct {
|
||||
Prefix string
|
||||
LabelsFn func() map[string]string
|
||||
}
|
||||
|
||||
// Build updates the passed in Request with the HostPrefix template expanded.
|
||||
func (h HostPrefixBuilder) Build(r *request.Request) {
|
||||
if aws.BoolValue(r.Config.DisableEndpointHostPrefix) {
|
||||
return
|
||||
}
|
||||
|
||||
var labels map[string]string
|
||||
if h.LabelsFn != nil {
|
||||
labels = h.LabelsFn()
|
||||
}
|
||||
|
||||
prefix := h.Prefix
|
||||
for name, value := range labels {
|
||||
prefix = strings.Replace(prefix, "{"+name+"}", value, -1)
|
||||
}
|
||||
|
||||
r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host
|
||||
if len(r.HTTPRequest.Host) > 0 {
|
||||
r.HTTPRequest.Host = prefix + r.HTTPRequest.Host
|
||||
}
|
||||
}
|
|
@ -87,7 +87,7 @@ func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag refle
|
|||
}
|
||||
}
|
||||
|
||||
// buildStruct adds a struct and its fields to the current XMLNode. All fields any any nested
|
||||
// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested
|
||||
// types are converted to XMLNodes also.
|
||||
func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {
|
||||
if !value.IsValid() {
|
||||
|
|
|
@ -52,8 +52,7 @@ func (c *ACM) AddTagsToCertificateRequest(input *AddTagsToCertificateInput) (req
|
|||
|
||||
output = &AddTagsToCertificateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -160,8 +159,7 @@ func (c *ACM) DeleteCertificateRequest(input *DeleteCertificateInput) (req *requ
|
|||
|
||||
output = &DeleteCertificateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -878,8 +876,7 @@ func (c *ACM) RemoveTagsFromCertificateRequest(input *RemoveTagsFromCertificateI
|
|||
|
||||
output = &RemoveTagsFromCertificateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1070,8 +1067,7 @@ func (c *ACM) ResendValidationEmailRequest(input *ResendValidationEmailInput) (r
|
|||
|
||||
output = &ResendValidationEmailOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1171,8 +1167,7 @@ func (c *ACM) UpdateCertificateOptionsRequest(input *UpdateCertificateOptionsInp
|
|||
|
||||
output = &UpdateCertificateOptionsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1979,7 +1974,7 @@ type ExportCertificateInput struct {
|
|||
// Passphrase is automatically base64 encoded/decoded by the SDK.
|
||||
//
|
||||
// Passphrase is a required field
|
||||
Passphrase []byte `min:"4" type:"blob" required:"true"`
|
||||
Passphrase []byte `min:"4" type:"blob" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -2037,7 +2032,7 @@ type ExportCertificateOutput struct {
|
|||
CertificateChain *string `min:"1" type:"string"`
|
||||
|
||||
// The PEM-encoded private key associated with the public key in the certificate.
|
||||
PrivateKey *string `min:"1" type:"string"`
|
||||
PrivateKey *string `min:"1" type:"string" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -2271,7 +2266,7 @@ type ImportCertificateInput struct {
|
|||
// PrivateKey is automatically base64 encoded/decoded by the SDK.
|
||||
//
|
||||
// PrivateKey is a required field
|
||||
PrivateKey []byte `min:"1" type:"blob" required:"true"`
|
||||
PrivateKey []byte `min:"1" type:"blob" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
|
|
@ -246,8 +246,7 @@ func (c *ACMPCA) DeleteCertificateAuthorityRequest(input *DeleteCertificateAutho
|
|||
|
||||
output = &DeleteCertificateAuthorityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -833,8 +832,7 @@ func (c *ACMPCA) ImportCertificateAuthorityCertificateRequest(input *ImportCerti
|
|||
|
||||
output = &ImportCertificateAuthorityCertificateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1223,8 +1221,7 @@ func (c *ACMPCA) RestoreCertificateAuthorityRequest(input *RestoreCertificateAut
|
|||
|
||||
output = &RestoreCertificateAuthorityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1324,8 +1321,7 @@ func (c *ACMPCA) RevokeCertificateRequest(input *RevokeCertificateInput) (req *r
|
|||
|
||||
output = &RevokeCertificateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1430,8 +1426,7 @@ func (c *ACMPCA) TagCertificateAuthorityRequest(input *TagCertificateAuthorityIn
|
|||
|
||||
output = &TagCertificateAuthorityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1534,8 +1529,7 @@ func (c *ACMPCA) UntagCertificateAuthorityRequest(input *UntagCertificateAuthori
|
|||
|
||||
output = &UntagCertificateAuthorityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1631,8 +1625,7 @@ func (c *ACMPCA) UpdateCertificateAuthorityRequest(input *UpdateCertificateAutho
|
|||
|
||||
output = &UpdateCertificateAuthorityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opDeleteScalingPolicy = "DeleteScalingPolicy"
|
||||
|
@ -50,6 +52,7 @@ func (c *ApplicationAutoScaling) DeleteScalingPolicyRequest(input *DeleteScaling
|
|||
|
||||
output = &DeleteScalingPolicyOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -150,6 +153,7 @@ func (c *ApplicationAutoScaling) DeleteScheduledActionRequest(input *DeleteSched
|
|||
|
||||
output = &DeleteScheduledActionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -244,6 +248,7 @@ func (c *ApplicationAutoScaling) DeregisterScalableTargetRequest(input *Deregist
|
|||
|
||||
output = &DeregisterScalableTargetOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1023,6 +1028,7 @@ func (c *ApplicationAutoScaling) PutScheduledActionRequest(input *PutScheduledAc
|
|||
|
||||
output = &PutScheduledActionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1135,6 +1141,7 @@ func (c *ApplicationAutoScaling) RegisterScalableTargetRequest(input *RegisterSc
|
|||
|
||||
output = &RegisterScalableTargetOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,44 @@
|
|||
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||
|
||||
// Package appmesh provides the client and types for making API
|
||||
// requests to AWS App Mesh.
|
||||
//
|
||||
// AWS App Mesh is a service mesh based on the Envoy proxy that makes it easy
|
||||
// to monitor and control containerized microservices. App Mesh standardizes
|
||||
// how your microservices communicate, giving you end-to-end visibility and
|
||||
// helping to ensure high-availability for your applications.
|
||||
//
|
||||
// App Mesh gives you consistent visibility and network traffic controls for
|
||||
// every microservice in an application. You can use App Mesh with Amazon ECS
|
||||
// (using the Amazon EC2 launch type), Amazon EKS, and Kubernetes on AWS.
|
||||
//
|
||||
// App Mesh supports containerized microservice applications that use service
|
||||
// discovery naming for their components. To use App Mesh, you must have a containerized
|
||||
// application running on Amazon EC2 instances, hosted in either Amazon ECS,
|
||||
// Amazon EKS, or Kubernetes on AWS. For more information about service discovery
|
||||
// on Amazon ECS, see Service Discovery (http://docs.aws.amazon.com/AmazonECS/latest/developerguideservice-discovery.html)
|
||||
// in the Amazon Elastic Container Service Developer Guide. Kubernetes kube-dns
|
||||
// is supported. For more information, see DNS for Services and Pods (https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/)
|
||||
// in the Kubernetes documentation.
|
||||
//
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/appmesh-2018-10-01 for more information on this service.
|
||||
//
|
||||
// See appmesh package documentation for more information.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/service/appmesh/
|
||||
//
|
||||
// Using the Client
|
||||
//
|
||||
// To contact AWS App Mesh with the SDK use the New function to create
|
||||
// a new service client. With that client you can make API requests to the service.
|
||||
// These clients are safe to use concurrently.
|
||||
//
|
||||
// See the SDK's documentation for more information on how to use the SDK.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/
|
||||
//
|
||||
// See aws.Config documentation for more information on configuring SDK clients.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
|
||||
//
|
||||
// See the AWS App Mesh client AppMesh for more
|
||||
// information on creating client for this service.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/service/appmesh/#New
|
||||
package appmesh
|
|
@ -0,0 +1,69 @@
|
|||
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||
|
||||
package appmesh
|
||||
|
||||
const (
|
||||
|
||||
// ErrCodeBadRequestException for service response error code
|
||||
// "BadRequestException".
|
||||
//
|
||||
// The request syntax was malformed. Check your request syntax and try again.
|
||||
ErrCodeBadRequestException = "BadRequestException"
|
||||
|
||||
// ErrCodeConflictException for service response error code
|
||||
// "ConflictException".
|
||||
//
|
||||
// The request contains a client token that was used for a previous update resource
|
||||
// call with different specifications. Try the request again with a new client
|
||||
// token.
|
||||
ErrCodeConflictException = "ConflictException"
|
||||
|
||||
// ErrCodeForbiddenException for service response error code
|
||||
// "ForbiddenException".
|
||||
//
|
||||
// You do not have permissions to perform this action.
|
||||
ErrCodeForbiddenException = "ForbiddenException"
|
||||
|
||||
// ErrCodeInternalServerErrorException for service response error code
|
||||
// "InternalServerErrorException".
|
||||
//
|
||||
// The request processing has failed because of an unknown error, exception,
|
||||
// or failure.
|
||||
ErrCodeInternalServerErrorException = "InternalServerErrorException"
|
||||
|
||||
// ErrCodeLimitExceededException for service response error code
|
||||
// "LimitExceededException".
|
||||
//
|
||||
// You have exceeded a service limit for your account. For more information,
|
||||
// see Service Limits (https://docs.aws.amazon.com/app-mesh/latest/userguide/service_limits.html)
|
||||
// in the AWS App Mesh User Guide.
|
||||
ErrCodeLimitExceededException = "LimitExceededException"
|
||||
|
||||
// ErrCodeNotFoundException for service response error code
|
||||
// "NotFoundException".
|
||||
//
|
||||
// The specified resource does not exist. Check your request syntax and try
|
||||
// again.
|
||||
ErrCodeNotFoundException = "NotFoundException"
|
||||
|
||||
// ErrCodeResourceInUseException for service response error code
|
||||
// "ResourceInUseException".
|
||||
//
|
||||
// You cannot delete the specified resource because it is in use or required
|
||||
// by another resource.
|
||||
ErrCodeResourceInUseException = "ResourceInUseException"
|
||||
|
||||
// ErrCodeServiceUnavailableException for service response error code
|
||||
// "ServiceUnavailableException".
|
||||
//
|
||||
// The request has failed due to a temporary failure of the service.
|
||||
ErrCodeServiceUnavailableException = "ServiceUnavailableException"
|
||||
|
||||
// ErrCodeTooManyRequestsException for service response error code
|
||||
// "TooManyRequestsException".
|
||||
//
|
||||
// The maximum request rate permitted by the App Mesh APIs has been exceeded
|
||||
// for your account. For best results, use an increasing or variable sleep interval
|
||||
// between requests.
|
||||
ErrCodeTooManyRequestsException = "TooManyRequestsException"
|
||||
)
|
|
@ -0,0 +1,99 @@
|
|||
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||
|
||||
package appmesh
|
||||
|
||||
import (
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/client"
|
||||
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/aws/signer/v4"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/restjson"
|
||||
)
|
||||
|
||||
// AppMesh provides the API operation methods for making requests to
|
||||
// AWS App Mesh. See this package's package overview docs
|
||||
// for details on the service.
|
||||
//
|
||||
// AppMesh methods are safe to use concurrently. It is not safe to
|
||||
// modify mutate any of the struct's properties though.
|
||||
type AppMesh struct {
|
||||
*client.Client
|
||||
}
|
||||
|
||||
// Used for custom client initialization logic
|
||||
var initClient func(*client.Client)
|
||||
|
||||
// Used for custom request initialization logic
|
||||
var initRequest func(*request.Request)
|
||||
|
||||
// Service information constants
|
||||
const (
|
||||
ServiceName = "App Mesh" // Name of service.
|
||||
EndpointsID = "appmesh" // ID to lookup a service endpoint with.
|
||||
ServiceID = "App Mesh" // ServiceID is a unique identifer of a specific service.
|
||||
)
|
||||
|
||||
// New creates a new instance of the AppMesh client with a session.
|
||||
// If additional configuration is needed for the client instance use the optional
|
||||
// aws.Config parameter to add your extra config.
|
||||
//
|
||||
// Example:
|
||||
// // Create a AppMesh client from just a session.
|
||||
// svc := appmesh.New(mySession)
|
||||
//
|
||||
// // Create a AppMesh client with additional configuration
|
||||
// svc := appmesh.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *AppMesh {
|
||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||
if c.SigningNameDerived || len(c.SigningName) == 0 {
|
||||
c.SigningName = "appmesh"
|
||||
}
|
||||
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
|
||||
}
|
||||
|
||||
// newClient creates, initializes and returns a new service client instance.
|
||||
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *AppMesh {
|
||||
svc := &AppMesh{
|
||||
Client: client.New(
|
||||
cfg,
|
||||
metadata.ClientInfo{
|
||||
ServiceName: ServiceName,
|
||||
ServiceID: ServiceID,
|
||||
SigningName: signingName,
|
||||
SigningRegion: signingRegion,
|
||||
Endpoint: endpoint,
|
||||
APIVersion: "2018-10-01",
|
||||
JSONVersion: "1.1",
|
||||
},
|
||||
handlers,
|
||||
),
|
||||
}
|
||||
|
||||
// Handlers
|
||||
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
|
||||
svc.Handlers.Build.PushBackNamed(restjson.BuildHandler)
|
||||
svc.Handlers.Unmarshal.PushBackNamed(restjson.UnmarshalHandler)
|
||||
svc.Handlers.UnmarshalMeta.PushBackNamed(restjson.UnmarshalMetaHandler)
|
||||
svc.Handlers.UnmarshalError.PushBackNamed(restjson.UnmarshalErrorHandler)
|
||||
|
||||
// Run custom client initialization if present
|
||||
if initClient != nil {
|
||||
initClient(svc.Client)
|
||||
}
|
||||
|
||||
return svc
|
||||
}
|
||||
|
||||
// newRequest creates a new request for a AppMesh operation and runs any
|
||||
// custom request initialization.
|
||||
func (c *AppMesh) newRequest(op *request.Operation, params, data interface{}) *request.Request {
|
||||
req := c.NewRequest(op, params, data)
|
||||
|
||||
// Run custom request initialization if present
|
||||
if initRequest != nil {
|
||||
initRequest(req)
|
||||
}
|
||||
|
||||
return req
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -27,13 +27,13 @@ const (
|
|||
// "BadRequestException".
|
||||
//
|
||||
// The request is not well formed. For example, a value is invalid or a required
|
||||
// field is missing. Check the field values, and try again.
|
||||
// field is missing. Check the field values, and then try again.
|
||||
ErrCodeBadRequestException = "BadRequestException"
|
||||
|
||||
// ErrCodeConcurrentModificationException for service response error code
|
||||
// "ConcurrentModificationException".
|
||||
//
|
||||
// Another modification is being made. That modification must complete before
|
||||
// Another modification is in progress at this time and it must complete before
|
||||
// you can make your change.
|
||||
ErrCodeConcurrentModificationException = "ConcurrentModificationException"
|
||||
|
||||
|
@ -58,8 +58,8 @@ const (
|
|||
// ErrCodeNotFoundException for service response error code
|
||||
// "NotFoundException".
|
||||
//
|
||||
// The resource specified in the request was not found. Check the resource and
|
||||
// try again.
|
||||
// The resource specified in the request was not found. Check the resource,
|
||||
// and then try again.
|
||||
ErrCodeNotFoundException = "NotFoundException"
|
||||
|
||||
// ErrCodeUnauthorizedException for service response error code
|
||||
|
|
|
@ -8,6 +8,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opBatchGetNamedQuery = "BatchGetNamedQuery"
|
||||
|
@ -315,6 +317,7 @@ func (c *Athena) DeleteNamedQueryRequest(input *DeleteNamedQueryInput) (req *req
|
|||
|
||||
output = &DeleteNamedQueryOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1094,6 +1097,7 @@ func (c *Athena) StopQueryExecutionRequest(input *StopQueryExecutionInput) (req
|
|||
|
||||
output = &StopQueryExecutionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,8 +5,10 @@
|
|||
//
|
||||
// Amazon EC2 Auto Scaling is designed to automatically launch or terminate
|
||||
// EC2 instances based on user-defined policies, schedules, and health checks.
|
||||
// Use this service in conjunction with the AWS Auto Scaling, Amazon CloudWatch,
|
||||
// and Elastic Load Balancing services.
|
||||
// Use this service with AWS Auto Scaling, Amazon CloudWatch, and Elastic Load
|
||||
// Balancing.
|
||||
//
|
||||
// For more information, see the Amazon EC2 Auto Scaling User Guide (http://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html).
|
||||
//
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/autoscaling-2011-01-01 for more information on this service.
|
||||
//
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -3,33 +3,39 @@
|
|||
// Package budgets provides the client and types for making API
|
||||
// requests to AWS Budgets.
|
||||
//
|
||||
// Budgets enable you to plan your service usage, service costs, and your RI
|
||||
// utilization. You can also track how close your plan is to your budgeted amount
|
||||
// or to the free tier limits. Budgets provide you with a quick way to see your
|
||||
// usage-to-date and current estimated charges from AWS and to see how much
|
||||
// your predicted usage accrues in charges by the end of the month. Budgets
|
||||
// also compare current estimates and charges to the amount that you indicated
|
||||
// you want to use or spend and lets you see how much of your budget has been
|
||||
// used. AWS updates your budget status several times a day. Budgets track your
|
||||
// unblended costs, subscriptions, and refunds. You can create the following
|
||||
// types of budgets:
|
||||
// The AWS Budgets API enables you to use AWS Budgets to plan your service usage,
|
||||
// service costs, and instance reservations. The API reference provides descriptions,
|
||||
// syntax, and usage examples for each of the actions and data types for AWS
|
||||
// Budgets.
|
||||
//
|
||||
// * Cost budgets allow you to say how much you want to spend on a service.
|
||||
// Budgets provide you with a way to see the following information:
|
||||
//
|
||||
// * Usage budgets allow you to say how many hours you want to use for one
|
||||
// or more services.
|
||||
// * How close your plan is to your budgeted amount or to the free tier limits
|
||||
//
|
||||
// * RI utilization budgets allow you to define a utilization threshold and
|
||||
// receive alerts when RIs are tracking below that threshold.
|
||||
// * Your usage-to-date, including how much you've used of your Reserved
|
||||
// Instances (RIs)
|
||||
//
|
||||
// You can create up to 20,000 budgets per AWS master account. Your first two
|
||||
// budgets are free of charge. Each additional budget costs $0.02 per day. You
|
||||
// can set up optional notifications that warn you if you exceed, or are forecasted
|
||||
// to exceed, your budgeted amount. You can have notifications sent to an Amazon
|
||||
// SNS topic, to an email address, or to both. For more information, see Creating
|
||||
// an Amazon SNS Topic for Budget Notifications (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-sns-policy.html).
|
||||
// AWS Free Tier usage alerts via AWS Budgets are provided for you, and do not
|
||||
// count toward your budget limits.
|
||||
// * Your current estimated charges from AWS, and how much your predicted
|
||||
// usage will accrue in charges by the end of the month
|
||||
//
|
||||
// * How much of your budget has been used
|
||||
//
|
||||
// AWS updates your budget status several times a day. Budgets track your unblended
|
||||
// costs, subscriptions, refunds, and RIs. You can create the following types
|
||||
// of budgets:
|
||||
//
|
||||
// * Cost budgets - Plan how much you want to spend on a service.
|
||||
//
|
||||
// * Usage budgets - Plan how much you want to use one or more services.
|
||||
//
|
||||
// * RI utilization budgets - Define a utilization threshold, and receive
|
||||
// alerts when your RI usage falls below that threshold. This lets you see
|
||||
// if your RIs are unused or under-utilized.
|
||||
//
|
||||
// * RI coverage budgets - Define a coverage threshold, and receive alerts
|
||||
// when the number of your instance hours that are covered by RIs fall below
|
||||
// that threshold. This lets you see how much of your instance usage is covered
|
||||
// by a reservation.
|
||||
//
|
||||
// Service Endpoint
|
||||
//
|
||||
|
@ -37,8 +43,8 @@
|
|||
//
|
||||
// * https://budgets.amazonaws.com
|
||||
//
|
||||
// For information about costs associated with the AWS Budgets API, see AWS
|
||||
// Cost Management Pricing (https://aws.amazon.com/aws-cost-management/pricing/).
|
||||
// For information about costs that are associated with the AWS Budgets API,
|
||||
// see AWS Cost Management Pricing (https://aws.amazon.com/aws-cost-management/pricing/).
|
||||
//
|
||||
// See budgets package documentation for more information.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/service/budgets/
|
||||
|
|
|
@ -8,6 +8,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opCreateEnvironmentEC2 = "CreateEnvironmentEC2"
|
||||
|
@ -245,6 +247,7 @@ func (c *Cloud9) DeleteEnvironmentRequest(input *DeleteEnvironmentInput) (req *r
|
|||
|
||||
output = &DeleteEnvironmentOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -343,6 +346,7 @@ func (c *Cloud9) DeleteEnvironmentMembershipRequest(input *DeleteEnvironmentMemb
|
|||
|
||||
output = &DeleteEnvironmentMembershipOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -941,6 +945,7 @@ func (c *Cloud9) UpdateEnvironmentRequest(input *UpdateEnvironmentInput) (req *r
|
|||
|
||||
output = &UpdateEnvironmentOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -8,7 +8,7 @@
|
|||
// errors. For detailed information about CloudFront features, see the Amazon
|
||||
// CloudFront Developer Guide.
|
||||
//
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/cloudfront-2018-06-18 for more information on this service.
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/cloudfront-2018-11-05 for more information on this service.
|
||||
//
|
||||
// See cloudfront package documentation for more information.
|
||||
// https://docs.aws.amazon.com/sdk-for-go/api/service/cloudfront/
|
||||
|
|
|
@ -425,6 +425,13 @@ const (
|
|||
// "TooManyOriginCustomHeaders".
|
||||
ErrCodeTooManyOriginCustomHeaders = "TooManyOriginCustomHeaders"
|
||||
|
||||
// ErrCodeTooManyOriginGroupsPerDistribution for service response error code
|
||||
// "TooManyOriginGroupsPerDistribution".
|
||||
//
|
||||
// Processing your request would cause you to exceed the maximum number of origin
|
||||
// groups allowed.
|
||||
ErrCodeTooManyOriginGroupsPerDistribution = "TooManyOriginGroupsPerDistribution"
|
||||
|
||||
// ErrCodeTooManyOrigins for service response error code
|
||||
// "TooManyOrigins".
|
||||
//
|
||||
|
|
|
@ -60,7 +60,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio
|
|||
SigningName: signingName,
|
||||
SigningRegion: signingRegion,
|
||||
Endpoint: endpoint,
|
||||
APIVersion: "2018-06-18",
|
||||
APIVersion: "2018-11-05",
|
||||
},
|
||||
handlers,
|
||||
),
|
||||
|
|
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opCopyBackupToRegion = "CopyBackupToRegion"
|
||||
|
@ -1270,6 +1272,7 @@ func (c *CloudHSMV2) TagResourceRequest(input *TagResourceInput) (req *request.R
|
|||
|
||||
output = &TagResourceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1363,6 +1366,7 @@ func (c *CloudHSMV2) UntagResourceRequest(input *UntagResourceInput) (req *reque
|
|||
|
||||
output = &UntagResourceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opAddTags = "AddTags"
|
||||
|
@ -50,6 +52,7 @@ func (c *CloudTrail) AddTagsRequest(input *AddTagsInput) (req *request.Request,
|
|||
|
||||
output = &AddTagsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -113,6 +116,12 @@ func (c *CloudTrail) AddTagsRequest(input *AddTagsInput) (req *request.Request,
|
|||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/AddTags
|
||||
func (c *CloudTrail) AddTags(input *AddTagsInput) (*AddTagsOutput, error) {
|
||||
req, out := c.AddTagsRequest(input)
|
||||
|
@ -271,6 +280,35 @@ func (c *CloudTrail) CreateTrailRequest(input *CreateTrailInput) (req *request.R
|
|||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeAccessNotEnabledException "CloudTrailAccessNotEnabledException"
|
||||
// This exception is thrown when trusted access has not been enabled between
|
||||
// AWS CloudTrail and AWS Organizations. For more information, see Enabling
|
||||
// Trusted Access with Other AWS Services (https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html)
|
||||
// and Prepare For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeOrganizationsNotInUseException "OrganizationsNotInUseException"
|
||||
// This exception is thrown when the request is made from an AWS account that
|
||||
// is not a member of an organization. To make this request, sign in using the
|
||||
// credentials of an account that belongs to an organization.
|
||||
//
|
||||
// * ErrCodeOrganizationNotInAllFeaturesModeException "OrganizationNotInAllFeaturesModeException"
|
||||
// This exception is thrown when AWS Organizations is not configured to support
|
||||
// all features. All features must be enabled in AWS Organization to support
|
||||
// creating an organization trail. For more information, see Prepare For Creating
|
||||
// a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/CreateTrail
|
||||
func (c *CloudTrail) CreateTrail(input *CreateTrailInput) (*CreateTrailOutput, error) {
|
||||
req, out := c.CreateTrailRequest(input)
|
||||
|
@ -332,6 +370,7 @@ func (c *CloudTrail) DeleteTrailRequest(input *DeleteTrailInput) (req *request.R
|
|||
|
||||
output = &DeleteTrailOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -372,6 +411,24 @@ func (c *CloudTrail) DeleteTrailRequest(input *DeleteTrailInput) (req *request.R
|
|||
// This exception is thrown when an operation is called on a trail from a region
|
||||
// other than the region in which the trail was created.
|
||||
//
|
||||
// * ErrCodeUnsupportedOperationException "UnsupportedOperationException"
|
||||
// This exception is thrown when the requested operation is not supported.
|
||||
//
|
||||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/DeleteTrail
|
||||
func (c *CloudTrail) DeleteTrail(input *DeleteTrailInput) (*DeleteTrailOutput, error) {
|
||||
req, out := c.DeleteTrailRequest(input)
|
||||
|
@ -1209,6 +1266,18 @@ func (c *CloudTrail) PutEventSelectorsRequest(input *PutEventSelectorsInput) (re
|
|||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/PutEventSelectors
|
||||
func (c *CloudTrail) PutEventSelectors(input *PutEventSelectorsInput) (*PutEventSelectorsOutput, error) {
|
||||
req, out := c.PutEventSelectorsRequest(input)
|
||||
|
@ -1270,6 +1339,7 @@ func (c *CloudTrail) RemoveTagsRequest(input *RemoveTagsInput) (req *request.Req
|
|||
|
||||
output = &RemoveTagsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1324,6 +1394,12 @@ func (c *CloudTrail) RemoveTagsRequest(input *RemoveTagsInput) (req *request.Req
|
|||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/RemoveTags
|
||||
func (c *CloudTrail) RemoveTags(input *RemoveTagsInput) (*RemoveTagsOutput, error) {
|
||||
req, out := c.RemoveTagsRequest(input)
|
||||
|
@ -1385,6 +1461,7 @@ func (c *CloudTrail) StartLoggingRequest(input *StartLoggingInput) (req *request
|
|||
|
||||
output = &StartLoggingOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1427,6 +1504,24 @@ func (c *CloudTrail) StartLoggingRequest(input *StartLoggingInput) (req *request
|
|||
// This exception is thrown when an operation is called on a trail from a region
|
||||
// other than the region in which the trail was created.
|
||||
//
|
||||
// * ErrCodeUnsupportedOperationException "UnsupportedOperationException"
|
||||
// This exception is thrown when the requested operation is not supported.
|
||||
//
|
||||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/StartLogging
|
||||
func (c *CloudTrail) StartLogging(input *StartLoggingInput) (*StartLoggingOutput, error) {
|
||||
req, out := c.StartLoggingRequest(input)
|
||||
|
@ -1488,6 +1583,7 @@ func (c *CloudTrail) StopLoggingRequest(input *StopLoggingInput) (req *request.R
|
|||
|
||||
output = &StopLoggingOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1532,6 +1628,24 @@ func (c *CloudTrail) StopLoggingRequest(input *StopLoggingInput) (req *request.R
|
|||
// This exception is thrown when an operation is called on a trail from a region
|
||||
// other than the region in which the trail was created.
|
||||
//
|
||||
// * ErrCodeUnsupportedOperationException "UnsupportedOperationException"
|
||||
// This exception is thrown when the requested operation is not supported.
|
||||
//
|
||||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/StopLogging
|
||||
func (c *CloudTrail) StopLogging(input *StopLoggingInput) (*StopLoggingOutput, error) {
|
||||
req, out := c.StopLoggingRequest(input)
|
||||
|
@ -1694,6 +1808,35 @@ func (c *CloudTrail) UpdateTrailRequest(input *UpdateTrailInput) (req *request.R
|
|||
// * ErrCodeOperationNotPermittedException "OperationNotPermittedException"
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
//
|
||||
// * ErrCodeAccessNotEnabledException "CloudTrailAccessNotEnabledException"
|
||||
// This exception is thrown when trusted access has not been enabled between
|
||||
// AWS CloudTrail and AWS Organizations. For more information, see Enabling
|
||||
// Trusted Access with Other AWS Services (https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html)
|
||||
// and Prepare For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeInsufficientDependencyServiceAccessPermissionException "InsufficientDependencyServiceAccessPermissionException"
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeOrganizationsNotInUseException "OrganizationsNotInUseException"
|
||||
// This exception is thrown when the request is made from an AWS account that
|
||||
// is not a member of an organization. To make this request, sign in using the
|
||||
// credentials of an account that belongs to an organization.
|
||||
//
|
||||
// * ErrCodeNotOrganizationMasterAccountException "NotOrganizationMasterAccountException"
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// * ErrCodeOrganizationNotInAllFeaturesModeException "OrganizationNotInAllFeaturesModeException"
|
||||
// This exception is thrown when AWS Organizations is not configured to support
|
||||
// all features. All features must be enabled in AWS Organization to support
|
||||
// creating an organization trail. For more information, see Prepare For Creating
|
||||
// a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
//
|
||||
// See also, https://docs.aws.amazon.com/goto/WebAPI/cloudtrail-2013-11-01/UpdateTrail
|
||||
func (c *CloudTrail) UpdateTrail(input *UpdateTrailInput) (*UpdateTrailOutput, error) {
|
||||
req, out := c.UpdateTrailRequest(input)
|
||||
|
@ -1827,6 +1970,12 @@ type CreateTrailInput struct {
|
|||
// The default is false.
|
||||
IsMultiRegionTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies whether the trail is created for all accounts in an organization
|
||||
// in AWS Organizations, or only for the current AWS account. The default is
|
||||
// false, and cannot be true unless the call is made on behalf of an AWS account
|
||||
// that is the master account for an organization in AWS Organizations.
|
||||
IsOrganizationTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies the KMS key ID to use to encrypt the logs delivered by CloudTrail.
|
||||
// The value can be an alias name prefixed by "alias/", a fully specified ARN
|
||||
// to an alias, a fully specified ARN to a key, or a globally unique identifier.
|
||||
|
@ -1932,6 +2081,12 @@ func (s *CreateTrailInput) SetIsMultiRegionTrail(v bool) *CreateTrailInput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetIsOrganizationTrail sets the IsOrganizationTrail field's value.
|
||||
func (s *CreateTrailInput) SetIsOrganizationTrail(v bool) *CreateTrailInput {
|
||||
s.IsOrganizationTrail = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *CreateTrailInput) SetKmsKeyId(v string) *CreateTrailInput {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -1982,6 +2137,9 @@ type CreateTrailOutput struct {
|
|||
// Specifies whether the trail exists in one region or in all regions.
|
||||
IsMultiRegionTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies whether the trail is an organization trail.
|
||||
IsOrganizationTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
|
||||
// The value is a fully specified ARN to a KMS key in the format:
|
||||
//
|
||||
|
@ -2055,6 +2213,12 @@ func (s *CreateTrailOutput) SetIsMultiRegionTrail(v bool) *CreateTrailOutput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetIsOrganizationTrail sets the IsOrganizationTrail field's value.
|
||||
func (s *CreateTrailOutput) SetIsOrganizationTrail(v bool) *CreateTrailOutput {
|
||||
s.IsOrganizationTrail = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *CreateTrailOutput) SetKmsKeyId(v string) *CreateTrailOutput {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -2277,7 +2441,10 @@ type DescribeTrailsInput struct {
|
|||
|
||||
// Specifies whether to include shadow trails in the response. A shadow trail
|
||||
// is the replication in a region of a trail that was created in a different
|
||||
// region. The default is true.
|
||||
// region, or in the case of an organization trail, the replication of an organization
|
||||
// trail in member accounts. If you do not include shadow trails, organization
|
||||
// trails in a member account and region replication trails will not be returned.
|
||||
// The default is true.
|
||||
IncludeShadowTrails *bool `locationName:"includeShadowTrails" type:"boolean"`
|
||||
|
||||
// Specifies a list of trail names, trail ARNs, or both, of the trails to describe.
|
||||
|
@ -3692,6 +3859,9 @@ type Trail struct {
|
|||
// Specifies whether the trail belongs only to one region or exists in all regions.
|
||||
IsMultiRegionTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies whether the trail is an organization trail.
|
||||
IsOrganizationTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
|
||||
// The value is a fully specified ARN to a KMS key in the format:
|
||||
//
|
||||
|
@ -3777,6 +3947,12 @@ func (s *Trail) SetIsMultiRegionTrail(v bool) *Trail {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetIsOrganizationTrail sets the IsOrganizationTrail field's value.
|
||||
func (s *Trail) SetIsOrganizationTrail(v bool) *Trail {
|
||||
s.IsOrganizationTrail = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *Trail) SetKmsKeyId(v string) *Trail {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -3862,6 +4038,17 @@ type UpdateTrailInput struct {
|
|||
// it was created, and its shadow trails in other regions will be deleted.
|
||||
IsMultiRegionTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies whether the trail is applied to all accounts in an organization
|
||||
// in AWS Organizations, or only for the current AWS account. The default is
|
||||
// false, and cannot be true unless the call is made on behalf of an AWS account
|
||||
// that is the master account for an organization in AWS Organizations. If the
|
||||
// trail is not an organization trail and this is set to true, the trail will
|
||||
// be created in all AWS accounts that belong to the organization. If the trail
|
||||
// is an organization trail and this is set to false, the trail will remain
|
||||
// in the current AWS account but be deleted from all member accounts in the
|
||||
// organization.
|
||||
IsOrganizationTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies the KMS key ID to use to encrypt the logs delivered by CloudTrail.
|
||||
// The value can be an alias name prefixed by "alias/", a fully specified ARN
|
||||
// to an alias, a fully specified ARN to a key, or a globally unique identifier.
|
||||
|
@ -3967,6 +4154,12 @@ func (s *UpdateTrailInput) SetIsMultiRegionTrail(v bool) *UpdateTrailInput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetIsOrganizationTrail sets the IsOrganizationTrail field's value.
|
||||
func (s *UpdateTrailInput) SetIsOrganizationTrail(v bool) *UpdateTrailInput {
|
||||
s.IsOrganizationTrail = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *UpdateTrailInput) SetKmsKeyId(v string) *UpdateTrailInput {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -4017,6 +4210,9 @@ type UpdateTrailOutput struct {
|
|||
// Specifies whether the trail exists in one region or in all regions.
|
||||
IsMultiRegionTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies whether the trail is an organization trail.
|
||||
IsOrganizationTrail *bool `type:"boolean"`
|
||||
|
||||
// Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
|
||||
// The value is a fully specified ARN to a KMS key in the format:
|
||||
//
|
||||
|
@ -4090,6 +4286,12 @@ func (s *UpdateTrailOutput) SetIsMultiRegionTrail(v bool) *UpdateTrailOutput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetIsOrganizationTrail sets the IsOrganizationTrail field's value.
|
||||
func (s *UpdateTrailOutput) SetIsOrganizationTrail(v bool) *UpdateTrailOutput {
|
||||
s.IsOrganizationTrail = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *UpdateTrailOutput) SetKmsKeyId(v string) *UpdateTrailOutput {
|
||||
s.KmsKeyId = &v
|
||||
|
|
|
@ -13,12 +13,30 @@ const (
|
|||
// arn:aws:cloudtrail:us-east-2:123456789012:trail/MyTrail
|
||||
ErrCodeARNInvalidException = "CloudTrailARNInvalidException"
|
||||
|
||||
// ErrCodeAccessNotEnabledException for service response error code
|
||||
// "CloudTrailAccessNotEnabledException".
|
||||
//
|
||||
// This exception is thrown when trusted access has not been enabled between
|
||||
// AWS CloudTrail and AWS Organizations. For more information, see Enabling
|
||||
// Trusted Access with Other AWS Services (https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html)
|
||||
// and Prepare For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
ErrCodeAccessNotEnabledException = "CloudTrailAccessNotEnabledException"
|
||||
|
||||
// ErrCodeCloudWatchLogsDeliveryUnavailableException for service response error code
|
||||
// "CloudWatchLogsDeliveryUnavailableException".
|
||||
//
|
||||
// Cannot set a CloudWatch Logs delivery for this region.
|
||||
ErrCodeCloudWatchLogsDeliveryUnavailableException = "CloudWatchLogsDeliveryUnavailableException"
|
||||
|
||||
// ErrCodeInsufficientDependencyServiceAccessPermissionException for service response error code
|
||||
// "InsufficientDependencyServiceAccessPermissionException".
|
||||
//
|
||||
// This exception is thrown when the IAM user or role that is used to create
|
||||
// the organization trail is lacking one or more required permissions for creating
|
||||
// an organization trail in a required service. For more information, see Prepare
|
||||
// For Creating a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
ErrCodeInsufficientDependencyServiceAccessPermissionException = "InsufficientDependencyServiceAccessPermissionException"
|
||||
|
||||
// ErrCodeInsufficientEncryptionPolicyException for service response error code
|
||||
// "InsufficientEncryptionPolicyException".
|
||||
//
|
||||
|
@ -196,12 +214,38 @@ const (
|
|||
// This exception is thrown when the maximum number of trails is reached.
|
||||
ErrCodeMaximumNumberOfTrailsExceededException = "MaximumNumberOfTrailsExceededException"
|
||||
|
||||
// ErrCodeNotOrganizationMasterAccountException for service response error code
|
||||
// "NotOrganizationMasterAccountException".
|
||||
//
|
||||
// This exception is thrown when the AWS account making the request to create
|
||||
// or update an organization trail is not the master account for an organization
|
||||
// in AWS Organizations. For more information, see Prepare For Creating a Trail
|
||||
// For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
ErrCodeNotOrganizationMasterAccountException = "NotOrganizationMasterAccountException"
|
||||
|
||||
// ErrCodeOperationNotPermittedException for service response error code
|
||||
// "OperationNotPermittedException".
|
||||
//
|
||||
// This exception is thrown when the requested operation is not permitted.
|
||||
ErrCodeOperationNotPermittedException = "OperationNotPermittedException"
|
||||
|
||||
// ErrCodeOrganizationNotInAllFeaturesModeException for service response error code
|
||||
// "OrganizationNotInAllFeaturesModeException".
|
||||
//
|
||||
// This exception is thrown when AWS Organizations is not configured to support
|
||||
// all features. All features must be enabled in AWS Organization to support
|
||||
// creating an organization trail. For more information, see Prepare For Creating
|
||||
// a Trail For Your Organization (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html).
|
||||
ErrCodeOrganizationNotInAllFeaturesModeException = "OrganizationNotInAllFeaturesModeException"
|
||||
|
||||
// ErrCodeOrganizationsNotInUseException for service response error code
|
||||
// "OrganizationsNotInUseException".
|
||||
//
|
||||
// This exception is thrown when the request is made from an AWS account that
|
||||
// is not a member of an organization. To make this request, sign in using the
|
||||
// credentials of an account that belongs to an organization.
|
||||
ErrCodeOrganizationsNotInUseException = "OrganizationsNotInUseException"
|
||||
|
||||
// ErrCodeResourceNotFoundException for service response error code
|
||||
// "ResourceNotFoundException".
|
||||
//
|
||||
|
|
|
@ -52,8 +52,7 @@ func (c *CloudWatch) DeleteAlarmsRequest(input *DeleteAlarmsInput) (req *request
|
|||
|
||||
output = &DeleteAlarmsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -133,6 +132,7 @@ func (c *CloudWatch) DeleteDashboardsRequest(input *DeleteDashboardsInput) (req
|
|||
|
||||
output = &DeleteDashboardsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -570,8 +570,7 @@ func (c *CloudWatch) DisableAlarmActionsRequest(input *DisableAlarmActionsInput)
|
|||
|
||||
output = &DisableAlarmActionsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -647,8 +646,7 @@ func (c *CloudWatch) EnableAlarmActionsRequest(input *EnableAlarmActionsInput) (
|
|||
|
||||
output = &EnableAlarmActionsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1488,25 +1486,24 @@ func (c *CloudWatch) PutMetricAlarmRequest(input *PutMetricAlarmInput) (req *req
|
|||
|
||||
output = &PutMetricAlarmOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
// PutMetricAlarm API operation for Amazon CloudWatch.
|
||||
//
|
||||
// Creates or updates an alarm and associates it with the specified metric.
|
||||
// Optionally, this operation can associate one or more Amazon SNS resources
|
||||
// with the alarm.
|
||||
// Creates or updates an alarm and associates it with the specified metric or
|
||||
// metric math expression.
|
||||
//
|
||||
// When this operation creates an alarm, the alarm state is immediately set
|
||||
// to INSUFFICIENT_DATA. The alarm is evaluated and its state is set appropriately.
|
||||
// Any actions associated with the state are then executed.
|
||||
// to INSUFFICIENT_DATA. The alarm is then evaluated and its state is set appropriately.
|
||||
// Any actions associated with the new state are then executed.
|
||||
//
|
||||
// When you update an existing alarm, its state is left unchanged, but the update
|
||||
// completely overwrites the previous configuration of the alarm.
|
||||
//
|
||||
// If you are an IAM user, you must have Amazon EC2 permissions for some operations:
|
||||
// If you are an IAM user, you must have Amazon EC2 permissions for some alarm
|
||||
// operations:
|
||||
//
|
||||
// * iam:CreateServiceLinkedRole for all alarms with EC2 actions
|
||||
//
|
||||
|
@ -1536,8 +1533,7 @@ func (c *CloudWatch) PutMetricAlarmRequest(input *PutMetricAlarmInput) (req *req
|
|||
// The first time you create an alarm in the AWS Management Console, the CLI,
|
||||
// or by using the PutMetricAlarm API, CloudWatch creates the necessary service-linked
|
||||
// role for you. The service-linked role is called AWSServiceRoleForCloudWatchEvents.
|
||||
// For more information about service-linked roles, see AWS service-linked role
|
||||
// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role).
|
||||
// For more information, see AWS service-linked role (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role).
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
|
@ -1611,17 +1607,16 @@ func (c *CloudWatch) PutMetricDataRequest(input *PutMetricDataInput) (req *reque
|
|||
|
||||
output = &PutMetricDataOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
// PutMetricData API operation for Amazon CloudWatch.
|
||||
//
|
||||
// Publishes metric data to Amazon CloudWatch. CloudWatch associates the data
|
||||
// with the specified metric. If the specified metric does not exist, CloudWatch
|
||||
// creates the metric. When CloudWatch creates a metric, it can take up to fifteen
|
||||
// minutes for the metric to appear in calls to ListMetrics.
|
||||
// Publishes metric data points to Amazon CloudWatch. CloudWatch associates
|
||||
// the data points with the specified metric. If the specified metric does not
|
||||
// exist, CloudWatch creates the metric. When CloudWatch creates a metric, it
|
||||
// can take up to fifteen minutes for the metric to appear in calls to ListMetrics.
|
||||
//
|
||||
// You can publish either individual data points in the Value field, or arrays
|
||||
// of values and the number of times each value occurred during the period by
|
||||
|
@ -1649,11 +1644,9 @@ func (c *CloudWatch) PutMetricDataRequest(input *PutMetricDataInput) (req *reque
|
|||
// 48 hours to become available for GetMetricData or GetMetricStatistics from
|
||||
// the time they are submitted.
|
||||
//
|
||||
// CloudWatch needs raw data points to calculate percentile statistics. These
|
||||
// raw data points could be published individually or as part of Values and
|
||||
// Counts arrays. If you publish data using statistic sets in the StatisticValues
|
||||
// field instead, you can only retrieve percentile statistics for this data
|
||||
// if one of the following conditions is true:
|
||||
// CloudWatch needs raw data points to calculate percentile statistics. If you
|
||||
// publish data using a statistic set instead, you can only retrieve percentile
|
||||
// statistics for this data if one of the following conditions is true:
|
||||
//
|
||||
// * The SampleCount value of the statistic set is 1 and Min, Max, and Sum
|
||||
// are all equal.
|
||||
|
@ -1741,8 +1734,7 @@ func (c *CloudWatch) SetAlarmStateRequest(input *SetAlarmStateInput) (req *reque
|
|||
|
||||
output = &SetAlarmStateOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(query.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3536,7 +3528,7 @@ type Metric struct {
|
|||
// The dimensions for the metric.
|
||||
Dimensions []*Dimension `type:"list"`
|
||||
|
||||
// The name of the metric.
|
||||
// The name of the metric. This is a required field.
|
||||
MetricName *string `min:"1" type:"string"`
|
||||
|
||||
// The namespace of the metric.
|
||||
|
@ -3652,6 +3644,8 @@ type MetricAlarm struct {
|
|||
// The name of the metric associated with the alarm.
|
||||
MetricName *string `min:"1" type:"string"`
|
||||
|
||||
Metrics []*MetricDataQuery `type:"list"`
|
||||
|
||||
// The namespace of the metric associated with the alarm.
|
||||
Namespace *string `min:"1" type:"string"`
|
||||
|
||||
|
@ -3783,6 +3777,12 @@ func (s *MetricAlarm) SetMetricName(v string) *MetricAlarm {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetMetrics sets the Metrics field's value.
|
||||
func (s *MetricAlarm) SetMetrics(v []*MetricDataQuery) *MetricAlarm {
|
||||
s.Metrics = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetNamespace sets the Namespace field's value.
|
||||
func (s *MetricAlarm) SetNamespace(v string) *MetricAlarm {
|
||||
s.Namespace = &v
|
||||
|
@ -3849,23 +3849,43 @@ func (s *MetricAlarm) SetUnit(v string) *MetricAlarm {
|
|||
return s
|
||||
}
|
||||
|
||||
// This structure indicates the metric data to return, and whether this call
|
||||
// is just retrieving a batch set of data for one metric, or is performing a
|
||||
// math expression on metric data. A single GetMetricData call can include up
|
||||
// to 100 MetricDataQuery structures.
|
||||
// This structure is used in both GetMetricData and PutMetricAlarm. The supported
|
||||
// use of this structure is different for those two operations.
|
||||
//
|
||||
// When used in GetMetricData, it indicates the metric data to return, and whether
|
||||
// this call is just retrieving a batch set of data for one metric, or is performing
|
||||
// a math expression on metric data. A single GetMetricData call can include
|
||||
// up to 100 MetricDataQuery structures.
|
||||
//
|
||||
// When used in PutMetricAlarm, it enables you to create an alarm based on a
|
||||
// metric math expression. Each MetricDataQuery in the array specifies either
|
||||
// a metric to retrieve, or a math expression to be performed on retrieved metrics.
|
||||
// A single PutMetricAlarm call can include up to 20 MetricDataQuery structures
|
||||
// in the array. The 20 structures can include as many as 10 structures that
|
||||
// contain a MetricStat parameter to retrieve a metric, and as many as 10 structures
|
||||
// that contain the Expression parameter to perform a math expression. Any expression
|
||||
// used in a PutMetricAlarm operation must return a single time series. For
|
||||
// more information, see Metric Math Syntax and Functions (http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax)
|
||||
// in the Amazon CloudWatch User Guide.
|
||||
//
|
||||
// Some of the parameters of this structure also have different uses whether
|
||||
// you are using this structure in a GetMetricData operation or a PutMetricAlarm
|
||||
// operation. These differences are explained in the following parameter list.
|
||||
type MetricDataQuery struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The math expression to be performed on the returned data, if this structure
|
||||
// is performing a math expression. For more information about metric math expressions,
|
||||
// see Metric Math Syntax and Functions (http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax)
|
||||
// The math expression to be performed on the returned data, if this object
|
||||
// is performing a math expression. This expression can use the Id of the other
|
||||
// metrics to refer to those metrics, and can also use the Id of other expressions
|
||||
// to use the result of those expressions. For more information about metric
|
||||
// math expressions, see Metric Math Syntax and Functions (http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax)
|
||||
// in the Amazon CloudWatch User Guide.
|
||||
//
|
||||
// Within one MetricDataQuery structure, you must specify either Expression
|
||||
// or MetricStat but not both.
|
||||
// Within each MetricDataQuery object, you must specify either Expression or
|
||||
// MetricStat but not both.
|
||||
Expression *string `min:"1" type:"string"`
|
||||
|
||||
// A short name used to tie this structure to the results in the response. This
|
||||
// A short name used to tie this object to the results in the response. This
|
||||
// name must be unique within a single call to GetMetricData. If you are performing
|
||||
// math expressions on this set of data, this name represents that data and
|
||||
// can serve as a variable in the mathematical expression. The valid characters
|
||||
|
@ -3882,17 +3902,21 @@ type MetricDataQuery struct {
|
|||
Label *string `type:"string"`
|
||||
|
||||
// The metric to be returned, along with statistics, period, and units. Use
|
||||
// this parameter only if this structure is performing a data retrieval and
|
||||
// not performing a math expression on the returned data.
|
||||
// this parameter only if this object is retrieving a metric and not performing
|
||||
// a math expression on returned data.
|
||||
//
|
||||
// Within one MetricDataQuery structure, you must specify either Expression
|
||||
// or MetricStat but not both.
|
||||
// Within one MetricDataQuery object, you must specify either Expression or
|
||||
// MetricStat but not both.
|
||||
MetricStat *MetricStat `type:"structure"`
|
||||
|
||||
// Indicates whether to return the time stamps and raw data values of this metric.
|
||||
// If you are performing this call just to do math expressions and do not also
|
||||
// need the raw data returned, you can specify False. If you omit this, the
|
||||
// default of True is used.
|
||||
// When used in GetMetricData, this option indicates whether to return the timestamps
|
||||
// and raw data values of this metric. If you are performing this call just
|
||||
// to do math expressions and do not also need the raw data returned, you can
|
||||
// specify False. If you omit this, the default of True is used.
|
||||
//
|
||||
// When used in PutMetricAlarm, specify True for the one expression result to
|
||||
// use as the alarm. For all other metrics and expressions in the same PutMetricAlarm
|
||||
// operation, specify ReturnData as False.
|
||||
ReturnData *bool `type:"boolean"`
|
||||
}
|
||||
|
||||
|
@ -3962,7 +3986,7 @@ func (s *MetricDataQuery) SetReturnData(v bool) *MetricDataQuery {
|
|||
|
||||
// A GetMetricData call returns an array of MetricDataResult structures. Each
|
||||
// of these structures includes the data points for that metric, along with
|
||||
// the time stamps of those data points and other identifying information.
|
||||
// the timestamps of those data points and other identifying information.
|
||||
type MetricDataResult struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
|
@ -3983,13 +4007,13 @@ type MetricDataResult struct {
|
|||
// that an error occurred. Retry your request using NextToken, if present.
|
||||
StatusCode *string `type:"string" enum:"StatusCode"`
|
||||
|
||||
// The time stamps for the data points, formatted in Unix timestamp format.
|
||||
// The number of time stamps always matches the number of values and the value
|
||||
// for Timestamps[x] is Values[x].
|
||||
// The timestamps for the data points, formatted in Unix timestamp format. The
|
||||
// number of timestamps always matches the number of values and the value for
|
||||
// Timestamps[x] is Values[x].
|
||||
Timestamps []*time.Time `type:"list"`
|
||||
|
||||
// The data points for the metric corresponding to Timestamps. The number of
|
||||
// values always matches the number of time stamps and the time stamp for Values[x]
|
||||
// values always matches the number of timestamps and the timestamp for Values[x]
|
||||
// is Timestamps[x].
|
||||
Values []*float64 `type:"list"`
|
||||
}
|
||||
|
@ -4214,7 +4238,7 @@ type MetricStat struct {
|
|||
// Metric is a required field
|
||||
Metric *Metric `type:"structure" required:"true"`
|
||||
|
||||
// The period to use when retrieving the metric.
|
||||
// The period, in seconds, to use when retrieving the metric.
|
||||
//
|
||||
// Period is a required field
|
||||
Period *int64 `min:"1" type:"integer" required:"true"`
|
||||
|
@ -4384,7 +4408,7 @@ type PutMetricAlarmInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// Indicates whether actions should be executed during any changes to the alarm
|
||||
// state.
|
||||
// state. The default is TRUE.
|
||||
ActionsEnabled *bool `type:"boolean"`
|
||||
|
||||
// The actions to execute when this alarm transitions to the ALARM state from
|
||||
|
@ -4402,7 +4426,7 @@ type PutMetricAlarmInput struct {
|
|||
// The description for the alarm.
|
||||
AlarmDescription *string `type:"string"`
|
||||
|
||||
// The name for the alarm. This name must be unique within the AWS account.
|
||||
// The name for the alarm. This name must be unique within your AWS account.
|
||||
//
|
||||
// AlarmName is a required field
|
||||
AlarmName *string `min:"1" type:"string" required:"true"`
|
||||
|
@ -4419,7 +4443,7 @@ type PutMetricAlarmInput struct {
|
|||
// in the Amazon CloudWatch User Guide.
|
||||
DatapointsToAlarm *int64 `min:"1" type:"integer"`
|
||||
|
||||
// The dimensions for the metric associated with the alarm.
|
||||
// The dimensions for the metric specified in MetricName.
|
||||
Dimensions []*Dimension `type:"list"`
|
||||
|
||||
// Used only for alarms based on percentiles. If you specify ignore, the alarm
|
||||
|
@ -4433,7 +4457,7 @@ type PutMetricAlarmInput struct {
|
|||
EvaluateLowSampleCountPercentile *string `min:"1" type:"string"`
|
||||
|
||||
// The number of periods over which data is compared to the specified threshold.
|
||||
// If you are setting an alarm which requires that a number of consecutive data
|
||||
// If you are setting an alarm that requires that a number of consecutive data
|
||||
// points be breaching to trigger the alarm, this value specifies that number.
|
||||
// If you are setting an "M out of N" alarm, this value is the N.
|
||||
//
|
||||
|
@ -4443,9 +4467,10 @@ type PutMetricAlarmInput struct {
|
|||
// EvaluationPeriods is a required field
|
||||
EvaluationPeriods *int64 `min:"1" type:"integer" required:"true"`
|
||||
|
||||
// The percentile statistic for the metric associated with the alarm. Specify
|
||||
// a value between p0.0 and p100. When you call PutMetricAlarm, you must specify
|
||||
// either Statistic or ExtendedStatistic, but not both.
|
||||
// The percentile statistic for the metric specified in MetricName. Specify
|
||||
// a value between p0.0 and p100. When you call PutMetricAlarm and specify a
|
||||
// MetricName, you must specify either Statistic or ExtendedStatistic, but not
|
||||
// both.
|
||||
ExtendedStatistic *string `type:"string"`
|
||||
|
||||
// The actions to execute when this alarm transitions to the INSUFFICIENT_DATA
|
||||
|
@ -4463,28 +4488,39 @@ type PutMetricAlarmInput struct {
|
|||
|
||||
// The name for the metric associated with the alarm.
|
||||
//
|
||||
// MetricName is a required field
|
||||
MetricName *string `min:"1" type:"string" required:"true"`
|
||||
// If you are creating an alarm based on a math expression, you cannot specify
|
||||
// this parameter, or any of the Dimensions, Period, Namespace, Statistic, or
|
||||
// ExtendedStatistic parameters. Instead, you specify all this information in
|
||||
// the Metrics array.
|
||||
MetricName *string `min:"1" type:"string"`
|
||||
|
||||
// The namespace for the metric associated with the alarm.
|
||||
// An array of MetricDataQuery structures that enable you to create an alarm
|
||||
// based on the result of a metric math expression. Each item in the Metrics
|
||||
// array either retrieves a metric or performs a math expression.
|
||||
//
|
||||
// Namespace is a required field
|
||||
Namespace *string `min:"1" type:"string" required:"true"`
|
||||
// If you use the Metrics parameter, you cannot include the MetricName, Dimensions,
|
||||
// Period, Namespace, Statistic, or ExtendedStatistic parameters of PutMetricAlarm
|
||||
// in the same operation. Instead, you retrieve the metrics you are using in
|
||||
// your math expression as part of the Metrics array.
|
||||
Metrics []*MetricDataQuery `type:"list"`
|
||||
|
||||
// The namespace for the metric associated specified in MetricName.
|
||||
Namespace *string `min:"1" type:"string"`
|
||||
|
||||
// The actions to execute when this alarm transitions to an OK state from any
|
||||
// other state. Each action is specified as an Amazon Resource Name (ARN).
|
||||
//
|
||||
// Valid Values: arn:aws:automate:region:ec2:stop | arn:aws:automate:region:ec2:terminate
|
||||
// | arn:aws:automate:region:ec2:recover | arn:aws:sns:region:account-id:sns-topic-name
|
||||
// | arn:aws:autoscaling:region:account-id:scalingPolicy:policy-idautoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
|
||||
// | arn:aws:automate:region:ec2:recover | arn:aws:automate:region:ec2:reboot
|
||||
// | arn:aws:sns:region:account-id:sns-topic-name | arn:aws:autoscaling:region:account-id:scalingPolicy:policy-idautoScalingGroupName/group-friendly-name:policyName/policy-friendly-name
|
||||
//
|
||||
// Valid Values (for use with IAM roles): arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0
|
||||
// | arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0
|
||||
// | arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0
|
||||
OKActions []*string `type:"list"`
|
||||
|
||||
// The period, in seconds, over which the specified statistic is applied. Valid
|
||||
// values are 10, 30, and any multiple of 60.
|
||||
// The length, in seconds, used each time the metric specified in MetricName
|
||||
// is evaluated. Valid values are 10, 30, and any multiple of 60.
|
||||
//
|
||||
// Be sure to specify 10 or 30 only for metrics that are stored by a PutMetricData
|
||||
// call with a StorageResolution of 1. If you specify a period of 10 or 30 for
|
||||
|
@ -4498,13 +4534,12 @@ type PutMetricAlarmInput struct {
|
|||
//
|
||||
// An alarm's total current evaluation period can be no longer than one day,
|
||||
// so Period multiplied by EvaluationPeriods cannot be more than 86,400 seconds.
|
||||
//
|
||||
// Period is a required field
|
||||
Period *int64 `min:"1" type:"integer" required:"true"`
|
||||
Period *int64 `min:"1" type:"integer"`
|
||||
|
||||
// The statistic for the metric associated with the alarm, other than percentile.
|
||||
// For percentile statistics, use ExtendedStatistic. When you call PutMetricAlarm,
|
||||
// you must specify either Statistic or ExtendedStatistic, but not both.
|
||||
// The statistic for the metric specified in MetricName, other than percentile.
|
||||
// For percentile statistics, use ExtendedStatistic. When you call PutMetricAlarm
|
||||
// and specify a MetricName, you must specify either Statistic or ExtendedStatistic,
|
||||
// but not both.
|
||||
Statistic *string `type:"string" enum:"Statistic"`
|
||||
|
||||
// The value against which the specified statistic is compared.
|
||||
|
@ -4565,21 +4600,12 @@ func (s *PutMetricAlarmInput) Validate() error {
|
|||
if s.EvaluationPeriods != nil && *s.EvaluationPeriods < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinValue("EvaluationPeriods", 1))
|
||||
}
|
||||
if s.MetricName == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("MetricName"))
|
||||
}
|
||||
if s.MetricName != nil && len(*s.MetricName) < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("MetricName", 1))
|
||||
}
|
||||
if s.Namespace == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Namespace"))
|
||||
}
|
||||
if s.Namespace != nil && len(*s.Namespace) < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("Namespace", 1))
|
||||
}
|
||||
if s.Period == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Period"))
|
||||
}
|
||||
if s.Period != nil && *s.Period < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinValue("Period", 1))
|
||||
}
|
||||
|
@ -4599,6 +4625,16 @@ func (s *PutMetricAlarmInput) Validate() error {
|
|||
}
|
||||
}
|
||||
}
|
||||
if s.Metrics != nil {
|
||||
for i, v := range s.Metrics {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
if err := v.Validate(); err != nil {
|
||||
invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Metrics", i), err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
|
@ -4678,6 +4714,12 @@ func (s *PutMetricAlarmInput) SetMetricName(v string) *PutMetricAlarmInput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetMetrics sets the Metrics field's value.
|
||||
func (s *PutMetricAlarmInput) SetMetrics(v []*MetricDataQuery) *PutMetricAlarmInput {
|
||||
s.Metrics = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetNamespace sets the Namespace field's value.
|
||||
func (s *PutMetricAlarmInput) SetNamespace(v string) *PutMetricAlarmInput {
|
||||
s.Namespace = &v
|
||||
|
|
|
@ -52,8 +52,7 @@ func (c *CloudWatchEvents) DeleteRuleRequest(input *DeleteRuleInput) (req *reque
|
|||
|
||||
output = &DeleteRuleOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -66,6 +65,12 @@ func (c *CloudWatchEvents) DeleteRuleRequest(input *DeleteRuleInput) (req *reque
|
|||
// When you delete a rule, incoming events might continue to match to the deleted
|
||||
// rule. Allow a short period of time for changes to take effect.
|
||||
//
|
||||
// Managed rules are rules created and managed by another AWS service on your
|
||||
// behalf. These rules are created by those other AWS services to support functionality
|
||||
// in those services. You can delete these rules using the Force option, but
|
||||
// you should do so only if you are sure the other service is not still using
|
||||
// that rule.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
// the error.
|
||||
|
@ -77,6 +82,13 @@ func (c *CloudWatchEvents) DeleteRuleRequest(input *DeleteRuleInput) (req *reque
|
|||
// * ErrCodeConcurrentModificationException "ConcurrentModificationException"
|
||||
// There is concurrent modification on a rule or target.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -310,8 +322,7 @@ func (c *CloudWatchEvents) DisableRuleRequest(input *DisableRuleInput) (req *req
|
|||
|
||||
output = &DisableRuleOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -337,6 +348,13 @@ func (c *CloudWatchEvents) DisableRuleRequest(input *DisableRuleInput) (req *req
|
|||
// * ErrCodeConcurrentModificationException "ConcurrentModificationException"
|
||||
// There is concurrent modification on a rule or target.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -401,8 +419,7 @@ func (c *CloudWatchEvents) EnableRuleRequest(input *EnableRuleInput) (req *reque
|
|||
|
||||
output = &EnableRuleOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -428,6 +445,13 @@ func (c *CloudWatchEvents) EnableRuleRequest(input *EnableRuleInput) (req *reque
|
|||
// * ErrCodeConcurrentModificationException "ConcurrentModificationException"
|
||||
// There is concurrent modification on a rule or target.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -817,23 +841,32 @@ func (c *CloudWatchEvents) PutPermissionRequest(input *PutPermissionInput) (req
|
|||
|
||||
output = &PutPermissionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
// PutPermission API operation for Amazon CloudWatch Events.
|
||||
//
|
||||
// Running PutPermission permits the specified AWS account to put events to
|
||||
// your account's default event bus. CloudWatch Events rules in your account
|
||||
// are triggered by these events arriving to your default event bus.
|
||||
// Running PutPermission permits the specified AWS account or AWS organization
|
||||
// to put events to your account's default event bus. CloudWatch Events rules
|
||||
// in your account are triggered by these events arriving to your default event
|
||||
// bus.
|
||||
//
|
||||
// For another account to send events to your account, that external account
|
||||
// must have a CloudWatch Events rule with your account's default event bus
|
||||
// as a target.
|
||||
//
|
||||
// To enable multiple AWS accounts to put events to your default event bus,
|
||||
// run PutPermission once for each of these accounts.
|
||||
// run PutPermission once for each of these accounts. Or, if all the accounts
|
||||
// are members of the same AWS organization, you can run PutPermission once
|
||||
// specifying Principal as "*" and specifying the AWS organization ID in Condition,
|
||||
// to grant permissions to all accounts in that organization.
|
||||
//
|
||||
// If you grant permissions using an organization, then accounts in that organization
|
||||
// must specify a RoleArn with proper permissions when they use PutTarget to
|
||||
// add your account's event bus as a target. For more information, see Sending
|
||||
// and Receiving Events Between AWS Accounts (http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html)
|
||||
// in the Amazon CloudWatch Events User Guide.
|
||||
//
|
||||
// The permission policy on the default event bus cannot exceed 10 KB in size.
|
||||
//
|
||||
|
@ -946,6 +979,20 @@ func (c *CloudWatchEvents) PutRuleRequest(input *PutRuleInput) (req *request.Req
|
|||
// and rules. Be sure to use the correct ARN characters when creating event
|
||||
// patterns so that they match the ARN syntax in the event you want to match.
|
||||
//
|
||||
// In CloudWatch Events, it is possible to create rules that lead to infinite
|
||||
// loops, where a rule is fired repeatedly. For example, a rule might detect
|
||||
// that ACLs have changed on an S3 bucket, and trigger software to change them
|
||||
// to the desired state. If the rule is not written carefully, the subsequent
|
||||
// change to the ACLs fires the rule again, creating an infinite loop.
|
||||
//
|
||||
// To prevent this, write the rules so that the triggered actions do not re-fire
|
||||
// the same rule. For example, your rule could fire only if ACLs are found to
|
||||
// be in a bad state, instead of after any change.
|
||||
//
|
||||
// An infinite loop can quickly cause higher than expected charges. We recommend
|
||||
// that you use budgeting, which alerts you when charges exceed your specified
|
||||
// limit. For more information, see Managing Your Costs with Budgets (http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html).
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
// the error.
|
||||
|
@ -963,6 +1010,13 @@ func (c *CloudWatchEvents) PutRuleRequest(input *PutRuleInput) (req *request.Req
|
|||
// * ErrCodeConcurrentModificationException "ConcurrentModificationException"
|
||||
// There is concurrent modification on a rule or target.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -1096,6 +1150,13 @@ func (c *CloudWatchEvents) PutTargetsRequest(input *PutTargetsInput) (req *reque
|
|||
// is charged as a custom event. The account receiving the event is not charged.
|
||||
// For more information, see Amazon CloudWatch Pricing (https://aws.amazon.com/cloudwatch/pricing/).
|
||||
//
|
||||
// If you are setting the event bus of another account as the target, and that
|
||||
// account granted permission to your account through an organization instead
|
||||
// of directly by the account ID, then you must specify a RoleArn with proper
|
||||
// permissions in the Target structure. For more information, see Sending and
|
||||
// Receiving Events Between AWS Accounts (http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html)
|
||||
// in the Amazon CloudWatch Events User Guide.
|
||||
//
|
||||
// For more information about enabling cross-account events, see PutPermission.
|
||||
//
|
||||
// Input, InputPath, and InputTransformer are mutually exclusive and optional
|
||||
|
@ -1146,6 +1207,13 @@ func (c *CloudWatchEvents) PutTargetsRequest(input *PutTargetsInput) (req *reque
|
|||
// * ErrCodeLimitExceededException "LimitExceededException"
|
||||
// You tried to create more rules or add more targets to a rule than is allowed.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -1210,8 +1278,7 @@ func (c *CloudWatchEvents) RemovePermissionRequest(input *RemovePermissionInput)
|
|||
|
||||
output = &RemovePermissionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1331,6 +1398,13 @@ func (c *CloudWatchEvents) RemoveTargetsRequest(input *RemoveTargetsInput) (req
|
|||
// * ErrCodeConcurrentModificationException "ConcurrentModificationException"
|
||||
// There is concurrent modification on a rule or target.
|
||||
//
|
||||
// * ErrCodeManagedRuleException "ManagedRuleException"
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
//
|
||||
// * ErrCodeInternalException "InternalException"
|
||||
// This exception occurs due to unexpected causes.
|
||||
//
|
||||
|
@ -1642,9 +1716,90 @@ func (s *BatchRetryStrategy) SetAttempts(v int64) *BatchRetryStrategy {
|
|||
return s
|
||||
}
|
||||
|
||||
// A JSON string which you can use to limit the event bus permissions you are
|
||||
// granting to only accounts that fulfill the condition. Currently, the only
|
||||
// supported condition is membership in a certain AWS organization. The string
|
||||
// must contain Type, Key, and Value fields. The Value field specifies the ID
|
||||
// of the AWS organization. Following is an example value for Condition:
|
||||
//
|
||||
// '{"Type" : "StringEquals", "Key": "aws:PrincipalOrgID", "Value": "o-1234567890"}'
|
||||
type Condition struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// Specifies the key for the condition. Currently the only supported key is
|
||||
// aws:PrincipalOrgID.
|
||||
//
|
||||
// Key is a required field
|
||||
Key *string `type:"string" required:"true"`
|
||||
|
||||
// Specifies the type of condition. Currently the only supported value is StringEquals.
|
||||
//
|
||||
// Type is a required field
|
||||
Type *string `type:"string" required:"true"`
|
||||
|
||||
// Specifies the value for the key. Currently, this must be the ID of the organization.
|
||||
//
|
||||
// Value is a required field
|
||||
Value *string `type:"string" required:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
func (s Condition) String() string {
|
||||
return awsutil.Prettify(s)
|
||||
}
|
||||
|
||||
// GoString returns the string representation
|
||||
func (s Condition) GoString() string {
|
||||
return s.String()
|
||||
}
|
||||
|
||||
// Validate inspects the fields of the type to determine if they are valid.
|
||||
func (s *Condition) Validate() error {
|
||||
invalidParams := request.ErrInvalidParams{Context: "Condition"}
|
||||
if s.Key == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Key"))
|
||||
}
|
||||
if s.Type == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Type"))
|
||||
}
|
||||
if s.Value == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Value"))
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetKey sets the Key field's value.
|
||||
func (s *Condition) SetKey(v string) *Condition {
|
||||
s.Key = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetType sets the Type field's value.
|
||||
func (s *Condition) SetType(v string) *Condition {
|
||||
s.Type = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetValue sets the Value field's value.
|
||||
func (s *Condition) SetValue(v string) *Condition {
|
||||
s.Value = &v
|
||||
return s
|
||||
}
|
||||
|
||||
type DeleteRuleInput struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// If this is a managed rule, created by an AWS service on your behalf, you
|
||||
// must specify Force as True to delete the rule. This parameter is ignored
|
||||
// for rules that are not managed rules. You can check whether a rule is a managed
|
||||
// rule by using DescribeRule or ListRules and checking the ManagedBy field
|
||||
// of the response.
|
||||
Force *bool `type:"boolean"`
|
||||
|
||||
// The name of the rule.
|
||||
//
|
||||
// Name is a required field
|
||||
|
@ -1677,6 +1832,12 @@ func (s *DeleteRuleInput) Validate() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// SetForce sets the Force field's value.
|
||||
func (s *DeleteRuleInput) SetForce(v bool) *DeleteRuleInput {
|
||||
s.Force = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetName sets the Name field's value.
|
||||
func (s *DeleteRuleInput) SetName(v string) *DeleteRuleInput {
|
||||
s.Name = &v
|
||||
|
@ -1807,6 +1968,10 @@ type DescribeRuleOutput struct {
|
|||
// in the Amazon CloudWatch Events User Guide.
|
||||
EventPattern *string `type:"string"`
|
||||
|
||||
// If this is a managed rule, created by an AWS service on your behalf, this
|
||||
// field displays the principal name of the AWS service that created the rule.
|
||||
ManagedBy *string `min:"1" type:"string"`
|
||||
|
||||
// The name of the rule.
|
||||
Name *string `min:"1" type:"string"`
|
||||
|
||||
|
@ -1848,6 +2013,12 @@ func (s *DescribeRuleOutput) SetEventPattern(v string) *DescribeRuleOutput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetManagedBy sets the ManagedBy field's value.
|
||||
func (s *DescribeRuleOutput) SetManagedBy(v string) *DescribeRuleOutput {
|
||||
s.ManagedBy = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetName sets the Name field's value.
|
||||
func (s *DescribeRuleOutput) SetName(v string) *DescribeRuleOutput {
|
||||
s.Name = &v
|
||||
|
@ -2754,15 +2925,28 @@ type PutPermissionInput struct {
|
|||
// Action is a required field
|
||||
Action *string `min:"1" type:"string" required:"true"`
|
||||
|
||||
// This parameter enables you to limit the permission to accounts that fulfill
|
||||
// a certain condition, such as being a member of a certain AWS organization.
|
||||
// For more information about AWS Organizations, see What Is AWS Organizations
|
||||
// (http://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
|
||||
// in the AWS Organizations User Guide.
|
||||
//
|
||||
// If you specify Condition with an AWS organization ID, and specify "*" as
|
||||
// the value for Principal, you grant permission to all the accounts in the
|
||||
// named organization.
|
||||
//
|
||||
// The Condition is a JSON string which must contain Type, Key, and Value fields.
|
||||
Condition *Condition `type:"structure"`
|
||||
|
||||
// The 12-digit AWS account ID that you are permitting to put events to your
|
||||
// default event bus. Specify "*" to permit any account to put events to your
|
||||
// default event bus.
|
||||
//
|
||||
// If you specify "*", avoid creating rules that may match undesirable events.
|
||||
// To create more secure rules, make sure that the event pattern for each rule
|
||||
// contains an account field with a specific account ID from which to receive
|
||||
// events. Rules with an account field do not match any events sent from other
|
||||
// accounts.
|
||||
// If you specify "*" without specifying Condition, avoid creating rules that
|
||||
// may match undesirable events. To create more secure rules, make sure that
|
||||
// the event pattern for each rule contains an account field with a specific
|
||||
// account ID from which to receive events. Rules with an account field do not
|
||||
// match any events sent from other accounts.
|
||||
//
|
||||
// Principal is a required field
|
||||
Principal *string `min:"1" type:"string" required:"true"`
|
||||
|
@ -2806,6 +2990,11 @@ func (s *PutPermissionInput) Validate() error {
|
|||
if s.StatementId != nil && len(*s.StatementId) < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("StatementId", 1))
|
||||
}
|
||||
if s.Condition != nil {
|
||||
if err := s.Condition.Validate(); err != nil {
|
||||
invalidParams.AddNested("Condition", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
|
@ -2819,6 +3008,12 @@ func (s *PutPermissionInput) SetAction(v string) *PutPermissionInput {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetCondition sets the Condition field's value.
|
||||
func (s *PutPermissionInput) SetCondition(v *Condition) *PutPermissionInput {
|
||||
s.Condition = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetPrincipal sets the Principal field's value.
|
||||
func (s *PutPermissionInput) SetPrincipal(v string) *PutPermissionInput {
|
||||
s.Principal = &v
|
||||
|
@ -3161,6 +3356,13 @@ func (s RemovePermissionOutput) GoString() string {
|
|||
type RemoveTargetsInput struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// If this is a managed rule, created by an AWS service on your behalf, you
|
||||
// must specify Force as True to remove targets. This parameter is ignored for
|
||||
// rules that are not managed rules. You can check whether a rule is a managed
|
||||
// rule by using DescribeRule or ListRules and checking the ManagedBy field
|
||||
// of the response.
|
||||
Force *bool `type:"boolean"`
|
||||
|
||||
// The IDs of the targets to remove from the rule.
|
||||
//
|
||||
// Ids is a required field
|
||||
|
@ -3204,6 +3406,12 @@ func (s *RemoveTargetsInput) Validate() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// SetForce sets the Force field's value.
|
||||
func (s *RemoveTargetsInput) SetForce(v bool) *RemoveTargetsInput {
|
||||
s.Force = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetIds sets the Ids field's value.
|
||||
func (s *RemoveTargetsInput) SetIds(v []*string) *RemoveTargetsInput {
|
||||
s.Ids = v
|
||||
|
@ -3307,6 +3515,10 @@ type Rule struct {
|
|||
// in the Amazon CloudWatch Events User Guide.
|
||||
EventPattern *string `type:"string"`
|
||||
|
||||
// If the rule was created on behalf of your account by an AWS service, this
|
||||
// field displays the principal name of the service that created the rule.
|
||||
ManagedBy *string `min:"1" type:"string"`
|
||||
|
||||
// The name of the rule.
|
||||
Name *string `min:"1" type:"string"`
|
||||
|
||||
|
@ -3348,6 +3560,12 @@ func (s *Rule) SetEventPattern(v string) *Rule {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetManagedBy sets the ManagedBy field's value.
|
||||
func (s *Rule) SetManagedBy(v string) *Rule {
|
||||
s.ManagedBy = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetName sets the Name field's value.
|
||||
func (s *Rule) SetName(v string) *Rule {
|
||||
s.Name = &v
|
||||
|
@ -3515,6 +3733,13 @@ func (s *SqsParameters) SetMessageGroupId(v string) *SqsParameters {
|
|||
|
||||
// Targets are the resources to be invoked when a rule is triggered. For a complete
|
||||
// list of services and resources that can be set as a target, see PutTargets.
|
||||
//
|
||||
// If you are setting the event bus of another account as the target, and that
|
||||
// account granted permission to your account through an organization instead
|
||||
// of directly by the account ID, then you must specify a RoleArn with proper
|
||||
// permissions in the Target structure. For more information, see Sending and
|
||||
// Receiving Events Between AWS Accounts (http://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html)
|
||||
// in the Amazon CloudWatch Events User Guide.
|
||||
type Target struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
// resources. When your resources change state, they automatically send events
|
||||
// into an event stream. You can create rules that match selected events in
|
||||
// the stream and route them to targets to take action. You can also use rules
|
||||
// to take action on a pre-determined schedule. For example, you can configure
|
||||
// to take action on a predetermined schedule. For example, you can configure
|
||||
// rules to:
|
||||
//
|
||||
// * Automatically invoke an AWS Lambda function to update DNS entries when
|
||||
|
|
|
@ -28,6 +28,16 @@ const (
|
|||
// You tried to create more rules or add more targets to a rule than is allowed.
|
||||
ErrCodeLimitExceededException = "LimitExceededException"
|
||||
|
||||
// ErrCodeManagedRuleException for service response error code
|
||||
// "ManagedRuleException".
|
||||
//
|
||||
// This rule was created by an AWS service on behalf of your account. It is
|
||||
// managed by that service. If you see this error in response to DeleteRule
|
||||
// or RemoveTargets, you can use the Force parameter in those calls to delete
|
||||
// the rule or remove targets from the rule. You cannot modify these managed
|
||||
// rules by using DisableRule, EnableRule, PutTargets, or PutRule.
|
||||
ErrCodeManagedRuleException = "ManagedRuleException"
|
||||
|
||||
// ErrCodePolicyLengthExceededException for service response error code
|
||||
// "PolicyLengthExceededException".
|
||||
//
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -34,6 +34,16 @@ const (
|
|||
// You have reached the maximum number of resources that can be created.
|
||||
ErrCodeLimitExceededException = "LimitExceededException"
|
||||
|
||||
// ErrCodeMalformedQueryException for service response error code
|
||||
// "MalformedQueryException".
|
||||
//
|
||||
// The query string is not valid. Details about this error are displayed in
|
||||
// a QueryCompileError object. For more information, see .
|
||||
//
|
||||
// For more information about valid query syntax, see CloudWatch Logs Insights
|
||||
// Query Syntax (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html).
|
||||
ErrCodeMalformedQueryException = "MalformedQueryException"
|
||||
|
||||
// ErrCodeOperationAbortedException for service response error code
|
||||
// "OperationAbortedException".
|
||||
//
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,7 +10,7 @@
|
|||
// for the most popular programming languages and build tools, such as Apache
|
||||
// Maven, Gradle, and more. You can also fully customize build environments
|
||||
// in AWS CodeBuild to use your own build tools. AWS CodeBuild scales automatically
|
||||
// to meet peak build requests, and you pay only for the build time you consume.
|
||||
// to meet peak build requests. You pay only for the build time you consume.
|
||||
// For more information about AWS CodeBuild, see the AWS CodeBuild User Guide.
|
||||
//
|
||||
// AWS CodeBuild supports these operations:
|
||||
|
@ -18,19 +18,18 @@
|
|||
// * BatchDeleteBuilds: Deletes one or more builds.
|
||||
//
|
||||
// * BatchGetProjects: Gets information about one or more build projects.
|
||||
// A build project defines how AWS CodeBuild will run a build. This includes
|
||||
// A build project defines how AWS CodeBuild runs a build. This includes
|
||||
// information such as where to get the source code to build, the build environment
|
||||
// to use, the build commands to run, and where to store the build output.
|
||||
// A build environment represents a combination of operating system, programming
|
||||
// language runtime, and tools that AWS CodeBuild will use to run a build.
|
||||
// Also, you can add tags to build projects to help manage your resources
|
||||
// and costs.
|
||||
// A build environment is a representation of operating system, programming
|
||||
// language runtime, and tools that AWS CodeBuild uses to run a build. You
|
||||
// can add tags to build projects to help manage your resources and costs.
|
||||
//
|
||||
// * CreateProject: Creates a build project.
|
||||
//
|
||||
// * CreateWebhook: For an existing AWS CodeBuild build project that has
|
||||
// its source code stored in a GitHub repository, enables AWS CodeBuild to
|
||||
// begin automatically rebuilding the source code every time a code change
|
||||
// its source code stored in a GitHub or Bitbucket repository, enables AWS
|
||||
// CodeBuild to start rebuilding the source code every time a code change
|
||||
// is pushed to the repository.
|
||||
//
|
||||
// * UpdateWebhook: Changes the settings of an existing webhook.
|
||||
|
@ -38,9 +37,9 @@
|
|||
// * DeleteProject: Deletes a build project.
|
||||
//
|
||||
// * DeleteWebhook: For an existing AWS CodeBuild build project that has
|
||||
// its source code stored in a GitHub repository, stops AWS CodeBuild from
|
||||
// automatically rebuilding the source code every time a code change is pushed
|
||||
// to the repository.
|
||||
// its source code stored in a GitHub or Bitbucket repository, stops AWS
|
||||
// CodeBuild from rebuilding the source code every time a code change is
|
||||
// pushed to the repository.
|
||||
//
|
||||
// * ListProjects: Gets a list of build project names, with each build project
|
||||
// name representing a single build project.
|
||||
|
@ -62,6 +61,17 @@
|
|||
// * ListCuratedEnvironmentImages: Gets information about Docker images that
|
||||
// are managed by AWS CodeBuild.
|
||||
//
|
||||
// * DeleteSourceCredentials: Deletes a set of GitHub, GitHub Enterprise,
|
||||
// or Bitbucket source credentials.
|
||||
//
|
||||
// * ImportSourceCredentials: Imports the source repository credentials for
|
||||
// an AWS CodeBuild project that has its source code stored in a GitHub,
|
||||
// GitHub Enterprise, or Bitbucket repository.
|
||||
//
|
||||
// * ListSourceCredentials: Returns a list of SourceCredentialsInfo objects.
|
||||
// Each SourceCredentialsInfo object includes the authentication type, token
|
||||
// ARN, and type of source provider for one set of credentials.
|
||||
//
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/codebuild-2016-10-06 for more information on this service.
|
||||
//
|
||||
// See codebuild package documentation for more information.
|
||||
|
|
|
@ -163,8 +163,7 @@ func (c *CodeCommit) CreateBranchRequest(input *CreateBranchInput) (req *request
|
|||
|
||||
output = &CreateBranchOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4581,8 +4580,7 @@ func (c *CodeCommit) UpdateDefaultBranchRequest(input *UpdateDefaultBranchInput)
|
|||
|
||||
output = &UpdateDefaultBranchOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -5007,8 +5005,7 @@ func (c *CodeCommit) UpdateRepositoryDescriptionRequest(input *UpdateRepositoryD
|
|||
|
||||
output = &UpdateRepositoryDescriptionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -5122,8 +5119,7 @@ func (c *CodeCommit) UpdateRepositoryNameRequest(input *UpdateRepositoryNameInpu
|
|||
|
||||
output = &UpdateRepositoryNameOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -141,12 +141,40 @@ const (
|
|||
// The specified deployment has not started.
|
||||
ErrCodeDeploymentNotStartedException = "DeploymentNotStartedException"
|
||||
|
||||
// ErrCodeDeploymentTargetDoesNotExistException for service response error code
|
||||
// "DeploymentTargetDoesNotExistException".
|
||||
//
|
||||
// The provided target ID does not belong to the attempted deployment.
|
||||
ErrCodeDeploymentTargetDoesNotExistException = "DeploymentTargetDoesNotExistException"
|
||||
|
||||
// ErrCodeDeploymentTargetIdRequiredException for service response error code
|
||||
// "DeploymentTargetIdRequiredException".
|
||||
//
|
||||
// A deployment target ID was not provided.
|
||||
ErrCodeDeploymentTargetIdRequiredException = "DeploymentTargetIdRequiredException"
|
||||
|
||||
// ErrCodeDeploymentTargetListSizeExceededException for service response error code
|
||||
// "DeploymentTargetListSizeExceededException".
|
||||
//
|
||||
// The maximum number of targets that can be associated with an Amazon ECS or
|
||||
// AWS Lambda deployment was exceeded. The target list of both types of deployments
|
||||
// must have exactly one item. This exception does not apply to EC2/On-premises
|
||||
// deployments.
|
||||
ErrCodeDeploymentTargetListSizeExceededException = "DeploymentTargetListSizeExceededException"
|
||||
|
||||
// ErrCodeDescriptionTooLongException for service response error code
|
||||
// "DescriptionTooLongException".
|
||||
//
|
||||
// The description is too long.
|
||||
ErrCodeDescriptionTooLongException = "DescriptionTooLongException"
|
||||
|
||||
// ErrCodeECSServiceMappingLimitExceededException for service response error code
|
||||
// "ECSServiceMappingLimitExceededException".
|
||||
//
|
||||
// The Amazon ECS service is associated with more than one deployment groups.
|
||||
// An ECS service can only be associated with one deployment group.
|
||||
ErrCodeECSServiceMappingLimitExceededException = "ECSServiceMappingLimitExceededException"
|
||||
|
||||
// ErrCodeGitHubAccountTokenDoesNotExistException for service response error code
|
||||
// "GitHubAccountTokenDoesNotExistException".
|
||||
//
|
||||
|
@ -323,6 +351,18 @@ const (
|
|||
// and "WITHOUT_TRAFFIC_CONTROL".
|
||||
ErrCodeInvalidDeploymentStyleException = "InvalidDeploymentStyleException"
|
||||
|
||||
// ErrCodeInvalidDeploymentTargetIdException for service response error code
|
||||
// "InvalidDeploymentTargetIdException".
|
||||
//
|
||||
// The target ID provide was not valid.
|
||||
ErrCodeInvalidDeploymentTargetIdException = "InvalidDeploymentTargetIdException"
|
||||
|
||||
// ErrCodeInvalidDeploymentWaitTypeException for service response error code
|
||||
// "InvalidDeploymentWaitTypeException".
|
||||
//
|
||||
// The wait type is invalid.
|
||||
ErrCodeInvalidDeploymentWaitTypeException = "InvalidDeploymentWaitTypeException"
|
||||
|
||||
// ErrCodeInvalidEC2TagCombinationException for service response error code
|
||||
// "InvalidEC2TagCombinationException".
|
||||
//
|
||||
|
@ -336,6 +376,12 @@ const (
|
|||
// The tag was specified in an invalid format.
|
||||
ErrCodeInvalidEC2TagException = "InvalidEC2TagException"
|
||||
|
||||
// ErrCodeInvalidECSServiceException for service response error code
|
||||
// "InvalidECSServiceException".
|
||||
//
|
||||
// The Amazon ECS service identifier is not valid.
|
||||
ErrCodeInvalidECSServiceException = "InvalidECSServiceException"
|
||||
|
||||
// ErrCodeInvalidFileExistsBehaviorException for service response error code
|
||||
// "InvalidFileExistsBehaviorException".
|
||||
//
|
||||
|
@ -498,6 +544,18 @@ const (
|
|||
// The specified tag filter was specified in an invalid format.
|
||||
ErrCodeInvalidTagFilterException = "InvalidTagFilterException"
|
||||
|
||||
// ErrCodeInvalidTargetFilterNameException for service response error code
|
||||
// "InvalidTargetFilterNameException".
|
||||
//
|
||||
// The target filter name is invalid.
|
||||
ErrCodeInvalidTargetFilterNameException = "InvalidTargetFilterNameException"
|
||||
|
||||
// ErrCodeInvalidTargetGroupPairException for service response error code
|
||||
// "InvalidTargetGroupPairException".
|
||||
//
|
||||
// A target group pair associated with this deployment is not valid.
|
||||
ErrCodeInvalidTargetGroupPairException = "InvalidTargetGroupPairException"
|
||||
|
||||
// ErrCodeInvalidTargetInstancesException for service response error code
|
||||
// "InvalidTargetInstancesException".
|
||||
//
|
||||
|
|
|
@ -409,8 +409,7 @@ func (c *CodePipeline) DeleteCustomActionTypeRequest(input *DeleteCustomActionTy
|
|||
|
||||
output = &DeleteCustomActionTypeOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -497,8 +496,7 @@ func (c *CodePipeline) DeletePipelineRequest(input *DeletePipelineInput) (req *r
|
|||
|
||||
output = &DeletePipelineOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -578,6 +576,7 @@ func (c *CodePipeline) DeleteWebhookRequest(input *DeleteWebhookInput) (req *req
|
|||
|
||||
output = &DeleteWebhookOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -661,6 +660,7 @@ func (c *CodePipeline) DeregisterWebhookWithThirdPartyRequest(input *DeregisterW
|
|||
|
||||
output = &DeregisterWebhookWithThirdPartyOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -745,8 +745,7 @@ func (c *CodePipeline) DisableStageTransitionRequest(input *DisableStageTransiti
|
|||
|
||||
output = &DisableStageTransitionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -833,8 +832,7 @@ func (c *CodePipeline) EnableStageTransitionRequest(input *EnableStageTransition
|
|||
|
||||
output = &EnableStageTransitionOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2058,8 +2056,7 @@ func (c *CodePipeline) PutJobFailureResultRequest(input *PutJobFailureResultInpu
|
|||
|
||||
output = &PutJobFailureResultOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2146,8 +2143,7 @@ func (c *CodePipeline) PutJobSuccessResultRequest(input *PutJobSuccessResultInpu
|
|||
|
||||
output = &PutJobSuccessResultOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2234,8 +2230,7 @@ func (c *CodePipeline) PutThirdPartyJobFailureResultRequest(input *PutThirdParty
|
|||
|
||||
output = &PutThirdPartyJobFailureResultOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2325,8 +2320,7 @@ func (c *CodePipeline) PutThirdPartyJobSuccessResultRequest(input *PutThirdParty
|
|||
|
||||
output = &PutThirdPartyJobSuccessResultOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2515,6 +2509,7 @@ func (c *CodePipeline) RegisterWebhookWithThirdPartyRequest(input *RegisterWebho
|
|||
|
||||
output = &RegisterWebhookWithThirdPartyOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2840,7 +2835,7 @@ func (c *CodePipeline) UpdatePipelineWithContext(ctx aws.Context, input *UpdateP
|
|||
// used to access input and output artifacts in the Amazon S3 bucket used to
|
||||
// store artifact for the pipeline in AWS CodePipeline.
|
||||
type AWSSessionCredentials struct {
|
||||
_ struct{} `type:"structure"`
|
||||
_ struct{} `type:"structure" sensitive:"true"`
|
||||
|
||||
// The access key for the session.
|
||||
//
|
||||
|
@ -3273,6 +3268,9 @@ type ActionDeclaration struct {
|
|||
// build artifact.
|
||||
OutputArtifacts []*OutputArtifact `locationName:"outputArtifacts" type:"list"`
|
||||
|
||||
// The action declaration's AWS Region, such as us-east-1.
|
||||
Region *string `locationName:"region" min:"4" type:"string"`
|
||||
|
||||
// The ARN of the IAM service role that will perform the declared action. This
|
||||
// is assumed through the roleArn for the pipeline.
|
||||
RoleArn *string `locationName:"roleArn" type:"string"`
|
||||
|
@ -3303,6 +3301,9 @@ func (s *ActionDeclaration) Validate() error {
|
|||
if s.Name != nil && len(*s.Name) < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("Name", 1))
|
||||
}
|
||||
if s.Region != nil && len(*s.Region) < 4 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("Region", 4))
|
||||
}
|
||||
if s.RunOrder != nil && *s.RunOrder < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinValue("RunOrder", 1))
|
||||
}
|
||||
|
@ -3368,6 +3369,12 @@ func (s *ActionDeclaration) SetOutputArtifacts(v []*OutputArtifact) *ActionDecla
|
|||
return s
|
||||
}
|
||||
|
||||
// SetRegion sets the Region field's value.
|
||||
func (s *ActionDeclaration) SetRegion(v string) *ActionDeclaration {
|
||||
s.Region = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetRoleArn sets the RoleArn field's value.
|
||||
func (s *ActionDeclaration) SetRoleArn(v string) *ActionDeclaration {
|
||||
s.RoleArn = &v
|
||||
|
@ -5794,7 +5801,7 @@ type JobData struct {
|
|||
// credentials that are issued by AWS Secure Token Service (STS). They can be
|
||||
// used to access input and output artifacts in the Amazon S3 bucket used to
|
||||
// store artifact for the pipeline in AWS CodePipeline.
|
||||
ArtifactCredentials *AWSSessionCredentials `locationName:"artifactCredentials" type:"structure"`
|
||||
ArtifactCredentials *AWSSessionCredentials `locationName:"artifactCredentials" type:"structure" sensitive:"true"`
|
||||
|
||||
// A system-generated token, such as a AWS CodeDeploy deployment ID, that a
|
||||
// job requires in order to continue the job asynchronously.
|
||||
|
@ -6440,9 +6447,15 @@ type PipelineDeclaration struct {
|
|||
|
||||
// Represents information about the Amazon S3 bucket where artifacts are stored
|
||||
// for the pipeline.
|
||||
ArtifactStore *ArtifactStore `locationName:"artifactStore" type:"structure"`
|
||||
|
||||
// A mapping of artifactStore objects and their corresponding regions. There
|
||||
// must be an artifact store for the pipeline region and for each cross-region
|
||||
// action within the pipeline. You can only use either artifactStore or artifactStores,
|
||||
// not both.
|
||||
//
|
||||
// ArtifactStore is a required field
|
||||
ArtifactStore *ArtifactStore `locationName:"artifactStore" type:"structure" required:"true"`
|
||||
// If you create a cross-region action in your pipeline, you must use artifactStores.
|
||||
ArtifactStores map[string]*ArtifactStore `locationName:"artifactStores" type:"map"`
|
||||
|
||||
// The name of the action to be performed.
|
||||
//
|
||||
|
@ -6479,9 +6492,6 @@ func (s PipelineDeclaration) GoString() string {
|
|||
// Validate inspects the fields of the type to determine if they are valid.
|
||||
func (s *PipelineDeclaration) Validate() error {
|
||||
invalidParams := request.ErrInvalidParams{Context: "PipelineDeclaration"}
|
||||
if s.ArtifactStore == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("ArtifactStore"))
|
||||
}
|
||||
if s.Name == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Name"))
|
||||
}
|
||||
|
@ -6502,6 +6512,16 @@ func (s *PipelineDeclaration) Validate() error {
|
|||
invalidParams.AddNested("ArtifactStore", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
if s.ArtifactStores != nil {
|
||||
for i, v := range s.ArtifactStores {
|
||||
if v == nil {
|
||||
continue
|
||||
}
|
||||
if err := v.Validate(); err != nil {
|
||||
invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ArtifactStores", i), err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
}
|
||||
if s.Stages != nil {
|
||||
for i, v := range s.Stages {
|
||||
if v == nil {
|
||||
|
@ -6525,6 +6545,12 @@ func (s *PipelineDeclaration) SetArtifactStore(v *ArtifactStore) *PipelineDeclar
|
|||
return s
|
||||
}
|
||||
|
||||
// SetArtifactStores sets the ArtifactStores field's value.
|
||||
func (s *PipelineDeclaration) SetArtifactStores(v map[string]*ArtifactStore) *PipelineDeclaration {
|
||||
s.ArtifactStores = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetName sets the Name field's value.
|
||||
func (s *PipelineDeclaration) SetName(v string) *PipelineDeclaration {
|
||||
s.Name = &v
|
||||
|
@ -6630,6 +6656,7 @@ type PipelineExecutionSummary struct {
|
|||
// The ID of the pipeline execution.
|
||||
PipelineExecutionId *string `locationName:"pipelineExecutionId" type:"string"`
|
||||
|
||||
// A list of the source artifact revisions that initiated a pipeline execution.
|
||||
SourceRevisions []*SourceRevision `locationName:"sourceRevisions" type:"list"`
|
||||
|
||||
// The date and time when the pipeline execution began, in timestamp format.
|
||||
|
@ -7880,16 +7907,29 @@ func (s *S3ArtifactLocation) SetObjectKey(v string) *S3ArtifactLocation {
|
|||
return s
|
||||
}
|
||||
|
||||
// Information about the version (or revision) of a source artifact that initiated
|
||||
// a pipeline execution.
|
||||
type SourceRevision struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The name of the action that processed the revision to the source artifact.
|
||||
//
|
||||
// ActionName is a required field
|
||||
ActionName *string `locationName:"actionName" min:"1" type:"string" required:"true"`
|
||||
|
||||
// The system-generated unique ID that identifies the revision number of the
|
||||
// artifact.
|
||||
RevisionId *string `locationName:"revisionId" min:"1" type:"string"`
|
||||
|
||||
// Summary information about the most recent revision of the artifact. For GitHub
|
||||
// and AWS CodeCommit repositories, the commit message. For Amazon S3 buckets
|
||||
// or actions, the user-provided content of a codepipeline-artifact-revision-summary
|
||||
// key specified in the object metadata.
|
||||
RevisionSummary *string `locationName:"revisionSummary" min:"1" type:"string"`
|
||||
|
||||
// The commit ID for the artifact revision. For artifacts stored in GitHub or
|
||||
// AWS CodeCommit repositories, the commit ID is linked to a commit details
|
||||
// page.
|
||||
RevisionUrl *string `locationName:"revisionUrl" min:"1" type:"string"`
|
||||
}
|
||||
|
||||
|
@ -8130,6 +8170,9 @@ func (s *StageState) SetStageName(v string) *StageState {
|
|||
type StartPipelineExecutionInput struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The system-generated unique ID used to identify a unique execution request.
|
||||
ClientRequestToken *string `locationName:"clientRequestToken" min:"1" type:"string" idempotencyToken:"true"`
|
||||
|
||||
// The name of the pipeline to start.
|
||||
//
|
||||
// Name is a required field
|
||||
|
@ -8149,6 +8192,9 @@ func (s StartPipelineExecutionInput) GoString() string {
|
|||
// Validate inspects the fields of the type to determine if they are valid.
|
||||
func (s *StartPipelineExecutionInput) Validate() error {
|
||||
invalidParams := request.ErrInvalidParams{Context: "StartPipelineExecutionInput"}
|
||||
if s.ClientRequestToken != nil && len(*s.ClientRequestToken) < 1 {
|
||||
invalidParams.Add(request.NewErrParamMinLen("ClientRequestToken", 1))
|
||||
}
|
||||
if s.Name == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("Name"))
|
||||
}
|
||||
|
@ -8162,6 +8208,12 @@ func (s *StartPipelineExecutionInput) Validate() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// SetClientRequestToken sets the ClientRequestToken field's value.
|
||||
func (s *StartPipelineExecutionInput) SetClientRequestToken(v string) *StartPipelineExecutionInput {
|
||||
s.ClientRequestToken = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetName sets the Name field's value.
|
||||
func (s *StartPipelineExecutionInput) SetName(v string) *StartPipelineExecutionInput {
|
||||
s.Name = &v
|
||||
|
@ -8241,7 +8293,7 @@ type ThirdPartyJobData struct {
|
|||
// credentials that are issued by AWS Secure Token Service (STS). They can be
|
||||
// used to access input and output artifacts in the Amazon S3 bucket used to
|
||||
// store artifact for the pipeline in AWS CodePipeline.
|
||||
ArtifactCredentials *AWSSessionCredentials `locationName:"artifactCredentials" type:"structure"`
|
||||
ArtifactCredentials *AWSSessionCredentials `locationName:"artifactCredentials" type:"structure" sensitive:"true"`
|
||||
|
||||
// A system-generated token, such as a AWS CodeDeploy deployment ID, that a
|
||||
// job requires in order to continue the job asynchronously.
|
||||
|
@ -8491,11 +8543,17 @@ func (s *UpdatePipelineOutput) SetPipeline(v *PipelineDeclaration) *UpdatePipeli
|
|||
return s
|
||||
}
|
||||
|
||||
// The authentication applied to incoming webhook trigger requests.
|
||||
type WebhookAuthConfiguration struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The property used to configure acceptance of webhooks within a specific IP
|
||||
// range. For IP, only the AllowedIPRange property must be set, and this property
|
||||
// must be set to a valid CIDR range.
|
||||
AllowedIPRange *string `min:"1" type:"string"`
|
||||
|
||||
// The property used to configure GitHub authentication. For GITHUB_HMAC, only
|
||||
// the SecretToken property must be set.
|
||||
SecretToken *string `min:"1" type:"string"`
|
||||
}
|
||||
|
||||
|
|
|
@ -249,8 +249,7 @@ func (c *CognitoIdentity) DeleteIdentityPoolRequest(input *DeleteIdentityPoolInp
|
|||
|
||||
output = &DeleteIdentityPoolOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1463,8 +1462,7 @@ func (c *CognitoIdentity) SetIdentityPoolRolesRequest(input *SetIdentityPoolRole
|
|||
|
||||
output = &SetIdentityPoolRolesOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1567,8 +1565,7 @@ func (c *CognitoIdentity) UnlinkDeveloperIdentityRequest(input *UnlinkDeveloperI
|
|||
|
||||
output = &UnlinkDeveloperIdentityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1670,8 +1667,7 @@ func (c *CognitoIdentity) UnlinkIdentityRequest(input *UnlinkIdentityInput) (req
|
|||
|
||||
output = &UnlinkIdentityOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ func (c *CognitoIdentityProvider) AddCustomAttributesRequest(input *AddCustomAtt
|
|||
|
||||
output = &AddCustomAttributesOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -151,8 +152,7 @@ func (c *CognitoIdentityProvider) AdminAddUserToGroupRequest(input *AdminAddUser
|
|||
|
||||
output = &AdminAddUserToGroupOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -252,6 +252,7 @@ func (c *CognitoIdentityProvider) AdminConfirmSignUpRequest(input *AdminConfirmS
|
|||
|
||||
output = &AdminConfirmSignUpOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -523,8 +524,7 @@ func (c *CognitoIdentityProvider) AdminDeleteUserRequest(input *AdminDeleteUserI
|
|||
|
||||
output = &AdminDeleteUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -624,6 +624,7 @@ func (c *CognitoIdentityProvider) AdminDeleteUserAttributesRequest(input *AdminD
|
|||
|
||||
output = &AdminDeleteUserAttributesOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -724,6 +725,7 @@ func (c *CognitoIdentityProvider) AdminDisableProviderForUserRequest(input *Admi
|
|||
|
||||
output = &AdminDisableProviderForUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -855,6 +857,7 @@ func (c *CognitoIdentityProvider) AdminDisableUserRequest(input *AdminDisableUse
|
|||
|
||||
output = &AdminDisableUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -954,6 +957,7 @@ func (c *CognitoIdentityProvider) AdminEnableUserRequest(input *AdminEnableUserI
|
|||
|
||||
output = &AdminEnableUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1053,8 +1057,7 @@ func (c *CognitoIdentityProvider) AdminForgetDeviceRequest(input *AdminForgetDev
|
|||
|
||||
output = &AdminForgetDeviceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1490,6 +1493,7 @@ func (c *CognitoIdentityProvider) AdminLinkProviderForUserRequest(input *AdminLi
|
|||
|
||||
output = &AdminLinkProviderForUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1910,8 +1914,7 @@ func (c *CognitoIdentityProvider) AdminRemoveUserFromGroupRequest(input *AdminRe
|
|||
|
||||
output = &AdminRemoveUserFromGroupOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2011,6 +2014,7 @@ func (c *CognitoIdentityProvider) AdminResetUserPasswordRequest(input *AdminRese
|
|||
|
||||
output = &AdminResetUserPasswordOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2306,6 +2310,7 @@ func (c *CognitoIdentityProvider) AdminSetUserMFAPreferenceRequest(input *AdminS
|
|||
|
||||
output = &AdminSetUserMFAPreferenceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2405,6 +2410,7 @@ func (c *CognitoIdentityProvider) AdminSetUserSettingsRequest(input *AdminSetUse
|
|||
|
||||
output = &AdminSetUserSettingsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2500,6 +2506,7 @@ func (c *CognitoIdentityProvider) AdminUpdateAuthEventFeedbackRequest(input *Adm
|
|||
|
||||
output = &AdminUpdateAuthEventFeedbackOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2602,6 +2609,7 @@ func (c *CognitoIdentityProvider) AdminUpdateDeviceStatusRequest(input *AdminUpd
|
|||
|
||||
output = &AdminUpdateDeviceStatusOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2704,6 +2712,7 @@ func (c *CognitoIdentityProvider) AdminUpdateUserAttributesRequest(input *AdminU
|
|||
|
||||
output = &AdminUpdateUserAttributesOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -2828,6 +2837,7 @@ func (c *CognitoIdentityProvider) AdminUserGlobalSignOutRequest(input *AdminUser
|
|||
|
||||
output = &AdminUserGlobalSignOutOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3023,6 +3033,7 @@ func (c *CognitoIdentityProvider) ChangePasswordRequest(input *ChangePasswordInp
|
|||
output = &ChangePasswordOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3254,6 +3265,7 @@ func (c *CognitoIdentityProvider) ConfirmForgotPasswordRequest(input *ConfirmFor
|
|||
output = &ConfirmForgotPasswordOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3386,6 +3398,7 @@ func (c *CognitoIdentityProvider) ConfirmSignUpRequest(input *ConfirmSignUpInput
|
|||
output = &ConfirmSignUpOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4232,8 +4245,7 @@ func (c *CognitoIdentityProvider) DeleteGroupRequest(input *DeleteGroupInput) (r
|
|||
|
||||
output = &DeleteGroupOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4330,8 +4342,7 @@ func (c *CognitoIdentityProvider) DeleteIdentityProviderRequest(input *DeleteIde
|
|||
|
||||
output = &DeleteIdentityProviderOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4429,8 +4440,7 @@ func (c *CognitoIdentityProvider) DeleteResourceServerRequest(input *DeleteResou
|
|||
|
||||
output = &DeleteResourceServerOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4525,9 +4535,8 @@ func (c *CognitoIdentityProvider) DeleteUserRequest(input *DeleteUserInput) (req
|
|||
|
||||
output = &DeleteUserOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4632,6 +4641,7 @@ func (c *CognitoIdentityProvider) DeleteUserAttributesRequest(input *DeleteUserA
|
|||
output = &DeleteUserAttributesOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4735,8 +4745,7 @@ func (c *CognitoIdentityProvider) DeleteUserPoolRequest(input *DeleteUserPoolInp
|
|||
|
||||
output = &DeleteUserPoolOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4835,8 +4844,7 @@ func (c *CognitoIdentityProvider) DeleteUserPoolClientRequest(input *DeleteUserP
|
|||
|
||||
output = &DeleteUserPoolClientOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4931,6 +4939,7 @@ func (c *CognitoIdentityProvider) DeleteUserPoolDomainRequest(input *DeleteUserP
|
|||
|
||||
output = &DeleteUserPoolDomainOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -5683,8 +5692,7 @@ func (c *CognitoIdentityProvider) ForgetDeviceRequest(input *ForgetDeviceInput)
|
|||
|
||||
output = &ForgetDeviceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
|
||||
req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -6838,6 +6846,7 @@ func (c *CognitoIdentityProvider) GlobalSignOutRequest(input *GlobalSignOutInput
|
|||
|
||||
output = &GlobalSignOutOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -8414,6 +8423,7 @@ func (c *CognitoIdentityProvider) SetUserMFAPreferenceRequest(input *SetUserMFAP
|
|||
|
||||
output = &SetUserMFAPreferenceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -8618,6 +8628,7 @@ func (c *CognitoIdentityProvider) SetUserSettingsRequest(input *SetUserSettingsI
|
|||
output = &SetUserSettingsOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -9046,6 +9057,7 @@ func (c *CognitoIdentityProvider) UpdateAuthEventFeedbackRequest(input *UpdateAu
|
|||
|
||||
output = &UpdateAuthEventFeedbackOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -9148,6 +9160,7 @@ func (c *CognitoIdentityProvider) UpdateDeviceStatusRequest(input *UpdateDeviceS
|
|||
|
||||
output = &UpdateDeviceStatusOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -9687,6 +9700,7 @@ func (c *CognitoIdentityProvider) UpdateUserPoolRequest(input *UpdateUserPoolInp
|
|||
|
||||
output = &UpdateUserPoolOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -10037,6 +10051,7 @@ func (c *CognitoIdentityProvider) VerifyUserAttributeRequest(input *VerifyUserAt
|
|||
output = &VerifyUserAttributeOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Config.Credentials = credentials.AnonymousCredentials
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -10401,7 +10416,7 @@ type AdminAddUserToGroupInput struct {
|
|||
// The username for the user.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -10486,7 +10501,7 @@ type AdminConfirmSignUpInput struct {
|
|||
// The user name for which you want to confirm user registration.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -10652,7 +10667,7 @@ type AdminCreateUserInput struct {
|
|||
// limit that you specified when you created the user pool. To reset the account
|
||||
// after that time limit, you must call AdminCreateUser again, specifying "RESEND"
|
||||
// for the MessageAction parameter.
|
||||
TemporaryPassword *string `min:"6" type:"string"`
|
||||
TemporaryPassword *string `min:"6" type:"string" sensitive:"true"`
|
||||
|
||||
// An array of name-value pairs that contain user attributes and attribute values
|
||||
// to be set for the user to be created. You can create a user without specifying
|
||||
|
@ -10694,7 +10709,7 @@ type AdminCreateUserInput struct {
|
|||
// username cannot be changed.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The user's validation data. This is an array of name-value pairs that contain
|
||||
// user attributes and attribute values that you can use for custom validation,
|
||||
|
@ -10858,7 +10873,7 @@ type AdminDeleteUserAttributesInput struct {
|
|||
// The user name of the user from which you would like to delete attributes.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -10942,7 +10957,7 @@ type AdminDeleteUserInput struct {
|
|||
// The user name of the user you wish to delete.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11086,7 +11101,7 @@ type AdminDisableUserInput struct {
|
|||
// The user name of the user you wish to disable.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11161,7 +11176,7 @@ type AdminEnableUserInput struct {
|
|||
// The user name of the user you wish to enable.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11241,7 +11256,7 @@ type AdminForgetDeviceInput struct {
|
|||
// The user name.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11331,7 +11346,7 @@ type AdminGetDeviceInput struct {
|
|||
// The user name.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11429,7 +11444,7 @@ type AdminGetUserInput struct {
|
|||
// The user name of the user you wish to retrieve.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11518,7 +11533,7 @@ type AdminGetUserOutput struct {
|
|||
// The user name of the user about whom you are receiving information.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -11646,7 +11661,7 @@ type AdminInitiateAuthInput struct {
|
|||
// The app client ID.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// This is a random key-value pair map which can contain any key and will be
|
||||
// passed to your PreAuthentication Lambda trigger as-is. It can be used to
|
||||
|
@ -11983,7 +11998,7 @@ type AdminListDevicesInput struct {
|
|||
// The user name.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12096,7 +12111,7 @@ type AdminListGroupsForUserInput struct {
|
|||
// The username for the user.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12208,7 +12223,7 @@ type AdminListUserAuthEventsInput struct {
|
|||
// The user pool username or an alias.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12319,7 +12334,7 @@ type AdminRemoveUserFromGroupInput struct {
|
|||
// The username for the user.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12404,7 +12419,7 @@ type AdminResetUserPasswordInput struct {
|
|||
// The user name of the user whose password you wish to reset.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12505,7 +12520,7 @@ type AdminRespondToAuthChallengeInput struct {
|
|||
// The app client ID.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// Contextual data such as the user's device fingerprint, IP address, or location
|
||||
// used for evaluating the risk of an unexpected event by Amazon Cognito advanced
|
||||
|
@ -12682,7 +12697,7 @@ type AdminSetUserMFAPreferenceInput struct {
|
|||
// The user pool username or alias.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12773,7 +12788,7 @@ type AdminSetUserSettingsInput struct {
|
|||
// The user name of the user for whom you wish to set user settings.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12875,7 +12890,7 @@ type AdminUpdateAuthEventFeedbackInput struct {
|
|||
// The user pool username.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -12977,7 +12992,7 @@ type AdminUpdateDeviceStatusInput struct {
|
|||
// The user name.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -13077,7 +13092,7 @@ type AdminUpdateUserAttributesInput struct {
|
|||
// The user name of the user for whom you want to update user attributes.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -13171,7 +13186,7 @@ type AdminUserGlobalSignOutInput struct {
|
|||
// The user name.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -13346,7 +13361,7 @@ type AssociateSoftwareTokenInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The access token.
|
||||
AccessToken *string `type:"string"`
|
||||
AccessToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The session which should be passed both ways in challenge-response calls
|
||||
// to the service. This allows authentication of the user as part of the MFA
|
||||
|
@ -13394,7 +13409,7 @@ type AssociateSoftwareTokenOutput struct {
|
|||
|
||||
// A unique generated shared secret code that is used in the TOTP algorithm
|
||||
// to generate a one time code.
|
||||
SecretCode *string `min:"16" type:"string"`
|
||||
SecretCode *string `min:"16" type:"string" sensitive:"true"`
|
||||
|
||||
// The session which should be passed both ways in challenge-response calls
|
||||
// to the service. This allows authentication of the user as part of the MFA
|
||||
|
@ -13434,7 +13449,7 @@ type AttributeType struct {
|
|||
Name *string `min:"1" type:"string" required:"true"`
|
||||
|
||||
// The value of the attribute.
|
||||
Value *string `type:"string"`
|
||||
Value *string `type:"string" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -13569,19 +13584,19 @@ type AuthenticationResultType struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The access token.
|
||||
AccessToken *string `type:"string"`
|
||||
AccessToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The expiration period of the authentication result in seconds.
|
||||
ExpiresIn *int64 `type:"integer"`
|
||||
|
||||
// The ID token.
|
||||
IdToken *string `type:"string"`
|
||||
IdToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The new device metadata from an authentication result.
|
||||
NewDeviceMetadata *NewDeviceMetadataType `type:"structure"`
|
||||
|
||||
// The refresh token.
|
||||
RefreshToken *string `type:"string"`
|
||||
RefreshToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The token type.
|
||||
TokenType *string `type:"string"`
|
||||
|
@ -13673,17 +13688,17 @@ type ChangePasswordInput struct {
|
|||
// The access token.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The old password.
|
||||
//
|
||||
// PreviousPassword is a required field
|
||||
PreviousPassword *string `min:"6" type:"string" required:"true"`
|
||||
PreviousPassword *string `min:"6" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The new password.
|
||||
//
|
||||
// ProposedPassword is a required field
|
||||
ProposedPassword *string `min:"6" type:"string" required:"true"`
|
||||
ProposedPassword *string `min:"6" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -13896,7 +13911,7 @@ type ConfirmDeviceInput struct {
|
|||
// The access token.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The device key.
|
||||
//
|
||||
|
@ -14002,7 +14017,7 @@ type ConfirmForgotPasswordInput struct {
|
|||
// The app client ID of the app associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The confirmation code sent by a user's request to retrieve a forgotten password.
|
||||
// For more information, see
|
||||
|
@ -14013,11 +14028,11 @@ type ConfirmForgotPasswordInput struct {
|
|||
// The password sent by a user's request to retrieve a forgotten password.
|
||||
//
|
||||
// Password is a required field
|
||||
Password *string `min:"6" type:"string" required:"true"`
|
||||
Password *string `min:"6" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// A keyed-hash message authentication code (HMAC) calculated using the secret
|
||||
// key of a user pool client and username plus the client ID in the message.
|
||||
SecretHash *string `min:"1" type:"string"`
|
||||
SecretHash *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// Contextual data such as the user's device fingerprint, IP address, or location
|
||||
// used for evaluating the risk of an unexpected event by Amazon Cognito advanced
|
||||
|
@ -14028,7 +14043,7 @@ type ConfirmForgotPasswordInput struct {
|
|||
// forgotten password.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -14147,7 +14162,7 @@ type ConfirmSignUpInput struct {
|
|||
// The ID of the app client associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The confirmation code sent by a user's request to confirm registration.
|
||||
//
|
||||
|
@ -14164,7 +14179,7 @@ type ConfirmSignUpInput struct {
|
|||
|
||||
// A keyed-hash message authentication code (HMAC) calculated using the secret
|
||||
// key of a user pool client and username plus the client ID in the message.
|
||||
SecretHash *string `min:"1" type:"string"`
|
||||
SecretHash *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// Contextual data such as the user's device fingerprint, IP address, or location
|
||||
// used for evaluating the risk of an unexpected event by Amazon Cognito advanced
|
||||
|
@ -14174,7 +14189,7 @@ type ConfirmSignUpInput struct {
|
|||
// The user name of the user whose registration you wish to confirm.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -15767,7 +15782,7 @@ type DeleteUserAttributesInput struct {
|
|||
// The access token used in the request to delete user attributes.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// An array of strings representing the user attribute names you wish to delete.
|
||||
//
|
||||
|
@ -15838,7 +15853,7 @@ type DeleteUserInput struct {
|
|||
// The access token from a request to delete a user.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -15891,7 +15906,7 @@ type DeleteUserPoolClientInput struct {
|
|||
// The app client ID of the app associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The user pool ID for the user pool where you want to delete the client.
|
||||
//
|
||||
|
@ -16255,7 +16270,7 @@ type DescribeRiskConfigurationInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The app client ID.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The user pool ID.
|
||||
//
|
||||
|
@ -16420,7 +16435,7 @@ type DescribeUserPoolClientInput struct {
|
|||
// The app client ID of the app associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The user pool ID for the user pool you want to describe.
|
||||
//
|
||||
|
@ -17032,7 +17047,7 @@ type ForgetDeviceInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The access token for the forgotten device request.
|
||||
AccessToken *string `type:"string"`
|
||||
AccessToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The device key.
|
||||
//
|
||||
|
@ -17103,11 +17118,11 @@ type ForgotPasswordInput struct {
|
|||
// The ID of the client associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// A keyed-hash message authentication code (HMAC) calculated using the secret
|
||||
// key of a user pool client and username plus the client ID in the message.
|
||||
SecretHash *string `min:"1" type:"string"`
|
||||
SecretHash *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// Contextual data such as the user's device fingerprint, IP address, or location
|
||||
// used for evaluating the risk of an unexpected event by Amazon Cognito advanced
|
||||
|
@ -17118,7 +17133,7 @@ type ForgotPasswordInput struct {
|
|||
// password.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -17294,7 +17309,7 @@ type GetDeviceInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The access token.
|
||||
AccessToken *string `type:"string"`
|
||||
AccessToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The device key.
|
||||
//
|
||||
|
@ -17600,7 +17615,7 @@ type GetUICustomizationInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The client ID for the client app.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The user pool ID for the user pool.
|
||||
//
|
||||
|
@ -17682,7 +17697,7 @@ type GetUserAttributeVerificationCodeInput struct {
|
|||
// verification code.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The attribute name returned by the server response to get the user attribute
|
||||
// verification code.
|
||||
|
@ -17766,7 +17781,7 @@ type GetUserInput struct {
|
|||
// the user.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -17823,7 +17838,7 @@ type GetUserOutput struct {
|
|||
// The user name of the user you wish to retrieve from the get user request.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -17955,7 +17970,7 @@ type GlobalSignOutInput struct {
|
|||
// The access token.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -18270,7 +18285,7 @@ type InitiateAuthInput struct {
|
|||
// The app client ID.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// This is a random key-value pair map which can contain any key and will be
|
||||
// passed to your PreAuthentication Lambda trigger as-is. It can be used to
|
||||
|
@ -18588,7 +18603,7 @@ type ListDevicesInput struct {
|
|||
// The access tokens for the request to list devices.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The limit of the device request.
|
||||
Limit *int64 `type:"integer"`
|
||||
|
@ -20081,11 +20096,11 @@ type ResendConfirmationCodeInput struct {
|
|||
// The ID of the client associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// A keyed-hash message authentication code (HMAC) calculated using the secret
|
||||
// key of a user pool client and username plus the client ID in the message.
|
||||
SecretHash *string `min:"1" type:"string"`
|
||||
SecretHash *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// Contextual data such as the user's device fingerprint, IP address, or location
|
||||
// used for evaluating the risk of an unexpected event by Amazon Cognito advanced
|
||||
|
@ -20095,7 +20110,7 @@ type ResendConfirmationCodeInput struct {
|
|||
// The user name of the user to whom you wish to resend a confirmation code.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -20331,7 +20346,7 @@ type RespondToAuthChallengeInput struct {
|
|||
// The app client ID.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The session which should be passed both ways in challenge-response calls
|
||||
// to the service. If InitiateAuth or RespondToAuthChallenge API call determines
|
||||
|
@ -20479,7 +20494,7 @@ type RiskConfigurationType struct {
|
|||
AccountTakeoverRiskConfiguration *AccountTakeoverRiskConfigurationType `type:"structure"`
|
||||
|
||||
// The app client ID.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The compromised credentials risk configuration object including the EventFilter
|
||||
// and the EventAction
|
||||
|
@ -20716,7 +20731,7 @@ type SetRiskConfigurationInput struct {
|
|||
// Otherwise, ClientId is mapped to the client. When the client ID is not null,
|
||||
// the user pool configuration is overridden and the risk configuration for
|
||||
// the client is used instead.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The compromised credentials risk configuration.
|
||||
CompromisedCredentialsRiskConfiguration *CompromisedCredentialsRiskConfigurationType `type:"structure"`
|
||||
|
@ -20831,7 +20846,7 @@ type SetUICustomizationInput struct {
|
|||
CSS *string `type:"string"`
|
||||
|
||||
// The client ID for the client app.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The uploaded logo image for the UI customization.
|
||||
//
|
||||
|
@ -20928,7 +20943,7 @@ type SetUserMFAPreferenceInput struct {
|
|||
// The access token.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The SMS text message multi-factor authentication (MFA) settings.
|
||||
SMSMfaSettings *SMSMfaSettingsType `type:"structure"`
|
||||
|
@ -21113,7 +21128,7 @@ type SetUserSettingsInput struct {
|
|||
// The access token for the set user settings request.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// Specifies the options for MFA (e.g., email or phone number).
|
||||
//
|
||||
|
@ -21195,16 +21210,16 @@ type SignUpInput struct {
|
|||
// The ID of the client associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The password of the user you wish to register.
|
||||
//
|
||||
// Password is a required field
|
||||
Password *string `min:"6" type:"string" required:"true"`
|
||||
Password *string `min:"6" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// A keyed-hash message authentication code (HMAC) calculated using the secret
|
||||
// key of a user pool client and username plus the client ID in the message.
|
||||
SecretHash *string `min:"1" type:"string"`
|
||||
SecretHash *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// An array of name-value pairs representing user attributes.
|
||||
//
|
||||
|
@ -21220,7 +21235,7 @@ type SignUpInput struct {
|
|||
// The user name of the user you wish to register.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The validation data in the request to register a user.
|
||||
ValidationData []*AttributeType `type:"list"`
|
||||
|
@ -21755,7 +21770,7 @@ type UICustomizationType struct {
|
|||
CSSVersion *string `type:"string"`
|
||||
|
||||
// The client ID for the client app.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The creation date for the UI customization.
|
||||
CreationDate *time.Time `type:"timestamp"`
|
||||
|
@ -21833,7 +21848,7 @@ type UpdateAuthEventFeedbackInput struct {
|
|||
// The feedback token.
|
||||
//
|
||||
// FeedbackToken is a required field
|
||||
FeedbackToken *string `type:"string" required:"true"`
|
||||
FeedbackToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The authentication event feedback value.
|
||||
//
|
||||
|
@ -21848,7 +21863,7 @@ type UpdateAuthEventFeedbackInput struct {
|
|||
// The user pool username.
|
||||
//
|
||||
// Username is a required field
|
||||
Username *string `min:"1" type:"string" required:"true"`
|
||||
Username *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -21946,7 +21961,7 @@ type UpdateDeviceStatusInput struct {
|
|||
// The access token.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The device key.
|
||||
//
|
||||
|
@ -22368,7 +22383,7 @@ type UpdateUserAttributesInput struct {
|
|||
// The access token for the request to update user attributes.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// An array of name-value pairs representing user attributes.
|
||||
//
|
||||
|
@ -22497,7 +22512,7 @@ type UpdateUserPoolClientInput struct {
|
|||
// The ID of the client associated with the user pool.
|
||||
//
|
||||
// ClientId is a required field
|
||||
ClientId *string `min:"1" type:"string" required:"true"`
|
||||
ClientId *string `min:"1" type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The client name from the update user pool client request.
|
||||
ClientName *string `min:"1" type:"string"`
|
||||
|
@ -23185,7 +23200,7 @@ type UserPoolClientDescription struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The ID of the client associated with the user pool.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The client name from the user pool client description.
|
||||
ClientName *string `min:"1" type:"string"`
|
||||
|
@ -23265,13 +23280,13 @@ type UserPoolClientType struct {
|
|||
CallbackURLs []*string `type:"list"`
|
||||
|
||||
// The ID of the client associated with the user pool.
|
||||
ClientId *string `min:"1" type:"string"`
|
||||
ClientId *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The client name from the user pool request of the client type.
|
||||
ClientName *string `min:"1" type:"string"`
|
||||
|
||||
// The client secret from the user pool request of the client type.
|
||||
ClientSecret *string `min:"1" type:"string"`
|
||||
ClientSecret *string `min:"1" type:"string" sensitive:"true"`
|
||||
|
||||
// The date the user pool client was created.
|
||||
CreationDate *time.Time `type:"timestamp"`
|
||||
|
@ -23865,7 +23880,7 @@ type UserType struct {
|
|||
UserStatus *string `type:"string" enum:"UserStatusType"`
|
||||
|
||||
// The user name of the user you wish to describe.
|
||||
Username *string `min:"1" type:"string"`
|
||||
Username *string `min:"1" type:"string" sensitive:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
|
@ -24019,7 +24034,7 @@ type VerifySoftwareTokenInput struct {
|
|||
_ struct{} `type:"structure"`
|
||||
|
||||
// The access token.
|
||||
AccessToken *string `type:"string"`
|
||||
AccessToken *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The friendly device name.
|
||||
FriendlyDeviceName *string `type:"string"`
|
||||
|
@ -24127,7 +24142,7 @@ type VerifyUserAttributeInput struct {
|
|||
// Represents the access token of the request to verify user attributes.
|
||||
//
|
||||
// AccessToken is a required field
|
||||
AccessToken *string `type:"string" required:"true"`
|
||||
AccessToken *string `type:"string" required:"true" sensitive:"true"`
|
||||
|
||||
// The attribute name in the request to verify user attributes.
|
||||
//
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -212,6 +212,12 @@ const (
|
|||
// not have all features enabled.
|
||||
ErrCodeOrganizationAllFeaturesNotEnabledException = "OrganizationAllFeaturesNotEnabledException"
|
||||
|
||||
// ErrCodeOversizedConfigurationItemException for service response error code
|
||||
// "OversizedConfigurationItemException".
|
||||
//
|
||||
// The configuration item size is outside the allowable range.
|
||||
ErrCodeOversizedConfigurationItemException = "OversizedConfigurationItemException"
|
||||
|
||||
// ErrCodeResourceInUseException for service response error code
|
||||
// "ResourceInUseException".
|
||||
//
|
||||
|
|
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awsutil"
|
||||
"github.com/aws/aws-sdk-go/aws/request"
|
||||
"github.com/aws/aws-sdk-go/private/protocol"
|
||||
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||
)
|
||||
|
||||
const opAddTagsToResource = "AddTagsToResource"
|
||||
|
@ -50,6 +52,7 @@ func (c *DatabaseMigrationService) AddTagsToResourceRequest(input *AddTagsToReso
|
|||
|
||||
output = &AddTagsToResourceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -246,9 +249,9 @@ func (c *DatabaseMigrationService) CreateEventSubscriptionRequest(input *CreateE
|
|||
// will be notified of events generated from all AWS DMS sources belonging to
|
||||
// your customer account.
|
||||
//
|
||||
// For more information about AWS DMS events, see Working with Events and Notifications
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the
|
||||
// AWS Database MIgration Service User Guide.
|
||||
// For more information about AWS DMS events, see Working with Events and Notifications
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the
|
||||
// AWS Database Migration Service User Guide.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
|
@ -970,6 +973,7 @@ func (c *DatabaseMigrationService) DeleteReplicationSubnetGroupRequest(input *De
|
|||
|
||||
output = &DeleteReplicationSubnetGroupOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1758,7 +1762,7 @@ func (c *DatabaseMigrationService) DescribeEventCategoriesRequest(input *Describ
|
|||
//
|
||||
// Lists categories for all event source types, or, if specified, for a specified
|
||||
// source type. You can see a list of the event categories and source types
|
||||
// in Working with Events and Notifications (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html)
|
||||
// in Working with Events and Notifications (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
|
@ -1981,7 +1985,8 @@ func (c *DatabaseMigrationService) DescribeEventsRequest(input *DescribeEventsIn
|
|||
//
|
||||
// Lists events for a given source identifier and source type. You can also
|
||||
// specify a start and end time. For more information on AWS DMS events, see
|
||||
// Working with Events and Notifications (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html).
|
||||
// Working with Events and Notifications (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html)
|
||||
// in the AWS Database Migration User Guide.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
|
@ -3827,8 +3832,9 @@ func (c *DatabaseMigrationService) ModifyReplicationTaskRequest(input *ModifyRep
|
|||
// You can't modify the task endpoints. The task must be stopped before you
|
||||
// can modify it.
|
||||
//
|
||||
// For more information about AWS DMS tasks, see the AWS DMS user guide at
|
||||
// Working with Migration Tasks (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)
|
||||
// For more information about AWS DMS tasks, see Working with Migration Tasks
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html) in the
|
||||
// AWS Database Migration Service User Guide.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
|
@ -4170,6 +4176,7 @@ func (c *DatabaseMigrationService) RemoveTagsFromResourceRequest(input *RemoveTa
|
|||
|
||||
output = &RemoveTagsFromResourceOutput{}
|
||||
req = c.newRequest(op, input, output)
|
||||
req.Handlers.Unmarshal.Swap(jsonrpc.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -4256,8 +4263,9 @@ func (c *DatabaseMigrationService) StartReplicationTaskRequest(input *StartRepli
|
|||
//
|
||||
// Starts the replication task.
|
||||
//
|
||||
// For more information about AWS DMS tasks, see the AWS DMS user guide at
|
||||
// Working with Migration Tasks (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)
|
||||
// For more information about AWS DMS tasks, see Working with Migration Tasks
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html) in the
|
||||
// AWS Database Migration Service User Guide.
|
||||
//
|
||||
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
|
||||
// with awserr.Error's Code and Message methods to get detailed information about
|
||||
|
@ -4878,9 +4886,9 @@ type CreateEndpointInput struct {
|
|||
// The name of the endpoint database.
|
||||
DatabaseName *string `type:"string"`
|
||||
|
||||
// The settings in JSON format for the DMS Transfer type source endpoint.
|
||||
// The settings in JSON format for the DMS transfer type of source endpoint.
|
||||
//
|
||||
// Attributes include:
|
||||
// Possible attributes include the following:
|
||||
//
|
||||
// * serviceAccessRoleArn - The IAM role that has permission to access the
|
||||
// Amazon S3 bucket.
|
||||
|
@ -4888,23 +4896,27 @@ type CreateEndpointInput struct {
|
|||
// * bucketName - The name of the S3 bucket to use.
|
||||
//
|
||||
// * compressionType - An optional parameter to use GZIP to compress the
|
||||
// target files. Set to NONE (the default) or do not use to leave the files
|
||||
// uncompressed.
|
||||
// target files. To use GZIP, set this value to NONE (the default). To keep
|
||||
// the files uncompressed, don't use this value.
|
||||
//
|
||||
// Shorthand syntax: ServiceAccessRoleArn=string ,BucketName=string,CompressionType=string
|
||||
// Shorthand syntax for these attributes is as follows: ServiceAccessRoleArn=string,BucketName=string,CompressionType=string
|
||||
//
|
||||
// JSON syntax:
|
||||
//
|
||||
// { "ServiceAccessRoleArn": "string", "BucketName": "string", "CompressionType":
|
||||
// "none"|"gzip" }
|
||||
// JSON syntax for these attributes is as follows: { "ServiceAccessRoleArn":
|
||||
// "string", "BucketName": "string", "CompressionType": "none"|"gzip" }
|
||||
DmsTransferSettings *DmsTransferSettings `type:"structure"`
|
||||
|
||||
// Settings in JSON format for the target Amazon DynamoDB endpoint. For more
|
||||
// information about the available settings, see the Using Object Mapping to
|
||||
// Migrate Data to DynamoDB section at Using an Amazon DynamoDB Database as
|
||||
// a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html).
|
||||
// information about the available settings, see Using Object Mapping to Migrate
|
||||
// Data to DynamoDB (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
DynamoDbSettings *DynamoDbSettings `type:"structure"`
|
||||
|
||||
// Settings in JSON format for the target Elasticsearch endpoint. For more information
|
||||
// about the available settings, see Extra Connection Attributes When Using
|
||||
// Elasticsearch as a Target for AWS DMS (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Elasticsearch.html#CHAP_Target.Elasticsearch.Configuration)
|
||||
// in the AWS Database Migration User Guide.
|
||||
ElasticsearchSettings *ElasticsearchSettings `type:"structure"`
|
||||
|
||||
// The database endpoint identifier. Identifiers must begin with a letter; must
|
||||
// contain only ASCII letters, digits, and hyphens; and must not end with a
|
||||
// hyphen or contain two consecutive hyphens.
|
||||
|
@ -4917,9 +4929,9 @@ type CreateEndpointInput struct {
|
|||
// EndpointType is a required field
|
||||
EndpointType *string `type:"string" required:"true" enum:"ReplicationEndpointTypeValue"`
|
||||
|
||||
// The type of engine for the endpoint. Valid values, depending on the EndPointType,
|
||||
// include mysql, oracle, postgres, mariadb, aurora, aurora-postgresql, redshift,
|
||||
// s3, db2, azuredb, sybase, dynamodb, mongodb, and sqlserver.
|
||||
// The type of engine for the endpoint. Valid values, depending on the EndPointType
|
||||
// value, include mysql, oracle, postgres, mariadb, aurora, aurora-postgresql,
|
||||
// redshift, s3, db2, azuredb, sybase, dynamodb, mongodb, and sqlserver.
|
||||
//
|
||||
// EngineName is a required field
|
||||
EngineName *string `type:"string" required:"true"`
|
||||
|
@ -4930,48 +4942,53 @@ type CreateEndpointInput struct {
|
|||
// Additional attributes associated with the connection.
|
||||
ExtraConnectionAttributes *string `type:"string"`
|
||||
|
||||
// The KMS key identifier that will be used to encrypt the connection parameters.
|
||||
// If you do not specify a value for the KmsKeyId parameter, then AWS DMS will
|
||||
// use your default encryption key. AWS KMS creates the default encryption key
|
||||
// for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS region.
|
||||
// Settings in JSON format for the target Amazon Kinesis Data Streams endpoint.
|
||||
// For more information about the available settings, see Using Object Mapping
|
||||
// to Migrate Data to a Kinesis Data Stream (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html#CHAP_Target.Kinesis.ObjectMapping
|
||||
// ) in the AWS Database Migration User Guide.
|
||||
KinesisSettings *KinesisSettings `type:"structure"`
|
||||
|
||||
// The AWS KMS key identifier to use to encrypt the connection parameters. If
|
||||
// you don't specify a value for the KmsKeyId parameter, then AWS DMS uses your
|
||||
// default encryption key. AWS KMS creates the default encryption key for your
|
||||
// AWS account. Your AWS account has a different default encryption key for
|
||||
// each AWS Region.
|
||||
KmsKeyId *string `type:"string"`
|
||||
|
||||
// Settings in JSON format for the source MongoDB endpoint. For more information
|
||||
// about the available settings, see the Configuration Properties When Using
|
||||
// MongoDB as a Source for AWS Database Migration Service section at Using
|
||||
// MongoDB as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html).
|
||||
// about the available settings, see the configuration properties section in
|
||||
// Using MongoDB as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
MongoDbSettings *MongoDbSettings `type:"structure"`
|
||||
|
||||
// The password to be used to login to the endpoint database.
|
||||
Password *string `type:"string"`
|
||||
// The password to be used to log in to the endpoint database.
|
||||
Password *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The port used by the endpoint database.
|
||||
Port *int64 `type:"integer"`
|
||||
|
||||
// Settings in JSON format for the target Amazon S3 endpoint. For more information
|
||||
// about the available settings, see the Extra Connection Attributes section
|
||||
// at Using Amazon S3 as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html).
|
||||
// about the available settings, see Extra Connection Attributes When Using
|
||||
// Amazon S3 as a Target for AWS DMS (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html#CHAP_Target.S3.Configuring)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
S3Settings *S3Settings `type:"structure"`
|
||||
|
||||
// The name of the server where the endpoint database resides.
|
||||
ServerName *string `type:"string"`
|
||||
|
||||
// The Amazon Resource Name (ARN) for the service access role you want to use
|
||||
// to create the endpoint.
|
||||
// The Amazon Resource Name (ARN) for the service access role that you want
|
||||
// to use to create the endpoint.
|
||||
ServiceAccessRoleArn *string `type:"string"`
|
||||
|
||||
// The SSL mode to use for the SSL connection.
|
||||
//
|
||||
// SSL mode can be one of four values: none, require, verify-ca, verify-full.
|
||||
//
|
||||
// The default value is none.
|
||||
// The Secure Sockets Layer (SSL) mode to use for the SSL connection. The SSL
|
||||
// mode can be one of four values: none, require, verify-ca, verify-full. The
|
||||
// default value is none.
|
||||
SslMode *string `type:"string" enum:"DmsSslModeValue"`
|
||||
|
||||
// Tags to be added to the endpoint.
|
||||
Tags []*Tag `type:"list"`
|
||||
|
||||
// The user name to be used to login to the endpoint database.
|
||||
// The user name to be used to log in to the endpoint database.
|
||||
Username *string `type:"string"`
|
||||
}
|
||||
|
||||
|
@ -5002,6 +5019,11 @@ func (s *CreateEndpointInput) Validate() error {
|
|||
invalidParams.AddNested("DynamoDbSettings", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
if s.ElasticsearchSettings != nil {
|
||||
if err := s.ElasticsearchSettings.Validate(); err != nil {
|
||||
invalidParams.AddNested("ElasticsearchSettings", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
|
@ -5033,6 +5055,12 @@ func (s *CreateEndpointInput) SetDynamoDbSettings(v *DynamoDbSettings) *CreateEn
|
|||
return s
|
||||
}
|
||||
|
||||
// SetElasticsearchSettings sets the ElasticsearchSettings field's value.
|
||||
func (s *CreateEndpointInput) SetElasticsearchSettings(v *ElasticsearchSettings) *CreateEndpointInput {
|
||||
s.ElasticsearchSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetEndpointIdentifier sets the EndpointIdentifier field's value.
|
||||
func (s *CreateEndpointInput) SetEndpointIdentifier(v string) *CreateEndpointInput {
|
||||
s.EndpointIdentifier = &v
|
||||
|
@ -5063,6 +5091,12 @@ func (s *CreateEndpointInput) SetExtraConnectionAttributes(v string) *CreateEndp
|
|||
return s
|
||||
}
|
||||
|
||||
// SetKinesisSettings sets the KinesisSettings field's value.
|
||||
func (s *CreateEndpointInput) SetKinesisSettings(v *KinesisSettings) *CreateEndpointInput {
|
||||
s.KinesisSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *CreateEndpointInput) SetKmsKeyId(v string) *CreateEndpointInput {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -5155,7 +5189,7 @@ type CreateEventSubscriptionInput struct {
|
|||
|
||||
// A list of event categories for a source type that you want to subscribe to.
|
||||
// You can see a list of the categories for a given source type by calling the
|
||||
// DescribeEventCategories action or in the topic Working with Events and Notifications
|
||||
// DescribeEventCategories action or in the topic Working with Events and Notifications
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the
|
||||
// AWS Database Migration Service User Guide.
|
||||
EventCategories []*string `type:"list"`
|
||||
|
@ -5303,14 +5337,17 @@ type CreateReplicationInstanceInput struct {
|
|||
// Example: us-east-1d
|
||||
AvailabilityZone *string `type:"string"`
|
||||
|
||||
// A list of DNS name servers supported for the replication instance.
|
||||
DnsNameServers *string `type:"string"`
|
||||
|
||||
// The engine version number of the replication instance.
|
||||
EngineVersion *string `type:"string"`
|
||||
|
||||
// The KMS key identifier that will be used to encrypt the content on the replication
|
||||
// instance. If you do not specify a value for the KmsKeyId parameter, then
|
||||
// AWS DMS will use your default encryption key. AWS KMS creates the default
|
||||
// encryption key for your AWS account. Your AWS account has a different default
|
||||
// encryption key for each AWS region.
|
||||
// The AWS KMS key identifier that is used to encrypt the content on the replication
|
||||
// instance. If you don't specify a value for the KmsKeyId parameter, then AWS
|
||||
// DMS uses your default encryption key. AWS KMS creates the default encryption
|
||||
// key for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS Region.
|
||||
KmsKeyId *string `type:"string"`
|
||||
|
||||
// Specifies if the replication instance is a Multi-AZ deployment. You cannot
|
||||
|
@ -5416,6 +5453,12 @@ func (s *CreateReplicationInstanceInput) SetAvailabilityZone(v string) *CreateRe
|
|||
return s
|
||||
}
|
||||
|
||||
// SetDnsNameServers sets the DnsNameServers field's value.
|
||||
func (s *CreateReplicationInstanceInput) SetDnsNameServers(v string) *CreateReplicationInstanceInput {
|
||||
s.DnsNameServers = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetEngineVersion sets the EngineVersion field's value.
|
||||
func (s *CreateReplicationInstanceInput) SetEngineVersion(v string) *CreateReplicationInstanceInput {
|
||||
s.EngineVersion = &v
|
||||
|
@ -5660,7 +5703,8 @@ type CreateReplicationTaskInput struct {
|
|||
|
||||
// Settings for the task, such as target metadata settings. For a complete list
|
||||
// of task settings, see Task Settings for AWS Database Migration Service Tasks
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html).
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html)
|
||||
// in the AWS Database Migration User Guide.
|
||||
ReplicationTaskSettings *string `type:"string"`
|
||||
|
||||
// The Amazon Resource Name (ARN) string that uniquely identifies the endpoint.
|
||||
|
@ -7924,6 +7968,78 @@ func (s *DynamoDbSettings) SetServiceAccessRoleArn(v string) *DynamoDbSettings {
|
|||
return s
|
||||
}
|
||||
|
||||
type ElasticsearchSettings struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The endpoint for the ElasticSearch cluster.
|
||||
//
|
||||
// EndpointUri is a required field
|
||||
EndpointUri *string `type:"string" required:"true"`
|
||||
|
||||
// The maximum number of seconds that DMS retries failed API requests to the
|
||||
// Elasticsearch cluster.
|
||||
ErrorRetryDuration *int64 `type:"integer"`
|
||||
|
||||
// The maximum percentage of records that can fail to be written before a full
|
||||
// load operation stops.
|
||||
FullLoadErrorPercentage *int64 `type:"integer"`
|
||||
|
||||
// The Amazon Resource Name (ARN) used by service to access the IAM role.
|
||||
//
|
||||
// ServiceAccessRoleArn is a required field
|
||||
ServiceAccessRoleArn *string `type:"string" required:"true"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
func (s ElasticsearchSettings) String() string {
|
||||
return awsutil.Prettify(s)
|
||||
}
|
||||
|
||||
// GoString returns the string representation
|
||||
func (s ElasticsearchSettings) GoString() string {
|
||||
return s.String()
|
||||
}
|
||||
|
||||
// Validate inspects the fields of the type to determine if they are valid.
|
||||
func (s *ElasticsearchSettings) Validate() error {
|
||||
invalidParams := request.ErrInvalidParams{Context: "ElasticsearchSettings"}
|
||||
if s.EndpointUri == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("EndpointUri"))
|
||||
}
|
||||
if s.ServiceAccessRoleArn == nil {
|
||||
invalidParams.Add(request.NewErrParamRequired("ServiceAccessRoleArn"))
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetEndpointUri sets the EndpointUri field's value.
|
||||
func (s *ElasticsearchSettings) SetEndpointUri(v string) *ElasticsearchSettings {
|
||||
s.EndpointUri = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetErrorRetryDuration sets the ErrorRetryDuration field's value.
|
||||
func (s *ElasticsearchSettings) SetErrorRetryDuration(v int64) *ElasticsearchSettings {
|
||||
s.ErrorRetryDuration = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetFullLoadErrorPercentage sets the FullLoadErrorPercentage field's value.
|
||||
func (s *ElasticsearchSettings) SetFullLoadErrorPercentage(v int64) *ElasticsearchSettings {
|
||||
s.FullLoadErrorPercentage = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetServiceAccessRoleArn sets the ServiceAccessRoleArn field's value.
|
||||
func (s *ElasticsearchSettings) SetServiceAccessRoleArn(v string) *ElasticsearchSettings {
|
||||
s.ServiceAccessRoleArn = &v
|
||||
return s
|
||||
}
|
||||
|
||||
type Endpoint struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
|
@ -7933,9 +8049,9 @@ type Endpoint struct {
|
|||
// The name of the database at the endpoint.
|
||||
DatabaseName *string `type:"string"`
|
||||
|
||||
// The settings in JSON format for the DMS Transfer type source endpoint.
|
||||
// The settings in JSON format for the DMS transfer type of source endpoint.
|
||||
//
|
||||
// Attributes include:
|
||||
// Possible attributes include the following:
|
||||
//
|
||||
// * serviceAccessRoleArn - The IAM role that has permission to access the
|
||||
// Amazon S3 bucket.
|
||||
|
@ -7943,21 +8059,23 @@ type Endpoint struct {
|
|||
// * bucketName - The name of the S3 bucket to use.
|
||||
//
|
||||
// * compressionType - An optional parameter to use GZIP to compress the
|
||||
// target files. Set to NONE (the default) or do not use to leave the files
|
||||
// uncompressed.
|
||||
// target files. To use GZIP, set this value to NONE (the default). To keep
|
||||
// the files uncompressed, don't use this value.
|
||||
//
|
||||
// Shorthand syntax: ServiceAccessRoleArn=string ,BucketName=string,CompressionType=string
|
||||
// Shorthand syntax for these attributes is as follows: ServiceAccessRoleArn=string,BucketName=string,CompressionType=string
|
||||
//
|
||||
// JSON syntax:
|
||||
//
|
||||
// { "ServiceAccessRoleArn": "string", "BucketName": "string", "CompressionType":
|
||||
// "none"|"gzip" }
|
||||
// JSON syntax for these attributes is as follows: { "ServiceAccessRoleArn":
|
||||
// "string", "BucketName": "string", "CompressionType": "none"|"gzip" }
|
||||
DmsTransferSettings *DmsTransferSettings `type:"structure"`
|
||||
|
||||
// The settings for the target DynamoDB database. For more information, see
|
||||
// the DynamoDBSettings structure.
|
||||
DynamoDbSettings *DynamoDbSettings `type:"structure"`
|
||||
|
||||
// The settings for the Elasticsearch source endpoint. For more information,
|
||||
// see the ElasticsearchSettings structure.
|
||||
ElasticsearchSettings *ElasticsearchSettings `type:"structure"`
|
||||
|
||||
// The Amazon Resource Name (ARN) string that uniquely identifies the endpoint.
|
||||
EndpointArn *string `type:"string"`
|
||||
|
||||
|
@ -7989,11 +8107,15 @@ type Endpoint struct {
|
|||
// Additional connection attributes used to connect to the endpoint.
|
||||
ExtraConnectionAttributes *string `type:"string"`
|
||||
|
||||
// The KMS key identifier that will be used to encrypt the connection parameters.
|
||||
// If you do not specify a value for the KmsKeyId parameter, then AWS DMS will
|
||||
// use your default encryption key. AWS KMS creates the default encryption key
|
||||
// for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS region.
|
||||
// The settings for the Amazon Kinesis source endpoint. For more information,
|
||||
// see the KinesisSettings structure.
|
||||
KinesisSettings *KinesisSettings `type:"structure"`
|
||||
|
||||
// The AWS KMS key identifier that is used to encrypt the content on the replication
|
||||
// instance. If you don't specify a value for the KmsKeyId parameter, then AWS
|
||||
// DMS uses your default encryption key. AWS KMS creates the default encryption
|
||||
// key for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS Region.
|
||||
KmsKeyId *string `type:"string"`
|
||||
|
||||
// The settings for the MongoDB source endpoint. For more information, see the
|
||||
|
@ -8061,6 +8183,12 @@ func (s *Endpoint) SetDynamoDbSettings(v *DynamoDbSettings) *Endpoint {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetElasticsearchSettings sets the ElasticsearchSettings field's value.
|
||||
func (s *Endpoint) SetElasticsearchSettings(v *ElasticsearchSettings) *Endpoint {
|
||||
s.ElasticsearchSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetEndpointArn sets the EndpointArn field's value.
|
||||
func (s *Endpoint) SetEndpointArn(v string) *Endpoint {
|
||||
s.EndpointArn = &v
|
||||
|
@ -8109,6 +8237,12 @@ func (s *Endpoint) SetExtraConnectionAttributes(v string) *Endpoint {
|
|||
return s
|
||||
}
|
||||
|
||||
// SetKinesisSettings sets the KinesisSettings field's value.
|
||||
func (s *Endpoint) SetKinesisSettings(v *KinesisSettings) *Endpoint {
|
||||
s.KinesisSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetKmsKeyId sets the KmsKeyId field's value.
|
||||
func (s *Endpoint) SetKmsKeyId(v string) *Endpoint {
|
||||
s.KmsKeyId = &v
|
||||
|
@ -8513,6 +8647,49 @@ func (s *ImportCertificateOutput) SetCertificate(v *Certificate) *ImportCertific
|
|||
return s
|
||||
}
|
||||
|
||||
type KinesisSettings struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
// The output format for the records created on the endpoint. The message format
|
||||
// is JSON.
|
||||
MessageFormat *string `type:"string" enum:"MessageFormatValue"`
|
||||
|
||||
// The Amazon Resource Name (ARN) for the IAM role that DMS uses to write to
|
||||
// the Amazon Kinesis data stream.
|
||||
ServiceAccessRoleArn *string `type:"string"`
|
||||
|
||||
// The Amazon Resource Name (ARN) for the Amazon Kinesis Data Streams endpoint.
|
||||
StreamArn *string `type:"string"`
|
||||
}
|
||||
|
||||
// String returns the string representation
|
||||
func (s KinesisSettings) String() string {
|
||||
return awsutil.Prettify(s)
|
||||
}
|
||||
|
||||
// GoString returns the string representation
|
||||
func (s KinesisSettings) GoString() string {
|
||||
return s.String()
|
||||
}
|
||||
|
||||
// SetMessageFormat sets the MessageFormat field's value.
|
||||
func (s *KinesisSettings) SetMessageFormat(v string) *KinesisSettings {
|
||||
s.MessageFormat = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetServiceAccessRoleArn sets the ServiceAccessRoleArn field's value.
|
||||
func (s *KinesisSettings) SetServiceAccessRoleArn(v string) *KinesisSettings {
|
||||
s.ServiceAccessRoleArn = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetStreamArn sets the StreamArn field's value.
|
||||
func (s *KinesisSettings) SetStreamArn(v string) *KinesisSettings {
|
||||
s.StreamArn = &v
|
||||
return s
|
||||
}
|
||||
|
||||
type ListTagsForResourceInput struct {
|
||||
_ struct{} `type:"structure"`
|
||||
|
||||
|
@ -8584,9 +8761,9 @@ type ModifyEndpointInput struct {
|
|||
// The name of the endpoint database.
|
||||
DatabaseName *string `type:"string"`
|
||||
|
||||
// The settings in JSON format for the DMS Transfer type source endpoint.
|
||||
// The settings in JSON format for the DMS transfer type of source endpoint.
|
||||
//
|
||||
// Attributes include:
|
||||
// Attributes include the following:
|
||||
//
|
||||
// * serviceAccessRoleArn - The IAM role that has permission to access the
|
||||
// Amazon S3 bucket.
|
||||
|
@ -8606,11 +8783,17 @@ type ModifyEndpointInput struct {
|
|||
DmsTransferSettings *DmsTransferSettings `type:"structure"`
|
||||
|
||||
// Settings in JSON format for the target Amazon DynamoDB endpoint. For more
|
||||
// information about the available settings, see the Using Object Mapping to
|
||||
// Migrate Data to DynamoDB section at Using an Amazon DynamoDB Database as
|
||||
// a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html).
|
||||
// information about the available settings, see Using Object Mapping to Migrate
|
||||
// Data to DynamoDB (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
DynamoDbSettings *DynamoDbSettings `type:"structure"`
|
||||
|
||||
// Settings in JSON format for the target Elasticsearch endpoint. For more information
|
||||
// about the available settings, see Extra Connection Attributes When Using
|
||||
// Elasticsearch as a Target for AWS DMS (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Elasticsearch.html#CHAP_Target.Elasticsearch.Configuration)
|
||||
// in the AWS Database Migration User Guide.
|
||||
ElasticsearchSettings *ElasticsearchSettings `type:"structure"`
|
||||
|
||||
// The Amazon Resource Name (ARN) string that uniquely identifies the endpoint.
|
||||
//
|
||||
// EndpointArn is a required field
|
||||
|
@ -8636,21 +8819,28 @@ type ModifyEndpointInput struct {
|
|||
// pass the empty string ("") as an argument.
|
||||
ExtraConnectionAttributes *string `type:"string"`
|
||||
|
||||
// Settings in JSON format for the target Amazon Kinesis Data Streams endpoint.
|
||||
// For more information about the available settings, see Using Object Mapping
|
||||
// to Migrate Data to a Kinesis Data Stream (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html#CHAP_Target.Kinesis.ObjectMapping
|
||||
// ) in the AWS Database Migration User Guide.
|
||||
KinesisSettings *KinesisSettings `type:"structure"`
|
||||
|
||||
// Settings in JSON format for the source MongoDB endpoint. For more information
|
||||
// about the available settings, see the Configuration Properties When Using
|
||||
// MongoDB as a Source for AWS Database Migration Service section at Using
|
||||
// Amazon S3 as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html).
|
||||
// about the available settings, see the configuration properties section in
|
||||
// Using MongoDB as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
MongoDbSettings *MongoDbSettings `type:"structure"`
|
||||
|
||||
// The password to be used to login to the endpoint database.
|
||||
Password *string `type:"string"`
|
||||
Password *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The port used by the endpoint database.
|
||||
Port *int64 `type:"integer"`
|
||||
|
||||
// Settings in JSON format for the target S3 endpoint. For more information
|
||||
// about the available settings, see the Extra Connection Attributes section
|
||||
// at Using Amazon S3 as a Target for AWS Database Migration Service (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html).
|
||||
// Settings in JSON format for the target Amazon S3 endpoint. For more information
|
||||
// about the available settings, see Extra Connection Attributes When Using
|
||||
// Amazon S3 as a Target for AWS DMS (http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html#CHAP_Target.S3.Configuring)
|
||||
// in the AWS Database Migration Service User Guide.
|
||||
S3Settings *S3Settings `type:"structure"`
|
||||
|
||||
// The name of the server where the endpoint database resides.
|
||||
|
@ -8692,6 +8882,11 @@ func (s *ModifyEndpointInput) Validate() error {
|
|||
invalidParams.AddNested("DynamoDbSettings", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
if s.ElasticsearchSettings != nil {
|
||||
if err := s.ElasticsearchSettings.Validate(); err != nil {
|
||||
invalidParams.AddNested("ElasticsearchSettings", err.(request.ErrInvalidParams))
|
||||
}
|
||||
}
|
||||
|
||||
if invalidParams.Len() > 0 {
|
||||
return invalidParams
|
||||
|
@ -8723,6 +8918,12 @@ func (s *ModifyEndpointInput) SetDynamoDbSettings(v *DynamoDbSettings) *ModifyEn
|
|||
return s
|
||||
}
|
||||
|
||||
// SetElasticsearchSettings sets the ElasticsearchSettings field's value.
|
||||
func (s *ModifyEndpointInput) SetElasticsearchSettings(v *ElasticsearchSettings) *ModifyEndpointInput {
|
||||
s.ElasticsearchSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetEndpointArn sets the EndpointArn field's value.
|
||||
func (s *ModifyEndpointInput) SetEndpointArn(v string) *ModifyEndpointInput {
|
||||
s.EndpointArn = &v
|
||||
|
@ -8759,6 +8960,12 @@ func (s *ModifyEndpointInput) SetExtraConnectionAttributes(v string) *ModifyEndp
|
|||
return s
|
||||
}
|
||||
|
||||
// SetKinesisSettings sets the KinesisSettings field's value.
|
||||
func (s *ModifyEndpointInput) SetKinesisSettings(v *KinesisSettings) *ModifyEndpointInput {
|
||||
s.KinesisSettings = v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetMongoDbSettings sets the MongoDbSettings field's value.
|
||||
func (s *ModifyEndpointInput) SetMongoDbSettings(v *MongoDbSettings) *ModifyEndpointInput {
|
||||
s.MongoDbSettings = v
|
||||
|
@ -9399,11 +9606,11 @@ type MongoDbSettings struct {
|
|||
// Default value is false.
|
||||
ExtractDocId *string `type:"string"`
|
||||
|
||||
// The KMS key identifier that will be used to encrypt the connection parameters.
|
||||
// If you do not specify a value for the KmsKeyId parameter, then AWS DMS will
|
||||
// use your default encryption key. AWS KMS creates the default encryption key
|
||||
// for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS region.
|
||||
// The AWS KMS key identifier that is used to encrypt the content on the replication
|
||||
// instance. If you don't specify a value for the KmsKeyId parameter, then AWS
|
||||
// DMS uses your default encryption key. AWS KMS creates the default encryption
|
||||
// key for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS Region.
|
||||
KmsKeyId *string `type:"string"`
|
||||
|
||||
// Specifies either document or table mode.
|
||||
|
@ -9415,7 +9622,7 @@ type MongoDbSettings struct {
|
|||
NestingLevel *string `type:"string" enum:"NestingLevelValue"`
|
||||
|
||||
// The password for the user account you use to access the MongoDB source endpoint.
|
||||
Password *string `type:"string"`
|
||||
Password *string `type:"string" sensitive:"true"`
|
||||
|
||||
// The port value for the MongoDB source endpoint.
|
||||
Port *int64 `type:"integer"`
|
||||
|
@ -9969,6 +10176,9 @@ type ReplicationInstance struct {
|
|||
// The Availability Zone for the instance.
|
||||
AvailabilityZone *string `type:"string"`
|
||||
|
||||
// The DNS name servers for the replication instance.
|
||||
DnsNameServers *string `type:"string"`
|
||||
|
||||
// The engine version number of the replication instance.
|
||||
EngineVersion *string `type:"string"`
|
||||
|
||||
|
@ -9979,11 +10189,11 @@ type ReplicationInstance struct {
|
|||
// The time the replication instance was created.
|
||||
InstanceCreateTime *time.Time `type:"timestamp"`
|
||||
|
||||
// The KMS key identifier that is used to encrypt the content on the replication
|
||||
// instance. If you do not specify a value for the KmsKeyId parameter, then
|
||||
// AWS DMS will use your default encryption key. AWS KMS creates the default
|
||||
// encryption key for your AWS account. Your AWS account has a different default
|
||||
// encryption key for each AWS region.
|
||||
// The AWS KMS key identifier that is used to encrypt the content on the replication
|
||||
// instance. If you don't specify a value for the KmsKeyId parameter, then AWS
|
||||
// DMS uses your default encryption key. AWS KMS creates the default encryption
|
||||
// key for your AWS account. Your AWS account has a different default encryption
|
||||
// key for each AWS Region.
|
||||
KmsKeyId *string `type:"string"`
|
||||
|
||||
// Specifies if the replication instance is a Multi-AZ deployment. You cannot
|
||||
|
@ -10081,6 +10291,12 @@ func (s *ReplicationInstance) SetAvailabilityZone(v string) *ReplicationInstance
|
|||
return s
|
||||
}
|
||||
|
||||
// SetDnsNameServers sets the DnsNameServers field's value.
|
||||
func (s *ReplicationInstance) SetDnsNameServers(v string) *ReplicationInstance {
|
||||
s.DnsNameServers = &v
|
||||
return s
|
||||
}
|
||||
|
||||
// SetEngineVersion sets the EngineVersion field's value.
|
||||
func (s *ReplicationInstance) SetEngineVersion(v string) *ReplicationInstance {
|
||||
s.EngineVersion = &v
|
||||
|
@ -11519,6 +11735,11 @@ const (
|
|||
DmsSslModeValueVerifyFull = "verify-full"
|
||||
)
|
||||
|
||||
const (
|
||||
// MessageFormatValueJson is a MessageFormatValue enum value
|
||||
MessageFormatValueJson = "json"
|
||||
)
|
||||
|
||||
const (
|
||||
// MigrationTypeValueFullLoad is a MigrationTypeValue enum value
|
||||
MigrationTypeValueFullLoad = "full-load"
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
// between different database platforms, such as Oracle to MySQL or SQL Server
|
||||
// to PostgreSQL.
|
||||
//
|
||||
// For more information about AWS DMS, see the AWS DMS user guide at What Is
|
||||
// AWS Database Migration Service? (http://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
|
||||
// For more information about AWS DMS, see What Is AWS Database Migration Service?
|
||||
// (http://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) in the AWS
|
||||
// Database Migration User Guide.
|
||||
//
|
||||
// See https://docs.aws.amazon.com/goto/WebAPI/dms-2016-01-01 for more information on this service.
|
||||
//
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue