diff --git a/CHANGELOG.md b/CHANGELOG.md index 3188d25da46..7cf4f292000 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,19 @@ -## 1.35.0 (Unreleased) +## 1.36.0 (Unreleased) +## 1.35.0 (September 06, 2018) + +ENHANCEMENTS: + +* data-source/aws_eks_cluster: Add `platform_version` attribute ([#5797](https://github.com/terraform-providers/terraform-provider-aws/issues/5797)) +* resource/aws_eks_cluster: Add `platform_version` attribute ([#5797](https://github.com/terraform-providers/terraform-provider-aws/issues/5797)) +* resource/aws_lambda_function: Allow empty lists for `vpc_config` `security_group_ids` and `subnet_ids` arguments to unconfigure VPC ([#1341](https://github.com/terraform-providers/terraform-provider-aws/issues/1341)) +* resource/aws_iam_role: Allow empty string (`""`) value for `permissions_boundary` argument ([#5740](https://github.com/terraform-providers/terraform-provider-aws/issues/5740)) + +BUG FIXES: + +* resource/aws_ecr_repository: Use `RepositoryUri` instead of our building our own URI for the `repository_url` attribute (AWS China fix) ([#5748](https://github.com/terraform-providers/terraform-provider-aws/issues/5748)) +* resource/aws_lambda_function: Properly handle `vpc_config` removal ([#5798](https://github.com/terraform-providers/terraform-provider-aws/issues/5798)) +* resource/aws_redshift_cluster: Properly force new resource when updating `availability_zone` argument ([#5758](https://github.com/terraform-providers/terraform-provider-aws/issues/5758)) + ## 1.34.0 (August 30, 2018) NOTES: diff --git a/aws/config.go b/aws/config.go index 4abe2ab9060..ddc5d88570f 100644 --- a/aws/config.go +++ b/aws/config.go @@ -448,10 +448,20 @@ func (c *Config) Client() (interface{}, error) { var err error client.accountid, client.partition, err = GetAccountIDAndPartition(client.iamconn, client.stsconn, cp.ProviderName) if err != nil { - return nil, fmt.Errorf("Failed getting account information via all available methods. Errors: %s", err) + // DEPRECATED: Next major version of the provider should return the error instead of logging + // if skip_request_account_id is not enabled. + log.Printf("[WARN] %s", fmt.Sprintf( + "AWS account ID not previously found and failed retrieving via all available methods. "+ + "This will return an error in the next major version of the AWS provider. "+ + "See https://www.terraform.io/docs/providers/aws/index.html#skip_requesting_account_id for workaround and implications. "+ + "Errors: %s", err)) } } + if client.accountid == "" { + log.Printf("[WARN] AWS account ID not found for provider. See https://www.terraform.io/docs/providers/aws/index.html#skip_requesting_account_id for implications.") + } + authErr := c.ValidateAccountId(client.accountid) if authErr != nil { return nil, authErr diff --git a/aws/data_source_aws_eks_cluster.go b/aws/data_source_aws_eks_cluster.go index c2dfbdfaf0f..b9d66b90c16 100644 --- a/aws/data_source_aws_eks_cluster.go +++ b/aws/data_source_aws_eks_cluster.go @@ -46,6 +46,10 @@ func dataSourceAwsEksCluster() *schema.Resource { ForceNew: true, ValidateFunc: validation.NoZeroValues, }, + "platform_version": { + Type: schema.TypeString, + Computed: true, + }, "role_arn": { Type: schema.TypeString, Computed: true, @@ -110,6 +114,7 @@ func dataSourceAwsEksClusterRead(d *schema.ResourceData, meta interface{}) error d.Set("created_at", aws.TimeValue(cluster.CreatedAt).String()) d.Set("endpoint", cluster.Endpoint) d.Set("name", cluster.Name) + d.Set("platform_version", cluster.PlatformVersion) d.Set("role_arn", cluster.RoleArn) d.Set("version", cluster.Version) diff --git a/aws/data_source_aws_eks_cluster_test.go b/aws/data_source_aws_eks_cluster_test.go index d224540029c..5153e89e420 100644 --- a/aws/data_source_aws_eks_cluster_test.go +++ b/aws/data_source_aws_eks_cluster_test.go @@ -2,6 +2,7 @@ package aws import ( "fmt" + "regexp" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -26,6 +27,7 @@ func TestAccAWSEksClusterDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrPair(resourceName, "certificate_authority.0.data", dataSourceResourceName, "certificate_authority.0.data"), resource.TestCheckResourceAttrPair(resourceName, "created_at", dataSourceResourceName, "created_at"), resource.TestCheckResourceAttrPair(resourceName, "endpoint", dataSourceResourceName, "endpoint"), + resource.TestMatchResourceAttr(resourceName, "platform_version", regexp.MustCompile(`^eks\.\d+$`)), resource.TestCheckResourceAttrPair(resourceName, "role_arn", dataSourceResourceName, "role_arn"), resource.TestCheckResourceAttrPair(resourceName, "version", dataSourceResourceName, "version"), resource.TestCheckResourceAttr(dataSourceResourceName, "vpc_config.#", "1"), diff --git a/aws/import_aws_ecr_repository_test.go b/aws/import_aws_ecr_repository_test.go deleted file mode 100644 index dfdcbe70cde..00000000000 --- a/aws/import_aws_ecr_repository_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package aws - -import ( - "testing" - - "github.com/hashicorp/terraform/helper/acctest" - "github.com/hashicorp/terraform/helper/resource" -) - -func TestAccAWSEcrRepository_importBasic(t *testing.T) { - resourceName := "aws_ecr_repository.default" - randString := acctest.RandString(10) - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckAWSEcrRepositoryDestroy, - Steps: []resource.TestStep{ - { - Config: testAccAWSEcrRepository(randString), - }, - - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} diff --git a/aws/provider_test.go b/aws/provider_test.go index 56f7d1f8887..f9d383f049d 100644 --- a/aws/provider_test.go +++ b/aws/provider_test.go @@ -4,10 +4,12 @@ import ( "fmt" "log" "os" + "strings" "testing" "github.com/aws/aws-sdk-go/service/organizations" + "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/hashicorp/terraform/helper/resource" @@ -78,6 +80,44 @@ func testAccPreCheck(t *testing.T) { } } +// testAccAwsProviderAccountID returns the account ID of an AWS provider +func testAccAwsProviderAccountID(provider *schema.Provider) string { + if provider == nil { + log.Print("[DEBUG] Unable to read account ID from test provider: empty provider") + return "" + } + if provider.Meta() == nil { + log.Print("[DEBUG] Unable to read account ID from test provider: unconfigured provider") + return "" + } + client, ok := provider.Meta().(*AWSClient) + if !ok { + log.Print("[DEBUG] Unable to read account ID from test provider: non-AWS or unconfigured AWS provider") + return "" + } + return client.accountid +} + +// testAccCheckResourceAttrRegionalARN ensures the Terraform state exactly matches a formatted ARN with region +func testAccCheckResourceAttrRegionalARN(resourceName, attributeName, arnService, arnResource string) resource.TestCheckFunc { + return func(s *terraform.State) error { + attributeValue := arn.ARN{ + AccountID: testAccGetAccountID(), + Partition: testAccGetPartition(), + Region: testAccGetRegion(), + Resource: arnResource, + Service: arnService, + }.String() + return resource.TestCheckResourceAttr(resourceName, attributeName, attributeValue)(s) + } +} + +// testAccGetAccountID returns the account ID of testAccProvider +// Must be used returned within a resource.TestCheckFunc +func testAccGetAccountID() string { + return testAccAwsProviderAccountID(testAccProvider) +} + func testAccGetRegion() string { v := os.Getenv("AWS_DEFAULT_REGION") if v == "" { @@ -93,6 +133,14 @@ func testAccGetPartition() string { return "aws" } +func testAccGetServiceEndpoint(service string) string { + endpoint, err := endpoints.DefaultResolver().EndpointFor(service, testAccGetRegion()) + if err != nil { + return "" + } + return strings.TrimPrefix(endpoint.URL, "https://") +} + func testAccEC2ClassicPreCheck(t *testing.T) { client := testAccProvider.Meta().(*AWSClient) platforms := client.supportedplatforms diff --git a/aws/resource_aws_ecr_repository.go b/aws/resource_aws_ecr_repository.go index 2974fc6103f..20a16387340 100644 --- a/aws/resource_aws_ecr_repository.go +++ b/aws/resource_aws_ecr_repository.go @@ -85,24 +85,14 @@ func resourceAwsEcrRepositoryRead(d *schema.ResourceData, meta interface{}) erro repository := out.Repositories[0] - log.Printf("[DEBUG] Received repository %s", out) - - d.SetId(*repository.RepositoryName) d.Set("arn", repository.RepositoryArn) - d.Set("registry_id", repository.RegistryId) d.Set("name", repository.RepositoryName) - - repositoryUrl := buildRepositoryUrl(repository, meta.(*AWSClient).region) - log.Printf("[INFO] Setting the repository url to be %s", repositoryUrl) - d.Set("repository_url", repositoryUrl) + d.Set("registry_id", repository.RegistryId) + d.Set("repository_url", repository.RepositoryUri) return nil } -func buildRepositoryUrl(repo *ecr.Repository, region string) string { - return fmt.Sprintf("%s.dkr.ecr.%s.amazonaws.com/%s", *repo.RegistryId, region, *repo.RepositoryName) -} - func resourceAwsEcrRepositoryDelete(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).ecrconn diff --git a/aws/resource_aws_ecr_repository_test.go b/aws/resource_aws_ecr_repository_test.go index 23d5e3bcfed..5d4dbcda05d 100644 --- a/aws/resource_aws_ecr_repository_test.go +++ b/aws/resource_aws_ecr_repository_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/ecr" "github.com/hashicorp/terraform/helper/acctest" "github.com/hashicorp/terraform/helper/resource" @@ -13,7 +12,8 @@ import ( ) func TestAccAWSEcrRepository_basic(t *testing.T) { - randString := acctest.RandString(10) + rName := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "aws_ecr_repository.default" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -21,11 +21,20 @@ func TestAccAWSEcrRepository_basic(t *testing.T) { CheckDestroy: testAccCheckAWSEcrRepositoryDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSEcrRepository(randString), + Config: testAccAWSEcrRepositoryConfig(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSEcrRepositoryExists("aws_ecr_repository.default"), + testAccCheckAWSEcrRepositoryExists(resourceName), + testAccCheckResourceAttrRegionalARN(resourceName, "arn", "ecr", fmt.Sprintf("repository/%s", rName)), + resource.TestCheckResourceAttr(resourceName, "name", rName), + testAccCheckAWSEcrRepositoryRegistryID(resourceName), + testAccCheckAWSEcrRepositoryRepositoryURL(resourceName, rName), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -44,16 +53,17 @@ func testAccCheckAWSEcrRepositoryDestroy(s *terraform.State) error { out, err := conn.DescribeRepositories(&input) + if isAWSErr(err, ecr.ErrCodeRepositoryNotFoundException, "") { + return nil + } + if err != nil { - if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { - return nil - } return err } for _, repository := range out.Repositories { - if repository.RepositoryName == aws.String(rs.Primary.Attributes["name"]) { - return fmt.Errorf("ECR repository still exists:\n%#v", repository) + if aws.StringValue(repository.RepositoryName) == rs.Primary.Attributes["name"] { + return fmt.Errorf("ECR repository still exists: %s", rs.Primary.Attributes["name"]) } } } @@ -72,10 +82,24 @@ func testAccCheckAWSEcrRepositoryExists(name string) resource.TestCheckFunc { } } -func testAccAWSEcrRepository(randString string) string { +func testAccCheckAWSEcrRepositoryRegistryID(resourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + attributeValue := testAccGetAccountID() + return resource.TestCheckResourceAttr(resourceName, "registry_id", attributeValue)(s) + } +} + +func testAccCheckAWSEcrRepositoryRepositoryURL(resourceName, repositoryName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + attributeValue := fmt.Sprintf("%s.dkr.%s/%s", testAccGetAccountID(), testAccGetServiceEndpoint("ecr"), repositoryName) + return resource.TestCheckResourceAttr(resourceName, "repository_url", attributeValue)(s) + } +} + +func testAccAWSEcrRepositoryConfig(rName string) string { return fmt.Sprintf(` resource "aws_ecr_repository" "default" { - name = "tf-acc-test-ecr-%s" + name = %q } -`, randString) +`, rName) } diff --git a/aws/resource_aws_eks_cluster.go b/aws/resource_aws_eks_cluster.go index 87abe5115f2..f2d1118893d 100644 --- a/aws/resource_aws_eks_cluster.go +++ b/aws/resource_aws_eks_cluster.go @@ -59,6 +59,10 @@ func resourceAwsEksCluster() *schema.Resource { ForceNew: true, ValidateFunc: validation.NoZeroValues, }, + "platform_version": { + Type: schema.TypeString, + Computed: true, + }, "role_arn": { Type: schema.TypeString, Required: true, @@ -195,6 +199,7 @@ func resourceAwsEksClusterRead(d *schema.ResourceData, meta interface{}) error { d.Set("created_at", aws.TimeValue(cluster.CreatedAt).String()) d.Set("endpoint", cluster.Endpoint) d.Set("name", cluster.Name) + d.Set("platform_version", cluster.PlatformVersion) d.Set("role_arn", cluster.RoleArn) d.Set("version", cluster.Version) diff --git a/aws/resource_aws_eks_cluster_test.go b/aws/resource_aws_eks_cluster_test.go index 583f90d11ab..9bba6bf37fc 100644 --- a/aws/resource_aws_eks_cluster_test.go +++ b/aws/resource_aws_eks_cluster_test.go @@ -91,6 +91,7 @@ func TestAccAWSEksCluster_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "certificate_authority.0.data"), resource.TestMatchResourceAttr(resourceName, "endpoint", regexp.MustCompile(`^https://`)), resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestMatchResourceAttr(resourceName, "platform_version", regexp.MustCompile(`^eks\.\d+$`)), resource.TestMatchResourceAttr(resourceName, "role_arn", regexp.MustCompile(fmt.Sprintf("%s$", rName))), resource.TestMatchResourceAttr(resourceName, "version", regexp.MustCompile(`^\d+\.\d+$`)), resource.TestCheckResourceAttr(resourceName, "vpc_config.#", "1"), diff --git a/aws/resource_aws_iam_role.go b/aws/resource_aws_iam_role.go index 9bb886979c6..fdbda1f7660 100644 --- a/aws/resource_aws_iam_role.go +++ b/aws/resource_aws_iam_role.go @@ -87,7 +87,7 @@ func resourceAwsIamRole() *schema.Resource { "permissions_boundary": { Type: schema.TypeString, Optional: true, - ValidateFunc: validation.StringLenBetween(20, 2048), + ValidateFunc: validateMaxLength(2048), }, "description": { diff --git a/aws/resource_aws_iam_role_test.go b/aws/resource_aws_iam_role_test.go index bdff37478d3..d4ded888ccb 100644 --- a/aws/resource_aws_iam_role_test.go +++ b/aws/resource_aws_iam_role_test.go @@ -242,6 +242,7 @@ func TestAccAWSIAMRole_PermissionsBoundary(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckAWSRoleExists(resourceName, &role), resource.TestCheckResourceAttr(resourceName, "permissions_boundary", permissionsBoundary1), + testAccCheckAWSRolePermissionsBoundary(&role, permissionsBoundary1), ), }, // Test update @@ -250,6 +251,7 @@ func TestAccAWSIAMRole_PermissionsBoundary(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckAWSRoleExists(resourceName, &role), resource.TestCheckResourceAttr(resourceName, "permissions_boundary", permissionsBoundary2), + testAccCheckAWSRolePermissionsBoundary(&role, permissionsBoundary2), ), }, // Test import @@ -265,6 +267,7 @@ func TestAccAWSIAMRole_PermissionsBoundary(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckAWSRoleExists(resourceName, &role), resource.TestCheckResourceAttr(resourceName, "permissions_boundary", ""), + testAccCheckAWSRolePermissionsBoundary(&role, ""), ), }, // Test addition @@ -273,6 +276,16 @@ func TestAccAWSIAMRole_PermissionsBoundary(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckAWSRoleExists(resourceName, &role), resource.TestCheckResourceAttr(resourceName, "permissions_boundary", permissionsBoundary1), + testAccCheckAWSRolePermissionsBoundary(&role, permissionsBoundary1), + ), + }, + // Test empty value + { + Config: testAccCheckIAMRoleConfig_PermissionsBoundary(rName, ""), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSRoleExists(resourceName, &role), + resource.TestCheckResourceAttr(resourceName, "permissions_boundary", ""), + testAccCheckAWSRolePermissionsBoundary(&role, ""), ), }, }, @@ -399,6 +412,22 @@ func testAccAddAwsIAMRolePolicy(n string) resource.TestCheckFunc { } } +func testAccCheckAWSRolePermissionsBoundary(getRoleOutput *iam.GetRoleOutput, expectedPermissionsBoundaryArn string) resource.TestCheckFunc { + return func(s *terraform.State) error { + actualPermissionsBoundaryArn := "" + + if getRoleOutput.Role.PermissionsBoundary != nil { + actualPermissionsBoundaryArn = *getRoleOutput.Role.PermissionsBoundary.PermissionsBoundaryArn + } + + if actualPermissionsBoundaryArn != expectedPermissionsBoundaryArn { + return fmt.Errorf("PermissionsBoundary: '%q', expected '%q'.", actualPermissionsBoundaryArn, expectedPermissionsBoundaryArn) + } + + return nil + } +} + func testAccCheckIAMRoleConfig_MaxSessionDuration(rName string, maxSessionDuration int) string { return fmt.Sprintf(` resource "aws_iam_role" "test" { diff --git a/aws/resource_aws_lambda_function.go b/aws/resource_aws_lambda_function.go index 8144b2aedb2..88377ab1547 100644 --- a/aws/resource_aws_lambda_function.go +++ b/aws/resource_aws_lambda_function.go @@ -153,6 +153,24 @@ func resourceAwsLambdaFunction() *schema.Resource { }, }, }, + + // Suppress diffs if the VPC configuration is provided, but empty + // which is a valid Lambda function configuration. e.g. + // vpc_config { + // security_group_ids = [] + // subnet_ids = [] + // } + DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { + if d.Id() == "" || old == "1" || new == "0" { + return false + } + + if d.HasChange("vpc_config.0.security_group_ids") || d.HasChange("vpc_config.0.subnet_ids") { + return false + } + + return true + }, }, "arn": { Type: schema.TypeString, @@ -305,30 +323,12 @@ func resourceAwsLambdaFunctionCreate(d *schema.ResourceData, meta interface{}) e } } - if v, ok := d.GetOk("vpc_config"); ok { - - configs := v.([]interface{}) - config, ok := configs[0].(map[string]interface{}) - - if !ok { - return errors.New("vpc_config is ") - } - - if config != nil { - var subnetIds []*string - for _, id := range config["subnet_ids"].(*schema.Set).List() { - subnetIds = append(subnetIds, aws.String(id.(string))) - } - - var securityGroupIds []*string - for _, id := range config["security_group_ids"].(*schema.Set).List() { - securityGroupIds = append(securityGroupIds, aws.String(id.(string))) - } + if v, ok := d.GetOk("vpc_config"); ok && len(v.([]interface{})) > 0 { + config := v.([]interface{})[0].(map[string]interface{}) - params.VpcConfig = &lambda.VpcConfig{ - SubnetIds: subnetIds, - SecurityGroupIds: securityGroupIds, - } + params.VpcConfig = &lambda.VpcConfig{ + SecurityGroupIds: expandStringSet(config["security_group_ids"].(*schema.Set)), + SubnetIds: expandStringSet(config["subnet_ids"].(*schema.Set)), } } @@ -680,29 +680,16 @@ func resourceAwsLambdaFunctionUpdate(d *schema.ResourceData, meta interface{}) e } } if d.HasChange("vpc_config") { - vpcConfigRaw := d.Get("vpc_config").([]interface{}) - vpcConfig, ok := vpcConfigRaw[0].(map[string]interface{}) - if !ok { - return errors.New("vpc_config is ") + configReq.VpcConfig = &lambda.VpcConfig{ + SecurityGroupIds: []*string{}, + SubnetIds: []*string{}, } - - if vpcConfig != nil { - var subnetIds []*string - for _, id := range vpcConfig["subnet_ids"].(*schema.Set).List() { - subnetIds = append(subnetIds, aws.String(id.(string))) - } - - var securityGroupIds []*string - for _, id := range vpcConfig["security_group_ids"].(*schema.Set).List() { - securityGroupIds = append(securityGroupIds, aws.String(id.(string))) - } - - configReq.VpcConfig = &lambda.VpcConfig{ - SubnetIds: subnetIds, - SecurityGroupIds: securityGroupIds, - } - configUpdate = true + if v, ok := d.GetOk("vpc_config"); ok && len(v.([]interface{})) > 0 { + vpcConfig := v.([]interface{})[0].(map[string]interface{}) + configReq.VpcConfig.SecurityGroupIds = expandStringSet(vpcConfig["security_group_ids"].(*schema.Set)) + configReq.VpcConfig.SubnetIds = expandStringSet(vpcConfig["subnet_ids"].(*schema.Set)) } + configUpdate = true } if d.HasChange("runtime") { diff --git a/aws/resource_aws_lambda_function_test.go b/aws/resource_aws_lambda_function_test.go index c1ddb8340f6..4c59a321f2b 100644 --- a/aws/resource_aws_lambda_function_test.go +++ b/aws/resource_aws_lambda_function_test.go @@ -534,6 +534,35 @@ func TestAccAWSLambdaFunction_VPC(t *testing.T) { }) } +func TestAccAWSLambdaFunction_VPCRemoval(t *testing.T) { + var conf lambda.GetFunctionOutput + + rName := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "aws_lambda_function.lambda_function_test" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLambdaFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSLambdaConfigWithVPC(rName, rName, rName, rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAwsLambdaFunctionExists(resourceName, rName, &conf), + resource.TestCheckResourceAttr(resourceName, "vpc_config.#", "1"), + ), + }, + { + Config: testAccAWSLambdaConfigBasic(rName, rName, rName, rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAwsLambdaFunctionExists(resourceName, rName, &conf), + resource.TestCheckResourceAttr(resourceName, "vpc_config.#", "0"), + ), + }, + }, + }) +} + func TestAccAWSLambdaFunction_VPCUpdate(t *testing.T) { var conf lambda.GetFunctionOutput @@ -604,6 +633,31 @@ func TestAccAWSLambdaFunction_VPC_withInvocation(t *testing.T) { }) } +func TestAccAWSLambdaFunction_EmptyVpcConfig(t *testing.T) { + var conf lambda.GetFunctionOutput + + rString := acctest.RandString(8) + funcName := fmt.Sprintf("tf_acc_lambda_func_empty_vpc_config_%s", rString) + policyName := fmt.Sprintf("tf_acc_policy_lambda_func_empty_vpc_config_%s", rString) + roleName := fmt.Sprintf("tf_acc_role_lambda_func_empty_vpc_config_%s", rString) + sgName := fmt.Sprintf("tf_acc_sg_lambda_func_empty_vpc_config_%s", rString) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLambdaFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSLambdaConfigWithEmptyVpcConfig(funcName, policyName, roleName, sgName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAwsLambdaFunctionExists("aws_lambda_function.test", funcName, &conf), + resource.TestCheckResourceAttr("aws_lambda_function.test", "vpc_config.#", "0"), + ), + }, + }, + }) +} + func TestAccAWSLambdaFunction_s3(t *testing.T) { var conf lambda.GetFunctionOutput @@ -1688,6 +1742,22 @@ resource "aws_security_group" "sg_for_lambda_2" { `, funcName, sgName2) } +func testAccAWSLambdaConfigWithEmptyVpcConfig(funcName, policyName, roleName, sgName string) string { + return fmt.Sprintf(baseAccAWSLambdaConfig(policyName, roleName, sgName)+` +resource "aws_lambda_function" "test" { + filename = "test-fixtures/lambdatest.zip" + function_name = "%s" + role = "${aws_iam_role.iam_for_lambda.arn}" + handler = "exports.example" + runtime = "nodejs4.3" + + vpc_config { + subnet_ids = [] + security_group_ids = [] + } +}`, funcName) +} + func testAccAWSLambdaConfigS3(bucketName, roleName, funcName string) string { return fmt.Sprintf(` resource "aws_s3_bucket" "lambda_bucket" { diff --git a/aws/resource_aws_network_acl_rule.go b/aws/resource_aws_network_acl_rule.go index 6a17cdcea4a..99157218bd0 100644 --- a/aws/resource_aws_network_acl_rule.go +++ b/aws/resource_aws_network_acl_rule.go @@ -133,7 +133,7 @@ func resourceAwsNetworkAclRuleCreate(d *schema.ResourceData, meta interface{}) e } // Specify additional required fields for ICMP. For the list - // of ICMP codes and types, see: http://www.nthelp.com/icmp.html + // of ICMP codes and types, see: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml if p == 1 { params.IcmpTypeCode = &ec2.IcmpTypeCode{} if v, ok := d.GetOk("icmp_type"); ok { diff --git a/aws/resource_aws_redshift_cluster.go b/aws/resource_aws_redshift_cluster.go index 9f6c99ee3cf..54123514d8b 100644 --- a/aws/resource_aws_redshift_cluster.go +++ b/aws/resource_aws_redshift_cluster.go @@ -90,6 +90,7 @@ func resourceAwsRedshiftCluster() *schema.Resource { "availability_zone": { Type: schema.TypeString, Optional: true, + ForceNew: true, Computed: true, }, diff --git a/aws/resource_aws_redshift_cluster_test.go b/aws/resource_aws_redshift_cluster_test.go index 3865e8e5f4a..9fc2b1e72f9 100644 --- a/aws/resource_aws_redshift_cluster_test.go +++ b/aws/resource_aws_redshift_cluster_test.go @@ -504,6 +504,39 @@ func TestAccAWSRedshiftCluster_forceNewUsername(t *testing.T) { }) } +func TestAccAWSRedshiftCluster_changeAvailabilityZone(t *testing.T) { + var first, second redshift.Cluster + + ri := acctest.RandInt() + preConfig := testAccAWSRedshiftClusterConfig_basic(ri) + postConfig := testAccAWSRedshiftClusterConfig_updatedAvailabilityZone(ri) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSRedshiftClusterDestroy, + Steps: []resource.TestStep{ + { + Config: preConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &first), + testAccCheckAWSRedshiftClusterAvailabilityZone(&first, "us-west-2a"), + resource.TestCheckResourceAttr("aws_redshift_cluster.default", "availability_zone", "us-west-2a"), + ), + }, + + { + Config: postConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSRedshiftClusterExists("aws_redshift_cluster.default", &second), + testAccCheckAWSRedshiftClusterAvailabilityZone(&second, "us-west-2b"), + resource.TestCheckResourceAttr("aws_redshift_cluster.default", "availability_zone", "us-west-2b"), + ), + }, + }, + }) +} + func testAccCheckAWSRedshiftClusterDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "aws_redshift_cluster" { @@ -629,6 +662,15 @@ func testAccCheckAWSRedshiftClusterMasterUsername(c *redshift.Cluster, value str } } +func testAccCheckAWSRedshiftClusterAvailabilityZone(c *redshift.Cluster, value string) resource.TestCheckFunc { + return func(s *terraform.State) error { + if *c.AvailabilityZone != value { + return fmt.Errorf("Expected cluster's AvailabilityZone: %q, given: %q", value, *c.AvailabilityZone) + } + return nil + } +} + func TestResourceAWSRedshiftClusterIdentifierValidation(t *testing.T) { cases := []struct { Value string @@ -1304,3 +1346,18 @@ resource "aws_redshift_cluster" "default" { skip_final_snapshot = true }`, rInt) } + +func testAccAWSRedshiftClusterConfig_updatedAvailabilityZone(rInt int) string { + return fmt.Sprintf(` + resource "aws_redshift_cluster" "default" { + cluster_identifier = "tf-redshift-cluster-%d" + availability_zone = "us-west-2b" + database_name = "mydb" + master_username = "foo_test" + master_password = "Mustbe8characters" + node_type = "dc1.large" + automated_snapshot_retention_period = 0 + allow_version_upgrade = false + skip_final_snapshot = true + }`, rInt) +} diff --git a/aws/validators_test.go b/aws/validators_test.go index df9fed35db5..6747dc6b71e 100644 --- a/aws/validators_test.go +++ b/aws/validators_test.go @@ -1563,6 +1563,66 @@ func TestValidateElbNamePrefix(t *testing.T) { } } +func TestValidateNeptuneEventSubscriptionName(t *testing.T) { + cases := []struct { + Value string + ErrCount int + }{ + { + Value: "testing123!", + ErrCount: 1, + }, + { + Value: "testing 123", + ErrCount: 1, + }, + { + Value: "testing_123", + ErrCount: 1, + }, + { + Value: randomString(256), + ErrCount: 1, + }, + } + for _, tc := range cases { + _, errors := validateNeptuneEventSubscriptionName(tc.Value, "aws_neptune_event_subscription") + if len(errors) != tc.ErrCount { + t.Fatalf("Expected the Neptune Event Subscription Name to trigger a validation error for %q", tc.Value) + } + } +} + +func TestValidateNeptuneEventSubscriptionNamePrefix(t *testing.T) { + cases := []struct { + Value string + ErrCount int + }{ + { + Value: "testing123!", + ErrCount: 1, + }, + { + Value: "testing 123", + ErrCount: 1, + }, + { + Value: "testing_123", + ErrCount: 1, + }, + { + Value: randomString(254), + ErrCount: 1, + }, + } + for _, tc := range cases { + _, errors := validateNeptuneEventSubscriptionNamePrefix(tc.Value, "aws_neptune_event_subscription") + if len(errors) != tc.ErrCount { + t.Fatalf("Expected the Neptune Event Subscription Name Prefix to trigger a validation error for %q", tc.Value) + } + } +} + func TestValidateDbSubnetGroupName(t *testing.T) { cases := []struct { Value string diff --git a/vendor/github.com/apparentlymart/go-cidr/cidr/cidr.go b/vendor/github.com/apparentlymart/go-cidr/cidr/cidr.go index a31cdec7732..c292db0ce07 100644 --- a/vendor/github.com/apparentlymart/go-cidr/cidr/cidr.go +++ b/vendor/github.com/apparentlymart/go-cidr/cidr/cidr.go @@ -71,8 +71,13 @@ func Host(base *net.IPNet, num int) (net.IP, error) { if numUint64 > maxHostNum { return nil, fmt.Errorf("prefix of %d does not accommodate a host numbered %d", parentLen, num) } - - return insertNumIntoIP(ip, num, 32), nil + var bitlength int + if ip.To4() != nil { + bitlength = 32 + } else { + bitlength = 128 + } + return insertNumIntoIP(ip, num, bitlength), nil } // AddressRange returns the first and last addresses in the given CIDR range. @@ -110,3 +115,96 @@ func AddressCount(network *net.IPNet) uint64 { prefixLen, bits := network.Mask.Size() return 1 << (uint64(bits) - uint64(prefixLen)) } + +//VerifyNoOverlap takes a list subnets and supernet (CIDRBlock) and verifies +//none of the subnets overlap and all subnets are in the supernet +//it returns an error if any of those conditions are not satisfied +func VerifyNoOverlap(subnets []*net.IPNet, CIDRBlock *net.IPNet) error { + firstLastIP := make([][]net.IP, len(subnets)) + for i, s := range subnets { + first, last := AddressRange(s) + firstLastIP[i] = []net.IP{first, last} + } + for i, s := range subnets { + if !CIDRBlock.Contains(firstLastIP[i][0]) || !CIDRBlock.Contains(firstLastIP[i][1]) { + return fmt.Errorf("%s does not fully contain %s", CIDRBlock.String(), s.String()) + } + for j := i + 1; j < len(subnets); j++ { + first := firstLastIP[j][0] + last := firstLastIP[j][1] + if s.Contains(first) || s.Contains(last) { + return fmt.Errorf("%s overlaps with %s", subnets[j].String(), s.String()) + } + } + } + return nil +} + +// PreviousSubnet returns the subnet of the desired mask in the IP space +// just lower than the start of IPNet provided. If the IP space rolls over +// then the second return value is true +func PreviousSubnet(network *net.IPNet, prefixLen int) (*net.IPNet, bool) { + startIP := checkIPv4(network.IP) + previousIP := make(net.IP, len(startIP)) + copy(previousIP, startIP) + cMask := net.CIDRMask(prefixLen, 8*len(previousIP)) + previousIP = Dec(previousIP) + previous := &net.IPNet{IP: previousIP.Mask(cMask), Mask: cMask} + if startIP.Equal(net.IPv4zero) || startIP.Equal(net.IPv6zero) { + return previous, true + } + return previous, false +} + +// NextSubnet returns the next available subnet of the desired mask size +// starting for the maximum IP of the offset subnet +// If the IP exceeds the maxium IP then the second return value is true +func NextSubnet(network *net.IPNet, prefixLen int) (*net.IPNet, bool) { + _, currentLast := AddressRange(network) + mask := net.CIDRMask(prefixLen, 8*len(currentLast)) + currentSubnet := &net.IPNet{IP: currentLast.Mask(mask), Mask: mask} + _, last := AddressRange(currentSubnet) + last = Inc(last) + next := &net.IPNet{IP: last.Mask(mask), Mask: mask} + if last.Equal(net.IPv4zero) || last.Equal(net.IPv6zero) { + return next, true + } + return next, false +} + +//Inc increases the IP by one this returns a new []byte for the IP +func Inc(IP net.IP) net.IP { + IP = checkIPv4(IP) + incIP := make([]byte, len(IP)) + copy(incIP, IP) + for j := len(incIP) - 1; j >= 0; j-- { + incIP[j]++ + if incIP[j] > 0 { + break + } + } + return incIP +} + +//Dec decreases the IP by one this returns a new []byte for the IP +func Dec(IP net.IP) net.IP { + IP = checkIPv4(IP) + decIP := make([]byte, len(IP)) + copy(decIP, IP) + decIP = checkIPv4(decIP) + for j := len(decIP) - 1; j >= 0; j-- { + decIP[j]-- + if decIP[j] < 255 { + break + } + } + return decIP +} + +func checkIPv4(ip net.IP) net.IP { + // Go for some reason allocs IPv6len for IPv4 so we have to correct it + if v4 := ip.To4(); v4 != nil { + return v4 + } + return ip +} diff --git a/vendor/github.com/armon/go-radix/go.mod b/vendor/github.com/armon/go-radix/go.mod new file mode 100644 index 00000000000..4336aa29ea2 --- /dev/null +++ b/vendor/github.com/armon/go-radix/go.mod @@ -0,0 +1 @@ +module github.com/armon/go-radix diff --git a/vendor/github.com/armon/go-radix/radix.go b/vendor/github.com/armon/go-radix/radix.go index f9655a126b7..e2bb22eb91d 100644 --- a/vendor/github.com/armon/go-radix/radix.go +++ b/vendor/github.com/armon/go-radix/radix.go @@ -44,13 +44,13 @@ func (n *node) addEdge(e edge) { n.edges.Sort() } -func (n *node) replaceEdge(e edge) { +func (n *node) updateEdge(label byte, node *node) { num := len(n.edges) idx := sort.Search(num, func(i int) bool { - return n.edges[i].label >= e.label + return n.edges[i].label >= label }) - if idx < num && n.edges[idx].label == e.label { - n.edges[idx].node = e.node + if idx < num && n.edges[idx].label == label { + n.edges[idx].node = node return } panic("replacing missing edge") @@ -198,10 +198,7 @@ func (t *Tree) Insert(s string, v interface{}) (interface{}, bool) { child := &node{ prefix: search[:commonPrefix], } - parent.replaceEdge(edge{ - label: search[0], - node: child, - }) + parent.updateEdge(search[0], child) // Restore the existing node child.addEdge(edge{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index ebce035cfdd..86788100adc 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -113,6 +113,7 @@ const ( ImportexportServiceID = "importexport" // Importexport. InspectorServiceID = "inspector" // Inspector. IotServiceID = "iot" // Iot. + IotanalyticsServiceID = "iotanalytics" // Iotanalytics. KinesisServiceID = "kinesis" // Kinesis. KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics. KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo. @@ -1409,6 +1410,15 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, + "iotanalytics": service{ + + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, "kinesis": service{ Endpoints: endpoints{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index f44b55400cf..844aa4d26f0 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.15.21" +const SDKVersion = "1.15.26" diff --git a/vendor/github.com/aws/aws-sdk-go/service/codebuild/api.go b/vendor/github.com/aws/aws-sdk-go/service/codebuild/api.go index 52824177a7b..41ad39eeb7c 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/codebuild/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/codebuild/api.go @@ -1626,6 +1626,33 @@ type Build struct { // The name of the AWS CodeBuild project. ProjectName *string `locationName:"projectName" min:"1" type:"string"` + // An array of ProjectArtifacts objects. + SecondaryArtifacts []*BuildArtifacts `locationName:"secondaryArtifacts" type:"list"` + + // An array of ProjectSourceVersion objects. Each ProjectSourceVersion must + // be one of: + // + // * For AWS CodeCommit: the commit ID to use. + // + // * For GitHub: the commit ID, pull request ID, branch name, or tag name + // that corresponds to the version of the source code you want to build. + // If a pull request ID is specified, it must use the format pr/pull-request-ID + // (for example pr/25). If a branch name is specified, the branch's HEAD + // commit ID will be used. If not specified, the default branch's HEAD commit + // ID will be used. + // + // * For Bitbucket: the commit ID, branch name, or tag name that corresponds + // to the version of the source code you want to build. If a branch name + // is specified, the branch's HEAD commit ID will be used. If not specified, + // the default branch's HEAD commit ID will be used. + // + // * For Amazon Simple Storage Service (Amazon S3): the version ID of the + // object representing the build input ZIP file to use. + SecondarySourceVersions []*ProjectSourceVersion `locationName:"secondarySourceVersions" type:"list"` + + // An array of ProjectSource objects. + SecondarySources []*ProjectSource `locationName:"secondarySources" type:"list"` + // The name of a service role used for this build. ServiceRole *string `locationName:"serviceRole" min:"1" type:"string"` @@ -1749,6 +1776,24 @@ func (s *Build) SetProjectName(v string) *Build { return s } +// SetSecondaryArtifacts sets the SecondaryArtifacts field's value. +func (s *Build) SetSecondaryArtifacts(v []*BuildArtifacts) *Build { + s.SecondaryArtifacts = v + return s +} + +// SetSecondarySourceVersions sets the SecondarySourceVersions field's value. +func (s *Build) SetSecondarySourceVersions(v []*ProjectSourceVersion) *Build { + s.SecondarySourceVersions = v + return s +} + +// SetSecondarySources sets the SecondarySources field's value. +func (s *Build) SetSecondarySources(v []*ProjectSource) *Build { + s.SecondarySources = v + return s +} + // SetServiceRole sets the ServiceRole field's value. func (s *Build) SetServiceRole(v string) *Build { s.ServiceRole = &v @@ -1789,6 +1834,9 @@ func (s *Build) SetVpcConfig(v *VpcConfig) *Build { type BuildArtifacts struct { _ struct{} `type:"structure"` + // An identifier for this artifact definition. + ArtifactIdentifier *string `locationName:"artifactIdentifier" type:"string"` + // Information that tells you if encryption for build artifacts is disabled. EncryptionDisabled *bool `locationName:"encryptionDisabled" type:"boolean"` @@ -1830,6 +1878,12 @@ func (s BuildArtifacts) GoString() string { return s.String() } +// SetArtifactIdentifier sets the ArtifactIdentifier field's value. +func (s *BuildArtifacts) SetArtifactIdentifier(v string) *BuildArtifacts { + s.ArtifactIdentifier = &v + return s +} + // SetEncryptionDisabled sets the EncryptionDisabled field's value. func (s *BuildArtifacts) SetEncryptionDisabled(v bool) *BuildArtifacts { s.EncryptionDisabled = &v @@ -2033,6 +2087,12 @@ type CreateProjectInput struct { // Name is a required field Name *string `locationName:"name" min:"2" type:"string" required:"true"` + // An array of ProjectArtifacts objects. + SecondaryArtifacts []*ProjectArtifacts `locationName:"secondaryArtifacts" type:"list"` + + // An array of ProjectSource objects. + SecondarySources []*ProjectSource `locationName:"secondarySources" type:"list"` + // The ARN of the AWS Identity and Access Management (IAM) role that enables // AWS CodeBuild to interact with dependent AWS services on behalf of the AWS // account. @@ -2115,6 +2175,26 @@ func (s *CreateProjectInput) Validate() error { invalidParams.AddNested("Environment", err.(request.ErrInvalidParams)) } } + if s.SecondaryArtifacts != nil { + for i, v := range s.SecondaryArtifacts { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondaryArtifacts", i), err.(request.ErrInvalidParams)) + } + } + } + if s.SecondarySources != nil { + for i, v := range s.SecondarySources { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondarySources", i), err.(request.ErrInvalidParams)) + } + } + } if s.Source != nil { if err := s.Source.Validate(); err != nil { invalidParams.AddNested("Source", err.(request.ErrInvalidParams)) @@ -2184,6 +2264,18 @@ func (s *CreateProjectInput) SetName(v string) *CreateProjectInput { return s } +// SetSecondaryArtifacts sets the SecondaryArtifacts field's value. +func (s *CreateProjectInput) SetSecondaryArtifacts(v []*ProjectArtifacts) *CreateProjectInput { + s.SecondaryArtifacts = v + return s +} + +// SetSecondarySources sets the SecondarySources field's value. +func (s *CreateProjectInput) SetSecondarySources(v []*ProjectSource) *CreateProjectInput { + s.SecondarySources = v + return s +} + // SetServiceRole sets the ServiceRole field's value. func (s *CreateProjectInput) SetServiceRole(v string) *CreateProjectInput { s.ServiceRole = &v @@ -3144,6 +3236,12 @@ type Project struct { // The name of the build project. Name *string `locationName:"name" min:"2" type:"string"` + // An array of ProjectArtifacts objects. + SecondaryArtifacts []*ProjectArtifacts `locationName:"secondaryArtifacts" type:"list"` + + // An array of ProjectSource objects. + SecondarySources []*ProjectSource `locationName:"secondarySources" type:"list"` + // The ARN of the AWS Identity and Access Management (IAM) role that enables // AWS CodeBuild to interact with dependent AWS services on behalf of the AWS // account. @@ -3241,6 +3339,18 @@ func (s *Project) SetName(v string) *Project { return s } +// SetSecondaryArtifacts sets the SecondaryArtifacts field's value. +func (s *Project) SetSecondaryArtifacts(v []*ProjectArtifacts) *Project { + s.SecondaryArtifacts = v + return s +} + +// SetSecondarySources sets the SecondarySources field's value. +func (s *Project) SetSecondarySources(v []*ProjectSource) *Project { + s.SecondarySources = v + return s +} + // SetServiceRole sets the ServiceRole field's value. func (s *Project) SetServiceRole(v string) *Project { s.ServiceRole = &v @@ -3281,6 +3391,9 @@ func (s *Project) SetWebhook(v *Webhook) *Project { type ProjectArtifacts struct { _ struct{} `type:"structure"` + // An identifier for this artifact definition. + ArtifactIdentifier *string `locationName:"artifactIdentifier" type:"string"` + // Set to true if you do not want your output artifacts encrypted. This option // is only valid if your artifacts type is Amazon S3. If this is set with another // artifacts type, an invalidInputException will be thrown. @@ -3427,6 +3540,12 @@ func (s *ProjectArtifacts) Validate() error { return nil } +// SetArtifactIdentifier sets the ArtifactIdentifier field's value. +func (s *ProjectArtifacts) SetArtifactIdentifier(v string) *ProjectArtifacts { + s.ArtifactIdentifier = &v + return s +} + // SetEncryptionDisabled sets the EncryptionDisabled field's value. func (s *ProjectArtifacts) SetEncryptionDisabled(v bool) *ProjectArtifacts { s.EncryptionDisabled = &v @@ -3774,6 +3893,9 @@ type ProjectSource struct { // is thrown. ReportBuildStatus *bool `locationName:"reportBuildStatus" type:"boolean"` + // An identifier for this project source. + SourceIdentifier *string `locationName:"sourceIdentifier" type:"string"` + // The type of repository that contains the source code to be built. Valid values // include: // @@ -3857,12 +3979,89 @@ func (s *ProjectSource) SetReportBuildStatus(v bool) *ProjectSource { return s } +// SetSourceIdentifier sets the SourceIdentifier field's value. +func (s *ProjectSource) SetSourceIdentifier(v string) *ProjectSource { + s.SourceIdentifier = &v + return s +} + // SetType sets the Type field's value. func (s *ProjectSource) SetType(v string) *ProjectSource { s.Type = &v return s } +// A source identifier and its corresponding version. +type ProjectSourceVersion struct { + _ struct{} `type:"structure"` + + // An identifier for a source in the build project. + // + // SourceIdentifier is a required field + SourceIdentifier *string `locationName:"sourceIdentifier" type:"string" required:"true"` + + // The source version for the corresponding source identifier. If specified, + // must be one of: + // + // * For AWS CodeCommit: the commit ID to use. + // + // * For GitHub: the commit ID, pull request ID, branch name, or tag name + // that corresponds to the version of the source code you want to build. + // If a pull request ID is specified, it must use the format pr/pull-request-ID + // (for example pr/25). If a branch name is specified, the branch's HEAD + // commit ID will be used. If not specified, the default branch's HEAD commit + // ID will be used. + // + // * For Bitbucket: the commit ID, branch name, or tag name that corresponds + // to the version of the source code you want to build. If a branch name + // is specified, the branch's HEAD commit ID will be used. If not specified, + // the default branch's HEAD commit ID will be used. + // + // * For Amazon Simple Storage Service (Amazon S3): the version ID of the + // object representing the build input ZIP file to use. + // + // SourceVersion is a required field + SourceVersion *string `locationName:"sourceVersion" type:"string" required:"true"` +} + +// String returns the string representation +func (s ProjectSourceVersion) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ProjectSourceVersion) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ProjectSourceVersion) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ProjectSourceVersion"} + if s.SourceIdentifier == nil { + invalidParams.Add(request.NewErrParamRequired("SourceIdentifier")) + } + if s.SourceVersion == nil { + invalidParams.Add(request.NewErrParamRequired("SourceVersion")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetSourceIdentifier sets the SourceIdentifier field's value. +func (s *ProjectSourceVersion) SetSourceIdentifier(v string) *ProjectSourceVersion { + s.SourceIdentifier = &v + return s +} + +// SetSourceVersion sets the SourceVersion field's value. +func (s *ProjectSourceVersion) SetSourceVersion(v string) *ProjectSourceVersion { + s.SourceVersion = &v + return s +} + // Information about the authorization settings for AWS CodeBuild to access // the source code to be built. // @@ -3982,6 +4181,16 @@ type StartBuildInput struct { // GitHub, an invalidInputException is thrown. ReportBuildStatusOverride *bool `locationName:"reportBuildStatusOverride" type:"boolean"` + // An array of ProjectArtifacts objects. + SecondaryArtifactsOverride []*ProjectArtifacts `locationName:"secondaryArtifactsOverride" type:"list"` + + // An array of ProjectSource objects. + SecondarySourcesOverride []*ProjectSource `locationName:"secondarySourcesOverride" type:"list"` + + // An array of ProjectSourceVersion objects that specify one or more versions + // of the project's secondary sources to be used for this build only. + SecondarySourcesVersionOverride []*ProjectSourceVersion `locationName:"secondarySourcesVersionOverride" type:"list"` + // The name of a service role for this build that overrides the one specified // in the build project. ServiceRoleOverride *string `locationName:"serviceRoleOverride" min:"1" type:"string"` @@ -4073,6 +4282,36 @@ func (s *StartBuildInput) Validate() error { } } } + if s.SecondaryArtifactsOverride != nil { + for i, v := range s.SecondaryArtifactsOverride { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondaryArtifactsOverride", i), err.(request.ErrInvalidParams)) + } + } + } + if s.SecondarySourcesOverride != nil { + for i, v := range s.SecondarySourcesOverride { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondarySourcesOverride", i), err.(request.ErrInvalidParams)) + } + } + } + if s.SecondarySourcesVersionOverride != nil { + for i, v := range s.SecondarySourcesVersionOverride { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondarySourcesVersionOverride", i), err.(request.ErrInvalidParams)) + } + } + } if s.SourceAuthOverride != nil { if err := s.SourceAuthOverride.Validate(); err != nil { invalidParams.AddNested("SourceAuthOverride", err.(request.ErrInvalidParams)) @@ -4169,6 +4408,24 @@ func (s *StartBuildInput) SetReportBuildStatusOverride(v bool) *StartBuildInput return s } +// SetSecondaryArtifactsOverride sets the SecondaryArtifactsOverride field's value. +func (s *StartBuildInput) SetSecondaryArtifactsOverride(v []*ProjectArtifacts) *StartBuildInput { + s.SecondaryArtifactsOverride = v + return s +} + +// SetSecondarySourcesOverride sets the SecondarySourcesOverride field's value. +func (s *StartBuildInput) SetSecondarySourcesOverride(v []*ProjectSource) *StartBuildInput { + s.SecondarySourcesOverride = v + return s +} + +// SetSecondarySourcesVersionOverride sets the SecondarySourcesVersionOverride field's value. +func (s *StartBuildInput) SetSecondarySourcesVersionOverride(v []*ProjectSourceVersion) *StartBuildInput { + s.SecondarySourcesVersionOverride = v + return s +} + // SetServiceRoleOverride sets the ServiceRoleOverride field's value. func (s *StartBuildInput) SetServiceRoleOverride(v string) *StartBuildInput { s.ServiceRoleOverride = &v @@ -4378,6 +4635,12 @@ type UpdateProjectInput struct { // Name is a required field Name *string `locationName:"name" min:"1" type:"string" required:"true"` + // An array of ProjectSource objects. + SecondaryArtifacts []*ProjectArtifacts `locationName:"secondaryArtifacts" type:"list"` + + // An array of ProjectSource objects. + SecondarySources []*ProjectSource `locationName:"secondarySources" type:"list"` + // The replacement ARN of the AWS Identity and Access Management (IAM) role // that enables AWS CodeBuild to interact with dependent AWS services on behalf // of the AWS account. @@ -4444,6 +4707,26 @@ func (s *UpdateProjectInput) Validate() error { invalidParams.AddNested("Environment", err.(request.ErrInvalidParams)) } } + if s.SecondaryArtifacts != nil { + for i, v := range s.SecondaryArtifacts { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondaryArtifacts", i), err.(request.ErrInvalidParams)) + } + } + } + if s.SecondarySources != nil { + for i, v := range s.SecondarySources { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "SecondarySources", i), err.(request.ErrInvalidParams)) + } + } + } if s.Source != nil { if err := s.Source.Validate(); err != nil { invalidParams.AddNested("Source", err.(request.ErrInvalidParams)) @@ -4513,6 +4796,18 @@ func (s *UpdateProjectInput) SetName(v string) *UpdateProjectInput { return s } +// SetSecondaryArtifacts sets the SecondaryArtifacts field's value. +func (s *UpdateProjectInput) SetSecondaryArtifacts(v []*ProjectArtifacts) *UpdateProjectInput { + s.SecondaryArtifacts = v + return s +} + +// SetSecondarySources sets the SecondarySources field's value. +func (s *UpdateProjectInput) SetSecondarySources(v []*ProjectSource) *UpdateProjectInput { + s.SecondarySources = v + return s +} + // SetServiceRole sets the ServiceRole field's value. func (s *UpdateProjectInput) SetServiceRole(v string) *UpdateProjectInput { s.ServiceRole = &v @@ -4951,6 +5246,9 @@ const ( // SourceTypeGithubEnterprise is a SourceType enum value SourceTypeGithubEnterprise = "GITHUB_ENTERPRISE" + + // SourceTypeNoSource is a SourceType enum value + SourceTypeNoSource = "NO_SOURCE" ) const ( diff --git a/vendor/github.com/aws/aws-sdk-go/service/eks/api.go b/vendor/github.com/aws/aws-sdk-go/service/eks/api.go index 4d76063f1b8..bb1cefd8892 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/eks/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/eks/api.go @@ -104,11 +104,11 @@ func (c *EKS) CreateClusterRequest(input *CreateClusterInput) (req *request.Requ // These errors are usually caused by a server-side issue. // // * ErrCodeServiceUnavailableException "ServiceUnavailableException" -// The service is unavailable, back off and retry the operation. +// The service is unavailable. Back off and retry the operation. // // * ErrCodeUnsupportedAvailabilityZoneException "UnsupportedAvailabilityZoneException" // At least one of your specified cluster subnets is in an Availability Zone -// that does not support Amazon EKS. The exception output will specify the supported +// that does not support Amazon EKS. The exception output specifies the supported // Availability Zones for your account, from which you can choose subnets for // your cluster. // @@ -200,7 +200,7 @@ func (c *EKS) DeleteClusterRequest(input *DeleteClusterInput) (req *request.Requ // // * ErrCodeResourceNotFoundException "ResourceNotFoundException" // The specified resource could not be found. You can view your available clusters -// with ListClusters. Amazon EKS clusters are region-specific. +// with ListClusters. Amazon EKS clusters are Region-specific. // // * ErrCodeClientException "ClientException" // These errors are usually caused by a client action, such as using an action @@ -211,7 +211,7 @@ func (c *EKS) DeleteClusterRequest(input *DeleteClusterInput) (req *request.Requ // These errors are usually caused by a server-side issue. // // * ErrCodeServiceUnavailableException "ServiceUnavailableException" -// The service is unavailable, back off and retry the operation. +// The service is unavailable. Back off and retry the operation. // // See also, https://docs.aws.amazon.com/goto/WebAPI/eks-2017-11-01/DeleteCluster func (c *EKS) DeleteCluster(input *DeleteClusterInput) (*DeleteClusterOutput, error) { @@ -299,7 +299,7 @@ func (c *EKS) DescribeClusterRequest(input *DescribeClusterInput) (req *request. // Returned Error Codes: // * ErrCodeResourceNotFoundException "ResourceNotFoundException" // The specified resource could not be found. You can view your available clusters -// with ListClusters. Amazon EKS clusters are region-specific. +// with ListClusters. Amazon EKS clusters are Region-specific. // // * ErrCodeClientException "ClientException" // These errors are usually caused by a client action, such as using an action @@ -310,7 +310,7 @@ func (c *EKS) DescribeClusterRequest(input *DescribeClusterInput) (req *request. // These errors are usually caused by a server-side issue. // // * ErrCodeServiceUnavailableException "ServiceUnavailableException" -// The service is unavailable, back off and retry the operation. +// The service is unavailable. Back off and retry the operation. // // See also, https://docs.aws.amazon.com/goto/WebAPI/eks-2017-11-01/DescribeCluster func (c *EKS) DescribeCluster(input *DescribeClusterInput) (*DescribeClusterOutput, error) { @@ -378,7 +378,7 @@ func (c *EKS) ListClustersRequest(input *ListClustersInput) (req *request.Reques // ListClusters API operation for Amazon Elastic Container Service for Kubernetes. // -// Lists the Amazon EKS clusters in your AWS account in the specified region. +// Lists the Amazon EKS clusters in your AWS account in the specified Region. // // 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 @@ -401,7 +401,7 @@ func (c *EKS) ListClustersRequest(input *ListClustersInput) (req *request.Reques // These errors are usually caused by a server-side issue. // // * ErrCodeServiceUnavailableException "ServiceUnavailableException" -// The service is unavailable, back off and retry the operation. +// The service is unavailable. Back off and retry the operation. // // See also, https://docs.aws.amazon.com/goto/WebAPI/eks-2017-11-01/ListClusters func (c *EKS) ListClusters(input *ListClustersInput) (*ListClustersOutput, error) { @@ -474,6 +474,11 @@ type Cluster struct { // The name of the cluster. Name *string `locationName:"name" type:"string"` + // The platform version of your Amazon EKS cluster. For more information, see + // Platform Versions (eks/latest/userguide/platform-versions.html) in the Amazon + // EKS User Guide. + PlatformVersion *string `locationName:"platformVersion" type:"string"` + // The VPC subnets and security groups used by the cluster control plane. Amazon // EKS VPC resources have specific requirements to work properly with Kubernetes. // For more information, see Cluster VPC Considerations (http://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html) @@ -539,6 +544,12 @@ func (s *Cluster) SetName(v string) *Cluster { return s } +// SetPlatformVersion sets the PlatformVersion field's value. +func (s *Cluster) SetPlatformVersion(v string) *Cluster { + s.PlatformVersion = &v + return s +} + // SetResourcesVpcConfig sets the ResourcesVpcConfig field's value. func (s *Cluster) SetResourcesVpcConfig(v *VpcConfigResponse) *Cluster { s.ResourcesVpcConfig = v @@ -579,7 +590,9 @@ type CreateClusterInput struct { // EKS VPC resources have specific requirements to work properly with Kubernetes. // For more information, see Cluster VPC Considerations (http://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html) // and Cluster Security Group Considerations (http://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html) - // in the Amazon EKS User Guide. + // in the Amazon EKS User Guide. You must specify at least two subnets. You + // may specify up to 5 security groups, but we recommend that you use a dedicated + // security group for your cluster control plane. // // ResourcesVpcConfig is a required field ResourcesVpcConfig *VpcConfigRequest `locationName:"resourcesVpcConfig" type:"structure" required:"true"` @@ -587,7 +600,7 @@ type CreateClusterInput struct { // The Amazon Resource Name (ARN) of the IAM role that provides permissions // for Amazon EKS to make calls to other AWS API operations on your behalf. // For more information, see Amazon EKS Service IAM Role (http://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html) - // in the Amazon EKS User Guide + // in the Amazon EKS User Guide. // // RoleArn is a required field RoleArn *string `locationName:"roleArn" type:"string" required:"true"` @@ -869,7 +882,7 @@ func (s *ListClustersInput) SetNextToken(v string) *ListClustersInput { type ListClustersOutput struct { _ struct{} `type:"structure"` - // A list of all of the clusters for your account in the specified region. + // A list of all of the clusters for your account in the specified Region. Clusters []*string `locationName:"clusters" type:"list"` // The nextToken value to include in a future ListClusters request. When the diff --git a/vendor/github.com/aws/aws-sdk-go/service/eks/doc.go b/vendor/github.com/aws/aws-sdk-go/service/eks/doc.go index 9f819afc685..0f194107613 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/eks/doc.go +++ b/vendor/github.com/aws/aws-sdk-go/service/eks/doc.go @@ -9,21 +9,7 @@ // an open-source system for automating the deployment, scaling, and management // of containerized applications. // -// Amazon EKS runs three Kubernetes control plane instances across three Availability -// Zones to ensure high availability. Amazon EKS automatically detects and replaces -// unhealthy control plane instances, and it provides automated version upgrades -// and patching for them. -// -// Amazon EKS is also integrated with many AWS services to provide scalability -// and security for your applications, including the following: -// -// * Elastic Load Balancing for load distribution -// -// * IAM for authentication -// -// * Amazon VPC for isolation -// -// Amazon EKS runs up to date versions of the open-source Kubernetes software, +// Amazon EKS runs up-to-date versions of the open-source Kubernetes software, // so you can use all the existing plugins and tooling from the Kubernetes community. // Applications running on Amazon EKS are fully compatible with applications // running on any standard Kubernetes environment, whether running in on-premises diff --git a/vendor/github.com/aws/aws-sdk-go/service/eks/errors.go b/vendor/github.com/aws/aws-sdk-go/service/eks/errors.go index 825e7d2dbd8..98a2410c563 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/eks/errors.go +++ b/vendor/github.com/aws/aws-sdk-go/service/eks/errors.go @@ -35,7 +35,7 @@ const ( // "ResourceNotFoundException". // // The specified resource could not be found. You can view your available clusters - // with ListClusters. Amazon EKS clusters are region-specific. + // with ListClusters. Amazon EKS clusters are Region-specific. ErrCodeResourceNotFoundException = "ResourceNotFoundException" // ErrCodeServerException for service response error code @@ -47,14 +47,14 @@ const ( // ErrCodeServiceUnavailableException for service response error code // "ServiceUnavailableException". // - // The service is unavailable, back off and retry the operation. + // The service is unavailable. Back off and retry the operation. ErrCodeServiceUnavailableException = "ServiceUnavailableException" // ErrCodeUnsupportedAvailabilityZoneException for service response error code // "UnsupportedAvailabilityZoneException". // // At least one of your specified cluster subnets is in an Availability Zone - // that does not support Amazon EKS. The exception output will specify the supported + // that does not support Amazon EKS. The exception output specifies the supported // Availability Zones for your account, from which you can choose subnets for // your cluster. ErrCodeUnsupportedAvailabilityZoneException = "UnsupportedAvailabilityZoneException" diff --git a/vendor/github.com/aws/aws-sdk-go/service/iot/api.go b/vendor/github.com/aws/aws-sdk-go/service/iot/api.go index 70ebbdcd43c..5d610e3a8f5 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/iot/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/iot/api.go @@ -1604,6 +1604,9 @@ func (c *IoT) CreateOTAUpdateRequest(input *CreateOTAUpdateInput) (req *request. // * ErrCodeInvalidRequestException "InvalidRequestException" // The request is not valid. // +// * ErrCodeLimitExceededException "LimitExceededException" +// A limit has been exceeded. +// // * ErrCodeResourceNotFoundException "ResourceNotFoundException" // The specified resource does not exist. // @@ -2170,6 +2173,9 @@ func (c *IoT) CreateStreamRequest(input *CreateStreamInput) (req *request.Reques // * ErrCodeInvalidRequestException "InvalidRequestException" // The request is not valid. // +// * ErrCodeLimitExceededException "LimitExceededException" +// A limit has been exceeded. +// // * ErrCodeResourceNotFoundException "ResourceNotFoundException" // The specified resource does not exist. // @@ -3222,6 +3228,10 @@ func (c *IoT) DeleteOTAUpdateRequest(input *DeleteOTAUpdateInput) (req *request. // * ErrCodeServiceUnavailableException "ServiceUnavailableException" // The service is temporarily unavailable. // +// * ErrCodeVersionConflictException "VersionConflictException" +// An exception thrown when the version of an entity specified with the expectedVersion +// parameter does not match the latest version in the system. +// func (c *IoT) DeleteOTAUpdate(input *DeleteOTAUpdateInput) (*DeleteOTAUpdateOutput, error) { req, out := c.DeleteOTAUpdateRequest(input) return out, req.Send() @@ -15165,6 +15175,43 @@ func (s *AuthorizerSummary) SetAuthorizerName(v string) *AuthorizerSummary { return s } +// Configuration for the rollout of OTA updates. +type AwsJobExecutionsRolloutConfig struct { + _ struct{} `type:"structure"` + + // The maximum number of OTA update job executions started per minute. + MaximumPerMinute *int64 `locationName:"maximumPerMinute" min:"1" type:"integer"` +} + +// String returns the string representation +func (s AwsJobExecutionsRolloutConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AwsJobExecutionsRolloutConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AwsJobExecutionsRolloutConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AwsJobExecutionsRolloutConfig"} + if s.MaximumPerMinute != nil && *s.MaximumPerMinute < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaximumPerMinute", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMaximumPerMinute sets the MaximumPerMinute field's value. +func (s *AwsJobExecutionsRolloutConfig) SetMaximumPerMinute(v int64) *AwsJobExecutionsRolloutConfig { + s.MaximumPerMinute = &v + return s +} + // A Device Defender security profile behavior. type Behavior struct { _ struct{} `type:"structure"` @@ -16214,6 +16261,9 @@ type CodeSigning struct { // A custom method for code signing a file. CustomCodeSigning *CustomCodeSigning `locationName:"customCodeSigning" type:"structure"` + + // Describes the code-signing job. + StartSigningJobParameter *StartSigningJobParameter `locationName:"startSigningJobParameter" type:"structure"` } // String returns the string representation @@ -16229,9 +16279,9 @@ func (s CodeSigning) GoString() string { // Validate inspects the fields of the type to determine if they are valid. func (s *CodeSigning) Validate() error { invalidParams := request.ErrInvalidParams{Context: "CodeSigning"} - if s.CustomCodeSigning != nil { - if err := s.CustomCodeSigning.Validate(); err != nil { - invalidParams.AddNested("CustomCodeSigning", err.(request.ErrInvalidParams)) + if s.StartSigningJobParameter != nil { + if err := s.StartSigningJobParameter.Validate(); err != nil { + invalidParams.AddNested("StartSigningJobParameter", err.(request.ErrInvalidParams)) } } @@ -16253,6 +16303,12 @@ func (s *CodeSigning) SetCustomCodeSigning(v *CustomCodeSigning) *CodeSigning { return s } +// SetStartSigningJobParameter sets the StartSigningJobParameter field's value. +func (s *CodeSigning) SetStartSigningJobParameter(v *StartSigningJobParameter) *CodeSigning { + s.StartSigningJobParameter = v + return s +} + // Describes the certificate chain being used when code signing a file. type CodeSigningCertificateChain struct { _ struct{} `type:"structure"` @@ -16262,9 +16318,6 @@ type CodeSigningCertificateChain struct { // A base64 encoded binary representation of the code signing certificate chain. InlineDocument *string `locationName:"inlineDocument" type:"string"` - - // A stream of the certificate chain files. - Stream *Stream `locationName:"stream" type:"structure"` } // String returns the string representation @@ -16277,21 +16330,6 @@ func (s CodeSigningCertificateChain) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CodeSigningCertificateChain) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CodeSigningCertificateChain"} - if s.Stream != nil { - if err := s.Stream.Validate(); err != nil { - invalidParams.AddNested("Stream", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetCertificateName sets the CertificateName field's value. func (s *CodeSigningCertificateChain) SetCertificateName(v string) *CodeSigningCertificateChain { s.CertificateName = &v @@ -16304,12 +16342,6 @@ func (s *CodeSigningCertificateChain) SetInlineDocument(v string) *CodeSigningCe return s } -// SetStream sets the Stream field's value. -func (s *CodeSigningCertificateChain) SetStream(v *Stream) *CodeSigningCertificateChain { - s.Stream = v - return s -} - // Describes the signature for a file. type CodeSigningSignature struct { _ struct{} `type:"structure"` @@ -16318,9 +16350,6 @@ type CodeSigningSignature struct { // // InlineDocument is automatically base64 encoded/decoded by the SDK. InlineDocument []byte `locationName:"inlineDocument" type:"blob"` - - // A stream of the code signing signature. - Stream *Stream `locationName:"stream" type:"structure"` } // String returns the string representation @@ -16333,33 +16362,12 @@ func (s CodeSigningSignature) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CodeSigningSignature) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CodeSigningSignature"} - if s.Stream != nil { - if err := s.Stream.Validate(); err != nil { - invalidParams.AddNested("Stream", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetInlineDocument sets the InlineDocument field's value. func (s *CodeSigningSignature) SetInlineDocument(v []byte) *CodeSigningSignature { s.InlineDocument = v return s } -// SetStream sets the Stream field's value. -func (s *CodeSigningSignature) SetStream(v *Stream) *CodeSigningSignature { - s.Stream = v - return s -} - // Configuration. type Configuration struct { _ struct{} `type:"structure"` @@ -16861,6 +16869,9 @@ type CreateOTAUpdateInput struct { // A list of additional OTA update parameters which are name-value pairs. AdditionalParameters map[string]*string `locationName:"additionalParameters" type:"map"` + // Configuration for the rollout of OTA updates. + AwsJobExecutionsRolloutConfig *AwsJobExecutionsRolloutConfig `locationName:"awsJobExecutionsRolloutConfig" type:"structure"` + // The description of the OTA update. Description *string `locationName:"description" type:"string"` @@ -16930,6 +16941,11 @@ func (s *CreateOTAUpdateInput) Validate() error { if s.Targets != nil && len(s.Targets) < 1 { invalidParams.Add(request.NewErrParamMinLen("Targets", 1)) } + if s.AwsJobExecutionsRolloutConfig != nil { + if err := s.AwsJobExecutionsRolloutConfig.Validate(); err != nil { + invalidParams.AddNested("AwsJobExecutionsRolloutConfig", err.(request.ErrInvalidParams)) + } + } if s.Files != nil { for i, v := range s.Files { if v == nil { @@ -16953,6 +16969,12 @@ func (s *CreateOTAUpdateInput) SetAdditionalParameters(v map[string]*string) *Cr return s } +// SetAwsJobExecutionsRolloutConfig sets the AwsJobExecutionsRolloutConfig field's value. +func (s *CreateOTAUpdateInput) SetAwsJobExecutionsRolloutConfig(v *AwsJobExecutionsRolloutConfig) *CreateOTAUpdateInput { + s.AwsJobExecutionsRolloutConfig = v + return s +} + // SetDescription sets the Description field's value. func (s *CreateOTAUpdateInput) SetDescription(v string) *CreateOTAUpdateInput { s.Description = &v @@ -18178,26 +18200,6 @@ func (s CustomCodeSigning) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CustomCodeSigning) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CustomCodeSigning"} - if s.CertificateChain != nil { - if err := s.CertificateChain.Validate(); err != nil { - invalidParams.AddNested("CertificateChain", err.(request.ErrInvalidParams)) - } - } - if s.Signature != nil { - if err := s.Signature.Validate(); err != nil { - invalidParams.AddNested("Signature", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetCertificateChain sets the CertificateChain field's value. func (s *CustomCodeSigning) SetCertificateChain(v *CodeSigningCertificateChain) *CustomCodeSigning { s.CertificateChain = v @@ -18622,6 +18624,14 @@ func (s DeleteJobOutput) GoString() string { type DeleteOTAUpdateInput struct { _ struct{} `type:"structure"` + // Specifies if the stream associated with an OTA update should be deleted when + // the OTA update is deleted. + DeleteStream *bool `location:"querystring" locationName:"deleteStream" type:"boolean"` + + // Specifies if the AWS Job associated with the OTA update should be deleted + // with the OTA update is deleted. + ForceDeleteAWSJob *bool `location:"querystring" locationName:"forceDeleteAWSJob" type:"boolean"` + // The OTA update ID to delete. // // OtaUpdateId is a required field @@ -18654,6 +18664,18 @@ func (s *DeleteOTAUpdateInput) Validate() error { return nil } +// SetDeleteStream sets the DeleteStream field's value. +func (s *DeleteOTAUpdateInput) SetDeleteStream(v bool) *DeleteOTAUpdateInput { + s.DeleteStream = &v + return s +} + +// SetForceDeleteAWSJob sets the ForceDeleteAWSJob field's value. +func (s *DeleteOTAUpdateInput) SetForceDeleteAWSJob(v bool) *DeleteOTAUpdateInput { + s.ForceDeleteAWSJob = &v + return s +} + // SetOtaUpdateId sets the OtaUpdateId field's value. func (s *DeleteOTAUpdateInput) SetOtaUpdateId(v string) *DeleteOTAUpdateInput { s.OtaUpdateId = &v @@ -21113,6 +21135,45 @@ func (s *DescribeThingTypeOutput) SetThingTypeProperties(v *ThingTypeProperties) return s } +// Describes the location of the updated firmware. +type Destination struct { + _ struct{} `type:"structure"` + + // Describes the location in S3 of the updated firmware. + S3Destination *S3Destination `locationName:"s3Destination" type:"structure"` +} + +// String returns the string representation +func (s Destination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Destination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Destination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Destination"} + if s.S3Destination != nil { + if err := s.S3Destination.Validate(); err != nil { + invalidParams.AddNested("S3Destination", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetS3Destination sets the S3Destination field's value. +func (s *Destination) SetS3Destination(v *S3Destination) *Destination { + s.S3Destination = v + return s +} + type DetachPolicyInput struct { _ struct{} `type:"structure"` @@ -21914,6 +21975,59 @@ func (s *ExplicitDeny) SetPolicies(v []*Policy) *ExplicitDeny { return s } +// The location of the OTA update. +type FileLocation struct { + _ struct{} `type:"structure"` + + // The location of the updated firmware in S3. + S3Location *S3Location `locationName:"s3Location" type:"structure"` + + // The stream that contains the OTA update. + Stream *Stream `locationName:"stream" type:"structure"` +} + +// String returns the string representation +func (s FileLocation) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s FileLocation) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *FileLocation) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "FileLocation"} + if s.S3Location != nil { + if err := s.S3Location.Validate(); err != nil { + invalidParams.AddNested("S3Location", err.(request.ErrInvalidParams)) + } + } + if s.Stream != nil { + if err := s.Stream.Validate(); err != nil { + invalidParams.AddNested("Stream", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetS3Location sets the S3Location field's value. +func (s *FileLocation) SetS3Location(v *S3Location) *FileLocation { + s.S3Location = v + return s +} + +// SetStream sets the Stream field's value. +func (s *FileLocation) SetStream(v *Stream) *FileLocation { + s.Stream = v + return s +} + // Describes an action that writes data to an Amazon Kinesis Firehose stream. type FirehoseAction struct { _ struct{} `type:"structure"` @@ -27419,12 +27533,12 @@ type OTAUpdateFile struct { // The code signing method of the file. CodeSigning *CodeSigning `locationName:"codeSigning" type:"structure"` + // The location of the updated firmware. + FileLocation *FileLocation `locationName:"fileLocation" type:"structure"` + // The name of the file. FileName *string `locationName:"fileName" type:"string"` - // The source of the file. - FileSource *Stream `locationName:"fileSource" type:"structure"` - // The file version. FileVersion *string `locationName:"fileVersion" type:"string"` } @@ -27447,9 +27561,9 @@ func (s *OTAUpdateFile) Validate() error { invalidParams.AddNested("CodeSigning", err.(request.ErrInvalidParams)) } } - if s.FileSource != nil { - if err := s.FileSource.Validate(); err != nil { - invalidParams.AddNested("FileSource", err.(request.ErrInvalidParams)) + if s.FileLocation != nil { + if err := s.FileLocation.Validate(); err != nil { + invalidParams.AddNested("FileLocation", err.(request.ErrInvalidParams)) } } @@ -27471,15 +27585,15 @@ func (s *OTAUpdateFile) SetCodeSigning(v *CodeSigning) *OTAUpdateFile { return s } -// SetFileName sets the FileName field's value. -func (s *OTAUpdateFile) SetFileName(v string) *OTAUpdateFile { - s.FileName = &v +// SetFileLocation sets the FileLocation field's value. +func (s *OTAUpdateFile) SetFileLocation(v *FileLocation) *OTAUpdateFile { + s.FileLocation = v return s } -// SetFileSource sets the FileSource field's value. -func (s *OTAUpdateFile) SetFileSource(v *Stream) *OTAUpdateFile { - s.FileSource = v +// SetFileName sets the FileName field's value. +func (s *OTAUpdateFile) SetFileName(v string) *OTAUpdateFile { + s.FileName = &v return s } @@ -27502,6 +27616,9 @@ type OTAUpdateInfo struct { // The AWS IoT job ID associated with the OTA update. AwsIotJobId *string `locationName:"awsIotJobId" type:"string"` + // Configuration for the rollout of OTA updates. + AwsJobExecutionsRolloutConfig *AwsJobExecutionsRolloutConfig `locationName:"awsJobExecutionsRolloutConfig" type:"structure"` + // The date when the OTA update was created. CreationDate *time.Time `locationName:"creationDate" type:"timestamp"` @@ -27566,6 +27683,12 @@ func (s *OTAUpdateInfo) SetAwsIotJobId(v string) *OTAUpdateInfo { return s } +// SetAwsJobExecutionsRolloutConfig sets the AwsJobExecutionsRolloutConfig field's value. +func (s *OTAUpdateInfo) SetAwsJobExecutionsRolloutConfig(v *AwsJobExecutionsRolloutConfig) *OTAUpdateInfo { + s.AwsJobExecutionsRolloutConfig = v + return s +} + // SetCreationDate sets the CreationDate field's value. func (s *OTAUpdateInfo) SetCreationDate(v time.Time) *OTAUpdateInfo { s.CreationDate = &v @@ -28871,21 +28994,63 @@ func (s *S3Action) SetRoleArn(v string) *S3Action { return s } -// The location in S3 the contains the files to stream. +// Describes the location of updated firmware in S3. +type S3Destination struct { + _ struct{} `type:"structure"` + + // The S3 bucket that contains the updated firmware. + Bucket *string `locationName:"bucket" min:"1" type:"string"` + + // The S3 prefix. + Prefix *string `locationName:"prefix" type:"string"` +} + +// String returns the string representation +func (s S3Destination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s S3Destination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *S3Destination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "S3Destination"} + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *S3Destination) SetBucket(v string) *S3Destination { + s.Bucket = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *S3Destination) SetPrefix(v string) *S3Destination { + s.Prefix = &v + return s +} + +// The S3 location. type S3Location struct { _ struct{} `type:"structure"` - // The S3 bucket that contains the file to stream. - // - // Bucket is a required field - Bucket *string `locationName:"bucket" min:"1" type:"string" required:"true"` + // The S3 bucket. + Bucket *string `locationName:"bucket" min:"1" type:"string"` - // The name of the file within the S3 bucket to stream. - // - // Key is a required field - Key *string `locationName:"key" min:"1" type:"string" required:"true"` + // The S3 key. + Key *string `locationName:"key" min:"1" type:"string"` - // The file version. + // The S3 bucket version. Version *string `locationName:"version" type:"string"` } @@ -28902,15 +29067,9 @@ func (s S3Location) GoString() string { // Validate inspects the fields of the type to determine if they are valid. func (s *S3Location) Validate() error { invalidParams := request.ErrInvalidParams{Context: "S3Location"} - if s.Bucket == nil { - invalidParams.Add(request.NewErrParamRequired("Bucket")) - } if s.Bucket != nil && len(*s.Bucket) < 1 { invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) } - if s.Key == nil { - invalidParams.Add(request.NewErrParamRequired("Key")) - } if s.Key != nil && len(*s.Key) < 1 { invalidParams.Add(request.NewErrParamMinLen("Key", 1)) } @@ -29610,6 +29769,48 @@ func (s SetV2LoggingOptionsOutput) GoString() string { return s.String() } +// Describes the code-signing profile. +type SigningProfileParameter struct { + _ struct{} `type:"structure"` + + // Certificate ARN. + CertificateArn *string `locationName:"certificateArn" type:"string"` + + // The location of the code-signing certificate on your device. + CertificatePathOnDevice *string `locationName:"certificatePathOnDevice" type:"string"` + + // The hardware platform of your device. + Platform *string `locationName:"platform" type:"string"` +} + +// String returns the string representation +func (s SigningProfileParameter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SigningProfileParameter) GoString() string { + return s.String() +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *SigningProfileParameter) SetCertificateArn(v string) *SigningProfileParameter { + s.CertificateArn = &v + return s +} + +// SetCertificatePathOnDevice sets the CertificatePathOnDevice field's value. +func (s *SigningProfileParameter) SetCertificatePathOnDevice(v string) *SigningProfileParameter { + s.CertificatePathOnDevice = &v + return s +} + +// SetPlatform sets the Platform field's value. +func (s *SigningProfileParameter) SetPlatform(v string) *SigningProfileParameter { + s.Platform = &v + return s +} + // Describes an action to publish to an Amazon SNS topic. type SnsAction struct { _ struct{} `type:"structure"` @@ -29803,6 +30004,63 @@ func (s *StartOnDemandAuditTaskOutput) SetTaskId(v string) *StartOnDemandAuditTa return s } +// Information required to start a signing job. +type StartSigningJobParameter struct { + _ struct{} `type:"structure"` + + // The location to write the code-signed file. + Destination *Destination `locationName:"destination" type:"structure"` + + // The code-signing profile name. + SigningProfileName *string `locationName:"signingProfileName" type:"string"` + + // Describes the code-signing profile. + SigningProfileParameter *SigningProfileParameter `locationName:"signingProfileParameter" type:"structure"` +} + +// String returns the string representation +func (s StartSigningJobParameter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StartSigningJobParameter) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *StartSigningJobParameter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StartSigningJobParameter"} + if s.Destination != nil { + if err := s.Destination.Validate(); err != nil { + invalidParams.AddNested("Destination", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestination sets the Destination field's value. +func (s *StartSigningJobParameter) SetDestination(v *Destination) *StartSigningJobParameter { + s.Destination = v + return s +} + +// SetSigningProfileName sets the SigningProfileName field's value. +func (s *StartSigningJobParameter) SetSigningProfileName(v string) *StartSigningJobParameter { + s.SigningProfileName = &v + return s +} + +// SetSigningProfileParameter sets the SigningProfileParameter field's value. +func (s *StartSigningJobParameter) SetSigningProfileParameter(v *SigningProfileParameter) *StartSigningJobParameter { + s.SigningProfileParameter = v + return s +} + type StartThingRegistrationTaskInput struct { _ struct{} `type:"structure"` diff --git a/vendor/github.com/aws/aws-sdk-go/service/mediapackage/api.go b/vendor/github.com/aws/aws-sdk-go/service/mediapackage/api.go index fa47d515063..a0bac9a2f4e 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/mediapackage/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/mediapackage/api.go @@ -853,6 +853,9 @@ const opRotateChannelCredentials = "RotateChannelCredentials" // // See also, https://docs.aws.amazon.com/goto/WebAPI/mediapackage-2017-10-12/RotateChannelCredentials func (c *MediaPackage) RotateChannelCredentialsRequest(input *RotateChannelCredentialsInput) (req *request.Request, output *RotateChannelCredentialsOutput) { + if c.Client.Config.Logger != nil { + c.Client.Config.Logger.Log("This operation, RotateChannelCredentials, has been deprecated") + } op := &request.Operation{ Name: opRotateChannelCredentials, HTTPMethod: "PUT", @@ -870,7 +873,8 @@ func (c *MediaPackage) RotateChannelCredentialsRequest(input *RotateChannelCrede // RotateChannelCredentials API operation for AWS Elemental MediaPackage. // -// Changes the Channel ingest username and password. +// Changes the Channel's first IngestEndpoint's username and password. WARNING +// - This API is deprecated. Please use RotateIngestEndpointCredentials instead // // 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 @@ -914,6 +918,95 @@ func (c *MediaPackage) RotateChannelCredentialsWithContext(ctx aws.Context, inpu return out, req.Send() } +const opRotateIngestEndpointCredentials = "RotateIngestEndpointCredentials" + +// RotateIngestEndpointCredentialsRequest generates a "aws/request.Request" representing the +// client's request for the RotateIngestEndpointCredentials operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RotateIngestEndpointCredentials for more information on using the RotateIngestEndpointCredentials +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RotateIngestEndpointCredentialsRequest method. +// req, resp := client.RotateIngestEndpointCredentialsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/mediapackage-2017-10-12/RotateIngestEndpointCredentials +func (c *MediaPackage) RotateIngestEndpointCredentialsRequest(input *RotateIngestEndpointCredentialsInput) (req *request.Request, output *RotateIngestEndpointCredentialsOutput) { + op := &request.Operation{ + Name: opRotateIngestEndpointCredentials, + HTTPMethod: "PUT", + HTTPPath: "/channels/{id}/ingest_endpoints/{ingest_endpoint_id}/credentials", + } + + if input == nil { + input = &RotateIngestEndpointCredentialsInput{} + } + + output = &RotateIngestEndpointCredentialsOutput{} + req = c.newRequest(op, input, output) + return +} + +// RotateIngestEndpointCredentials API operation for AWS Elemental MediaPackage. +// +// Rotate the IngestEndpoint's username and password, as specified by the IngestEndpoint's +// id. +// +// 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. +// +// See the AWS API reference guide for AWS Elemental MediaPackage's +// API operation RotateIngestEndpointCredentials for usage and error information. +// +// Returned Error Codes: +// * ErrCodeUnprocessableEntityException "UnprocessableEntityException" +// +// * ErrCodeInternalServerErrorException "InternalServerErrorException" +// +// * ErrCodeForbiddenException "ForbiddenException" +// +// * ErrCodeNotFoundException "NotFoundException" +// +// * ErrCodeServiceUnavailableException "ServiceUnavailableException" +// +// * ErrCodeTooManyRequestsException "TooManyRequestsException" +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/mediapackage-2017-10-12/RotateIngestEndpointCredentials +func (c *MediaPackage) RotateIngestEndpointCredentials(input *RotateIngestEndpointCredentialsInput) (*RotateIngestEndpointCredentialsOutput, error) { + req, out := c.RotateIngestEndpointCredentialsRequest(input) + return out, req.Send() +} + +// RotateIngestEndpointCredentialsWithContext is the same as RotateIngestEndpointCredentials with the addition of +// the ability to pass a context and additional request options. +// +// See RotateIngestEndpointCredentials for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *MediaPackage) RotateIngestEndpointCredentialsWithContext(ctx aws.Context, input *RotateIngestEndpointCredentialsInput, opts ...request.Option) (*RotateIngestEndpointCredentialsOutput, error) { + req, out := c.RotateIngestEndpointCredentialsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opUpdateChannel = "UpdateChannel" // UpdateChannelRequest generates a "aws/request.Request" representing the @@ -2662,6 +2755,9 @@ func (s *HlsPackage) SetUseAudioRenditionGroup(v bool) *HlsPackage { type IngestEndpoint struct { _ struct{} `type:"structure"` + // The system generated unique identifier for the IngestEndpoint + Id *string `locationName:"id" type:"string"` + // The system generated password for ingest authentication. Password *string `locationName:"password" type:"string"` @@ -2682,6 +2778,12 @@ func (s IngestEndpoint) GoString() string { return s.String() } +// SetId sets the Id field's value. +func (s *IngestEndpoint) SetId(v string) *IngestEndpoint { + s.Id = &v + return s +} + // SetPassword sets the Password field's value. func (s *IngestEndpoint) SetPassword(v string) *IngestEndpoint { s.Password = &v @@ -3100,7 +3202,7 @@ func (s *OriginEndpoint) SetWhitelist(v []*string) *OriginEndpoint { } type RotateChannelCredentialsInput struct { - _ struct{} `type:"structure"` + _ struct{} `deprecated:"true" type:"structure"` // Id is a required field Id *string `location:"uri" locationName:"id" type:"string" required:"true"` @@ -3136,7 +3238,7 @@ func (s *RotateChannelCredentialsInput) SetId(v string) *RotateChannelCredential } type RotateChannelCredentialsOutput struct { - _ struct{} `type:"structure"` + _ struct{} `deprecated:"true" type:"structure"` Arn *string `locationName:"arn" type:"string"` @@ -3182,6 +3284,101 @@ func (s *RotateChannelCredentialsOutput) SetId(v string) *RotateChannelCredentia return s } +type RotateIngestEndpointCredentialsInput struct { + _ struct{} `type:"structure"` + + // Id is a required field + Id *string `location:"uri" locationName:"id" type:"string" required:"true"` + + // IngestEndpointId is a required field + IngestEndpointId *string `location:"uri" locationName:"ingest_endpoint_id" type:"string" required:"true"` +} + +// String returns the string representation +func (s RotateIngestEndpointCredentialsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RotateIngestEndpointCredentialsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RotateIngestEndpointCredentialsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RotateIngestEndpointCredentialsInput"} + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.IngestEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("IngestEndpointId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetId sets the Id field's value. +func (s *RotateIngestEndpointCredentialsInput) SetId(v string) *RotateIngestEndpointCredentialsInput { + s.Id = &v + return s +} + +// SetIngestEndpointId sets the IngestEndpointId field's value. +func (s *RotateIngestEndpointCredentialsInput) SetIngestEndpointId(v string) *RotateIngestEndpointCredentialsInput { + s.IngestEndpointId = &v + return s +} + +type RotateIngestEndpointCredentialsOutput struct { + _ struct{} `type:"structure"` + + Arn *string `locationName:"arn" type:"string"` + + Description *string `locationName:"description" type:"string"` + + // An HTTP Live Streaming (HLS) ingest resource configuration. + HlsIngest *HlsIngest `locationName:"hlsIngest" type:"structure"` + + Id *string `locationName:"id" type:"string"` +} + +// String returns the string representation +func (s RotateIngestEndpointCredentialsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RotateIngestEndpointCredentialsOutput) GoString() string { + return s.String() +} + +// SetArn sets the Arn field's value. +func (s *RotateIngestEndpointCredentialsOutput) SetArn(v string) *RotateIngestEndpointCredentialsOutput { + s.Arn = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *RotateIngestEndpointCredentialsOutput) SetDescription(v string) *RotateIngestEndpointCredentialsOutput { + s.Description = &v + return s +} + +// SetHlsIngest sets the HlsIngest field's value. +func (s *RotateIngestEndpointCredentialsOutput) SetHlsIngest(v *HlsIngest) *RotateIngestEndpointCredentialsOutput { + s.HlsIngest = v + return s +} + +// SetId sets the Id field's value. +func (s *RotateIngestEndpointCredentialsOutput) SetId(v string) *RotateIngestEndpointCredentialsOutput { + s.Id = &v + return s +} + // A configuration for accessing an external Secure Packager and Encoder Key // Exchange (SPEKE) service that will provide encryption keys. type SpekeKeyProvider struct { diff --git a/vendor/github.com/aws/aws-sdk-go/service/redshift/api.go b/vendor/github.com/aws/aws-sdk-go/service/redshift/api.go index 9aef96db1a2..abf5b5076c8 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/redshift/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/redshift/api.go @@ -6905,7 +6905,24 @@ func (c *Redshift) ResizeClusterRequest(input *ResizeClusterInput) (req *request // ResizeCluster API operation for Amazon Redshift. // -// Changes the cluster's type, node type, or number of nodes. +// Changes the size of the cluster. You can change the cluster's type, or change +// the number or type of nodes. The default behavior is to use the elastic resize +// method. With an elastic resize your cluster is avaialble for read and write +// operations more quickly than with the classic resize method. +// +// Elastic resize operations have the following restrictions: +// +// * You can only resize clusters of the following types: +// +// dc2.large +// +// dc2.8xlarge +// +// ds2.xlarge +// +// ds2.8xlarge +// +// * The type of nodes you add must match the node type for the cluster. // // 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 @@ -16692,7 +16709,8 @@ type ResizeClusterInput struct { _ struct{} `type:"structure"` // A boolean value indicating whether the resize operation is using the classic - // resize process. + // resize process. If you don't provide this parameter or set the value to false + // the resize type is elastic. Classic *bool `type:"boolean"` // The unique identifier for the cluster to resize. diff --git a/vendor/github.com/aws/aws-sdk-go/service/sagemaker/api.go b/vendor/github.com/aws/aws-sdk-go/service/sagemaker/api.go index 76505fc2101..b070e16e246 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/sagemaker/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/sagemaker/api.go @@ -750,6 +750,15 @@ func (c *SageMaker) CreatePresignedNotebookInstanceUrlRequest(input *CreatePresi // home page from the notebook instance. The console uses this API to get the // URL and show the page. // +// You can restrict access to this API and to the URL that it returns to a list +// of IP addresses that you specify. To restrict access, attach an IAM policy +// that denies access to this API unless the call comes from an IP address in +// the specified list to every AWS Identity and Access Management user, group, +// or role used to access the notebook instance. Use the NotIpAddress condition +// operator and the aws:SourceIP condition context key to specify the list of +// IP addresses that you want to have access to the notebook instance. For more +// information, see nbi-ip-filter. +// // 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. @@ -4416,7 +4425,7 @@ type Channel struct { // algorithm requires the RecordIO format, in which case, Amazon SageMaker wraps // each individual S3 object in a RecordIO record. If the input data is already // in RecordIO format, you don't need to set this attribute. For more information, - // see Create a Dataset Using RecordIO (https://mxnet.incubator.apache.org/how_to/recordio.html?highlight=im2rec) + // see Create a Dataset Using RecordIO (https://mxnet.incubator.apache.org/architecture/note_data_loading.html#data-format) RecordWrapperType *string `type:"string" enum:"RecordWrapper"` } @@ -12120,6 +12129,11 @@ type TransformResources struct { // // InstanceType is a required field InstanceType *string `type:"string" required:"true" enum:"TransformInstanceType"` + + // The Amazon Resource Name (ARN) of a AWS Key Management Service key that Amazon + // SageMaker uses to encrypt data on the storage volume attached to the ML compute + // instance(s) that run the batch transform job. + VolumeKmsKeyId *string `type:"string"` } // String returns the string representation @@ -12163,6 +12177,12 @@ func (s *TransformResources) SetInstanceType(v string) *TransformResources { return s } +// SetVolumeKmsKeyId sets the VolumeKmsKeyId field's value. +func (s *TransformResources) SetVolumeKmsKeyId(v string) *TransformResources { + s.VolumeKmsKeyId = &v + return s +} + // Describes the S3 data source. type TransformS3DataSource struct { _ struct{} `type:"structure"` @@ -12735,6 +12755,9 @@ const ( // EndpointStatusUpdating is a EndpointStatus enum value EndpointStatusUpdating = "Updating" + // EndpointStatusSystemUpdating is a EndpointStatus enum value + EndpointStatusSystemUpdating = "SystemUpdating" + // EndpointStatusRollingBack is a EndpointStatus enum value EndpointStatusRollingBack = "RollingBack" diff --git a/vendor/github.com/aws/aws-sdk-go/service/waf/api.go b/vendor/github.com/aws/aws-sdk-go/service/waf/api.go index e08ff3ee98e..0d9abe4d7f3 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/waf/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/waf/api.go @@ -2094,6 +2094,93 @@ func (c *WAF) DeleteIPSetWithContext(ctx aws.Context, input *DeleteIPSetInput, o return out, req.Send() } +const opDeleteLoggingConfiguration = "DeleteLoggingConfiguration" + +// DeleteLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteLoggingConfiguration for more information on using the DeleteLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteLoggingConfigurationRequest method. +// req, resp := client.DeleteLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteLoggingConfiguration +func (c *WAF) DeleteLoggingConfigurationRequest(input *DeleteLoggingConfigurationInput) (req *request.Request, output *DeleteLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opDeleteLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteLoggingConfigurationInput{} + } + + output = &DeleteLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteLoggingConfiguration API operation for AWS WAF. +// +// Permanently deletes the LoggingConfiguration from the specified web ACL. +// +// 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. +// +// See the AWS API reference guide for AWS WAF's +// API operation DeleteLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeStaleDataException "WAFStaleDataException" +// The operation failed because you tried to create, update, or delete an object +// by using a change token that has already been used. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteLoggingConfiguration +func (c *WAF) DeleteLoggingConfiguration(input *DeleteLoggingConfigurationInput) (*DeleteLoggingConfigurationOutput, error) { + req, out := c.DeleteLoggingConfigurationRequest(input) + return out, req.Send() +} + +// DeleteLoggingConfigurationWithContext is the same as DeleteLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAF) DeleteLoggingConfigurationWithContext(ctx aws.Context, input *DeleteLoggingConfigurationInput, opts ...request.Option) (*DeleteLoggingConfigurationOutput, error) { + req, out := c.DeleteLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opDeletePermissionPolicy = "DeletePermissionPolicy" // DeletePermissionPolicyRequest generates a "aws/request.Request" representing the @@ -2778,6 +2865,24 @@ func (c *WAF) DeleteRuleGroupRequest(input *DeleteRuleGroupInput) (req *request. // // * You tried to delete an IPSet that references one or more IP addresses. // +// * ErrCodeInvalidOperationException "WAFInvalidOperationException" +// The operation failed because there was nothing to do. For example: +// +// * You tried to remove a Rule from a WebACL, but the Rule isn't in the +// specified WebACL. +// +// * You tried to remove an IP address from an IPSet, but the IP address +// isn't in the specified IPSet. +// +// * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple +// isn't in the specified WebACL. +// +// * You tried to add a Rule to a WebACL, but the Rule already exists in +// the specified WebACL. +// +// * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple +// already exists in the specified WebACL. +// // See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/DeleteRuleGroup func (c *WAF) DeleteRuleGroup(input *DeleteRuleGroupInput) (*DeleteRuleGroupOutput, error) { req, out := c.DeleteRuleGroupRequest(input) @@ -3753,6 +3858,89 @@ func (c *WAF) GetIPSetWithContext(ctx aws.Context, input *GetIPSetInput, opts .. return out, req.Send() } +const opGetLoggingConfiguration = "GetLoggingConfiguration" + +// GetLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetLoggingConfiguration for more information on using the GetLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetLoggingConfigurationRequest method. +// req, resp := client.GetLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetLoggingConfiguration +func (c *WAF) GetLoggingConfigurationRequest(input *GetLoggingConfigurationInput) (req *request.Request, output *GetLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opGetLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetLoggingConfigurationInput{} + } + + output = &GetLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetLoggingConfiguration API operation for AWS WAF. +// +// Returns the LoggingConfiguration for the specified web ACL. +// +// 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. +// +// See the AWS API reference guide for AWS WAF's +// API operation GetLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/GetLoggingConfiguration +func (c *WAF) GetLoggingConfiguration(input *GetLoggingConfigurationInput) (*GetLoggingConfigurationOutput, error) { + req, out := c.GetLoggingConfigurationRequest(input) + return out, req.Send() +} + +// GetLoggingConfigurationWithContext is the same as GetLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAF) GetLoggingConfigurationWithContext(ctx aws.Context, input *GetLoggingConfigurationInput, opts ...request.Option) (*GetLoggingConfigurationOutput, error) { + req, out := c.GetLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opGetPermissionPolicy = "GetPermissionPolicy" // GetPermissionPolicyRequest generates a "aws/request.Request" representing the @@ -5196,6 +5384,118 @@ func (c *WAF) ListIPSetsWithContext(ctx aws.Context, input *ListIPSetsInput, opt return out, req.Send() } +const opListLoggingConfigurations = "ListLoggingConfigurations" + +// ListLoggingConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the ListLoggingConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListLoggingConfigurations for more information on using the ListLoggingConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListLoggingConfigurationsRequest method. +// req, resp := client.ListLoggingConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListLoggingConfigurations +func (c *WAF) ListLoggingConfigurationsRequest(input *ListLoggingConfigurationsInput) (req *request.Request, output *ListLoggingConfigurationsOutput) { + op := &request.Operation{ + Name: opListLoggingConfigurations, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ListLoggingConfigurationsInput{} + } + + output = &ListLoggingConfigurationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListLoggingConfigurations API operation for AWS WAF. +// +// Returns an array of LoggingConfiguration objects. +// +// 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. +// +// See the AWS API reference guide for AWS WAF's +// API operation ListLoggingConfigurations for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeInvalidParameterException "WAFInvalidParameterException" +// The operation failed because AWS WAF didn't recognize a parameter in the +// request. For example: +// +// * You specified an invalid parameter name. +// +// * You specified an invalid value. +// +// * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL) +// using an action other than INSERT or DELETE. +// +// * You tried to create a WebACL with a DefaultActionType other than ALLOW, +// BLOCK, or COUNT. +// +// * You tried to create a RateBasedRule with a RateKey value other than +// IP. +// +// * You tried to update a WebACL with a WafActionType other than ALLOW, +// BLOCK, or COUNT. +// +// * You tried to update a ByteMatchSet with a FieldToMatchType other than +// HEADER, METHOD, QUERY_STRING, URI, or BODY. +// +// * You tried to update a ByteMatchSet with a Field of HEADER but no value +// for Data. +// +// * Your request references an ARN that is malformed, or corresponds to +// a resource with which a web ACL cannot be associated. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/ListLoggingConfigurations +func (c *WAF) ListLoggingConfigurations(input *ListLoggingConfigurationsInput) (*ListLoggingConfigurationsOutput, error) { + req, out := c.ListLoggingConfigurationsRequest(input) + return out, req.Send() +} + +// ListLoggingConfigurationsWithContext is the same as ListLoggingConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See ListLoggingConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAF) ListLoggingConfigurationsWithContext(ctx aws.Context, input *ListLoggingConfigurationsInput, opts ...request.Option) (*ListLoggingConfigurationsOutput, error) { + req, out := c.ListLoggingConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opListRateBasedRules = "ListRateBasedRules" // ListRateBasedRulesRequest generates a "aws/request.Request" representing the @@ -6031,6 +6331,108 @@ func (c *WAF) ListXssMatchSetsWithContext(ctx aws.Context, input *ListXssMatchSe return out, req.Send() } +const opPutLoggingConfiguration = "PutLoggingConfiguration" + +// PutLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutLoggingConfiguration for more information on using the PutLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutLoggingConfigurationRequest method. +// req, resp := client.PutLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutLoggingConfiguration +func (c *WAF) PutLoggingConfigurationRequest(input *PutLoggingConfigurationInput) (req *request.Request, output *PutLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opPutLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &PutLoggingConfigurationInput{} + } + + output = &PutLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutLoggingConfiguration API operation for AWS WAF. +// +// Associates a LoggingConfiguration with a specified web ACL. +// +// You can access information about all traffic that AWS WAF inspects using +// the following steps: +// +// Create an Amazon Kinesis Data Firehose delivery stream. For more information, +// see Creating an Amazon Kinesis Data Firehose Delivery Stream (https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html). +// +// Associate that delivery stream to your web ACL using a PutLoggingConfiguration +// request. +// +// When you successfully enable logging using a PutLoggingConfiguration request, +// AWS WAF will create a service linked role with the necessary permissions +// to write logs to the Amazon Kinesis Data Firehose delivery stream. For more +// information, see Logging Web ACL Traffic Information (http://docs.aws.amazon.com/waf/latest/developerguide/logging.html) +// in the AWS WAF Developer 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 +// the error. +// +// See the AWS API reference guide for AWS WAF's +// API operation PutLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeStaleDataException "WAFStaleDataException" +// The operation failed because you tried to create, update, or delete an object +// by using a change token that has already been used. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-2015-08-24/PutLoggingConfiguration +func (c *WAF) PutLoggingConfiguration(input *PutLoggingConfigurationInput) (*PutLoggingConfigurationOutput, error) { + req, out := c.PutLoggingConfigurationRequest(input) + return out, req.Send() +} + +// PutLoggingConfigurationWithContext is the same as PutLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAF) PutLoggingConfigurationWithContext(ctx aws.Context, input *PutLoggingConfigurationInput, opts ...request.Option) (*PutLoggingConfigurationOutput, error) { + req, out := c.PutLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opPutPermissionPolicy = "PutPermissionPolicy" // PutPermissionPolicyRequest generates a "aws/request.Request" representing the @@ -6086,8 +6488,9 @@ func (c *WAF) PutPermissionPolicyRequest(input *PutPermissionPolicyInput) (req * // // * Effect must specify Allow. // -// * The Action in the policy must be waf:UpdateWebACL and waf-regional:UpdateWebACL. -// Any extra or wildcard actions in the policy will be rejected. +// * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, +// waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard +// actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // @@ -6132,8 +6535,9 @@ func (c *WAF) PutPermissionPolicyRequest(input *PutPermissionPolicyInput) (req * // // * Effect must specify Allow. // -// * The Action in the policy must be waf:UpdateWebACL or waf-regional:UpdateWebACL. -// Any extra or wildcard actions in the policy will be rejected. +// * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, +// waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard +// actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // @@ -6279,9 +6683,6 @@ func (c *WAF) UpdateByteMatchSetRequest(input *UpdateByteMatchSetInput) (req *re // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -6473,9 +6874,6 @@ func (c *WAF) UpdateGeoMatchSetRequest(input *UpdateGeoMatchSetInput) (req *requ // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -6620,9 +7018,10 @@ func (c *WAF) UpdateIPSetRequest(input *UpdateIPSetInput) (req *request.Request, // range of IP addresses from 192.0.2.0 to 192.0.2.255) or 192.0.2.44/32 // (for the individual IP address 192.0.2.44). // -// AWS WAF supports /8, /16, /24, and /32 IP address ranges for IPv4, and /24, -// /32, /48, /56, /64 and /128 for IPv6. For more information about CIDR notation, -// see the Wikipedia entry Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). +// AWS WAF supports IPv4 address ranges: /8 and any range between /16 through +// /32. AWS WAF supports IPv6 address ranges: /16, /24, /32, /48, /56, /64, +// and /128. For more information about CIDR notation, see the Wikipedia entry +// Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). // // IPv6 addresses can be represented using any of the following formats: // @@ -6654,6 +7053,8 @@ func (c *WAF) UpdateIPSetRequest(input *UpdateIPSetInput) (req *request.Request, // and/or the IP addresses that you want to delete. If you want to change an // IP address, you delete the existing IP address and add the new one. // +// You can insert a maximum of 1000 addresses in a single request. +// // For more information about how to use the AWS WAF API to allow or block HTTP // requests, see the AWS WAF Developer Guide (http://docs.aws.amazon.com/waf/latest/developerguide/). // @@ -6692,9 +7093,6 @@ func (c *WAF) UpdateIPSetRequest(input *UpdateIPSetInput) (req *request.Request, // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -6900,9 +7298,6 @@ func (c *WAF) UpdateRateBasedRuleRequest(input *UpdateRateBasedRuleInput) (req * // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7128,9 +7523,6 @@ func (c *WAF) UpdateRegexMatchSetRequest(input *UpdateRegexMatchSetInput) (req * // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7292,9 +7684,6 @@ func (c *WAF) UpdateRegexPatternSetRequest(input *UpdateRegexPatternSetInput) (r // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7440,9 +7829,6 @@ func (c *WAF) UpdateRuleRequest(input *UpdateRuleInput) (req *request.Request, o // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7648,9 +8034,6 @@ func (c *WAF) UpdateRuleGroupRequest(input *UpdateRuleGroupInput) (req *request. // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7770,6 +8153,8 @@ func (c *WAF) UpdateSizeConstraintSetRequest(input *UpdateSizeConstraintSetInput // of the request body are not supported because the AWS resource forwards // only the first 8192 bytes of your request to AWS WAF. // +// You can only specify a single type of TextTransformation. +// // * A ComparisonOperator used for evaluating the selected part of the request // against the specified Size, such as equals, greater than, less than, and // so on. @@ -7830,9 +8215,6 @@ func (c *WAF) UpdateSizeConstraintSetRequest(input *UpdateSizeConstraintSetInput // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7972,12 +8354,15 @@ func (c *WAF) UpdateSqlInjectionMatchSetRequest(input *UpdateSqlInjectionMatchSe // object and add a new one. // // * FieldToMatch: The part of web requests that you want AWS WAF to inspect -// and, if you want AWS WAF to inspect a header, the name of the header. +// and, if you want AWS WAF to inspect a header or custom query parameter, +// the name of the header or parameter. // // * TextTransformation: Which text transformation, if any, to perform on // the web request before inspecting the request for snippets of malicious // SQL code. // +// You can only specify a single type of TextTransformation. +// // You use SqlInjectionMatchSet objects to specify which CloudFront requests // you want to allow, block, or count. For example, if you're receiving requests // that contain snippets of SQL code in the query string and you want to block @@ -8028,9 +8413,6 @@ func (c *WAF) UpdateSqlInjectionMatchSetRequest(input *UpdateSqlInjectionMatchSe // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8242,9 +8624,6 @@ func (c *WAF) UpdateWebACLRequest(input *UpdateWebACLInput) (req *request.Reques // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8387,12 +8766,15 @@ func (c *WAF) UpdateXssMatchSetRequest(input *UpdateXssMatchSetInput) (req *requ // add a new one. // // * FieldToMatch: The part of web requests that you want AWS WAF to inspect -// and, if you want AWS WAF to inspect a header, the name of the header. +// and, if you want AWS WAF to inspect a header or custom query parameter, +// the name of the header or parameter. // // * TextTransformation: Which text transformation, if any, to perform on // the web request before inspecting the request for cross-site scripting // attacks. // +// You can only specify a single type of TextTransformation. +// // You use XssMatchSet objects to specify which CloudFront requests you want // to allow, block, or count. For example, if you're receiving requests that // contain cross-site scripting attacks in the request body and you want to @@ -8443,9 +8825,6 @@ func (c *WAF) UpdateXssMatchSetRequest(input *UpdateXssMatchSetInput) (req *requ // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8923,6 +9302,14 @@ type ByteMatchTuple struct { // of the body, you can create a size constraint set. For more information, // see CreateSizeConstraintSet. // + // * SINGLE_QUERY_ARG: The parameter in the query string that you will inspect, + // such as UserName or SalesRegion. The maximum length for SINGLE_QUERY_ARG + // is 30 characters. + // + // * ALL_QUERY_ARGS: Similar to SINGLE_QUERY_ARG, but instead of inspecting + // a single parameter, AWS WAF inspects all parameters within the query string + // for the value or regex pattern that you specify in TargetString. + // // If TargetString includes alphabetic characters A-Z and a-z, note that the // value is case sensitive. // @@ -8951,11 +9338,13 @@ type ByteMatchTuple struct { // AWS WAF performs the transformation on TargetString before inspecting a request // for a match. // + // You can only specify a single type of TextTransformation. + // // CMD_LINE // - // When you're concerned that attackers are injecting an operating system commandline - // command and using unusual formatting to disguise some or all of the command, - // use this option to perform the following transformations: + // When you're concerned that attackers are injecting an operating system command + // line command and using unusual formatting to disguise some or all of the + // command, use this option to perform the following transformations: // // * Delete the following characters: \ " ' ^ // @@ -10536,8 +10925,81 @@ func (s *DeleteIPSetInput) Validate() error { if s.IPSetId == nil { invalidParams.Add(request.NewErrParamRequired("IPSetId")) } - if s.IPSetId != nil && len(*s.IPSetId) < 1 { - invalidParams.Add(request.NewErrParamMinLen("IPSetId", 1)) + if s.IPSetId != nil && len(*s.IPSetId) < 1 { + invalidParams.Add(request.NewErrParamMinLen("IPSetId", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetChangeToken sets the ChangeToken field's value. +func (s *DeleteIPSetInput) SetChangeToken(v string) *DeleteIPSetInput { + s.ChangeToken = &v + return s +} + +// SetIPSetId sets the IPSetId field's value. +func (s *DeleteIPSetInput) SetIPSetId(v string) *DeleteIPSetInput { + s.IPSetId = &v + return s +} + +type DeleteIPSetOutput struct { + _ struct{} `type:"structure"` + + // The ChangeToken that you used to submit the DeleteIPSet request. You can + // also use this value to query the status of the request. For more information, + // see GetChangeTokenStatus. + ChangeToken *string `min:"1" type:"string"` +} + +// String returns the string representation +func (s DeleteIPSetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteIPSetOutput) GoString() string { + return s.String() +} + +// SetChangeToken sets the ChangeToken field's value. +func (s *DeleteIPSetOutput) SetChangeToken(v string) *DeleteIPSetOutput { + s.ChangeToken = &v + return s +} + +type DeleteLoggingConfigurationInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the web ACL from which you want to delete + // the LoggingConfiguration. + // + // ResourceArn is a required field + ResourceArn *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteLoggingConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLoggingConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteLoggingConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteLoggingConfigurationInput"} + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + if s.ResourceArn != nil && len(*s.ResourceArn) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1)) } if invalidParams.Len() > 0 { @@ -10546,43 +11008,26 @@ func (s *DeleteIPSetInput) Validate() error { return nil } -// SetChangeToken sets the ChangeToken field's value. -func (s *DeleteIPSetInput) SetChangeToken(v string) *DeleteIPSetInput { - s.ChangeToken = &v - return s -} - -// SetIPSetId sets the IPSetId field's value. -func (s *DeleteIPSetInput) SetIPSetId(v string) *DeleteIPSetInput { - s.IPSetId = &v +// SetResourceArn sets the ResourceArn field's value. +func (s *DeleteLoggingConfigurationInput) SetResourceArn(v string) *DeleteLoggingConfigurationInput { + s.ResourceArn = &v return s } -type DeleteIPSetOutput struct { +type DeleteLoggingConfigurationOutput struct { _ struct{} `type:"structure"` - - // The ChangeToken that you used to submit the DeleteIPSet request. You can - // also use this value to query the status of the request. For more information, - // see GetChangeTokenStatus. - ChangeToken *string `min:"1" type:"string"` } // String returns the string representation -func (s DeleteIPSetOutput) String() string { +func (s DeleteLoggingConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteIPSetOutput) GoString() string { +func (s DeleteLoggingConfigurationOutput) GoString() string { return s.String() } -// SetChangeToken sets the ChangeToken field's value. -func (s *DeleteIPSetOutput) SetChangeToken(v string) *DeleteIPSetOutput { - s.ChangeToken = &v - return s -} - type DeletePermissionPolicyInput struct { _ struct{} `type:"structure"` @@ -11406,10 +11851,14 @@ type FieldToMatch struct { _ struct{} `type:"structure"` // When the value of Type is HEADER, enter the name of the header that you want - // AWS WAF to search, for example, User-Agent or Referer. If the value of Type - // is any other value, omit Data. + // AWS WAF to search, for example, User-Agent or Referer. The name of the header + // is not case sensitive. // - // The name of the header is not case sensitive. + // When the value of Type is SINGLE_QUERY_ARG, enter the name of the parameter + // that you want AWS WAF to search, for example, UserName or SalesRegion. The + // parameter name is not case sensitive. + // + // If the value of Type is any other value, omit Data. Data *string `type:"string"` // The part of the web request that you want AWS WAF to search for a specified @@ -11437,6 +11886,14 @@ type FieldToMatch struct { // of the body, you can create a size constraint set. For more information, // see CreateSizeConstraintSet. // + // * SINGLE_QUERY_ARG: The parameter in the query string that you will inspect, + // such as UserName or SalesRegion. The maximum length for SINGLE_QUERY_ARG + // is 30 characters. + // + // * ALL_QUERY_ARGS: Similar to SINGLE_QUERY_ARG, but rather than inspecting + // a single parameter, AWS WAF will inspect all parameters within the query + // for the value or regex pattern that you specify in TargetString. + // // Type is a required field Type *string `type:"string" required:"true" enum:"MatchFieldType"` } @@ -11997,6 +12454,71 @@ func (s *GetIPSetOutput) SetIPSet(v *IPSet) *GetIPSetOutput { return s } +type GetLoggingConfigurationInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the web ACL for which you want to get the + // LoggingConfiguration. + // + // ResourceArn is a required field + ResourceArn *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetLoggingConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetLoggingConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetLoggingConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetLoggingConfigurationInput"} + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + if s.ResourceArn != nil && len(*s.ResourceArn) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *GetLoggingConfigurationInput) SetResourceArn(v string) *GetLoggingConfigurationInput { + s.ResourceArn = &v + return s +} + +type GetLoggingConfigurationOutput struct { + _ struct{} `type:"structure"` + + // The LoggingConfiguration for the specified web ACL. + LoggingConfiguration *LoggingConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetLoggingConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetLoggingConfigurationOutput) GoString() string { + return s.String() +} + +// SetLoggingConfiguration sets the LoggingConfiguration field's value. +func (s *GetLoggingConfigurationOutput) SetLoggingConfiguration(v *LoggingConfiguration) *GetLoggingConfigurationOutput { + s.LoggingConfiguration = v + return s +} + type GetPermissionPolicyInput struct { _ struct{} `type:"structure"` @@ -13059,15 +13581,15 @@ func (s *HTTPRequest) SetURI(v string) *HTTPRequest { } // Contains one or more IP addresses or blocks of IP addresses specified in -// Classless Inter-Domain Routing (CIDR) notation. AWS WAF supports /8, /16, -// /24, and /32 IP address ranges for IPv4, and /24, /32, /48, /56, /64 and -// /128 for IPv6. +// Classless Inter-Domain Routing (CIDR) notation. AWS WAF supports IPv4 address +// ranges: /8 and any range between /16 through /32. AWS WAF supports IPv6 address +// ranges: /16, /24, /32, /48, /56, /64, and /128. // // To specify an individual IP address, you specify the four-part IP address // followed by a /32, for example, 192.0.2.0/31. To block a range of IP addresses, -// you can specify a /128, /64, /56, /48, /32, /24, /16, or /8 CIDR. For more -// information about CIDR notation, see the Wikipedia entry Classless Inter-Domain -// Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). +// you can specify /8 or any range between /16 through /32 (for IPv4) or /16, +// /24, /32, /48, /56, /64, or /128 (for IPv6). For more information about CIDR +// notation, see the Wikipedia entry Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). type IPSet struct { _ struct{} `type:"structure"` @@ -13656,6 +14178,94 @@ func (s *ListIPSetsOutput) SetNextMarker(v string) *ListIPSetsOutput { return s } +type ListLoggingConfigurationsInput struct { + _ struct{} `type:"structure"` + + // Specifies the number of LoggingConfigurations that you want AWS WAF to return + // for this request. If you have more LoggingConfigurations than the number + // that you specify for Limit, the response includes a NextMarker value that + // you can use to get another batch of LoggingConfigurations. + Limit *int64 `type:"integer"` + + // If you specify a value for Limit and you have more LoggingConfigurations + // than the value of Limit, AWS WAF returns a NextMarker value in the response + // that allows you to list another group of LoggingConfigurations. For the second + // and subsequent ListLoggingConfigurations requests, specify the value of NextMarker + // from the previous response to get information about another batch of ListLoggingConfigurations. + NextMarker *string `min:"1" type:"string"` +} + +// String returns the string representation +func (s ListLoggingConfigurationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListLoggingConfigurationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListLoggingConfigurationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListLoggingConfigurationsInput"} + if s.NextMarker != nil && len(*s.NextMarker) < 1 { + invalidParams.Add(request.NewErrParamMinLen("NextMarker", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLimit sets the Limit field's value. +func (s *ListLoggingConfigurationsInput) SetLimit(v int64) *ListLoggingConfigurationsInput { + s.Limit = &v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *ListLoggingConfigurationsInput) SetNextMarker(v string) *ListLoggingConfigurationsInput { + s.NextMarker = &v + return s +} + +type ListLoggingConfigurationsOutput struct { + _ struct{} `type:"structure"` + + // An array of LoggingConfiguration objects. + LoggingConfigurations []*LoggingConfiguration `type:"list"` + + // If you have more LoggingConfigurations than the number that you specified + // for Limit in the request, the response includes a NextMarker value. To list + // more LoggingConfigurations, submit another ListLoggingConfigurations request, + // and specify the NextMarker value from the response in the NextMarker value + // in the next request. + NextMarker *string `min:"1" type:"string"` +} + +// String returns the string representation +func (s ListLoggingConfigurationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListLoggingConfigurationsOutput) GoString() string { + return s.String() +} + +// SetLoggingConfigurations sets the LoggingConfigurations field's value. +func (s *ListLoggingConfigurationsOutput) SetLoggingConfigurations(v []*LoggingConfiguration) *ListLoggingConfigurationsOutput { + s.LoggingConfigurations = v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *ListLoggingConfigurationsOutput) SetNextMarker(v string) *ListLoggingConfigurationsOutput { + s.NextMarker = &v + return s +} + type ListRateBasedRulesInput struct { _ struct{} `type:"structure"` @@ -14538,6 +15148,88 @@ func (s *ListXssMatchSetsOutput) SetXssMatchSets(v []*XssMatchSetSummary) *ListX return s } +// The Amazon Kinesis Data Firehose delivery streams, RedactedFields information, +// and the web ACL Amazon Resource Name (ARN). +type LoggingConfiguration struct { + _ struct{} `type:"structure"` + + // An array of Amazon Kinesis Data Firehose delivery stream ARNs. + // + // LogDestinationConfigs is a required field + LogDestinationConfigs []*string `min:"1" type:"list" required:"true"` + + // The parts of the request that you want redacted from the logs. For example, + // if you redact the cookie field, the cookie field in the delivery stream will + // be xxx. + RedactedFields []*FieldToMatch `type:"list"` + + // The Amazon Resource Name (ARN) of the web ACL that you want to associate + // with LogDestinationConfigs. + // + // ResourceArn is a required field + ResourceArn *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s LoggingConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LoggingConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LoggingConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LoggingConfiguration"} + if s.LogDestinationConfigs == nil { + invalidParams.Add(request.NewErrParamRequired("LogDestinationConfigs")) + } + if s.LogDestinationConfigs != nil && len(s.LogDestinationConfigs) < 1 { + invalidParams.Add(request.NewErrParamMinLen("LogDestinationConfigs", 1)) + } + if s.ResourceArn == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArn")) + } + if s.ResourceArn != nil && len(*s.ResourceArn) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ResourceArn", 1)) + } + if s.RedactedFields != nil { + for i, v := range s.RedactedFields { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "RedactedFields", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLogDestinationConfigs sets the LogDestinationConfigs field's value. +func (s *LoggingConfiguration) SetLogDestinationConfigs(v []*string) *LoggingConfiguration { + s.LogDestinationConfigs = v + return s +} + +// SetRedactedFields sets the RedactedFields field's value. +func (s *LoggingConfiguration) SetRedactedFields(v []*FieldToMatch) *LoggingConfiguration { + s.RedactedFields = v + return s +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *LoggingConfiguration) SetResourceArn(v string) *LoggingConfiguration { + s.ResourceArn = &v + return s +} + // Specifies the ByteMatchSet, IPSet, SqlInjectionMatchSet, XssMatchSet, RegexMatchSet, // GeoMatchSet, and SizeConstraintSet objects that you want to add to a Rule // and, for each object, indicates whether you want to negate the settings, @@ -14566,7 +15258,7 @@ type Predicate struct { // Negated is a required field Negated *bool `type:"boolean" required:"true"` - // The type of predicate in a Rule, such as ByteMatchSet or IPSet. + // The type of predicate in a Rule, such as ByteMatch or IPSet. // // Type is a required field Type *string `type:"string" required:"true" enum:"PredicateType"` @@ -14622,6 +15314,74 @@ func (s *Predicate) SetType(v string) *Predicate { return s } +type PutLoggingConfigurationInput struct { + _ struct{} `type:"structure"` + + // The Amazon Kinesis Data Firehose delivery streams that contains the inspected + // traffic information, the redacted fields details, and the Amazon Resource + // Name (ARN) of the web ACL to monitor. + // + // LoggingConfiguration is a required field + LoggingConfiguration *LoggingConfiguration `type:"structure" required:"true"` +} + +// String returns the string representation +func (s PutLoggingConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PutLoggingConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutLoggingConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutLoggingConfigurationInput"} + if s.LoggingConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("LoggingConfiguration")) + } + if s.LoggingConfiguration != nil { + if err := s.LoggingConfiguration.Validate(); err != nil { + invalidParams.AddNested("LoggingConfiguration", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoggingConfiguration sets the LoggingConfiguration field's value. +func (s *PutLoggingConfigurationInput) SetLoggingConfiguration(v *LoggingConfiguration) *PutLoggingConfigurationInput { + s.LoggingConfiguration = v + return s +} + +type PutLoggingConfigurationOutput struct { + _ struct{} `type:"structure"` + + // The LoggingConfiguration that you submitted in the request. + LoggingConfiguration *LoggingConfiguration `type:"structure"` +} + +// String returns the string representation +func (s PutLoggingConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PutLoggingConfigurationOutput) GoString() string { + return s.String() +} + +// SetLoggingConfiguration sets the LoggingConfiguration field's value. +func (s *PutLoggingConfigurationOutput) SetLoggingConfiguration(v *LoggingConfiguration) *PutLoggingConfigurationOutput { + s.LoggingConfiguration = v + return s +} + type PutPermissionPolicyInput struct { _ struct{} `type:"structure"` @@ -15010,6 +15770,8 @@ type RegexMatchTuple struct { // AWS WAF performs the transformation on RegexPatternSet before inspecting // a request for a match. // + // You can only specify a single type of TextTransformation. + // // CMD_LINE // // When you're concerned that attackers are injecting an operating system commandline @@ -15763,6 +16525,8 @@ type SizeConstraint struct { // AWS WAF performs the transformation on FieldToMatch before inspecting a request // for a match. // + // You can only specify a single type of TextTransformation. + // // Note that if you choose BODY for the value of Type, you must choose NONE // for TextTransformation because CloudFront forwards only the first 8192 bytes // for inspection. @@ -16240,11 +17004,13 @@ type SqlInjectionMatchTuple struct { // AWS WAF performs the transformation on FieldToMatch before inspecting a request // for a match. // + // You can only specify a single type of TextTransformation. + // // CMD_LINE // - // When you're concerned that attackers are injecting an operating system commandline - // command and using unusual formatting to disguise some or all of the command, - // use this option to perform the following transformations: + // When you're concerned that attackers are injecting an operating system command + // line command and using unusual formatting to disguise some or all of the + // command, use this option to perform the following transformations: // // * Delete the following characters: \ " ' ^ // @@ -16732,6 +17498,8 @@ type UpdateIPSetInput struct { // // * IPSetDescriptor: Contains Type and Value // + // You can insert a maximum of 1000 addresses in a single request. + // // Updates is a required field Updates []*IPSetUpdate `min:"1" type:"list" required:"true"` } @@ -18363,11 +19131,13 @@ type XssMatchTuple struct { // AWS WAF performs the transformation on FieldToMatch before inspecting a request // for a match. // + // You can only specify a single type of TextTransformation. + // // CMD_LINE // - // When you're concerned that attackers are injecting an operating system commandline - // command and using unusual formatting to disguise some or all of the command, - // use this option to perform the following transformations: + // When you're concerned that attackers are injecting an operating system command + // line command and using unusual formatting to disguise some or all of the + // command, use this option to perform the following transformations: // // * Delete the following characters: \ " ' ^ // @@ -19292,6 +20062,12 @@ const ( // MatchFieldTypeBody is a MatchFieldType enum value MatchFieldTypeBody = "BODY" + + // MatchFieldTypeSingleQueryArg is a MatchFieldType enum value + MatchFieldTypeSingleQueryArg = "SINGLE_QUERY_ARG" + + // MatchFieldTypeAllQueryArgs is a MatchFieldType enum value + MatchFieldTypeAllQueryArgs = "ALL_QUERY_ARGS" ) const ( diff --git a/vendor/github.com/aws/aws-sdk-go/service/waf/errors.go b/vendor/github.com/aws/aws-sdk-go/service/waf/errors.go index 97850b5df1e..02c9752b0bc 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/waf/errors.go +++ b/vendor/github.com/aws/aws-sdk-go/service/waf/errors.go @@ -41,9 +41,6 @@ const ( // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // - // * You tried to add an IP address to an IPSet, but the IP address already - // exists in the specified IPSet. - // // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. ErrCodeInvalidOperationException = "WAFInvalidOperationException" @@ -93,8 +90,9 @@ const ( // // * Effect must specify Allow. // - // * The Action in the policy must be waf:UpdateWebACL or waf-regional:UpdateWebACL. - // Any extra or wildcard actions in the policy will be rejected. + // * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, + // waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard + // actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // diff --git a/vendor/github.com/aws/aws-sdk-go/service/wafregional/api.go b/vendor/github.com/aws/aws-sdk-go/service/wafregional/api.go index cd5c09e23a5..470cefe4995 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/wafregional/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/wafregional/api.go @@ -2212,6 +2212,93 @@ func (c *WAFRegional) DeleteIPSetWithContext(ctx aws.Context, input *waf.DeleteI return out, req.Send() } +const opDeleteLoggingConfiguration = "DeleteLoggingConfiguration" + +// DeleteLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteLoggingConfiguration for more information on using the DeleteLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteLoggingConfigurationRequest method. +// req, resp := client.DeleteLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/DeleteLoggingConfiguration +func (c *WAFRegional) DeleteLoggingConfigurationRequest(input *waf.DeleteLoggingConfigurationInput) (req *request.Request, output *waf.DeleteLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opDeleteLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &waf.DeleteLoggingConfigurationInput{} + } + + output = &waf.DeleteLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteLoggingConfiguration API operation for AWS WAF Regional. +// +// Permanently deletes the LoggingConfiguration from the specified web ACL. +// +// 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. +// +// See the AWS API reference guide for AWS WAF Regional's +// API operation DeleteLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeWAFInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeWAFNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeWAFStaleDataException "WAFStaleDataException" +// The operation failed because you tried to create, update, or delete an object +// by using a change token that has already been used. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/DeleteLoggingConfiguration +func (c *WAFRegional) DeleteLoggingConfiguration(input *waf.DeleteLoggingConfigurationInput) (*waf.DeleteLoggingConfigurationOutput, error) { + req, out := c.DeleteLoggingConfigurationRequest(input) + return out, req.Send() +} + +// DeleteLoggingConfigurationWithContext is the same as DeleteLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAFRegional) DeleteLoggingConfigurationWithContext(ctx aws.Context, input *waf.DeleteLoggingConfigurationInput, opts ...request.Option) (*waf.DeleteLoggingConfigurationOutput, error) { + req, out := c.DeleteLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opDeletePermissionPolicy = "DeletePermissionPolicy" // DeletePermissionPolicyRequest generates a "aws/request.Request" representing the @@ -2896,6 +2983,24 @@ func (c *WAFRegional) DeleteRuleGroupRequest(input *waf.DeleteRuleGroupInput) (r // // * You tried to delete an IPSet that references one or more IP addresses. // +// * ErrCodeWAFInvalidOperationException "WAFInvalidOperationException" +// The operation failed because there was nothing to do. For example: +// +// * You tried to remove a Rule from a WebACL, but the Rule isn't in the +// specified WebACL. +// +// * You tried to remove an IP address from an IPSet, but the IP address +// isn't in the specified IPSet. +// +// * You tried to remove a ByteMatchTuple from a ByteMatchSet, but the ByteMatchTuple +// isn't in the specified WebACL. +// +// * You tried to add a Rule to a WebACL, but the Rule already exists in +// the specified WebACL. +// +// * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple +// already exists in the specified WebACL. +// // See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/DeleteRuleGroup func (c *WAFRegional) DeleteRuleGroup(input *waf.DeleteRuleGroupInput) (*waf.DeleteRuleGroupOutput, error) { req, out := c.DeleteRuleGroupRequest(input) @@ -3987,6 +4092,89 @@ func (c *WAFRegional) GetIPSetWithContext(ctx aws.Context, input *waf.GetIPSetIn return out, req.Send() } +const opGetLoggingConfiguration = "GetLoggingConfiguration" + +// GetLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetLoggingConfiguration for more information on using the GetLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetLoggingConfigurationRequest method. +// req, resp := client.GetLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/GetLoggingConfiguration +func (c *WAFRegional) GetLoggingConfigurationRequest(input *waf.GetLoggingConfigurationInput) (req *request.Request, output *waf.GetLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opGetLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &waf.GetLoggingConfigurationInput{} + } + + output = &waf.GetLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetLoggingConfiguration API operation for AWS WAF Regional. +// +// Returns the LoggingConfiguration for the specified web ACL. +// +// 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. +// +// See the AWS API reference guide for AWS WAF Regional's +// API operation GetLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeWAFInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeWAFNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/GetLoggingConfiguration +func (c *WAFRegional) GetLoggingConfiguration(input *waf.GetLoggingConfigurationInput) (*waf.GetLoggingConfigurationOutput, error) { + req, out := c.GetLoggingConfigurationRequest(input) + return out, req.Send() +} + +// GetLoggingConfigurationWithContext is the same as GetLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAFRegional) GetLoggingConfigurationWithContext(ctx aws.Context, input *waf.GetLoggingConfigurationInput, opts ...request.Option) (*waf.GetLoggingConfigurationOutput, error) { + req, out := c.GetLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opGetPermissionPolicy = "GetPermissionPolicy" // GetPermissionPolicyRequest generates a "aws/request.Request" representing the @@ -5550,6 +5738,118 @@ func (c *WAFRegional) ListIPSetsWithContext(ctx aws.Context, input *waf.ListIPSe return out, req.Send() } +const opListLoggingConfigurations = "ListLoggingConfigurations" + +// ListLoggingConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the ListLoggingConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListLoggingConfigurations for more information on using the ListLoggingConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListLoggingConfigurationsRequest method. +// req, resp := client.ListLoggingConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/ListLoggingConfigurations +func (c *WAFRegional) ListLoggingConfigurationsRequest(input *waf.ListLoggingConfigurationsInput) (req *request.Request, output *waf.ListLoggingConfigurationsOutput) { + op := &request.Operation{ + Name: opListLoggingConfigurations, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &waf.ListLoggingConfigurationsInput{} + } + + output = &waf.ListLoggingConfigurationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListLoggingConfigurations API operation for AWS WAF Regional. +// +// Returns an array of LoggingConfiguration objects. +// +// 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. +// +// See the AWS API reference guide for AWS WAF Regional's +// API operation ListLoggingConfigurations for usage and error information. +// +// Returned Error Codes: +// * ErrCodeWAFInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeWAFNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeWAFInvalidParameterException "WAFInvalidParameterException" +// The operation failed because AWS WAF didn't recognize a parameter in the +// request. For example: +// +// * You specified an invalid parameter name. +// +// * You specified an invalid value. +// +// * You tried to update an object (ByteMatchSet, IPSet, Rule, or WebACL) +// using an action other than INSERT or DELETE. +// +// * You tried to create a WebACL with a DefaultActionType other than ALLOW, +// BLOCK, or COUNT. +// +// * You tried to create a RateBasedRule with a RateKey value other than +// IP. +// +// * You tried to update a WebACL with a WafActionType other than ALLOW, +// BLOCK, or COUNT. +// +// * You tried to update a ByteMatchSet with a FieldToMatchType other than +// HEADER, METHOD, QUERY_STRING, URI, or BODY. +// +// * You tried to update a ByteMatchSet with a Field of HEADER but no value +// for Data. +// +// * Your request references an ARN that is malformed, or corresponds to +// a resource with which a web ACL cannot be associated. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/ListLoggingConfigurations +func (c *WAFRegional) ListLoggingConfigurations(input *waf.ListLoggingConfigurationsInput) (*waf.ListLoggingConfigurationsOutput, error) { + req, out := c.ListLoggingConfigurationsRequest(input) + return out, req.Send() +} + +// ListLoggingConfigurationsWithContext is the same as ListLoggingConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See ListLoggingConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAFRegional) ListLoggingConfigurationsWithContext(ctx aws.Context, input *waf.ListLoggingConfigurationsInput, opts ...request.Option) (*waf.ListLoggingConfigurationsOutput, error) { + req, out := c.ListLoggingConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opListRateBasedRules = "ListRateBasedRules" // ListRateBasedRulesRequest generates a "aws/request.Request" representing the @@ -6472,6 +6772,108 @@ func (c *WAFRegional) ListXssMatchSetsWithContext(ctx aws.Context, input *waf.Li return out, req.Send() } +const opPutLoggingConfiguration = "PutLoggingConfiguration" + +// PutLoggingConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutLoggingConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfuly. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutLoggingConfiguration for more information on using the PutLoggingConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutLoggingConfigurationRequest method. +// req, resp := client.PutLoggingConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/PutLoggingConfiguration +func (c *WAFRegional) PutLoggingConfigurationRequest(input *waf.PutLoggingConfigurationInput) (req *request.Request, output *waf.PutLoggingConfigurationOutput) { + op := &request.Operation{ + Name: opPutLoggingConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &waf.PutLoggingConfigurationInput{} + } + + output = &waf.PutLoggingConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutLoggingConfiguration API operation for AWS WAF Regional. +// +// Associates a LoggingConfiguration with a specified web ACL. +// +// You can access information about all traffic that AWS WAF inspects using +// the following steps: +// +// Create an Amazon Kinesis Data Firehose delivery stream. For more information, +// see Creating an Amazon Kinesis Data Firehose Delivery Stream (https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html). +// +// Associate that delivery stream to your web ACL using a PutLoggingConfiguration +// request. +// +// When you successfully enable logging using a PutLoggingConfiguration request, +// AWS WAF will create a service linked role with the necessary permissions +// to write logs to the Amazon Kinesis Data Firehose delivery stream. For more +// information, see Logging Web ACL Traffic Information (http://docs.aws.amazon.com/waf/latest/developerguide/logging.html) +// in the AWS WAF Developer 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 +// the error. +// +// See the AWS API reference guide for AWS WAF Regional's +// API operation PutLoggingConfiguration for usage and error information. +// +// Returned Error Codes: +// * ErrCodeWAFInternalErrorException "WAFInternalErrorException" +// The operation failed because of a system problem, even though the request +// was valid. Retry your request. +// +// * ErrCodeWAFNonexistentItemException "WAFNonexistentItemException" +// The operation failed because the referenced object doesn't exist. +// +// * ErrCodeWAFStaleDataException "WAFStaleDataException" +// The operation failed because you tried to create, update, or delete an object +// by using a change token that has already been used. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/waf-regional-2016-11-28/PutLoggingConfiguration +func (c *WAFRegional) PutLoggingConfiguration(input *waf.PutLoggingConfigurationInput) (*waf.PutLoggingConfigurationOutput, error) { + req, out := c.PutLoggingConfigurationRequest(input) + return out, req.Send() +} + +// PutLoggingConfigurationWithContext is the same as PutLoggingConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutLoggingConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *WAFRegional) PutLoggingConfigurationWithContext(ctx aws.Context, input *waf.PutLoggingConfigurationInput, opts ...request.Option) (*waf.PutLoggingConfigurationOutput, error) { + req, out := c.PutLoggingConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opPutPermissionPolicy = "PutPermissionPolicy" // PutPermissionPolicyRequest generates a "aws/request.Request" representing the @@ -6527,8 +6929,9 @@ func (c *WAFRegional) PutPermissionPolicyRequest(input *waf.PutPermissionPolicyI // // * Effect must specify Allow. // -// * The Action in the policy must be waf:UpdateWebACL and waf-regional:UpdateWebACL. -// Any extra or wildcard actions in the policy will be rejected. +// * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, +// waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard +// actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // @@ -6573,8 +6976,9 @@ func (c *WAFRegional) PutPermissionPolicyRequest(input *waf.PutPermissionPolicyI // // * Effect must specify Allow. // -// * The Action in the policy must be waf:UpdateWebACL or waf-regional:UpdateWebACL. -// Any extra or wildcard actions in the policy will be rejected. +// * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, +// waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard +// actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // @@ -6720,9 +7124,6 @@ func (c *WAFRegional) UpdateByteMatchSetRequest(input *waf.UpdateByteMatchSetInp // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -6914,9 +7315,6 @@ func (c *WAFRegional) UpdateGeoMatchSetRequest(input *waf.UpdateGeoMatchSetInput // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7061,9 +7459,10 @@ func (c *WAFRegional) UpdateIPSetRequest(input *waf.UpdateIPSetInput) (req *requ // range of IP addresses from 192.0.2.0 to 192.0.2.255) or 192.0.2.44/32 // (for the individual IP address 192.0.2.44). // -// AWS WAF supports /8, /16, /24, and /32 IP address ranges for IPv4, and /24, -// /32, /48, /56, /64 and /128 for IPv6. For more information about CIDR notation, -// see the Wikipedia entry Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). +// AWS WAF supports IPv4 address ranges: /8 and any range between /16 through +// /32. AWS WAF supports IPv6 address ranges: /16, /24, /32, /48, /56, /64, +// and /128. For more information about CIDR notation, see the Wikipedia entry +// Classless Inter-Domain Routing (https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). // // IPv6 addresses can be represented using any of the following formats: // @@ -7095,6 +7494,8 @@ func (c *WAFRegional) UpdateIPSetRequest(input *waf.UpdateIPSetInput) (req *requ // and/or the IP addresses that you want to delete. If you want to change an // IP address, you delete the existing IP address and add the new one. // +// You can insert a maximum of 1000 addresses in a single request. +// // For more information about how to use the AWS WAF API to allow or block HTTP // requests, see the AWS WAF Developer Guide (http://docs.aws.amazon.com/waf/latest/developerguide/). // @@ -7133,9 +7534,6 @@ func (c *WAFRegional) UpdateIPSetRequest(input *waf.UpdateIPSetInput) (req *requ // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7341,9 +7739,6 @@ func (c *WAFRegional) UpdateRateBasedRuleRequest(input *waf.UpdateRateBasedRuleI // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7569,9 +7964,6 @@ func (c *WAFRegional) UpdateRegexMatchSetRequest(input *waf.UpdateRegexMatchSetI // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7733,9 +8125,6 @@ func (c *WAFRegional) UpdateRegexPatternSetRequest(input *waf.UpdateRegexPattern // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -7881,9 +8270,6 @@ func (c *WAFRegional) UpdateRuleRequest(input *waf.UpdateRuleInput) (req *reques // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8089,9 +8475,6 @@ func (c *WAFRegional) UpdateRuleGroupRequest(input *waf.UpdateRuleGroupInput) (r // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8211,6 +8594,8 @@ func (c *WAFRegional) UpdateSizeConstraintSetRequest(input *waf.UpdateSizeConstr // of the request body are not supported because the AWS resource forwards // only the first 8192 bytes of your request to AWS WAF. // +// You can only specify a single type of TextTransformation. +// // * A ComparisonOperator used for evaluating the selected part of the request // against the specified Size, such as equals, greater than, less than, and // so on. @@ -8271,9 +8656,6 @@ func (c *WAFRegional) UpdateSizeConstraintSetRequest(input *waf.UpdateSizeConstr // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8413,12 +8795,15 @@ func (c *WAFRegional) UpdateSqlInjectionMatchSetRequest(input *waf.UpdateSqlInje // object and add a new one. // // * FieldToMatch: The part of web requests that you want AWS WAF to inspect -// and, if you want AWS WAF to inspect a header, the name of the header. +// and, if you want AWS WAF to inspect a header or custom query parameter, +// the name of the header or parameter. // // * TextTransformation: Which text transformation, if any, to perform on // the web request before inspecting the request for snippets of malicious // SQL code. // +// You can only specify a single type of TextTransformation. +// // You use SqlInjectionMatchSet objects to specify which CloudFront requests // you want to allow, block, or count. For example, if you're receiving requests // that contain snippets of SQL code in the query string and you want to block @@ -8469,9 +8854,6 @@ func (c *WAFRegional) UpdateSqlInjectionMatchSetRequest(input *waf.UpdateSqlInje // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8683,9 +9065,6 @@ func (c *WAFRegional) UpdateWebACLRequest(input *waf.UpdateWebACLInput) (req *re // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -8828,12 +9207,15 @@ func (c *WAFRegional) UpdateXssMatchSetRequest(input *waf.UpdateXssMatchSetInput // add a new one. // // * FieldToMatch: The part of web requests that you want AWS WAF to inspect -// and, if you want AWS WAF to inspect a header, the name of the header. +// and, if you want AWS WAF to inspect a header or custom query parameter, +// the name of the header or parameter. // // * TextTransformation: Which text transformation, if any, to perform on // the web request before inspecting the request for cross-site scripting // attacks. // +// You can only specify a single type of TextTransformation. +// // You use XssMatchSet objects to specify which CloudFront requests you want // to allow, block, or count. For example, if you're receiving requests that // contain cross-site scripting attacks in the request body and you want to @@ -8884,9 +9266,6 @@ func (c *WAFRegional) UpdateXssMatchSetRequest(input *waf.UpdateXssMatchSetInput // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // -// * You tried to add an IP address to an IPSet, but the IP address already -// exists in the specified IPSet. -// // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. // @@ -10046,6 +10425,12 @@ const ( // MatchFieldTypeBody is a MatchFieldType enum value MatchFieldTypeBody = "BODY" + + // MatchFieldTypeSingleQueryArg is a MatchFieldType enum value + MatchFieldTypeSingleQueryArg = "SINGLE_QUERY_ARG" + + // MatchFieldTypeAllQueryArgs is a MatchFieldType enum value + MatchFieldTypeAllQueryArgs = "ALL_QUERY_ARGS" ) const ( diff --git a/vendor/github.com/aws/aws-sdk-go/service/wafregional/errors.go b/vendor/github.com/aws/aws-sdk-go/service/wafregional/errors.go index 793dbc2fcae..fed17a99181 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/wafregional/errors.go +++ b/vendor/github.com/aws/aws-sdk-go/service/wafregional/errors.go @@ -41,9 +41,6 @@ const ( // * You tried to add a Rule to a WebACL, but the Rule already exists in // the specified WebACL. // - // * You tried to add an IP address to an IPSet, but the IP address already - // exists in the specified IPSet. - // // * You tried to add a ByteMatchTuple to a ByteMatchSet, but the ByteMatchTuple // already exists in the specified WebACL. ErrCodeWAFInvalidOperationException = "WAFInvalidOperationException" @@ -93,8 +90,9 @@ const ( // // * Effect must specify Allow. // - // * The Action in the policy must be waf:UpdateWebACL or waf-regional:UpdateWebACL. - // Any extra or wildcard actions in the policy will be rejected. + // * The Action in the policy must be waf:UpdateWebACL, waf-regional:UpdateWebACL, + // waf:GetRuleGroup and waf-regional:GetRuleGroup . Any extra or wildcard + // actions in the policy will be rejected. // // * The policy cannot include a Resource parameter. // diff --git a/vendor/github.com/hashicorp/errwrap/README.md b/vendor/github.com/hashicorp/errwrap/README.md index 1c95f59782b..444df08f8e7 100644 --- a/vendor/github.com/hashicorp/errwrap/README.md +++ b/vendor/github.com/hashicorp/errwrap/README.md @@ -48,7 +48,7 @@ func main() { // We can use the Contains helpers to check if an error contains // another error. It is safe to do this with a nil error, or with // an error that doesn't even use the errwrap package. - if errwrap.Contains(err, ErrNotExist) { + if errwrap.Contains(err, "does not exist") { // Do something } if errwrap.ContainsType(err, new(os.PathError)) { diff --git a/vendor/github.com/hashicorp/errwrap/go.mod b/vendor/github.com/hashicorp/errwrap/go.mod new file mode 100644 index 00000000000..c9b84022cf7 --- /dev/null +++ b/vendor/github.com/hashicorp/errwrap/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/errwrap diff --git a/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go b/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go index 7d8a57c2807..8d306bf5134 100644 --- a/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +++ b/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go @@ -26,6 +26,7 @@ func DefaultPooledTransport() *http.Transport { DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, + DualStack: true, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, diff --git a/vendor/github.com/hashicorp/go-cleanhttp/go.mod b/vendor/github.com/hashicorp/go-cleanhttp/go.mod new file mode 100644 index 00000000000..310f07569fc --- /dev/null +++ b/vendor/github.com/hashicorp/go-cleanhttp/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/go-cleanhttp diff --git a/vendor/github.com/hashicorp/go-cleanhttp/handlers.go b/vendor/github.com/hashicorp/go-cleanhttp/handlers.go new file mode 100644 index 00000000000..7eda3777f3c --- /dev/null +++ b/vendor/github.com/hashicorp/go-cleanhttp/handlers.go @@ -0,0 +1,43 @@ +package cleanhttp + +import ( + "net/http" + "strings" + "unicode" +) + +// HandlerInput provides input options to cleanhttp's handlers +type HandlerInput struct { + ErrStatus int +} + +// PrintablePathCheckHandler is a middleware that ensures the request path +// contains only printable runes. +func PrintablePathCheckHandler(next http.Handler, input *HandlerInput) http.Handler { + // Nil-check on input to make it optional + if input == nil { + input = &HandlerInput{ + ErrStatus: http.StatusBadRequest, + } + } + + // Default to http.StatusBadRequest on error + if input.ErrStatus == 0 { + input.ErrStatus = http.StatusBadRequest + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Check URL path for non-printable characters + idx := strings.IndexFunc(r.URL.Path, func(c rune) bool { + return !unicode.IsPrint(c) + }) + + if idx != -1 { + w.WriteHeader(input.ErrStatus) + return + } + + next.ServeHTTP(w, r) + return + }) +} diff --git a/vendor/github.com/hashicorp/go-multierror/go.mod b/vendor/github.com/hashicorp/go-multierror/go.mod new file mode 100644 index 00000000000..2534331d5f9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-multierror/go.mod @@ -0,0 +1,3 @@ +module github.com/hashicorp/go-multierror + +require github.com/hashicorp/errwrap v1.0.0 diff --git a/vendor/github.com/hashicorp/go-multierror/go.sum b/vendor/github.com/hashicorp/go-multierror/go.sum new file mode 100644 index 00000000000..85b1f8ff333 --- /dev/null +++ b/vendor/github.com/hashicorp/go-multierror/go.sum @@ -0,0 +1,4 @@ +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce h1:prjrVgOk2Yg6w+PflHoszQNLTUh4kaByUcEWM/9uin4= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/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= diff --git a/vendor/github.com/hashicorp/go-safetemp/go.mod b/vendor/github.com/hashicorp/go-safetemp/go.mod new file mode 100644 index 00000000000..02bc5f5bb55 --- /dev/null +++ b/vendor/github.com/hashicorp/go-safetemp/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/go-safetemp diff --git a/vendor/github.com/hashicorp/go-uuid/README.md b/vendor/github.com/hashicorp/go-uuid/README.md index 21fdda4adaf..fbde8b9aef6 100644 --- a/vendor/github.com/hashicorp/go-uuid/README.md +++ b/vendor/github.com/hashicorp/go-uuid/README.md @@ -1,6 +1,6 @@ -# uuid +# uuid [![Build Status](https://travis-ci.org/hashicorp/go-uuid.svg?branch=master)](https://travis-ci.org/hashicorp/go-uuid) -Generates UUID-format strings using purely high quality random bytes. +Generates UUID-format strings using high quality, _purely random_ bytes. It is **not** intended to be RFC compliant, merely to use a well-understood string representation of a 128-bit value. It can also parse UUID-format strings into their component bytes. Documentation ============= diff --git a/vendor/github.com/hashicorp/go-uuid/go.mod b/vendor/github.com/hashicorp/go-uuid/go.mod new file mode 100644 index 00000000000..dd57f9d21ad --- /dev/null +++ b/vendor/github.com/hashicorp/go-uuid/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/go-uuid diff --git a/vendor/github.com/hashicorp/go-uuid/uuid.go b/vendor/github.com/hashicorp/go-uuid/uuid.go index 322b522c23f..ff9364c4040 100644 --- a/vendor/github.com/hashicorp/go-uuid/uuid.go +++ b/vendor/github.com/hashicorp/go-uuid/uuid.go @@ -6,13 +6,21 @@ import ( "fmt" ) -// GenerateUUID is used to generate a random UUID -func GenerateUUID() (string, error) { - buf := make([]byte, 16) +// GenerateRandomBytes is used to generate random bytes of given size. +func GenerateRandomBytes(size int) ([]byte, error) { + buf := make([]byte, size) if _, err := rand.Read(buf); err != nil { - return "", fmt.Errorf("failed to read random bytes: %v", err) + return nil, fmt.Errorf("failed to read random bytes: %v", err) } + return buf, nil +} +// GenerateUUID is used to generate a random UUID +func GenerateUUID() (string, error) { + buf, err := GenerateRandomBytes(16) + if err != nil { + return "", err + } return FormatUUID(buf) } diff --git a/vendor/github.com/hashicorp/logutils/go.mod b/vendor/github.com/hashicorp/logutils/go.mod new file mode 100644 index 00000000000..ba38a457646 --- /dev/null +++ b/vendor/github.com/hashicorp/logutils/go.mod @@ -0,0 +1 @@ +module github.com/hashicorp/logutils diff --git a/vendor/github.com/jen20/awspolicyequivalence/aws_policy_equivalence.go b/vendor/github.com/jen20/awspolicyequivalence/aws_policy_equivalence.go index 9150d20ad34..adf38ba5981 100644 --- a/vendor/github.com/jen20/awspolicyequivalence/aws_policy_equivalence.go +++ b/vendor/github.com/jen20/awspolicyequivalence/aws_policy_equivalence.go @@ -9,12 +9,11 @@ package awspolicy import ( "encoding/json" "errors" + "fmt" "reflect" "regexp" "strings" - "github.com/aws/aws-sdk-go/aws/arn" - "github.com/hashicorp/errwrap" "github.com/mitchellh/mapstructure" ) @@ -31,21 +30,21 @@ import ( func PoliciesAreEquivalent(policy1, policy2 string) (bool, error) { policy1intermediate := &intermediateAwsPolicyDocument{} if err := json.Unmarshal([]byte(policy1), policy1intermediate); err != nil { - return false, errwrap.Wrapf("Error unmarshaling policy: {{err}}", err) + return false, fmt.Errorf("Error unmarshaling policy: %s", err) } policy2intermediate := &intermediateAwsPolicyDocument{} if err := json.Unmarshal([]byte(policy2), policy2intermediate); err != nil { - return false, errwrap.Wrapf("Error unmarshaling policy: {{err}}", err) + return false, fmt.Errorf("Error unmarshaling policy: %s", err) } policy1Doc, err := policy1intermediate.document() if err != nil { - return false, errwrap.Wrapf("Error parsing policy: {{err}}", err) + return false, fmt.Errorf("Error parsing policy: %s", err) } policy2Doc, err := policy2intermediate.document() if err != nil { - return false, errwrap.Wrapf("Error parsing policy: {{err}}", err) + return false, fmt.Errorf("Error parsing policy: %s", err) } return policy1Doc.equals(policy2Doc), nil @@ -63,12 +62,12 @@ func (intermediate *intermediateAwsPolicyDocument) document() (*awsPolicyDocumen switch s := intermediate.Statements.(type) { case []interface{}: if err := mapstructure.Decode(s, &statements); err != nil { - return nil, errwrap.Wrapf("Error parsing statement: {{err}}", err) + return nil, fmt.Errorf("Error parsing statement: %s", err) } case map[string]interface{}: var singleStatement *awsPolicyStatement if err := mapstructure.Decode(s, &singleStatement); err != nil { - return nil, errwrap.Wrapf("Error parsing statement: {{err}}", err) + return nil, fmt.Errorf("Error parsing statement: %s", err) } statements = append(statements, singleStatement) default: @@ -276,16 +275,16 @@ func stringPrincipalsEqual(ours, theirs interface{}) bool { awsAccountIDRegex := regexp.MustCompile(`^[0-9]{12}$`) if awsAccountIDRegex.MatchString(ourPrincipal) { - if theirArn, err := arn.Parse(theirPrincipal); err == nil { - if theirArn.Service == "iam" && theirArn.Resource == "root" && theirArn.AccountID == ourPrincipal { + if theirArn, err := parseAwsArnString(theirPrincipal); err == nil { + if theirArn.service == "iam" && theirArn.resource == "root" && theirArn.account == ourPrincipal { return true } } } if awsAccountIDRegex.MatchString(theirPrincipal) { - if ourArn, err := arn.Parse(ourPrincipal); err == nil { - if ourArn.Service == "iam" && ourArn.Resource == "root" && ourArn.AccountID == theirPrincipal { + if ourArn, err := parseAwsArnString(ourPrincipal); err == nil { + if ourArn.service == "iam" && ourArn.resource == "root" && ourArn.account == theirPrincipal { return true } } @@ -435,3 +434,32 @@ func (ours awsPrincipalStringSet) equals(theirs awsPrincipalStringSet) bool { return true } + +// awsArn describes an Amazon Resource Name +// More information: http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html +type awsArn struct { + account string + partition string + region string + resource string + service string +} + +// parseAwsArnString converts a string into an awsArn +// Expects string in form of: arn:PARTITION:SERVICE:REGION:ACCOUNT:RESOURCE +func parseAwsArnString(arn string) (awsArn, error) { + if !strings.HasPrefix(arn, "arn:") { + return awsArn{}, fmt.Errorf("expected arn: prefix, received: %s", arn) + } + arnParts := strings.SplitN(arn, ":", 6) + if len(arnParts) != 6 { + return awsArn{}, fmt.Errorf("expected 6 colon delimited sections, received: %s", arn) + } + return awsArn{ + account: arnParts[4], + partition: arnParts[1], + region: arnParts[3], + resource: arnParts[5], + service: arnParts[2], + }, nil +} diff --git a/vendor/github.com/jen20/awspolicyequivalence/go.mod b/vendor/github.com/jen20/awspolicyequivalence/go.mod new file mode 100644 index 00000000000..35e1621e867 --- /dev/null +++ b/vendor/github.com/jen20/awspolicyequivalence/go.mod @@ -0,0 +1,3 @@ +module github.com/jen20/awspolicyequivalence + +require github.com/mitchellh/mapstructure v1.0.0 diff --git a/vendor/github.com/jen20/awspolicyequivalence/go.sum b/vendor/github.com/jen20/awspolicyequivalence/go.sum new file mode 100644 index 00000000000..8f6af4f3948 --- /dev/null +++ b/vendor/github.com/jen20/awspolicyequivalence/go.sum @@ -0,0 +1,2 @@ +github.com/mitchellh/mapstructure v1.0.0 h1:vVpGvMXJPqSDh2VYHF7gsfQj8Ncx+Xw5Y1KHeTRY+7I= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux.go b/vendor/github.com/mattn/go-isatty/isatty_linux.go index 9d24bac1db3..7384cf99167 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_linux.go +++ b/vendor/github.com/mattn/go-isatty/isatty_linux.go @@ -1,5 +1,5 @@ // +build linux -// +build !appengine +// +build !appengine,!ppc64,!ppc64le package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go b/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go new file mode 100644 index 00000000000..44e5d213021 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go @@ -0,0 +1,19 @@ +// +build linux +// +build ppc64 ppc64le + +package isatty + +import ( + "unsafe" + + syscall "golang.org/x/sys/unix" +) + +const ioctlReadTermios = syscall.TCGETS + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go index ff4de3d9a53..9d8b4a59961 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -3,7 +3,7 @@ package isatty -// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 // terminal. This is also always false on this environment. func IsCygwinTerminal(fd uintptr) bool { return false diff --git a/vendor/github.com/mitchellh/copystructure/go.mod b/vendor/github.com/mitchellh/copystructure/go.mod new file mode 100644 index 00000000000..d01864309b4 --- /dev/null +++ b/vendor/github.com/mitchellh/copystructure/go.mod @@ -0,0 +1,3 @@ +module github.com/mitchellh/copystructure + +require github.com/mitchellh/reflectwalk v1.0.0 diff --git a/vendor/github.com/mitchellh/copystructure/go.sum b/vendor/github.com/mitchellh/copystructure/go.sum new file mode 100644 index 00000000000..be572456190 --- /dev/null +++ b/vendor/github.com/mitchellh/copystructure/go.sum @@ -0,0 +1,2 @@ +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= diff --git a/vendor/github.com/mitchellh/go-homedir/go.mod b/vendor/github.com/mitchellh/go-homedir/go.mod new file mode 100644 index 00000000000..7efa09a0432 --- /dev/null +++ b/vendor/github.com/mitchellh/go-homedir/go.mod @@ -0,0 +1 @@ +module github.com/mitchellh/go-homedir diff --git a/vendor/github.com/mitchellh/go-wordwrap/go.mod b/vendor/github.com/mitchellh/go-wordwrap/go.mod new file mode 100644 index 00000000000..2ae411b2012 --- /dev/null +++ b/vendor/github.com/mitchellh/go-wordwrap/go.mod @@ -0,0 +1 @@ +module github.com/mitchellh/go-wordwrap diff --git a/vendor/github.com/mitchellh/hashstructure/README.md b/vendor/github.com/mitchellh/hashstructure/README.md index 7d0de5bf5a6..28ce45a3e18 100644 --- a/vendor/github.com/mitchellh/hashstructure/README.md +++ b/vendor/github.com/mitchellh/hashstructure/README.md @@ -1,4 +1,4 @@ -# hashstructure +# hashstructure [![GoDoc](https://godoc.org/github.com/mitchellh/hashstructure?status.svg)](https://godoc.org/github.com/mitchellh/hashstructure) hashstructure is a Go library for creating a unique hash value for arbitrary values in Go. @@ -19,6 +19,9 @@ sending data across the network, caching values locally (de-dup), and so on. * Optionally specify a custom hash function to optimize for speed, collision avoidance for your data set, etc. + + * Optionally hash the output of `.String()` on structs that implement fmt.Stringer, + allowing effective hashing of time.Time ## Installation @@ -34,28 +37,29 @@ For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/has A quick code example is shown below: - - type ComplexStruct struct { - Name string - Age uint - Metadata map[string]interface{} - } - - v := ComplexStruct{ - Name: "mitchellh", - Age: 64, - Metadata: map[string]interface{}{ - "car": true, - "location": "California", - "siblings": []string{"Bob", "John"}, - }, - } - - hash, err := hashstructure.Hash(v, nil) - if err != nil { - panic(err) - } - - fmt.Printf("%d", hash) - // Output: - // 2307517237273902113 +```go +type ComplexStruct struct { + Name string + Age uint + Metadata map[string]interface{} +} + +v := ComplexStruct{ + Name: "mitchellh", + Age: 64, + Metadata: map[string]interface{}{ + "car": true, + "location": "California", + "siblings": []string{"Bob", "John"}, + }, +} + +hash, err := hashstructure.Hash(v, nil) +if err != nil { + panic(err) +} + +fmt.Printf("%d", hash) +// Output: +// 2307517237273902113 +``` diff --git a/vendor/github.com/mitchellh/hashstructure/go.mod b/vendor/github.com/mitchellh/hashstructure/go.mod new file mode 100644 index 00000000000..966582aa95b --- /dev/null +++ b/vendor/github.com/mitchellh/hashstructure/go.mod @@ -0,0 +1 @@ +module github.com/mitchellh/hashstructure diff --git a/vendor/github.com/mitchellh/hashstructure/hashstructure.go b/vendor/github.com/mitchellh/hashstructure/hashstructure.go index 6f586fa7725..ea13a1583c3 100644 --- a/vendor/github.com/mitchellh/hashstructure/hashstructure.go +++ b/vendor/github.com/mitchellh/hashstructure/hashstructure.go @@ -8,6 +8,16 @@ import ( "reflect" ) +// ErrNotStringer is returned when there's an error with hash:"string" +type ErrNotStringer struct { + Field string +} + +// Error implements error for ErrNotStringer +func (ens *ErrNotStringer) Error() string { + return fmt.Sprintf("hashstructure: %s has hash:\"string\" set, but does not implement fmt.Stringer", ens.Field) +} + // HashOptions are options that are available for hashing. type HashOptions struct { // Hasher is the hash function to use. If this isn't set, it will @@ -17,12 +27,18 @@ type HashOptions struct { // TagName is the struct tag to look at when hashing the structure. // By default this is "hash". TagName string + + // ZeroNil is flag determining if nil pointer should be treated equal + // to a zero value of pointed type. By default this is false. + ZeroNil bool } // Hash returns the hash value of an arbitrary value. // // If opts is nil, then default options will be used. See HashOptions -// for the default values. +// for the default values. The same *HashOptions value cannot be used +// concurrently. None of the values within a *HashOptions struct are +// safe to read/write while hashing is being done. // // Notes on the value: // @@ -41,11 +57,14 @@ type HashOptions struct { // // The available tag values are: // -// * "ignore" - The field will be ignored and not affect the hash code. +// * "ignore" or "-" - The field will be ignored and not affect the hash code. // // * "set" - The field will be treated as a set, where ordering doesn't // affect the hash code. This only works for slices. // +// * "string" - The field will be hashed as a string, only works when the +// field implements fmt.Stringer +// func Hash(v interface{}, opts *HashOptions) (uint64, error) { // Create default options if opts == nil { @@ -63,15 +82,17 @@ func Hash(v interface{}, opts *HashOptions) (uint64, error) { // Create our walker and walk the structure w := &walker{ - h: opts.Hasher, - tag: opts.TagName, + h: opts.Hasher, + tag: opts.TagName, + zeronil: opts.ZeroNil, } return w.visit(reflect.ValueOf(v), nil) } type walker struct { - h hash.Hash64 - tag string + h hash.Hash64 + tag string + zeronil bool } type visitOpts struct { @@ -84,6 +105,8 @@ type visitOpts struct { } func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { + t := reflect.TypeOf(0) + // Loop since these can be wrapped in multiple layers of pointers // and interfaces. for { @@ -96,6 +119,9 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { } if v.Kind() == reflect.Ptr { + if w.zeronil { + t = v.Type().Elem() + } v = reflect.Indirect(v) continue } @@ -105,8 +131,7 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { // If it is nil, treat it like a zero. if !v.IsValid() { - var tmp int8 - v = reflect.ValueOf(tmp) + v = reflect.Zero(t) } // Binary writing can use raw ints, we have to convert to @@ -189,8 +214,8 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { return h, nil case reflect.Struct: - var include Includable parent := v.Interface() + var include Includable if impl, ok := parent.(Includable); ok { include = impl } @@ -203,7 +228,7 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { l := v.NumField() for i := 0; i < l; i++ { - if v := v.Field(i); v.CanSet() || t.Field(i).Name != "_" { + if innerV := v.Field(i); v.CanSet() || t.Field(i).Name != "_" { var f visitFlag fieldType := t.Field(i) if fieldType.PkgPath != "" { @@ -212,14 +237,25 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { } tag := fieldType.Tag.Get(w.tag) - if tag == "ignore" { + if tag == "ignore" || tag == "-" { // Ignore this field continue } + // if string is set, use the string value + if tag == "string" { + if impl, ok := innerV.Interface().(fmt.Stringer); ok { + innerV = reflect.ValueOf(impl.String()) + } else { + return 0, &ErrNotStringer{ + Field: v.Type().Field(i).Name, + } + } + } + // Check if we implement includable and check it if include != nil { - incl, err := include.HashInclude(fieldType.Name, v) + incl, err := include.HashInclude(fieldType.Name, innerV) if err != nil { return 0, err } @@ -238,7 +274,7 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { return 0, err } - vh, err := w.visit(v, &visitOpts{ + vh, err := w.visit(innerV, &visitOpts{ Flags: f, Struct: parent, StructField: fieldType.Name, @@ -289,7 +325,6 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) { return 0, fmt.Errorf("unknown kind to hash: %s", k) } - return 0, nil } func hashUpdateOrdered(h hash.Hash64, a, b uint64) uint64 { diff --git a/vendor/github.com/mitchellh/reflectwalk/go.mod b/vendor/github.com/mitchellh/reflectwalk/go.mod new file mode 100644 index 00000000000..52bb7c469e9 --- /dev/null +++ b/vendor/github.com/mitchellh/reflectwalk/go.mod @@ -0,0 +1 @@ +module github.com/mitchellh/reflectwalk diff --git a/vendor/vendor.json b/vendor/vendor.json index f47ca6f5661..26ab237324c 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -6,7 +6,9 @@ "checksumSHA1": "jQh1fnoKPKMURvKkpdRjN695nAQ=", "path": "github.com/agext/levenshtein", "revision": "5f10fee965225ac1eecdc234c09daf5cd9e7f7b6", - "revisionTime": "2017-02-17T06:30:20Z" + "revisionTime": "2017-02-17T06:30:20Z", + "version": "v1.2.1", + "versionExact": "v1.2.1" }, { "checksumSHA1": "LLVyR2dAgkihu0+HdZF+JK0gMMs=", @@ -21,1038 +23,1044 @@ "revisionTime": "2015-08-30T18:26:16Z" }, { - "checksumSHA1": "FIL83loX9V9APvGQIjJpbxq53F0=", + "checksumSHA1": "nRnZ35uyYct3TL95z7DPJ/lSUNg=", "path": "github.com/apparentlymart/go-cidr/cidr", - "revision": "7e4b007599d4e2076d9a81be723b3912852dda2c", - "revisionTime": "2017-04-18T07:21:50Z" + "revision": "b1115bf8e14a60131a196f908223e4506b0ddc35", + "revisionTime": "2018-08-15T15:04:34Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "Ffhtm8iHH7l2ynVVOIGJE3eiuLA=", "path": "github.com/apparentlymart/go-textseg/textseg", - "revision": "b836f5c4d331d1945a2fead7188db25432d73b69", - "revisionTime": "2017-05-31T20:39:52Z" + "revision": "fb01f485ebef760e5ee06d55e1b07534dda2d295", + "revisionTime": "2018-08-15T02:43:44Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "GCTVJ1J/SGZstNZauuLAnTFOhGA=", + "checksumSHA1": "ZWu+JUivE3zS4FZvVktFAWhj3FQ=", "path": "github.com/armon/go-radix", - "revision": "1fca145dffbcaa8fe914309b1ec0cfc67500fe61", - "revisionTime": "2017-07-27T15:54:43Z" + "revision": "1a2de0c21c94309923825da3df33a4381872c795", + "revisionTime": "2018-08-24T02:57:28Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "HULJqYLUc6/Qx7ru4PrJwd+MuKQ=", + "checksumSHA1": "qO2na7vGPve58xAwBJziIc+BJb4=", "path": "github.com/aws/aws-sdk-go/aws", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "DtuTqKH29YnLjrIJkRYX0HQtXY0=", "path": "github.com/aws/aws-sdk-go/aws/arn", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Y9W+4GimK4Fuxq+vyIskVYFRnX4=", "path": "github.com/aws/aws-sdk-go/aws/awserr", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "yyYr41HZ1Aq0hWc3J5ijXwYEcac=", "path": "github.com/aws/aws-sdk-go/aws/awsutil", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "EwL79Cq6euk+EV/t/n2E+jzPNmU=", "path": "github.com/aws/aws-sdk-go/aws/client", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "uEJU4I6dTKaraQKvrljlYKUZwoc=", "path": "github.com/aws/aws-sdk-go/aws/client/metadata", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "vVSUnICaD9IaBQisCfw0n8zLwig=", "path": "github.com/aws/aws-sdk-go/aws/corehandlers", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "I87y3G8r14yKZQ5NlkupFUJ5jW0=", "path": "github.com/aws/aws-sdk-go/aws/credentials", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "JTilCBYWVAfhbKSnrxCNhE8IFns=", "path": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "NUJUTWlc1sV8b7WjfiYc4JZbXl0=", "path": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "JEYqmF83O5n5bHkupAzA6STm0no=", "path": "github.com/aws/aws-sdk-go/aws/credentials/stscreds", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "eI5TmiOTCFjEUNvWeceFycs9dRU=", "path": "github.com/aws/aws-sdk-go/aws/csm", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "6DRhqSAN7O45gYfRIpwDeuJE8j8=", "path": "github.com/aws/aws-sdk-go/aws/defaults", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "uPkjJo+J10vbEukYYXmf0w7Cn4Q=", "path": "github.com/aws/aws-sdk-go/aws/ec2metadata", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "r62WcUmf2YEqmAu1QwytNo8gn+g=", + "checksumSHA1": "gbuyBRQ+CdbJrzAx+nRNMbPvW7k=", "path": "github.com/aws/aws-sdk-go/aws/endpoints", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Ia/AZ2fZp7J4lMO6fpkvfLU/HGY=", "path": "github.com/aws/aws-sdk-go/aws/request", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "zx1mZCdOwgbjBV3jMfb0kyDd//Q=", "path": "github.com/aws/aws-sdk-go/aws/session", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Dj9WOMBPbboyUJV4GB99PwPcO4g=", "path": "github.com/aws/aws-sdk-go/aws/signer/v4", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "wjxQlU1PYxrDRFoL1Vek8Wch7jk=", "path": "github.com/aws/aws-sdk-go/internal/sdkio", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "MYLldFRnsZh21TfCkgkXCT3maPU=", "path": "github.com/aws/aws-sdk-go/internal/sdkrand", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "tQVg7Sz2zv+KkhbiXxPH0mh9spg=", "path": "github.com/aws/aws-sdk-go/internal/sdkuri", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "04ypv4x12l4q0TksA1zEVsmgpvw=", "path": "github.com/aws/aws-sdk-go/internal/shareddefaults", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "ZX5QHZb0PrK4UF45um2kaAEiX+8=", "path": "github.com/aws/aws-sdk-go/private/protocol", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "GQuRJY72iGQrufDqIaB50zG27u0=", "path": "github.com/aws/aws-sdk-go/private/protocol/ec2query", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "stsUCJVnZ5yMrmzSExbjbYp5tZ8=", "path": "github.com/aws/aws-sdk-go/private/protocol/eventstream", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "bOQjEfKXaTqe7dZhDDER/wZUzQc=", "path": "github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "CTsp/h3FbFg9QizH4bH1abLwljg=", "path": "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "R00RL5jJXRYq1iiK1+PGvMfvXyM=", "path": "github.com/aws/aws-sdk-go/private/protocol/jsonrpc", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "SBBVYdLcocjdPzMWgDuR8vcOfDQ=", "path": "github.com/aws/aws-sdk-go/private/protocol/query", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "+O6A945eTP9plLpkEMZB0lwBAcg=", "path": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "uRvmEPKcEdv7qc0Ep2zn0E3Xumc=", "path": "github.com/aws/aws-sdk-go/private/protocol/rest", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Rpu8KBtHZgvhkwHxUfaky+qW+G4=", "path": "github.com/aws/aws-sdk-go/private/protocol/restjson", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "ODo+ko8D6unAxZuN1jGzMcN4QCc=", "path": "github.com/aws/aws-sdk-go/private/protocol/restxml", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "soXVJWQ/xvEB72Mo6FresaQIxLg=", "path": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "F6mth+G7dXN1GI+nktaGo8Lx8aE=", "path": "github.com/aws/aws-sdk-go/private/signer/v2", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "4xFqSOZkwDKot6FJQQgKjhJFoQw=", "path": "github.com/aws/aws-sdk-go/service/acm", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "3e/4A/8NqTOSXEtJ6KhYAqqWnuY=", "path": "github.com/aws/aws-sdk-go/service/acmpca", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "FjnLIflNek7g0j5NKT3qFkNtdY8=", "path": "github.com/aws/aws-sdk-go/service/apigateway", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "K/ynSj/L2OzW+9Zqs2PRe8NzYUc=", "path": "github.com/aws/aws-sdk-go/service/applicationautoscaling", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "owhfVKeKxjXt4P5KO6PSIjnMLIA=", "path": "github.com/aws/aws-sdk-go/service/appsync", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "3JN52M5wxJMazxQWXB4epL78LNQ=", "path": "github.com/aws/aws-sdk-go/service/athena", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "P2+Mby00TG2KXcfhiVoNoqIT1Kc=", "path": "github.com/aws/aws-sdk-go/service/autoscaling", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "42OCpXRErVgOtgPsuTrdg7y++TA=", "path": "github.com/aws/aws-sdk-go/service/batch", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "kPYTVg109H4HL8CKEf1yQvwKMw4=", "path": "github.com/aws/aws-sdk-go/service/budgets", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "GhANcrglYWrhNSR/NzxNe3jClMk=", "path": "github.com/aws/aws-sdk-go/service/cloud9", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "HmZRIixQ6u+zMz2Qt0iTU42WVZU=", "path": "github.com/aws/aws-sdk-go/service/cloudformation", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "1nPdiFsBAEdm+vd7Kk4+8Lx55jw=", "path": "github.com/aws/aws-sdk-go/service/cloudfront", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "iFvc4+KfDeQHigAz2+TmogG1Y7M=", "path": "github.com/aws/aws-sdk-go/service/cloudhsmv2", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "1uyTJ/RTr7c8uL2Kbrp+60PE40M=", "path": "github.com/aws/aws-sdk-go/service/cloudsearch", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "3q2FBK4CEarGbVeLCuuX+g1E3jk=", "path": "github.com/aws/aws-sdk-go/service/cloudtrail", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "o+DFxugR5Cy/Wwlv7GSRRilTW4o=", "path": "github.com/aws/aws-sdk-go/service/cloudwatch", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "bbsROEsQ5BI5F2k8qiArbrpgH94=", "path": "github.com/aws/aws-sdk-go/service/cloudwatchevents", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "nGSD4idK9hW8o3U4gLGLESYCpwE=", "path": "github.com/aws/aws-sdk-go/service/cloudwatchlogs", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "SfdREjSJPmW+OjKCjwD8m07wT+w=", + "checksumSHA1": "D3p9zRPfvqPBDBVGCCVG2wgYh38=", "path": "github.com/aws/aws-sdk-go/service/codebuild", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "ysSU5yhqWT4+deQUYZiI8/1tJ2c=", "path": "github.com/aws/aws-sdk-go/service/codecommit", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "GvjVVg5btXuEFEHqyoe19BZogGw=", "path": "github.com/aws/aws-sdk-go/service/codedeploy", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "vklitYIK0AiOXA0obSTq0c04pc4=", "path": "github.com/aws/aws-sdk-go/service/codepipeline", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "rL0O6L1zSJ/UQE0kEWUoCOOFDog=", "path": "github.com/aws/aws-sdk-go/service/cognitoidentity", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "gkmRw2ZP/uU+V3b9v7CQM0CA0xs=", "path": "github.com/aws/aws-sdk-go/service/cognitoidentityprovider", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "o9WTZk66Jlu+0UdO1wmtO3qp8ps=", "path": "github.com/aws/aws-sdk-go/service/configservice", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "/y7nXSnR9OqMoxlIl1hFcCk5kT8=", "path": "github.com/aws/aws-sdk-go/service/databasemigrationservice", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "TWva9VAs3zgU/FQjJkiUvY3wIXw=", "path": "github.com/aws/aws-sdk-go/service/dax", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "LfJ0Owy9HyaulKTvDEgCdkChMG8=", "path": "github.com/aws/aws-sdk-go/service/devicefarm", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "PBdPTvba1Ci9LrAs0VExIAWtdKQ=", "path": "github.com/aws/aws-sdk-go/service/directconnect", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "a02+OXxnVBBBeaZpgs8dXUHj8b0=", "path": "github.com/aws/aws-sdk-go/service/directoryservice", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "xoFqND2spsYdyoui+wKepfGQS8c=", "path": "github.com/aws/aws-sdk-go/service/dlm", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "XRzDF1GFEnm7CWURxz8oirdEty4=", "path": "github.com/aws/aws-sdk-go/service/dynamodb", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "QutiSGcdlnEisOq+KNZ872PAl7I=", "path": "github.com/aws/aws-sdk-go/service/ec2", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "VD7bAh0n/UgOwRBPe5y38Ow/dHU=", "path": "github.com/aws/aws-sdk-go/service/ecr", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Q8RuvleYpFO1hlm/eKRbg5wG/nQ=", "path": "github.com/aws/aws-sdk-go/service/ecs", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "NDrEwIZeUSlHgENwBzVdy0KcCCY=", "path": "github.com/aws/aws-sdk-go/service/efs", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "5QdblYPoDtRsQ8aczXOesIKTDpc=", + "checksumSHA1": "dSndJIyIFwpciskUn2ZmUvIdR+c=", "path": "github.com/aws/aws-sdk-go/service/eks", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "kvsll2DfqS1hg97xSWMIcMan5as=", "path": "github.com/aws/aws-sdk-go/service/elasticache", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "G1BmSThB0eTjq8gSfjA+PnB9zs0=", "path": "github.com/aws/aws-sdk-go/service/elasticbeanstalk", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "O++z0DZj/MzSNWgVfV+SYzTS/fM=", "path": "github.com/aws/aws-sdk-go/service/elasticsearchservice", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "VFjWDQMsGpFMrNfcc//ABRpo6Ew=", "path": "github.com/aws/aws-sdk-go/service/elastictranscoder", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Gp+QZjtg8PCNVi9X8m2SqtFvMas=", "path": "github.com/aws/aws-sdk-go/service/elb", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "wIiqI9GFAV2AQ32o2kEYHNyqVig=", "path": "github.com/aws/aws-sdk-go/service/elbv2", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "oNOLs79R42Vsj/jYTYtrbyTWxcw=", "path": "github.com/aws/aws-sdk-go/service/emr", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "3hICqVOs1WmluYMZN9fTMbDQSyM=", "path": "github.com/aws/aws-sdk-go/service/firehose", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "tNVmAgvnURWLWibVCL7vIDYU7UM=", "path": "github.com/aws/aws-sdk-go/service/fms", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "J1SHh0J6kX8JBD0+TQCFP+1Kij4=", "path": "github.com/aws/aws-sdk-go/service/gamelift", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "BB3/VzUU5Rg4KgrezJ17D4kCnwA=", "path": "github.com/aws/aws-sdk-go/service/glacier", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "A1E5569KvbsmoB9/eA0YxBYmjMI=", "path": "github.com/aws/aws-sdk-go/service/glue", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "HNndTio5+fNOiLr23i+QZpPp8HU=", "path": "github.com/aws/aws-sdk-go/service/guardduty", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "ae+jhUirSvN0IXPVU7X7xc+EbFE=", "path": "github.com/aws/aws-sdk-go/service/iam", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "39yMWxFP9XB+8wWWCZX4vkNWmxU=", "path": "github.com/aws/aws-sdk-go/service/inspector", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "L4/CAGbD5ka9byuE1EC6EDGCIxc=", + "checksumSHA1": "G1GZpCmKREPPgzLOBrvXmiyhbnc=", "path": "github.com/aws/aws-sdk-go/service/iot", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "q9HZ/0/lBSRKtjHXMegmcRcazPo=", "path": "github.com/aws/aws-sdk-go/service/kinesis", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "nUdxsOW9jg+m+sWZYPu7oX9rZo8=", "path": "github.com/aws/aws-sdk-go/service/kinesisanalytics", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "vaMnUnRVDkpHp/e4f3dFX20JblM=", "path": "github.com/aws/aws-sdk-go/service/kms", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "K4OamITKC7PKo1eHrSl0z8Visg0=", "path": "github.com/aws/aws-sdk-go/service/lambda", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "nMklVJilxMmhlmnnquFJB97isMk=", "path": "github.com/aws/aws-sdk-go/service/lexmodelbuildingservice", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "tX/3xEkl13DuKNIO0v3qYseEIvI=", "path": "github.com/aws/aws-sdk-go/service/lightsail", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "+l6bA5aVzmBXH2Isj1xZkd5RKNY=", "path": "github.com/aws/aws-sdk-go/service/macie", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "WfsMSOC0DxRApVecptw2244Cc6w=", "path": "github.com/aws/aws-sdk-go/service/mediaconvert", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "PE3129yEUwSvn0rg3P86Pxqnnps=", "path": "github.com/aws/aws-sdk-go/service/medialive", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "CggySAQfK9WXsX37mRI8UqXGkJo=", + "checksumSHA1": "4YkW/odfpvJHVz5p2RCW3cWaHOQ=", "path": "github.com/aws/aws-sdk-go/service/mediapackage", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "9NU6dJOvKvcgnl/4eUdwy4YD5ss=", "path": "github.com/aws/aws-sdk-go/service/mediastore", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "qyIVtaN5mzPq4d7BDj9YpYtifKs=", "path": "github.com/aws/aws-sdk-go/service/mediastoredata", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "1jKxCBvS+zKzq6p2i4BqLXYHm48=", "path": "github.com/aws/aws-sdk-go/service/mq", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "E3i2/WM1kDE7WBOSRnDsZkwmZwI=", "path": "github.com/aws/aws-sdk-go/service/neptune", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "x3PsW91a7fh+Q466y3WM3fdtnGg=", "path": "github.com/aws/aws-sdk-go/service/opsworks", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "YCd2EU1DPiO0QTRZk6G1fLZAyg0=", "path": "github.com/aws/aws-sdk-go/service/organizations", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "e5v4Cc9/0H2ngQNuvVyj2Mt0vi0=", "path": "github.com/aws/aws-sdk-go/service/pinpoint", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "j1i1tZ94/kDvvzgpv5xqxwNvgyY=", "path": "github.com/aws/aws-sdk-go/service/pricing", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "EvlN1OFs7c7kQEIuvkwE/yTuv8o=", "path": "github.com/aws/aws-sdk-go/service/rds", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "N/wIyWWN2g8QcyCJQLTDoFxaoLk=", + "checksumSHA1": "1zThqt8de3tv6wOzT/8mKxqJ5kE=", "path": "github.com/aws/aws-sdk-go/service/redshift", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "KlM6azZ5G09MmPg+lzEizW2qaLA=", "path": "github.com/aws/aws-sdk-go/service/route53", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "DmKatmbYsvm+MoCP01PCdQ6Y6Tk=", "path": "github.com/aws/aws-sdk-go/service/s3", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "b6/blG8OZ6+RRIX6fuMSCeaqNsk=", + "checksumSHA1": "qB34t8+gQAYbx7kaxDIllgM9MpQ=", "path": "github.com/aws/aws-sdk-go/service/sagemaker", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "FkBALtXiN4PCzFnl/G2gXFFLV3E=", "path": "github.com/aws/aws-sdk-go/service/secretsmanager", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "Y29bmjwKXcPg0d0WvZNFGdhd4+E=", "path": "github.com/aws/aws-sdk-go/service/serverlessapplicationrepository", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "T8dOJ1jjEBdogUE03oRPRJCOY3k=", "path": "github.com/aws/aws-sdk-go/service/servicecatalog", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "UhJ0RdPXzdMOUEBWREB5Zi9lgmY=", "path": "github.com/aws/aws-sdk-go/service/servicediscovery", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "0vtFXRYnhlCCq8/zPv1O1YWIoSg=", "path": "github.com/aws/aws-sdk-go/service/ses", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "1rJbvLXRsCzWhTihruRq/i0Zawg=", "path": "github.com/aws/aws-sdk-go/service/sfn", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "hliWYTmov/HswyMpYq93zJtdkk0=", "path": "github.com/aws/aws-sdk-go/service/simpledb", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "bW9FW0Qe3VURaSoY305kA/wCFrM=", "path": "github.com/aws/aws-sdk-go/service/sns", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "ECIZck5xhocpUl8GeUAdeSnCgvg=", "path": "github.com/aws/aws-sdk-go/service/sqs", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "307CISQxMTTnatZ//6/p8obzeGs=", "path": "github.com/aws/aws-sdk-go/service/ssm", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "TeuakooizAybzyMQyTXllUyhfBg=", "path": "github.com/aws/aws-sdk-go/service/storagegateway", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "UhIVLDgQc19wjrPj8pP7Fu2UwWc=", "path": "github.com/aws/aws-sdk-go/service/sts", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "zSqEhiGtEK6ll3f1Rlf2tuDKQA8=", "path": "github.com/aws/aws-sdk-go/service/swf", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "H8Pa7irZ9gpuYGJk3uMK59gxGTs=", + "checksumSHA1": "N/w20GqQBU7sVFbshxOA3AWAvDU=", "path": "github.com/aws/aws-sdk-go/service/waf", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { - "checksumSHA1": "uRMuwxPD/AlpvFpKppgAYzvlC0A=", + "checksumSHA1": "ocF/2t8BOrkUpc62h6kHH0WtfTg=", "path": "github.com/aws/aws-sdk-go/service/wafregional", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "oe8l2ibuhzz7fWM3f64cWnHwFy8=", "path": "github.com/aws/aws-sdk-go/service/workspaces", - "revision": "4324bc9d8865bdb3e6aa86ec7772ca1272d2750e", - "revisionTime": "2018-08-25T00:53:30Z", - "version": "v1.15.21", - "versionExact": "v1.15.21" + "revision": "04abd557eeaab3cfdded45467eea00fc03db9cb9", + "revisionTime": "2018-08-31T22:30:03Z", + "version": "v1.15.26", + "versionExact": "v1.15.26" }, { "checksumSHA1": "yBBHqv7DvZNsZdF00SO8PbEQAKU=", @@ -1072,7 +1080,9 @@ "checksumSHA1": "oTmBS67uxM6OXB/+OJUAG9LK4jw=", "path": "github.com/bgentry/speakeasy", "revision": "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd", - "revisionTime": "2017-04-17T20:07:03Z" + "revisionTime": "2017-04-17T20:07:03Z", + "version": "v0.1.0", + "versionExact": "v0.1.0" }, { "checksumSHA1": "OT4XN9z5k69e2RsMSpwW74B+yk4=", @@ -1135,15 +1145,20 @@ "revisionTime": "2018-05-18T05:39:59Z" }, { - "checksumSHA1": "cdOCt0Yb+hdErz8NAQqayxPmRsY=", + "checksumSHA1": "ByRdQMv2yl16W6Tp9gUW1nNmpuI=", "path": "github.com/hashicorp/errwrap", - "revision": "7554cd9344cec97297fa6649b055a8c98c2a1e55" + "revision": "8a6fb523712970c966eefc6b39ed2c5e74880354", + "revisionTime": "2018-08-24T00:39:10Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "b8F628srIitj5p7Y130xc9k0QWs=", + "checksumSHA1": "Ihile6rE76J6SivxECovHgMROxw=", "path": "github.com/hashicorp/go-cleanhttp", - "revision": "3573b8b52aa7b37b9358d966a898feb387f62437", - "revisionTime": "2017-02-11T01:34:15Z" + "revision": "e8ab9daed8d1ddd2d3c4efba338fe2eeae2e4f18", + "revisionTime": "2018-08-30T03:37:06Z", + "version": "v0.5.0", + "versionExact": "v0.5.0" }, { "checksumSHA1": "fvjFEz5PBN1m9ALWf9UuLgTFWLg=", @@ -1164,10 +1179,12 @@ "revisionTime": "2017-10-05T15:17:51Z" }, { - "checksumSHA1": "K395EgrkkWtEFyuAv3WvPF95WN8=", + "checksumSHA1": "cFcwn0Zxefithm9Q9DioRNcGbqg=", "path": "github.com/hashicorp/go-multierror", - "revision": "3d5d8f294aa03d8e98859feac328afbdf1ae0703", - "revisionTime": "2018-07-17T15:01:48Z" + "revision": "886a7fbe3eb1c874d46f623bfa70af45f425b3d1", + "revisionTime": "2018-08-24T00:40:42Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "R6me0jVmcT/OPo80Fe0qo5fRwHc=", @@ -1176,15 +1193,20 @@ "revisionTime": "2017-08-16T15:18:19Z" }, { - "checksumSHA1": "CduvzBFfTv77nhjtXPGdIjQQLMI=", + "checksumSHA1": "0daDqRBckum49dBVYduwjaoObgU=", "path": "github.com/hashicorp/go-safetemp", - "revision": "b1a1dbde6fdc11e3ae79efd9039009e22d4ae240", - "revisionTime": "2018-03-26T21:11:50Z" + "revision": "c9a55de4fe06c920a71964b53cfe3dd293a3c743", + "revisionTime": "2018-08-28T16:41:30Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "85XUnluYJL7F55ptcwdmN8eSOsk=", + "checksumSHA1": "Kjansj6ZDJrWKNS1BJpg+z7OBnI=", "path": "github.com/hashicorp/go-uuid", - "revision": "36289988d83ca270bc07c234c36f364b0dd9c9a7" + "revision": "de160f5c59f693fed329e73e291bb751fe4ea4dc", + "revisionTime": "2018-08-30T03:27:00Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "r0pj5dMHCghpaQZ3f1BRGoKiSWw=", @@ -1309,10 +1331,12 @@ "revisionTime": "2017-05-12T21:33:05Z" }, { - "checksumSHA1": "vt+P9D2yWDO3gdvdgCzwqunlhxU=", + "checksumSHA1": "v8LPIrksMLyWuVyNVJul0BbQONM=", "path": "github.com/hashicorp/logutils", - "revision": "0dc08b1671f34c4250ce212759ebd880f743d883", - "revisionTime": "2015-06-09T07:04:31Z" + "revision": "a335183dfd075f638afcc820c90591ca3c97eba6", + "revisionTime": "2018-08-28T16:12:49Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "MpMvoeVDNxeoOQTI+hUxt+0bHdY=", @@ -1601,10 +1625,12 @@ "revisionTime": "2016-07-20T23:31:40Z" }, { - "checksumSHA1": "77PKgZO4nQy8w8CKOQAc9/vrAmo=", + "checksumSHA1": "x+4RAiAczFwq+qsWJUEb9oRpgjM=", "path": "github.com/jen20/awspolicyequivalence", - "revision": "9fbcaca9f9f868b9560463d0790aae33b2322945", - "revisionTime": "2018-03-16T12:05:52Z" + "revision": "9ebbf3c225b2b9da629263e13c3015a5de7965d1", + "revisionTime": "2018-08-29T22:45:56Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "0ZrwvB6KoGPj2PoDNSEJwxQ6Mog=", @@ -1668,10 +1694,12 @@ "revisionTime": "2016-10-04T15:35:44Z" }, { - "checksumSHA1": "trzmsZQDCc13zk/6qANox7Z/KCg=", + "checksumSHA1": "AZO2VGorXTMDiSVUih3k73vORHY=", "path": "github.com/mattn/go-isatty", - "revision": "fc9e8d8ef48496124e79ae0df75490096eccf6fe", - "revisionTime": "2017-03-22T23:44:13Z" + "revision": "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c", + "revisionTime": "2017-11-07T05:05:31Z", + "version": "v0.0.4", + "versionExact": "v0.0.4" }, { "checksumSHA1": "jXakiCRizt6jtyeGh+DeuA76Bh0=", @@ -1680,16 +1708,20 @@ "revisionTime": "2017-08-03T04:29:10Z" }, { - "checksumSHA1": "+p4JY4wmFQAppCdlrJ8Kxybmht8=", + "checksumSHA1": "gpgfDOKGUOP/h+j1cM7T36NZFTQ=", "path": "github.com/mitchellh/copystructure", - "revision": "d23ffcb85de31694d6ccaa23ccb4a03e55c1303f", - "revisionTime": "2017-05-25T01:39:02Z" + "revision": "9a1b6f44e8da0e0e374624fb0a825a231b00c537", + "revisionTime": "2018-08-24T00:35:38Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "Li0PaRmaVBdibS/zs8myzc07L6o=", + "checksumSHA1": "a58zUNtDH/gEd6F6KI3FqT2iEo0=", "path": "github.com/mitchellh/go-homedir", - "revision": "58046073cbffe2f25d425fe1331102f55cf719de", - "revisionTime": "2018-08-01T23:32:06Z" + "revision": "ae18d6b8b3205b561c79e8e5f69bff09736185f4", + "revisionTime": "2018-08-24T00:42:36Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "bDdhmDk8q6utWrccBhEOa6IoGkE=", @@ -1698,15 +1730,20 @@ "revisionTime": "2017-10-04T22:19:16Z" }, { - "checksumSHA1": "L3leymg2RT8hFl5uL+5KP/LpBkg=", + "checksumSHA1": "2gW/SeTAbHsmAdoDes4DksvqTj4=", "path": "github.com/mitchellh/go-wordwrap", - "revision": "ad45545899c7b13c020ea92b2072220eefad42b8", - "revisionTime": "2015-03-14T17:03:34Z" + "revision": "9e67c67572bc5dd02aef930e2b0ae3c02a4b5a5c", + "revisionTime": "2018-08-28T14:53:44Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { - "checksumSHA1": "xyoJKalfQwTUN1qzZGQKWYAwl0A=", + "checksumSHA1": "gOIe6F97Mcq/PwZjG38FkxervzE=", "path": "github.com/mitchellh/hashstructure", - "revision": "6b17d669fac5e2f71c16658d781ec3fdd3802b69" + "revision": "a38c50148365edc8df43c1580c48fb2b3a1e9cd7", + "revisionTime": "2018-08-28T14:53:49Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "MlX15lJuV8DYARX5RJY8rqrSEWQ=", @@ -1715,10 +1752,12 @@ "revisionTime": "2017-03-07T20:11:23Z" }, { - "checksumSHA1": "AMU63CNOg4XmIhVR/S/Xttt1/f0=", + "checksumSHA1": "nxuST3bjBv5uDVPzrX9wdruOwv0=", "path": "github.com/mitchellh/reflectwalk", - "revision": "63d60e9d0dbc60cf9164e6510889b0db6683d98c", - "revisionTime": "2017-07-26T20:21:17Z" + "revision": "eecee6c969c02c8cc2ae48e1e269843ae8590796", + "revisionTime": "2018-08-24T00:34:11Z", + "version": "v1.0.0", + "versionExact": "v1.0.0" }, { "checksumSHA1": "6OEUkwOM0qgI6YxR+BDEn6YMvpU=", @@ -1764,25 +1803,33 @@ "checksumSHA1": "qgMa75aMGbkFY0jIqqqgVnCUoNA=", "path": "github.com/ulikunitz/xz", "revision": "0c6b41e72360850ca4f98dc341fd999726ea007f", - "revisionTime": "2017-06-05T21:53:11Z" + "revisionTime": "2017-06-05T21:53:11Z", + "version": "v0.5.4", + "versionExact": "v0.5.4" }, { "checksumSHA1": "vjnTkzNrMs5Xj6so/fq0mQ6dT1c=", "path": "github.com/ulikunitz/xz/internal/hash", "revision": "0c6b41e72360850ca4f98dc341fd999726ea007f", - "revisionTime": "2017-06-05T21:53:11Z" + "revisionTime": "2017-06-05T21:53:11Z", + "version": "v0.5.4", + "versionExact": "v0.5.4" }, { "checksumSHA1": "m0pm57ASBK/CTdmC0ppRHO17mBs=", "path": "github.com/ulikunitz/xz/internal/xlog", "revision": "0c6b41e72360850ca4f98dc341fd999726ea007f", - "revisionTime": "2017-06-05T21:53:11Z" + "revisionTime": "2017-06-05T21:53:11Z", + "version": "v0.5.4", + "versionExact": "v0.5.4" }, { "checksumSHA1": "2vZw6zc8xuNlyVz2QKvdlNSZQ1U=", "path": "github.com/ulikunitz/xz/lzma", "revision": "0c6b41e72360850ca4f98dc341fd999726ea007f", - "revisionTime": "2017-06-05T21:53:11Z" + "revisionTime": "2017-06-05T21:53:11Z", + "version": "v0.5.4", + "versionExact": "v0.5.4" }, { "checksumSHA1": "TudZOVOvOvR5zw7EFbvD3eZpmLI=", @@ -2136,4 +2183,4 @@ } ], "rootPath": "github.com/terraform-providers/terraform-provider-aws" -} \ No newline at end of file +} diff --git a/website/aws.erb b/website/aws.erb index c5710e4ddc8..30f400d20b9 100644 --- a/website/aws.erb +++ b/website/aws.erb @@ -10,17 +10,6 @@ AWS Provider - > - Upcoming Community Events - - - > Guides