Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

private/mode/api: Codegen error code const values are incorrectly trimmed. #1856

Closed
radeksimko opened this issue Mar 22, 2018 · 1 comment
Closed
Labels
bug This issue is a bug.

Comments

@radeksimko
Copy link
Contributor

Version of AWS SDK for Go?

Latest (9ec5619)

Version of Go (go version)?

go version go1.10 darwin/amd64

What issue did you see?

As documented in https://docs.aws.amazon.com/waf/latest/APIReference/API_GetRuleGroup.html https://docs.aws.amazon.com/waf/latest/APIReference/API_UpdateRule.html and elsewhere there is number of error codes generated incorrectly from JSON blueprints:

"WAFDisallowedNameException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFInternalErrorException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true,
"fault":true
},
"WAFInvalidAccountException":{
"type":"structure",
"members":{
},
"exception":true
},
"WAFInvalidOperationException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFInvalidParameterException":{
"type":"structure",
"members":{
"field":{"shape":"ParameterExceptionField"},
"parameter":{"shape":"ParameterExceptionParameter"},
"reason":{"shape":"ParameterExceptionReason"}
},
"exception":true
},
"WAFInvalidPermissionPolicyException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFInvalidRegexPatternException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFLimitsExceededException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFNonEmptyEntityException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFNonexistentContainerException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFNonexistentItemException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFReferencedItemException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFStaleDataException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},
"WAFSubscriptionNotFoundException":{
"type":"structure",
"members":{
"message":{"shape":"errorMessage"}
},
"exception":true
},

const (
// ErrCodeDisallowedNameException for service response error code
// "DisallowedNameException".
//
// The name specified is invalid.
ErrCodeDisallowedNameException = "DisallowedNameException"
// ErrCodeInternalErrorException for service response error code
// "InternalErrorException".
//
// The operation failed because of a system problem, even though the request
// was valid. Retry your request.
ErrCodeInternalErrorException = "InternalErrorException"
// ErrCodeInvalidAccountException for service response error code
// "InvalidAccountException".
//
// The operation failed because you tried to create, update, or delete an object
// by using an invalid account identifier.
ErrCodeInvalidAccountException = "InvalidAccountException"
// ErrCodeInvalidOperationException for service response error code
// "InvalidOperationException".
//
// 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 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 = "InvalidOperationException"
// ErrCodeInvalidParameterException for service response error code
// "InvalidParameterException".
//
// 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.
ErrCodeInvalidParameterException = "InvalidParameterException"
// ErrCodeInvalidPermissionPolicyException for service response error code
// "InvalidPermissionPolicyException".
//
// The operation failed because the specified policy is not in the proper format.
//
// The policy is subject to the following restrictions:
//
// * You can attach only one policy with each PutPermissionPolicy request.
//
// * The policy must include an Effect, Action and Principal.
//
// * 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 policy cannot include a Resource parameter.
//
// * The ARN in the request must be a valid WAF RuleGroup ARN and the RuleGroup
// must exist in the same region.
//
// * The user making the request must be the owner of the RuleGroup.
//
// * Your policy must be composed using IAM Policy version 2012-10-17.
ErrCodeInvalidPermissionPolicyException = "InvalidPermissionPolicyException"
// ErrCodeInvalidRegexPatternException for service response error code
// "InvalidRegexPatternException".
//
// The regular expression (regex) you specified in RegexPatternString is invalid.
ErrCodeInvalidRegexPatternException = "InvalidRegexPatternException"
// ErrCodeLimitsExceededException for service response error code
// "LimitsExceededException".
//
// The operation exceeds a resource limit, for example, the maximum number of
// WebACL objects that you can create for an AWS account. For more information,
// see Limits (http://docs.aws.amazon.com/waf/latest/developerguide/limits.html)
// in the AWS WAF Developer Guide.
ErrCodeLimitsExceededException = "LimitsExceededException"
// ErrCodeNonEmptyEntityException for service response error code
// "NonEmptyEntityException".
//
// The operation failed because you tried to delete an object that isn't empty.
// For example:
//
// * You tried to delete a WebACL that still contains one or more Rule objects.
//
// * You tried to delete a Rule that still contains one or more ByteMatchSet
// objects or other predicates.
//
// * You tried to delete a ByteMatchSet that contains one or more ByteMatchTuple
// objects.
//
// * You tried to delete an IPSet that references one or more IP addresses.
ErrCodeNonEmptyEntityException = "NonEmptyEntityException"
// ErrCodeNonexistentContainerException for service response error code
// "NonexistentContainerException".
//
// The operation failed because you tried to add an object to or delete an object
// from another object that doesn't exist. For example:
//
// * You tried to add a Rule to or delete a Rule from a WebACL that doesn't
// exist.
//
// * You tried to add a ByteMatchSet to or delete a ByteMatchSet from a Rule
// that doesn't exist.
//
// * You tried to add an IP address to or delete an IP address from an IPSet
// that doesn't exist.
//
// * You tried to add a ByteMatchTuple to or delete a ByteMatchTuple from
// a ByteMatchSet that doesn't exist.
ErrCodeNonexistentContainerException = "NonexistentContainerException"
// ErrCodeNonexistentItemException for service response error code
// "NonexistentItemException".
//
// The operation failed because the referenced object doesn't exist.
ErrCodeNonexistentItemException = "NonexistentItemException"
// ErrCodeReferencedItemException for service response error code
// "ReferencedItemException".
//
// The operation failed because you tried to delete an object that is still
// in use. For example:
//
// * You tried to delete a ByteMatchSet that is still referenced by a Rule.
//
// * You tried to delete a Rule that is still referenced by a WebACL.
ErrCodeReferencedItemException = "ReferencedItemException"
// ErrCodeStaleDataException for service response error code
// "StaleDataException".
//
// The operation failed because you tried to create, update, or delete an object
// by using a change token that has already been used.
ErrCodeStaleDataException = "StaleDataException"
// ErrCodeSubscriptionNotFoundException for service response error code
// "SubscriptionNotFoundException".
//
// The specified subscription does not exist.
ErrCodeSubscriptionNotFoundException = "SubscriptionNotFoundException"

All error codes seem to be missing WAF prefix.

Users are currently forced to import wafregional package which generates those error codes correctly or hard-code strings instead.

@jasdel
Copy link
Contributor

jasdel commented Mar 22, 2018

Thanks for creating the issue for this bug @radeksimko. It looks like the SDK's model parser and code generation is stripping off the WAF from the error name due to the SDK's removal of stuttering prefixes. e.g waf package with waf type prefix.

We should investigate if the SDK can change its code generation logic to correctly render the string value of the error code with the WAF prefix without a breaking change to the const variable name.

There is a decent chance this error is impacting other service code gen cases as well.

@jasdel jasdel added the bug This issue is a bug. label Mar 22, 2018
@jasdel jasdel changed the title Incorrect error codes generated in service/waf private/mode/api: Codegen error code const values are incorrectly trimmed. Mar 22, 2018
jasdel added a commit to jasdel/aws-sdk-go that referenced this issue May 30, 2018
Fixes the SDK's code generation to not modify the error code text value
when generating error code constants. This prevents generating error
code values which are invalid and will never be sent by the service.

e.g.

ErrCodeInternalErrorException = "InternalErrorException"

Should have the value of:

ErrCodeInternalErrorException = "WAFInternalErrorException"

Fix aws#1856
jasdel added a commit that referenced this issue May 31, 2018
…y. (#1958)

Fixes the SDK's code generation to not modify the error code text value
when generating error code constants. This prevents generating error
code values which are invalid and will never be sent by the service.

e.g.

ErrCodeInternalErrorException = "InternalErrorException"

Should have the value of:

ErrCodeInternalErrorException = "WAFInternalErrorException"

Fix #1856
@awstools awstools mentioned this issue Jun 1, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This issue is a bug.
Projects
None yet
Development

No branches or pull requests

2 participants