diff --git a/CHANGELOG.md b/CHANGELOG.md index c55cc490f7..87e9ea505c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +Release v1.44.145 (2022-11-23) +=== + +### Service Client Updates +* `service/grafana`: Updates service API and documentation +* `service/rbin`: Updates service API and documentation + Release v1.44.144 (2022-11-22) === diff --git a/aws/version.go b/aws/version.go index a015fdb058..2608904171 100644 --- a/aws/version.go +++ b/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.44.144" +const SDKVersion = "1.44.145" diff --git a/models/apis/grafana/2020-08-18/api-2.json b/models/apis/grafana/2020-08-18/api-2.json index 66a41abb4d..6019a34eb5 100644 --- a/models/apis/grafana/2020-08-18/api-2.json +++ b/models/apis/grafana/2020-08-18/api-2.json @@ -138,6 +138,22 @@ {"shape":"InternalServerException"} ] }, + "DescribeWorkspaceConfiguration":{ + "name":"DescribeWorkspaceConfiguration", + "http":{ + "method":"GET", + "requestUri":"/workspaces/{workspaceId}/configuration", + "responseCode":200 + }, + "input":{"shape":"DescribeWorkspaceConfigurationRequest"}, + "output":{"shape":"DescribeWorkspaceConfigurationResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ] + }, "DisassociateLicense":{ "name":"DisassociateLicense", "http":{ @@ -291,6 +307,24 @@ {"shape":"AccessDeniedException"}, {"shape":"InternalServerException"} ] + }, + "UpdateWorkspaceConfiguration":{ + "name":"UpdateWorkspaceConfiguration", + "http":{ + "method":"PUT", + "requestUri":"/workspaces/{workspaceId}/configuration", + "responseCode":202 + }, + "input":{"shape":"UpdateWorkspaceConfigurationRequest"}, + "output":{"shape":"UpdateWorkspaceConfigurationResponse"}, + "errors":[ + {"shape":"ResourceNotFoundException"}, + {"shape":"ThrottlingException"}, + {"shape":"ConflictException"}, + {"shape":"ValidationException"}, + {"shape":"AccessDeniedException"}, + {"shape":"InternalServerException"} + ] } }, "shapes":{ @@ -485,10 +519,15 @@ "shape":"ClientToken", "idempotencyToken":true }, + "configuration":{ + "shape":"OverridableConfigurationJson", + "jsonvalue":true + }, "organizationRoleName":{"shape":"OrganizationRoleName"}, "permissionType":{"shape":"PermissionType"}, "stackSetName":{"shape":"StackSetName"}, "tags":{"shape":"TagMap"}, + "vpcConfiguration":{"shape":"VpcConfiguration"}, "workspaceDataSources":{"shape":"DataSourceTypesList"}, "workspaceDescription":{"shape":"Description"}, "workspaceName":{"shape":"WorkspaceName"}, @@ -514,7 +553,8 @@ "TIMESTREAM", "SITEWISE", "ATHENA", - "REDSHIFT" + "REDSHIFT", + "TWINMAKER" ] }, "DataSourceTypesList":{ @@ -587,6 +627,27 @@ "authentication":{"shape":"AuthenticationDescription"} } }, + "DescribeWorkspaceConfigurationRequest":{ + "type":"structure", + "required":["workspaceId"], + "members":{ + "workspaceId":{ + "shape":"WorkspaceId", + "location":"uri", + "locationName":"workspaceId" + } + } + }, + "DescribeWorkspaceConfigurationResponse":{ + "type":"structure", + "required":["configuration"], + "members":{ + "configuration":{ + "shape":"OverridableConfigurationJson", + "jsonvalue":true + } + } + }, "DescribeWorkspaceRequest":{ "type":"structure", "required":["workspaceId"], @@ -810,6 +871,11 @@ "member":{"shape":"OrganizationalUnit"}, "sensitive":true }, + "OverridableConfigurationJson":{ + "type":"string", + "max":65536, + "min":2 + }, "PaginationToken":{"type":"string"}, "PermissionEntry":{ "type":"structure", @@ -902,6 +968,17 @@ "NOT_CONFIGURED" ] }, + "SecurityGroupId":{ + "type":"string", + "max":255, + "min":0 + }, + "SecurityGroupIds":{ + "type":"list", + "member":{"shape":"SecurityGroupId"}, + "max":100, + "min":1 + }, "ServiceQuotaExceededException":{ "type":"structure", "required":[ @@ -931,6 +1008,17 @@ }, "StackSetName":{"type":"string"}, "String":{"type":"string"}, + "SubnetId":{ + "type":"string", + "max":255, + "min":0 + }, + "SubnetIds":{ + "type":"list", + "member":{"shape":"SubnetId"}, + "max":100, + "min":1 + }, "TagKey":{ "type":"string", "max":128, @@ -1111,6 +1199,29 @@ "authentication":{"shape":"AuthenticationDescription"} } }, + "UpdateWorkspaceConfigurationRequest":{ + "type":"structure", + "required":[ + "configuration", + "workspaceId" + ], + "members":{ + "configuration":{ + "shape":"OverridableConfigurationJson", + "jsonvalue":true + }, + "workspaceId":{ + "shape":"WorkspaceId", + "location":"uri", + "locationName":"workspaceId" + } + } + }, + "UpdateWorkspaceConfigurationResponse":{ + "type":"structure", + "members":{ + } + }, "UpdateWorkspaceRequest":{ "type":"structure", "required":["workspaceId"], @@ -1118,7 +1229,9 @@ "accountAccessType":{"shape":"AccountAccessType"}, "organizationRoleName":{"shape":"OrganizationRoleName"}, "permissionType":{"shape":"PermissionType"}, + "removeVpcConfiguration":{"shape":"Boolean"}, "stackSetName":{"shape":"StackSetName"}, + "vpcConfiguration":{"shape":"VpcConfiguration"}, "workspaceDataSources":{"shape":"DataSourceTypesList"}, "workspaceDescription":{"shape":"Description"}, "workspaceId":{ @@ -1202,6 +1315,17 @@ "OTHER" ] }, + "VpcConfiguration":{ + "type":"structure", + "required":[ + "securityGroupIds", + "subnetIds" + ], + "members":{ + "securityGroupIds":{"shape":"SecurityGroupIds"}, + "subnetIds":{"shape":"SubnetIds"} + } + }, "WorkspaceDescription":{ "type":"structure", "required":[ @@ -1236,6 +1360,7 @@ "stackSetName":{"shape":"StackSetName"}, "status":{"shape":"WorkspaceStatus"}, "tags":{"shape":"TagMap"}, + "vpcConfiguration":{"shape":"VpcConfiguration"}, "workspaceRoleArn":{"shape":"IamRoleArn"} } }, diff --git a/models/apis/grafana/2020-08-18/docs-2.json b/models/apis/grafana/2020-08-18/docs-2.json index c34344ec37..0562f13d1c 100644 --- a/models/apis/grafana/2020-08-18/docs-2.json +++ b/models/apis/grafana/2020-08-18/docs-2.json @@ -4,11 +4,12 @@ "operations": { "AssociateLicense": "

Assigns a Grafana Enterprise license to a workspace. Upgrading to Grafana Enterprise incurs additional fees. For more information, see Upgrade a workspace to Grafana Enterprise.

", "CreateWorkspace": "

Creates a workspace. In a workspace, you can create Grafana dashboards and visualizations to analyze your metrics, logs, and traces. You don't have to build, package, or deploy any hardware to run the Grafana server.

Don't use CreateWorkspace to modify an existing workspace. Instead, use UpdateWorkspace.

", - "CreateWorkspaceApiKey": "

Creates an API key for the workspace. This key can be used to authenticate requests sent to the workspace's HTTP API. See https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html for available APIs and example requests.

", + "CreateWorkspaceApiKey": "

Creates a Grafana API key for the workspace. This key can be used to authenticate requests sent to the workspace's HTTP API. See https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html for available APIs and example requests.

", "DeleteWorkspace": "

Deletes an Amazon Managed Grafana workspace.

", - "DeleteWorkspaceApiKey": "

Deletes an API key for a workspace.

", + "DeleteWorkspaceApiKey": "

Deletes a Grafana API key for the workspace.

", "DescribeWorkspace": "

Displays information about one Amazon Managed Grafana workspace.

", "DescribeWorkspaceAuthentication": "

Displays information about the authentication methods used in one Amazon Managed Grafana workspace.

", + "DescribeWorkspaceConfiguration": "

Gets the current configuration string for the given workspace.

", "DisassociateLicense": "

Removes the Grafana Enterprise license from a workspace.

", "ListPermissions": "

Lists the users and groups who have the Grafana Admin and Editor roles in this workspace. If you use this operation without specifying userId or groupId, the operation returns the roles of all users and groups. If you specify a userId or a groupId, only the roles for that user or group are returned. If you do this, you can specify only one userId or one groupId.

", "ListTagsForResource": "

The ListTagsForResource operation returns the tags that are associated with the Amazon Managed Service for Grafana resource specified by the resourceArn. Currently, the only resource that can be tagged is a workspace.

", @@ -16,8 +17,9 @@ "TagResource": "

The TagResource operation associates tags with an Amazon Managed Grafana resource. Currently, the only resource that can be tagged is workspaces.

If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag.

", "UntagResource": "

The UntagResource operation removes the association of the tag with the Amazon Managed Grafana resource.

", "UpdatePermissions": "

Updates which users in a workspace have the Grafana Admin or Editor roles.

", - "UpdateWorkspace": "

Modifies an existing Amazon Managed Grafana workspace. If you use this operation and omit any optional parameters, the existing values of those parameters are not changed.

To modify the user authentication methods that the workspace uses, such as SAML or Amazon Web Services SSO, use UpdateWorkspaceAuthentication.

To modify which users in the workspace have the Admin and Editor Grafana roles, use UpdatePermissions.

", - "UpdateWorkspaceAuthentication": "

Use this operation to define the identity provider (IdP) that this workspace authenticates users from, using SAML. You can also map SAML assertion attributes to workspace user information and define which groups in the assertion attribute are to have the Admin and Editor roles in the workspace.

" + "UpdateWorkspace": "

Modifies an existing Amazon Managed Grafana workspace. If you use this operation and omit any optional parameters, the existing values of those parameters are not changed.

To modify the user authentication methods that the workspace uses, such as SAML or IAM Identity Center, use UpdateWorkspaceAuthentication.

To modify which users in the workspace have the Admin and Editor Grafana roles, use UpdatePermissions.

", + "UpdateWorkspaceAuthentication": "

Use this operation to define the identity provider (IdP) that this workspace authenticates users from, using SAML. You can also map SAML assertion attributes to workspace user information and define which groups in the assertion attribute are to have the Admin and Editor roles in the workspace.

", + "UpdateWorkspaceConfiguration": "

Updates the configuration string for the given workspace

" }, "shapes": { "AccessDeniedException": { @@ -48,16 +50,16 @@ "ApiKeyName": { "base": null, "refs": { - "CreateWorkspaceApiKeyRequest$keyName": "

Specifies the name of the key to create. Key names must be unique to the workspace.

", + "CreateWorkspaceApiKeyRequest$keyName": "

Specifies the name of the key. Keynames must be unique to the workspace.

", "CreateWorkspaceApiKeyResponse$keyName": "

The name of the key that was created.

", "DeleteWorkspaceApiKeyRequest$keyName": "

The name of the API key to delete.

", - "DeleteWorkspaceApiKeyResponse$keyName": "

The name of the API key that was deleted.

" + "DeleteWorkspaceApiKeyResponse$keyName": "

The name of the key that was deleted.

" } }, "ApiKeyToken": { "base": null, "refs": { - "CreateWorkspaceApiKeyResponse$key": "

The key token that was created. Use this value as a bearer token to authenticate HTTP requests to the workspace.

" + "CreateWorkspaceApiKeyResponse$key": "

The key token. Use this value as a bearer token to authenticate HTTP requests to the workspace.

" } }, "AssertionAttribute": { @@ -103,28 +105,29 @@ "AuthenticationProviders": { "base": null, "refs": { - "AuthenticationDescription$providers": "

Specifies whether this workspace uses Amazon Web Services SSO, SAML, or both methods to authenticate users to use the Grafana console in the Amazon Managed Grafana workspace.

", - "AuthenticationSummary$providers": "

Specifies whether the workspace uses SAML, Amazon Web Services SSO, or both methods for user authentication.

", - "CreateWorkspaceRequest$authenticationProviders": "

Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single Sign On, or both to authenticate users for using the Grafana console within a workspace. For more information, see User authentication in Amazon Managed Grafana.

", - "UpdateWorkspaceAuthenticationRequest$authenticationProviders": "

Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single Sign On, or both to authenticate users for using the Grafana console within a workspace. For more information, see User authentication in Amazon Managed Grafana.

" + "AuthenticationDescription$providers": "

Specifies whether this workspace uses IAM Identity Center, SAML, or both methods to authenticate users to use the Grafana console in the Amazon Managed Grafana workspace.

", + "AuthenticationSummary$providers": "

Specifies whether the workspace uses SAML, IAM Identity Center, or both methods for user authentication.

", + "CreateWorkspaceRequest$authenticationProviders": "

Specifies whether this workspace uses SAML 2.0, IAM Identity Center (successor to Single Sign-On), or both to authenticate users for using the Grafana console within a workspace. For more information, see User authentication in Amazon Managed Grafana.

", + "UpdateWorkspaceAuthenticationRequest$authenticationProviders": "

Specifies whether this workspace uses SAML 2.0, IAM Identity Center (successor to Single Sign-On), or both to authenticate users for using the Grafana console within a workspace. For more information, see User authentication in Amazon Managed Grafana.

" } }, "AuthenticationSummary": { - "base": "

A structure that describes whether the workspace uses SAML, Amazon Web Services SSO, or both methods for user authentication, and whether that authentication is fully configured.

", + "base": "

A structure that describes whether the workspace uses SAML, IAM Identity Center, or both methods for user authentication, and whether that authentication is fully configured.

", "refs": { - "WorkspaceDescription$authentication": "

A structure that describes whether the workspace uses SAML, Amazon Web Services SSO, or both methods for user authentication.

", + "WorkspaceDescription$authentication": "

A structure that describes whether the workspace uses SAML, IAM Identity Center, or both methods for user authentication.

", "WorkspaceSummary$authentication": "

A structure containing information about the authentication methods used in the workspace.

" } }, "AwsSsoAuthentication": { - "base": "

A structure containing information about how this workspace works with Amazon Web Services SSO.

", + "base": "

A structure containing information about how this workspace works with IAM Identity Center.

", "refs": { - "AuthenticationDescription$awsSso": "

A structure containing information about how this workspace works with Amazon Web Services SSO.

" + "AuthenticationDescription$awsSso": "

A structure containing information about how this workspace works with IAM Identity Center.

" } }, "Boolean": { "base": null, "refs": { + "UpdateWorkspaceRequest$removeVpcConfiguration": "

Whether to remove the VPC configuration from the workspace.

Setting this to true and providing a vpcConfiguration to set will return an error.

", "WorkspaceDescription$freeTrialConsumed": "

Specifies whether this workspace has already fully used its free trial for Grafana Enterprise.

" } }, @@ -209,6 +212,16 @@ "refs": { } }, + "DescribeWorkspaceConfigurationRequest": { + "base": null, + "refs": { + } + }, + "DescribeWorkspaceConfigurationResponse": { + "base": null, + "refs": { + } + }, "DescribeWorkspaceRequest": { "base": null, "refs": { @@ -261,7 +274,7 @@ } }, "IdpMetadata": { - "base": "

A structure containing the identity provider (IdP) metadata used to integrate the identity provider with this workspace. You can specify the metadata either by providing a URL to its location in the url parameter, or by specifying the full metadata in XML format in the xml parameter.

", + "base": "

A structure containing the identity provider (IdP) metadata used to integrate the identity provider with this workspace. You can specify the metadata either by providing a URL to its location in the url parameter, or by specifying the full metadata in XML format in the xml parameter. Specifying both will cause an error.

", "refs": { "SamlConfiguration$idpMetadata": "

A structure containing the identity provider (IdP) metadata used to integrate the identity provider with this workspace.

" } @@ -269,7 +282,7 @@ "IdpMetadataUrl": { "base": null, "refs": { - "IdpMetadata$url": "

The URL of the location containing the metadata.

" + "IdpMetadata$url": "

The URL of the location containing the IdP metadata.

" } }, "Integer": { @@ -377,6 +390,14 @@ "WorkspaceDescription$organizationalUnits": "

Specifies the organizational units that this workspace is allowed to use data sources from, if this workspace is in an account that is part of an organization.

" } }, + "OverridableConfigurationJson": { + "base": null, + "refs": { + "CreateWorkspaceRequest$configuration": "

The configuration string for the workspace that you create. For more information about the format and configuration options available, see Working in your Grafana workspace.

", + "DescribeWorkspaceConfigurationResponse$configuration": "

The configuration string for the workspace that you requested. For more information about the format and configuration options available, see Working in your Grafana workspace.

", + "UpdateWorkspaceConfigurationRequest$configuration": "

The new configuration string for the workspace. For more information about the format and configuration options available, see Working in your Grafana workspace.

" + } + }, "PaginationToken": { "base": null, "refs": { @@ -387,7 +408,7 @@ } }, "PermissionEntry": { - "base": "

A structure containing the identity of one user or group and the Admin or Editor role that they have.

", + "base": "

A structure containing the identity of one user or group and the Admin, Editor, or Viewer role that they have.

", "refs": { "PermissionEntryList$member": null } @@ -401,7 +422,7 @@ "PermissionType": { "base": null, "refs": { - "CreateWorkspaceRequest$permissionType": "

If you specify SERVICE_MANAGED on AWS Grafana console, Amazon Managed Grafana automatically creates the IAM roles and provisions the permissions that the workspace needs to use Amazon Web Services data sources and notification channels. In CLI mode, the permissionType SERVICE_MANAGED will not create the IAM role for you.

If you specify CUSTOMER_MANAGED, you will manage those roles and permissions yourself. If you are creating this workspace in a member account of an organization that is not a delegated administrator account, and you want the workspace to access data sources in other Amazon Web Services accounts in the organization, you must choose CUSTOMER_MANAGED.

For more information, see Amazon Managed Grafana permissions and policies for Amazon Web Services data sources and notification channels.

", + "CreateWorkspaceRequest$permissionType": "

If you specify SERVICE_MANAGED on AWS Grafana console, Amazon Managed Grafana automatically creates the IAM roles and provisions the permissions that the workspace needs to use Amazon Web Services data sources and notification channels. In the CLI mode, the permissionType SERVICE_MANAGED will not create the IAM role for you. The ability for the Amazon Managed Grafana to create the IAM role on behalf of the user is supported only in the Amazon Managed Grafana AWS console. Use only the CUSTOMER_MANAGED permission type when creating a workspace in the CLI.

If you specify CUSTOMER_MANAGED, you will manage those roles and permissions yourself. If you are creating this workspace in a member account of an organization that is not a delegated administrator account, and you want the workspace to access data sources in other Amazon Web Services accounts in the organization, you must choose CUSTOMER_MANAGED.

For more information, see Amazon Managed Grafana permissions and policies for Amazon Web Services data sources and notification channels.

", "UpdateWorkspaceRequest$permissionType": "

If you specify Service Managed, Amazon Managed Grafana automatically creates the IAM roles and provisions the permissions that the workspace needs to use Amazon Web Services data sources and notification channels.

If you specify CUSTOMER_MANAGED, you will manage those roles and permissions yourself. If you are creating this workspace in a member account of an organization and that account is not a delegated administrator account, and you want the workspace to access data sources in other Amazon Web Services accounts in the organization, you must choose CUSTOMER_MANAGED.

For more information, see Amazon Managed Grafana permissions and policies for Amazon Web Services data sources and notification channels

", "WorkspaceDescription$permissionType": "

If this is Service Managed, Amazon Managed Grafana automatically creates the IAM roles and provisions the permissions that the workspace needs to use Amazon Web Services data sources and notification channels.

If this is CUSTOMER_MANAGED, you manage those roles and permissions yourself. If you are creating this workspace in a member account of an organization and that account is not a delegated administrator account, and you want the workspace to access data sources in other Amazon Web Services accounts in the organization, you must choose CUSTOMER_MANAGED.

For more information, see Amazon Managed Grafana permissions and policies for Amazon Web Services data sources and notification channels

" } @@ -414,7 +435,7 @@ "Role": { "base": null, "refs": { - "PermissionEntry$role": "

Specifies whether the user or group has the Admin or Editor role.

", + "PermissionEntry$role": "

Specifies whether the user or group has the Admin, Editor, or Viewer role.

", "UpdateInstruction$role": "

The role to add or revoke for the user or the group specified in users.

" } }, @@ -432,7 +453,7 @@ } }, "RoleValues": { - "base": "

This structure defines which groups defined in the SAML assertion attribute are to be mapped to the Grafana Admin and Editor roles in the workspace.

", + "base": "

This structure defines which groups defined in the SAML assertion attribute are to be mapped to the Grafana Admin and Editor roles in the workspace. SAML authenticated users not part of Admin or Editor role groups have Viewer permission over the workspace.

", "refs": { "SamlConfiguration$roleValues": "

A structure containing arrays that map group names in the SAML assertion to the Grafana Admin and Editor roles in the workspace.

" } @@ -440,7 +461,7 @@ "SSOClientId": { "base": null, "refs": { - "AwsSsoAuthentication$ssoClientId": "

The ID of the Amazon Web Services SSO-managed application that is created by Amazon Managed Grafana.

" + "AwsSsoAuthentication$ssoClientId": "

The ID of the IAM Identity Center-managed application that is created by Amazon Managed Grafana.

" } }, "SamlAuthentication": { @@ -463,6 +484,18 @@ "SamlAuthentication$status": "

Specifies whether the workspace's SAML configuration is complete.

" } }, + "SecurityGroupId": { + "base": null, + "refs": { + "SecurityGroupIds$member": null + } + }, + "SecurityGroupIds": { + "base": null, + "refs": { + "VpcConfiguration$securityGroupIds": "

The list of Amazon EC2 security group IDs attached to the Amazon VPC for your Grafana workspace to connect.

" + } + }, "ServiceQuotaExceededException": { "base": "

The request would cause a service quota to be exceeded.

", "refs": { @@ -491,8 +524,8 @@ "ConflictException$message": "

A description of the error.

", "ConflictException$resourceId": "

The ID of the resource that is associated with the error.

", "ConflictException$resourceType": "

The type of the resource that is associated with the error.

", - "CreateWorkspaceApiKeyRequest$keyRole": "

Specifies the permission level of the key.

Valid Values: VIEWER | EDITOR | ADMIN

", - "IdpMetadata$xml": "

The actual full metadata file, in XML format.

", + "CreateWorkspaceApiKeyRequest$keyRole": "

Specifies the permission level of the key.

Valid values: VIEWER|EDITOR|ADMIN

", + "IdpMetadata$xml": "

The full IdP metadata, in XML format.

", "InternalServerException$message": "

A description of the error.

", "ListTagsForResourceRequest$resourceArn": "

The ARN of the resource the list of tags are associated with.

", "ResourceNotFoundException$message": "

The value of a parameter in the request caused an error.

", @@ -514,6 +547,18 @@ "ValidationExceptionField$name": "

The name of the field that caused the validation error.

" } }, + "SubnetId": { + "base": null, + "refs": { + "SubnetIds$member": null + } + }, + "SubnetIds": { + "base": null, + "refs": { + "VpcConfiguration$subnetIds": "

The list of Amazon EC2 subnet IDs created in the Amazon VPC for your Grafana workspace to connect.

" + } + }, "TagKey": { "base": null, "refs": { @@ -636,6 +681,16 @@ "refs": { } }, + "UpdateWorkspaceConfigurationRequest": { + "base": null, + "refs": { + } + }, + "UpdateWorkspaceConfigurationResponse": { + "base": null, + "refs": { + } + }, "UpdateWorkspaceRequest": { "base": null, "refs": { @@ -662,7 +717,7 @@ "UserType": { "base": null, "refs": { - "ListPermissionsRequest$userType": "

(Optional) If you specify SSO_USER, then only the permissions of Amazon Web Services SSO users are returned. If you specify SSO_GROUP, only the permissions of Amazon Web Services SSO groups are returned.

", + "ListPermissionsRequest$userType": "

(Optional) If you specify SSO_USER, then only the permissions of IAM Identity Center users are returned. If you specify SSO_GROUP, only the permissions of IAM Identity Center groups are returned.

", "User$type": "

Specifies whether this is a single user or a group.

" } }, @@ -689,6 +744,14 @@ "ValidationException$reason": "

The reason that the operation failed.

" } }, + "VpcConfiguration": { + "base": "

The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to.

", + "refs": { + "CreateWorkspaceRequest$vpcConfiguration": "

The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to.

", + "UpdateWorkspaceRequest$vpcConfiguration": "

The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to.

", + "WorkspaceDescription$vpcConfiguration": "

The configuration for connecting to data sources in a private VPC (Amazon Virtual Private Cloud).

" + } + }, "WorkspaceDescription": { "base": "

A structure containing information about an Amazon Managed Grafana workspace in your account.

", "refs": { @@ -704,17 +767,19 @@ "base": null, "refs": { "AssociateLicenseRequest$workspaceId": "

The ID of the workspace to associate the license with.

", - "CreateWorkspaceApiKeyRequest$workspaceId": "

The ID of the workspace in which to create an API key.

", + "CreateWorkspaceApiKeyRequest$workspaceId": "

The ID of the workspace to create an API key.

", "CreateWorkspaceApiKeyResponse$workspaceId": "

The ID of the workspace that the key is valid for.

", "DeleteWorkspaceApiKeyRequest$workspaceId": "

The ID of the workspace to delete.

", "DeleteWorkspaceApiKeyResponse$workspaceId": "

The ID of the workspace where the key was deleted.

", "DeleteWorkspaceRequest$workspaceId": "

The ID of the workspace to delete.

", "DescribeWorkspaceAuthenticationRequest$workspaceId": "

The ID of the workspace to return authentication information about.

", + "DescribeWorkspaceConfigurationRequest$workspaceId": "

The ID of the workspace to get configuration information for.

", "DescribeWorkspaceRequest$workspaceId": "

The ID of the workspace to display information about.

", "DisassociateLicenseRequest$workspaceId": "

The ID of the workspace to remove the Grafana Enterprise license from.

", "ListPermissionsRequest$workspaceId": "

The ID of the workspace to list permissions for. This parameter is required.

", "UpdatePermissionsRequest$workspaceId": "

The ID of the workspace to update.

", "UpdateWorkspaceAuthenticationRequest$workspaceId": "

The ID of the workspace to update the authentication for.

", + "UpdateWorkspaceConfigurationRequest$workspaceId": "

The ID of the workspace to update.

", "UpdateWorkspaceRequest$workspaceId": "

The ID of the workspace to update.

", "WorkspaceDescription$id": "

The unique ID of this workspace.

", "WorkspaceSummary$id": "

The unique ID of the workspace.

" diff --git a/models/apis/grafana/2020-08-18/endpoint-rule-set-1.json b/models/apis/grafana/2020-08-18/endpoint-rule-set-1.json new file mode 100644 index 0000000000..270d769edf --- /dev/null +++ b/models/apis/grafana/2020-08-18/endpoint-rule-set-1.json @@ -0,0 +1,315 @@ +{ + "version": "1.0", + "parameters": { + "Region": { + "builtIn": "AWS::Region", + "required": false, + "documentation": "The AWS region used to dispatch the request.", + "type": "String" + }, + "UseDualStack": { + "builtIn": "AWS::UseDualStack", + "required": true, + "default": false, + "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.", + "type": "Boolean" + }, + "UseFIPS": { + "builtIn": "AWS::UseFIPS", + "required": true, + "default": false, + "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.", + "type": "Boolean" + }, + "Endpoint": { + "builtIn": "SDK::Endpoint", + "required": false, + "documentation": "Override the endpoint used to send this request", + "type": "String" + } + }, + "rules": [ + { + "conditions": [ + { + "fn": "aws.partition", + "argv": [ + { + "ref": "Region" + } + ], + "assign": "PartitionResult" + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "isSet", + "argv": [ + { + "ref": "Endpoint" + } + ] + }, + { + "fn": "parseURL", + "argv": [ + { + "ref": "Endpoint" + } + ], + "assign": "url" + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + } + ], + "error": "Invalid Configuration: FIPS and custom endpoint are not supported", + "type": "error" + }, + { + "conditions": [], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "error": "Invalid Configuration: Dualstack and custom endpoint are not supported", + "type": "error" + }, + { + "conditions": [], + "endpoint": { + "url": { + "ref": "Endpoint" + }, + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + }, + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsFIPS" + ] + } + ] + }, + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsDualStack" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://grafana-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + }, + { + "conditions": [], + "error": "FIPS and DualStack are enabled, but this partition does not support one or both", + "type": "error" + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsFIPS" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://grafana-fips.{Region}.{PartitionResult#dnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] + }, + { + "conditions": [], + "error": "FIPS is enabled but this partition does not support FIPS", + "type": "error" + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsDualStack" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://grafana.{Region}.{PartitionResult#dualStackDnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + }, + { + "conditions": [], + "error": "DualStack is enabled but this partition does not support DualStack", + "type": "error" + } + ] + }, + { + "conditions": [], + "endpoint": { + "url": "https://grafana.{Region}.{PartitionResult#dnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] +} \ No newline at end of file diff --git a/models/apis/grafana/2020-08-18/endpoint-tests-1.json b/models/apis/grafana/2020-08-18/endpoint-tests-1.json new file mode 100644 index 0000000000..0c4a3e89d7 --- /dev/null +++ b/models/apis/grafana/2020-08-18/endpoint-tests-1.json @@ -0,0 +1,563 @@ +{ + "testCases": [ + { + "documentation": "For region eu-central-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-central-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "eu-central-1" + } + }, + { + "documentation": "For region eu-central-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-central-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "eu-central-1" + } + }, + { + "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-central-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "eu-central-1" + } + }, + { + "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-central-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "eu-central-1" + } + }, + { + "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-west-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "us-west-2" + } + }, + { + "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-west-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "us-west-2" + } + }, + { + "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-west-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "us-west-2" + } + }, + { + "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-west-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "us-west-2" + } + }, + { + "documentation": "For region eu-west-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-west-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "eu-west-2" + } + }, + { + "documentation": "For region eu-west-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-west-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "eu-west-2" + } + }, + { + "documentation": "For region eu-west-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-west-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "eu-west-2" + } + }, + { + "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-west-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "eu-west-2" + } + }, + { + "documentation": "For region eu-west-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-west-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "eu-west-1" + } + }, + { + "documentation": "For region eu-west-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.eu-west-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "eu-west-1" + } + }, + { + "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-west-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "eu-west-1" + } + }, + { + "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.eu-west-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "eu-west-1" + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-northeast-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "ap-northeast-2" + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-northeast-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "ap-northeast-2" + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-northeast-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "ap-northeast-2" + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-northeast-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "ap-northeast-2" + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-northeast-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "ap-northeast-1" + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-northeast-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "ap-northeast-1" + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-northeast-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "ap-northeast-1" + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-northeast-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "ap-northeast-1" + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-southeast-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "ap-southeast-1" + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-southeast-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "ap-southeast-1" + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-southeast-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "ap-southeast-1" + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-southeast-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "ap-southeast-1" + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-southeast-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "ap-southeast-2" + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.ap-southeast-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "ap-southeast-2" + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-southeast-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "ap-southeast-2" + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.ap-southeast-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "ap-southeast-2" + } + }, + { + "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-east-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "us-east-1" + } + }, + { + "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-east-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "us-east-1" + } + }, + { + "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-east-1.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "us-east-1" + } + }, + { + "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-east-1.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "us-east-1" + } + }, + { + "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-east-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": true, + "Region": "us-east-2" + } + }, + { + "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana-fips.us-east-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "us-east-2" + } + }, + { + "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-east-2.api.aws" + } + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "us-east-2" + } + }, + { + "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://grafana.us-east-2.amazonaws.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "us-east-2" + } + }, + { + "documentation": "For custom endpoint with fips disabled and dualstack disabled", + "expect": { + "endpoint": { + "url": "https://example.com" + } + }, + "params": { + "UseDualStack": false, + "UseFIPS": false, + "Region": "us-east-1", + "Endpoint": "https://example.com" + } + }, + { + "documentation": "For custom endpoint with fips enabled and dualstack disabled", + "expect": { + "error": "Invalid Configuration: FIPS and custom endpoint are not supported" + }, + "params": { + "UseDualStack": false, + "UseFIPS": true, + "Region": "us-east-1", + "Endpoint": "https://example.com" + } + }, + { + "documentation": "For custom endpoint with fips disabled and dualstack enabled", + "expect": { + "error": "Invalid Configuration: Dualstack and custom endpoint are not supported" + }, + "params": { + "UseDualStack": true, + "UseFIPS": false, + "Region": "us-east-1", + "Endpoint": "https://example.com" + } + } + ], + "version": "1.0" +} \ No newline at end of file diff --git a/models/apis/rbin/2021-06-15/api-2.json b/models/apis/rbin/2021-06-15/api-2.json index 450e04a26c..9e2bcb7c66 100644 --- a/models/apis/rbin/2021-06-15/api-2.json +++ b/models/apis/rbin/2021-06-15/api-2.json @@ -39,7 +39,8 @@ "errors":[ {"shape":"InternalServerException"}, {"shape":"ResourceNotFoundException"}, - {"shape":"ValidationException"} + {"shape":"ValidationException"}, + {"shape":"ConflictException"} ] }, "GetRule":{ @@ -86,6 +87,22 @@ {"shape":"ResourceNotFoundException"} ] }, + "LockRule":{ + "name":"LockRule", + "http":{ + "method":"PATCH", + "requestUri":"/rules/{identifier}/lock", + "responseCode":200 + }, + "input":{"shape":"LockRuleRequest"}, + "output":{"shape":"LockRuleResponse"}, + "errors":[ + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"} + ] + }, "TagResource":{ "name":"TagResource", "http":{ @@ -102,6 +119,22 @@ {"shape":"ServiceQuotaExceededException"} ] }, + "UnlockRule":{ + "name":"UnlockRule", + "http":{ + "method":"PATCH", + "requestUri":"/rules/{identifier}/unlock", + "responseCode":200 + }, + "input":{"shape":"UnlockRuleRequest"}, + "output":{"shape":"UnlockRuleResponse"}, + "errors":[ + {"shape":"InternalServerException"}, + {"shape":"ResourceNotFoundException"}, + {"shape":"ValidationException"}, + {"shape":"ConflictException"} + ] + }, "UntagResource":{ "name":"UntagResource", "http":{ @@ -129,11 +162,25 @@ "errors":[ {"shape":"ValidationException"}, {"shape":"InternalServerException"}, - {"shape":"ResourceNotFoundException"} + {"shape":"ResourceNotFoundException"}, + {"shape":"ConflictException"} ] } }, "shapes":{ + "ConflictException":{ + "type":"structure", + "members":{ + "Message":{"shape":"ErrorMessage"}, + "Reason":{"shape":"ConflictExceptionReason"} + }, + "error":{"httpStatusCode":409}, + "exception":true + }, + "ConflictExceptionReason":{ + "type":"string", + "enum":["INVALID_RULE_STATE"] + }, "CreateRuleRequest":{ "type":"structure", "required":[ @@ -145,7 +192,8 @@ "Description":{"shape":"Description"}, "Tags":{"shape":"TagList"}, "ResourceType":{"shape":"ResourceType"}, - "ResourceTags":{"shape":"ResourceTags"} + "ResourceTags":{"shape":"ResourceTags"}, + "LockConfiguration":{"shape":"LockConfiguration"} } }, "CreateRuleResponse":{ @@ -157,7 +205,9 @@ "Tags":{"shape":"TagList"}, "ResourceType":{"shape":"ResourceType"}, "ResourceTags":{"shape":"ResourceTags"}, - "Status":{"shape":"RuleStatus"} + "Status":{"shape":"RuleStatus"}, + "LockConfiguration":{"shape":"LockConfiguration"}, + "LockState":{"shape":"LockState"} } }, "DeleteRuleRequest":{ @@ -200,7 +250,10 @@ "ResourceType":{"shape":"ResourceType"}, "RetentionPeriod":{"shape":"RetentionPeriod"}, "ResourceTags":{"shape":"ResourceTags"}, - "Status":{"shape":"RuleStatus"} + "Status":{"shape":"RuleStatus"}, + "LockConfiguration":{"shape":"LockConfiguration"}, + "LockState":{"shape":"LockState"}, + "LockEndTime":{"shape":"TimeStamp"} } }, "InternalServerException":{ @@ -219,7 +272,8 @@ "MaxResults":{"shape":"MaxResults"}, "NextToken":{"shape":"NextToken"}, "ResourceType":{"shape":"ResourceType"}, - "ResourceTags":{"shape":"ResourceTags"} + "ResourceTags":{"shape":"ResourceTags"}, + "LockState":{"shape":"LockState"} } }, "ListRulesResponse":{ @@ -246,6 +300,49 @@ "Tags":{"shape":"TagList"} } }, + "LockConfiguration":{ + "type":"structure", + "required":["UnlockDelay"], + "members":{ + "UnlockDelay":{"shape":"UnlockDelay"} + } + }, + "LockRuleRequest":{ + "type":"structure", + "required":[ + "Identifier", + "LockConfiguration" + ], + "members":{ + "Identifier":{ + "shape":"RuleIdentifier", + "location":"uri", + "locationName":"identifier" + }, + "LockConfiguration":{"shape":"LockConfiguration"} + } + }, + "LockRuleResponse":{ + "type":"structure", + "members":{ + "Identifier":{"shape":"RuleIdentifier"}, + "Description":{"shape":"Description"}, + "ResourceType":{"shape":"ResourceType"}, + "RetentionPeriod":{"shape":"RetentionPeriod"}, + "ResourceTags":{"shape":"ResourceTags"}, + "Status":{"shape":"RuleStatus"}, + "LockConfiguration":{"shape":"LockConfiguration"}, + "LockState":{"shape":"LockState"} + } + }, + "LockState":{ + "type":"string", + "enum":[ + "locked", + "pending_unlock", + "unlocked" + ] + }, "MaxResults":{ "type":"integer", "max":1000, @@ -339,7 +436,8 @@ "members":{ "Identifier":{"shape":"RuleIdentifier"}, "Description":{"shape":"Description"}, - "RetentionPeriod":{"shape":"RetentionPeriod"} + "RetentionPeriod":{"shape":"RetentionPeriod"}, + "LockState":{"shape":"LockState"} } }, "RuleSummaryList":{ @@ -414,6 +512,52 @@ "min":0, "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$" }, + "TimeStamp":{"type":"timestamp"}, + "UnlockDelay":{ + "type":"structure", + "required":[ + "UnlockDelayValue", + "UnlockDelayUnit" + ], + "members":{ + "UnlockDelayValue":{"shape":"UnlockDelayValue"}, + "UnlockDelayUnit":{"shape":"UnlockDelayUnit"} + } + }, + "UnlockDelayUnit":{ + "type":"string", + "enum":["DAYS"] + }, + "UnlockDelayValue":{ + "type":"integer", + "max":30, + "min":7 + }, + "UnlockRuleRequest":{ + "type":"structure", + "required":["Identifier"], + "members":{ + "Identifier":{ + "shape":"RuleIdentifier", + "location":"uri", + "locationName":"identifier" + } + } + }, + "UnlockRuleResponse":{ + "type":"structure", + "members":{ + "Identifier":{"shape":"RuleIdentifier"}, + "Description":{"shape":"Description"}, + "ResourceType":{"shape":"ResourceType"}, + "RetentionPeriod":{"shape":"RetentionPeriod"}, + "ResourceTags":{"shape":"ResourceTags"}, + "Status":{"shape":"RuleStatus"}, + "LockConfiguration":{"shape":"LockConfiguration"}, + "LockState":{"shape":"LockState"}, + "LockEndTime":{"shape":"TimeStamp"} + } + }, "UntagResourceRequest":{ "type":"structure", "required":[ @@ -461,7 +605,9 @@ "Description":{"shape":"Description"}, "ResourceType":{"shape":"ResourceType"}, "ResourceTags":{"shape":"ResourceTags"}, - "Status":{"shape":"RuleStatus"} + "Status":{"shape":"RuleStatus"}, + "LockState":{"shape":"LockState"}, + "LockEndTime":{"shape":"TimeStamp"} } }, "ValidationException":{ diff --git a/models/apis/rbin/2021-06-15/docs-2.json b/models/apis/rbin/2021-06-15/docs-2.json index 4181af80c9..a0ec58f5c6 100644 --- a/models/apis/rbin/2021-06-15/docs-2.json +++ b/models/apis/rbin/2021-06-15/docs-2.json @@ -7,11 +7,24 @@ "GetRule": "

Gets information about a Recycle Bin retention rule.

", "ListRules": "

Lists the Recycle Bin retention rules in the Region.

", "ListTagsForResource": "

Lists the tags assigned to a retention rule.

", + "LockRule": "

Locks a retention rule. A locked retention rule can't be modified or deleted.

", "TagResource": "

Assigns tags to the specified retention rule.

", + "UnlockRule": "

Unlocks a retention rule. After a retention rule is unlocked, it can be modified or deleted only after the unlock delay period expires.

", "UntagResource": "

Unassigns a tag from a retention rule.

", - "UpdateRule": "

Updates an existing Recycle Bin retention rule. For more information, see Update Recycle Bin retention rules in the Amazon Elastic Compute Cloud User Guide.

" + "UpdateRule": "

Updates an existing Recycle Bin retention rule. You can update a retention rule's description, resource tags, and retention period at any time after creation. You can't update a retention rule's resource type after creation. For more information, see Update Recycle Bin retention rules in the Amazon Elastic Compute Cloud User Guide.

" }, "shapes": { + "ConflictException": { + "base": "

The specified retention rule lock request can't be completed.

", + "refs": { + } + }, + "ConflictExceptionReason": { + "base": null, + "refs": { + "ConflictException$Reason": "

The reason for the exception.

" + } + }, "CreateRuleRequest": { "base": null, "refs": { @@ -38,7 +51,9 @@ "CreateRuleRequest$Description": "

The retention rule description.

", "CreateRuleResponse$Description": "

The retention rule description.

", "GetRuleResponse$Description": "

The retention rule description.

", + "LockRuleResponse$Description": "

The retention rule description.

", "RuleSummary$Description": "

The retention rule description.

", + "UnlockRuleResponse$Description": "

The retention rule description.

", "UpdateRuleRequest$Description": "

The retention rule description.

", "UpdateRuleResponse$Description": "

The retention rule description.

" } @@ -46,6 +61,7 @@ "ErrorMessage": { "base": null, "refs": { + "ConflictException$Message": null, "InternalServerException$Message": null, "ResourceNotFoundException$Message": null, "ServiceQuotaExceededException$Message": null, @@ -87,6 +103,39 @@ "refs": { } }, + "LockConfiguration": { + "base": "

Information about a retention rule lock configuration.

", + "refs": { + "CreateRuleRequest$LockConfiguration": "

Information about the retention rule lock configuration.

", + "CreateRuleResponse$LockConfiguration": "

Information about the retention rule lock configuration.

", + "GetRuleResponse$LockConfiguration": "

Information about the retention rule lock configuration.

", + "LockRuleRequest$LockConfiguration": "

Information about the retention rule lock configuration.

", + "LockRuleResponse$LockConfiguration": "

Information about the retention rule lock configuration.

", + "UnlockRuleResponse$LockConfiguration": "

Information about the retention rule lock configuration.

" + } + }, + "LockRuleRequest": { + "base": null, + "refs": { + } + }, + "LockRuleResponse": { + "base": null, + "refs": { + } + }, + "LockState": { + "base": null, + "refs": { + "CreateRuleResponse$LockState": "

The lock state for the retention rule.

", + "GetRuleResponse$LockState": "

The lock state for the retention rule.

", + "ListRulesRequest$LockState": "

The lock state of the retention rules to list. Only retention rules with the specified lock state are returned.

", + "LockRuleResponse$LockState": "

The lock state for the retention rule.

", + "RuleSummary$LockState": "

The lock state for the retention rule.

", + "UnlockRuleResponse$LockState": "

The lock state for the retention rule.

", + "UpdateRuleResponse$LockState": "

The lock state for the retention rule.

" + } + }, "MaxResults": { "base": null, "refs": { @@ -136,6 +185,8 @@ "CreateRuleResponse$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

", "GetRuleResponse$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

", "ListRulesRequest$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

", + "LockRuleResponse$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

", + "UnlockRuleResponse$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

", "UpdateRuleRequest$ResourceTags": "

Specifies the resource tags to use to identify resources that are to be retained by a tag-level retention rule. For tag-level retention rules, only deleted resources, of the specified resource type, that have one or more of the specified tag key and value pairs are retained. If a resource is deleted, but it does not have any of the specified tag key and value pairs, it is immediately deleted without being retained by the retention rule.

You can add the same tag key and value pair to a maximum or five retention rules.

To create a Region-level retention rule, omit this parameter. A Region-level retention rule does not have any resource tags specified. It retains all deleted resources of the specified resource type in the Region in which the rule is created, even if the resources are not tagged.

", "UpdateRuleResponse$ResourceTags": "

Information about the resource tags used to identify resources that are retained by the retention rule.

" } @@ -147,7 +198,9 @@ "CreateRuleResponse$ResourceType": "

The resource type retained by the retention rule.

", "GetRuleResponse$ResourceType": "

The resource type retained by the retention rule.

", "ListRulesRequest$ResourceType": "

The resource type retained by the retention rule. Only retention rules that retain the specified resource type are listed. Currently, only Amazon EBS snapshots and EBS-backed AMIs are supported. To list retention rules that retain snapshots, specify EBS_SNAPSHOT. To list retention rules that retain EBS-backed AMIs, specify EC2_IMAGE.

", - "UpdateRuleRequest$ResourceType": "

The resource type to be retained by the retention rule. Currently, only Amazon EBS snapshots and EBS-backed AMIs are supported. To retain snapshots, specify EBS_SNAPSHOT. To retain EBS-backed AMIs, specify EC2_IMAGE.

", + "LockRuleResponse$ResourceType": "

The resource type retained by the retention rule.

", + "UnlockRuleResponse$ResourceType": "

The resource type retained by the retention rule.

", + "UpdateRuleRequest$ResourceType": "

This parameter is currently not supported. You can't update a retention rule's resource type after creation.

", "UpdateRuleResponse$ResourceType": "

The resource type retained by the retention rule.

" } }, @@ -157,7 +210,9 @@ "CreateRuleRequest$RetentionPeriod": "

Information about the retention period for which the retention rule is to retain resources.

", "CreateRuleResponse$RetentionPeriod": null, "GetRuleResponse$RetentionPeriod": "

Information about the retention period for which the retention rule is to retain resources.

", + "LockRuleResponse$RetentionPeriod": null, "RuleSummary$RetentionPeriod": "

Information about the retention period for which the retention rule is to retain resources.

", + "UnlockRuleResponse$RetentionPeriod": null, "UpdateRuleRequest$RetentionPeriod": "

Information about the retention period for which the retention rule is to retain resources.

", "UpdateRuleResponse$RetentionPeriod": null } @@ -189,7 +244,11 @@ "DeleteRuleRequest$Identifier": "

The unique ID of the retention rule.

", "GetRuleRequest$Identifier": "

The unique ID of the retention rule.

", "GetRuleResponse$Identifier": "

The unique ID of the retention rule.

", + "LockRuleRequest$Identifier": "

The unique ID of the retention rule.

", + "LockRuleResponse$Identifier": "

The unique ID of the retention rule.

", "RuleSummary$Identifier": "

The unique ID of the retention rule.

", + "UnlockRuleRequest$Identifier": "

The unique ID of the retention rule.

", + "UnlockRuleResponse$Identifier": "

The unique ID of the retention rule.

", "UpdateRuleRequest$Identifier": "

The unique ID of the retention rule.

", "UpdateRuleResponse$Identifier": "

The unique ID of the retention rule.

" } @@ -199,6 +258,8 @@ "refs": { "CreateRuleResponse$Status": "

The state of the retention rule. Only retention rules that are in the available state retain resources.

", "GetRuleResponse$Status": "

The state of the retention rule. Only retention rules that are in the available state retain resources.

", + "LockRuleResponse$Status": "

The state of the retention rule. Only retention rules that are in the available state retain resources.

", + "UnlockRuleResponse$Status": "

The state of the retention rule. Only retention rules that are in the available state retain resources.

", "UpdateRuleResponse$Status": "

The state of the retention rule. Only retention rules that are in the available state retain resources.

" } }, @@ -269,6 +330,42 @@ "Tag$Value": "

The tag value.

" } }, + "TimeStamp": { + "base": null, + "refs": { + "GetRuleResponse$LockEndTime": "

The date and time at which the unlock delay is set to expire. Only returned for retention rules that have been unlocked and that are still within the unlock delay period.

", + "UnlockRuleResponse$LockEndTime": "

The date and time at which the unlock delay is set to expire. Only returned for retention rules that have been unlocked and that are still within the unlock delay period.

", + "UpdateRuleResponse$LockEndTime": "

The date and time at which the unlock delay is set to expire. Only returned for retention rules that have been unlocked and that are still within the unlock delay period.

" + } + }, + "UnlockDelay": { + "base": "

Information about the retention rule unlock delay. The unlock delay is the period after which a retention rule can be modified or edited after it has been unlocked by a user with the required permissions. The retention rule can't be modified or deleted during the unlock delay.

", + "refs": { + "LockConfiguration$UnlockDelay": "

Information about the retention rule unlock delay.

" + } + }, + "UnlockDelayUnit": { + "base": null, + "refs": { + "UnlockDelay$UnlockDelayUnit": "

The unit of time in which to measure the unlock delay. Currently, the unlock delay can be measure only in days.

" + } + }, + "UnlockDelayValue": { + "base": null, + "refs": { + "UnlockDelay$UnlockDelayValue": "

The unlock delay period, measured in the unit specified for UnlockDelayUnit.

" + } + }, + "UnlockRuleRequest": { + "base": null, + "refs": { + } + }, + "UnlockRuleResponse": { + "base": null, + "refs": { + } + }, "UntagResourceRequest": { "base": null, "refs": { diff --git a/models/apis/rbin/2021-06-15/endpoint-rule-set-1.json b/models/apis/rbin/2021-06-15/endpoint-rule-set-1.json new file mode 100644 index 0000000000..840204cdf8 --- /dev/null +++ b/models/apis/rbin/2021-06-15/endpoint-rule-set-1.json @@ -0,0 +1,315 @@ +{ + "version": "1.0", + "parameters": { + "Region": { + "builtIn": "AWS::Region", + "required": true, + "documentation": "The AWS region used to dispatch the request.", + "type": "String" + }, + "UseDualStack": { + "builtIn": "AWS::UseDualStack", + "required": true, + "default": false, + "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.", + "type": "Boolean" + }, + "UseFIPS": { + "builtIn": "AWS::UseFIPS", + "required": true, + "default": false, + "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.", + "type": "Boolean" + }, + "Endpoint": { + "builtIn": "SDK::Endpoint", + "required": false, + "documentation": "Override the endpoint used to send this request", + "type": "String" + } + }, + "rules": [ + { + "conditions": [ + { + "fn": "aws.partition", + "argv": [ + { + "ref": "Region" + } + ], + "assign": "PartitionResult" + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "isSet", + "argv": [ + { + "ref": "Endpoint" + } + ] + }, + { + "fn": "parseURL", + "argv": [ + { + "ref": "Endpoint" + } + ], + "assign": "url" + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + } + ], + "error": "Invalid Configuration: FIPS and custom endpoint are not supported", + "type": "error" + }, + { + "conditions": [], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "error": "Invalid Configuration: Dualstack and custom endpoint are not supported", + "type": "error" + }, + { + "conditions": [], + "endpoint": { + "url": { + "ref": "Endpoint" + }, + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + }, + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsFIPS" + ] + } + ] + }, + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsDualStack" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://rbin-fips.{Region}.{PartitionResult#dualStackDnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + }, + { + "conditions": [], + "error": "FIPS and DualStack are enabled, but this partition does not support one or both", + "type": "error" + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseFIPS" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsFIPS" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://rbin-fips.{Region}.{PartitionResult#dnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] + }, + { + "conditions": [], + "error": "FIPS is enabled but this partition does not support FIPS", + "type": "error" + } + ] + }, + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + { + "ref": "UseDualStack" + }, + true + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [ + { + "fn": "booleanEquals", + "argv": [ + true, + { + "fn": "getAttr", + "argv": [ + { + "ref": "PartitionResult" + }, + "supportsDualStack" + ] + } + ] + } + ], + "type": "tree", + "rules": [ + { + "conditions": [], + "endpoint": { + "url": "https://rbin.{Region}.{PartitionResult#dualStackDnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + }, + { + "conditions": [], + "error": "DualStack is enabled but this partition does not support DualStack", + "type": "error" + } + ] + }, + { + "conditions": [], + "endpoint": { + "url": "https://rbin.{Region}.{PartitionResult#dnsSuffix}", + "properties": {}, + "headers": {} + }, + "type": "endpoint" + } + ] + } + ] +} \ No newline at end of file diff --git a/models/apis/rbin/2021-06-15/endpoint-tests-1.json b/models/apis/rbin/2021-06-15/endpoint-tests-1.json new file mode 100644 index 0000000000..28b1128260 --- /dev/null +++ b/models/apis/rbin/2021-06-15/endpoint-tests-1.json @@ -0,0 +1,1603 @@ +{ + "testCases": [ + { + "documentation": "For region ap-south-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-south-2.api.aws" + } + }, + "params": { + "Region": "ap-south-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-south-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-south-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-south-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-south-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-south-2.api.aws" + } + }, + "params": { + "Region": "ap-south-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-south-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-south-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-south-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-south-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-south-1.api.aws" + } + }, + "params": { + "Region": "ap-south-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-south-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-south-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-south-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-south-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-south-1.api.aws" + } + }, + "params": { + "Region": "ap-south-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-south-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-south-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-south-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-south-1.api.aws" + } + }, + "params": { + "Region": "eu-south-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-south-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-south-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-south-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-south-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-south-1.api.aws" + } + }, + "params": { + "Region": "eu-south-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-south-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-south-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-south-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-south-2.api.aws" + } + }, + "params": { + "Region": "eu-south-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-south-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-south-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-south-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-south-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-south-2.api.aws" + } + }, + "params": { + "Region": "eu-south-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-south-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-south-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-south-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-gov-east-1.api.aws" + } + }, + "params": { + "Region": "us-gov-east-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-gov-east-1.amazonaws.com" + } + }, + "params": { + "Region": "us-gov-east-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-gov-east-1.api.aws" + } + }, + "params": { + "Region": "us-gov-east-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-gov-east-1.amazonaws.com" + } + }, + "params": { + "Region": "us-gov-east-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region me-central-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.me-central-1.api.aws" + } + }, + "params": { + "Region": "me-central-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region me-central-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.me-central-1.amazonaws.com" + } + }, + "params": { + "Region": "me-central-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region me-central-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.me-central-1.api.aws" + } + }, + "params": { + "Region": "me-central-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region me-central-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.me-central-1.amazonaws.com" + } + }, + "params": { + "Region": "me-central-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ca-central-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ca-central-1.api.aws" + } + }, + "params": { + "Region": "ca-central-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ca-central-1.amazonaws.com" + } + }, + "params": { + "Region": "ca-central-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ca-central-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ca-central-1.api.aws" + } + }, + "params": { + "Region": "ca-central-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ca-central-1.amazonaws.com" + } + }, + "params": { + "Region": "ca-central-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-central-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-central-1.api.aws" + } + }, + "params": { + "Region": "eu-central-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-central-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-central-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-central-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-central-1.api.aws" + } + }, + "params": { + "Region": "eu-central-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-central-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-central-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-central-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-central-2.api.aws" + } + }, + "params": { + "Region": "eu-central-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-central-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-central-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-central-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-central-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-central-2.api.aws" + } + }, + "params": { + "Region": "eu-central-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-central-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-central-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-central-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-west-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-west-1.api.aws" + } + }, + "params": { + "Region": "us-west-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-west-1.amazonaws.com" + } + }, + "params": { + "Region": "us-west-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-west-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-west-1.api.aws" + } + }, + "params": { + "Region": "us-west-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-west-1.amazonaws.com" + } + }, + "params": { + "Region": "us-west-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-west-2.api.aws" + } + }, + "params": { + "Region": "us-west-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-west-2.amazonaws.com" + } + }, + "params": { + "Region": "us-west-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-west-2.api.aws" + } + }, + "params": { + "Region": "us-west-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-west-2.amazonaws.com" + } + }, + "params": { + "Region": "us-west-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region af-south-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.af-south-1.api.aws" + } + }, + "params": { + "Region": "af-south-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region af-south-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.af-south-1.amazonaws.com" + } + }, + "params": { + "Region": "af-south-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region af-south-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.af-south-1.api.aws" + } + }, + "params": { + "Region": "af-south-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.af-south-1.amazonaws.com" + } + }, + "params": { + "Region": "af-south-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-north-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-north-1.api.aws" + } + }, + "params": { + "Region": "eu-north-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-north-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-north-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-north-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-north-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-north-1.api.aws" + } + }, + "params": { + "Region": "eu-north-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-north-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-north-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-3 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-3.api.aws" + } + }, + "params": { + "Region": "eu-west-3", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-3 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-3.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-3", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-3 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-3.api.aws" + } + }, + "params": { + "Region": "eu-west-3", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-3.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-3", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-2.api.aws" + } + }, + "params": { + "Region": "eu-west-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-2.api.aws" + } + }, + "params": { + "Region": "eu-west-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-2.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-1.api.aws" + } + }, + "params": { + "Region": "eu-west-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.eu-west-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-1.api.aws" + } + }, + "params": { + "Region": "eu-west-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.eu-west-1.amazonaws.com" + } + }, + "params": { + "Region": "eu-west-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-3 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-3.api.aws" + } + }, + "params": { + "Region": "ap-northeast-3", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-3 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-3.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-3", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-3.api.aws" + } + }, + "params": { + "Region": "ap-northeast-3", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-3.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-3", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-2.api.aws" + } + }, + "params": { + "Region": "ap-northeast-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-2.api.aws" + } + }, + "params": { + "Region": "ap-northeast-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-1.api.aws" + } + }, + "params": { + "Region": "ap-northeast-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-northeast-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-1.api.aws" + } + }, + "params": { + "Region": "ap-northeast-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-northeast-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-northeast-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region me-south-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.me-south-1.api.aws" + } + }, + "params": { + "Region": "me-south-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region me-south-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.me-south-1.amazonaws.com" + } + }, + "params": { + "Region": "me-south-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region me-south-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.me-south-1.api.aws" + } + }, + "params": { + "Region": "me-south-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.me-south-1.amazonaws.com" + } + }, + "params": { + "Region": "me-south-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region sa-east-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.sa-east-1.api.aws" + } + }, + "params": { + "Region": "sa-east-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region sa-east-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.sa-east-1.amazonaws.com" + } + }, + "params": { + "Region": "sa-east-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region sa-east-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.sa-east-1.api.aws" + } + }, + "params": { + "Region": "sa-east-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.sa-east-1.amazonaws.com" + } + }, + "params": { + "Region": "sa-east-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-east-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-east-1.api.aws" + } + }, + "params": { + "Region": "ap-east-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-east-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-east-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-east-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-east-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-east-1.api.aws" + } + }, + "params": { + "Region": "ap-east-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-east-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-east-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.cn-north-1.api.amazonwebservices.com.cn" + } + }, + "params": { + "Region": "cn-north-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.cn-north-1.amazonaws.com.cn" + } + }, + "params": { + "Region": "cn-north-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.cn-north-1.api.amazonwebservices.com.cn" + } + }, + "params": { + "Region": "cn-north-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.cn-north-1.amazonaws.com.cn" + } + }, + "params": { + "Region": "cn-north-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-gov-west-1.api.aws" + } + }, + "params": { + "Region": "us-gov-west-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-gov-west-1.amazonaws.com" + } + }, + "params": { + "Region": "us-gov-west-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-gov-west-1.api.aws" + } + }, + "params": { + "Region": "us-gov-west-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-gov-west-1.amazonaws.com" + } + }, + "params": { + "Region": "us-gov-west-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-1.api.aws" + } + }, + "params": { + "Region": "ap-southeast-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-1.api.aws" + } + }, + "params": { + "Region": "ap-southeast-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-1.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-2.api.aws" + } + }, + "params": { + "Region": "ap-southeast-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-2.api.aws" + } + }, + "params": { + "Region": "ap-southeast-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-2.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-3 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-3.api.aws" + } + }, + "params": { + "Region": "ap-southeast-3", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-3 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.ap-southeast-3.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-3", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-3.api.aws" + } + }, + "params": { + "Region": "ap-southeast-3", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.ap-southeast-3.amazonaws.com" + } + }, + "params": { + "Region": "ap-southeast-3", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-east-1.api.aws" + } + }, + "params": { + "Region": "us-east-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-east-1.amazonaws.com" + } + }, + "params": { + "Region": "us-east-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-east-1.api.aws" + } + }, + "params": { + "Region": "us-east-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-east-1.amazonaws.com" + } + }, + "params": { + "Region": "us-east-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-east-2.api.aws" + } + }, + "params": { + "Region": "us-east-2", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.us-east-2.amazonaws.com" + } + }, + "params": { + "Region": "us-east-2", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-east-2.api.aws" + } + }, + "params": { + "Region": "us-east-2", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.us-east-2.amazonaws.com" + } + }, + "params": { + "Region": "us-east-2", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.cn-northwest-1.api.amazonwebservices.com.cn" + } + }, + "params": { + "Region": "cn-northwest-1", + "UseFIPS": true, + "UseDualStack": true + } + }, + { + "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin-fips.cn-northwest-1.amazonaws.com.cn" + } + }, + "params": { + "Region": "cn-northwest-1", + "UseFIPS": true, + "UseDualStack": false + } + }, + { + "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled", + "expect": { + "endpoint": { + "url": "https://rbin.cn-northwest-1.api.amazonwebservices.com.cn" + } + }, + "params": { + "Region": "cn-northwest-1", + "UseFIPS": false, + "UseDualStack": true + } + }, + { + "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled", + "expect": { + "endpoint": { + "url": "https://rbin.cn-northwest-1.amazonaws.com.cn" + } + }, + "params": { + "Region": "cn-northwest-1", + "UseFIPS": false, + "UseDualStack": false + } + }, + { + "documentation": "For custom endpoint with fips disabled and dualstack disabled", + "expect": { + "endpoint": { + "url": "https://example.com" + } + }, + "params": { + "Region": "us-east-1", + "UseFIPS": false, + "UseDualStack": false, + "Endpoint": "https://example.com" + } + }, + { + "documentation": "For custom endpoint with fips enabled and dualstack disabled", + "expect": { + "error": "Invalid Configuration: FIPS and custom endpoint are not supported" + }, + "params": { + "Region": "us-east-1", + "UseFIPS": true, + "UseDualStack": false, + "Endpoint": "https://example.com" + } + }, + { + "documentation": "For custom endpoint with fips disabled and dualstack enabled", + "expect": { + "error": "Invalid Configuration: Dualstack and custom endpoint are not supported" + }, + "params": { + "Region": "us-east-1", + "UseFIPS": false, + "UseDualStack": true, + "Endpoint": "https://example.com" + } + } + ], + "version": "1.0" +} \ No newline at end of file diff --git a/service/managedgrafana/api.go b/service/managedgrafana/api.go index cf0e092955..3fe97b2789 100644 --- a/service/managedgrafana/api.go +++ b/service/managedgrafana/api.go @@ -248,7 +248,7 @@ func (c *ManagedGrafana) CreateWorkspaceApiKeyRequest(input *CreateWorkspaceApiK // CreateWorkspaceApiKey API operation for Amazon Managed Grafana. // -// Creates an API key for the workspace. This key can be used to authenticate +// Creates a Grafana API key for the workspace. This key can be used to authenticate // requests sent to the workspace's HTTP API. See https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html // (https://docs.aws.amazon.com/grafana/latest/userguide/Using-Grafana-APIs.html) // for available APIs and example requests. @@ -442,7 +442,7 @@ func (c *ManagedGrafana) DeleteWorkspaceApiKeyRequest(input *DeleteWorkspaceApiK // DeleteWorkspaceApiKey API operation for Amazon Managed Grafana. // -// Deletes an API key for a workspace. +// Deletes a Grafana API key for the workspace. // // 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 @@ -676,6 +676,94 @@ func (c *ManagedGrafana) DescribeWorkspaceAuthenticationWithContext(ctx aws.Cont return out, req.Send() } +const opDescribeWorkspaceConfiguration = "DescribeWorkspaceConfiguration" + +// DescribeWorkspaceConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DescribeWorkspaceConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// 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 DescribeWorkspaceConfiguration for more information on using the DescribeWorkspaceConfiguration +// 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 DescribeWorkspaceConfigurationRequest method. +// req, resp := client.DescribeWorkspaceConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspaceConfiguration +func (c *ManagedGrafana) DescribeWorkspaceConfigurationRequest(input *DescribeWorkspaceConfigurationInput) (req *request.Request, output *DescribeWorkspaceConfigurationOutput) { + op := &request.Operation{ + Name: opDescribeWorkspaceConfiguration, + HTTPMethod: "GET", + HTTPPath: "/workspaces/{workspaceId}/configuration", + } + + if input == nil { + input = &DescribeWorkspaceConfigurationInput{} + } + + output = &DescribeWorkspaceConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeWorkspaceConfiguration API operation for Amazon Managed Grafana. +// +// Gets the current configuration string for the given workspace. +// +// 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 Amazon Managed Grafana's +// API operation DescribeWorkspaceConfiguration for usage and error information. +// +// Returned Error Types: +// +// - ResourceNotFoundException +// The request references a resource that does not exist. +// +// - ThrottlingException +// The request was denied because of request throttling. Retry the request. +// +// - AccessDeniedException +// You do not have sufficient permissions to perform this action. +// +// - InternalServerException +// Unexpected error while processing the request. Retry the request. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/DescribeWorkspaceConfiguration +func (c *ManagedGrafana) DescribeWorkspaceConfiguration(input *DescribeWorkspaceConfigurationInput) (*DescribeWorkspaceConfigurationOutput, error) { + req, out := c.DescribeWorkspaceConfigurationRequest(input) + return out, req.Send() +} + +// DescribeWorkspaceConfigurationWithContext is the same as DescribeWorkspaceConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeWorkspaceConfiguration 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 *ManagedGrafana) DescribeWorkspaceConfigurationWithContext(ctx aws.Context, input *DescribeWorkspaceConfigurationInput, opts ...request.Option) (*DescribeWorkspaceConfigurationOutput, error) { + req, out := c.DescribeWorkspaceConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opDisassociateLicense = "DisassociateLicense" // DisassociateLicenseRequest generates a "aws/request.Request" representing the @@ -1486,7 +1574,7 @@ func (c *ManagedGrafana) UpdateWorkspaceRequest(input *UpdateWorkspaceInput) (re // are not changed. // // To modify the user authentication methods that the workspace uses, such as -// SAML or Amazon Web Services SSO, use UpdateWorkspaceAuthentication (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdateWorkspaceAuthentication.html). +// SAML or IAM Identity Center, use UpdateWorkspaceAuthentication (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdateWorkspaceAuthentication.html). // // To modify which users in the workspace have the Admin and Editor Grafana // roles, use UpdatePermissions (https://docs.aws.amazon.com/grafana/latest/APIReference/API_UpdatePermissions.html). @@ -1637,6 +1725,101 @@ func (c *ManagedGrafana) UpdateWorkspaceAuthenticationWithContext(ctx aws.Contex return out, req.Send() } +const opUpdateWorkspaceConfiguration = "UpdateWorkspaceConfiguration" + +// UpdateWorkspaceConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the UpdateWorkspaceConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// 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 UpdateWorkspaceConfiguration for more information on using the UpdateWorkspaceConfiguration +// 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 UpdateWorkspaceConfigurationRequest method. +// req, resp := client.UpdateWorkspaceConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspaceConfiguration +func (c *ManagedGrafana) UpdateWorkspaceConfigurationRequest(input *UpdateWorkspaceConfigurationInput) (req *request.Request, output *UpdateWorkspaceConfigurationOutput) { + op := &request.Operation{ + Name: opUpdateWorkspaceConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/workspaces/{workspaceId}/configuration", + } + + if input == nil { + input = &UpdateWorkspaceConfigurationInput{} + } + + output = &UpdateWorkspaceConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restjson.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// UpdateWorkspaceConfiguration API operation for Amazon Managed Grafana. +// +// # Updates the configuration string for the given workspace +// +// 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 Amazon Managed Grafana's +// API operation UpdateWorkspaceConfiguration for usage and error information. +// +// Returned Error Types: +// +// - ResourceNotFoundException +// The request references a resource that does not exist. +// +// - ThrottlingException +// The request was denied because of request throttling. Retry the request. +// +// - ConflictException +// A resource was in an inconsistent state during an update or a deletion. +// +// - ValidationException +// The value of a parameter in the request caused an error. +// +// - AccessDeniedException +// You do not have sufficient permissions to perform this action. +// +// - InternalServerException +// Unexpected error while processing the request. Retry the request. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/grafana-2020-08-18/UpdateWorkspaceConfiguration +func (c *ManagedGrafana) UpdateWorkspaceConfiguration(input *UpdateWorkspaceConfigurationInput) (*UpdateWorkspaceConfigurationOutput, error) { + req, out := c.UpdateWorkspaceConfigurationRequest(input) + return out, req.Send() +} + +// UpdateWorkspaceConfigurationWithContext is the same as UpdateWorkspaceConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See UpdateWorkspaceConfiguration 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 *ManagedGrafana) UpdateWorkspaceConfigurationWithContext(ctx aws.Context, input *UpdateWorkspaceConfigurationInput, opts ...request.Option) (*UpdateWorkspaceConfigurationOutput, error) { + req, out := c.UpdateWorkspaceConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + // You do not have sufficient permissions to perform this action. type AccessDeniedException struct { _ struct{} `type:"structure"` @@ -1917,11 +2100,11 @@ func (s *AssociateLicenseOutput) SetWorkspace(v *WorkspaceDescription) *Associat type AuthenticationDescription struct { _ struct{} `type:"structure"` - // A structure containing information about how this workspace works with Amazon - // Web Services SSO. + // A structure containing information about how this workspace works with IAM + // Identity Center. AwsSso *AwsSsoAuthentication `locationName:"awsSso" type:"structure"` - // Specifies whether this workspace uses Amazon Web Services SSO, SAML, or both + // Specifies whether this workspace uses IAM Identity Center, SAML, or both // methods to authenticate users to use the Grafana console in the Amazon Managed // Grafana workspace. // @@ -1970,14 +2153,14 @@ func (s *AuthenticationDescription) SetSaml(v *SamlAuthentication) *Authenticati return s } -// A structure that describes whether the workspace uses SAML, Amazon Web Services -// SSO, or both methods for user authentication, and whether that authentication +// A structure that describes whether the workspace uses SAML, IAM Identity +// Center, or both methods for user authentication, and whether that authentication // is fully configured. type AuthenticationSummary struct { _ struct{} `type:"structure"` - // Specifies whether the workspace uses SAML, Amazon Web Services SSO, or both - // methods for user authentication. + // Specifies whether the workspace uses SAML, IAM Identity Center, or both methods + // for user authentication. // // Providers is a required field Providers []*string `locationName:"providers" type:"list" required:"true" enum:"AuthenticationProviderTypes"` @@ -2016,13 +2199,13 @@ func (s *AuthenticationSummary) SetSamlConfigurationStatus(v string) *Authentica return s } -// A structure containing information about how this workspace works with Amazon -// Web Services SSO. +// A structure containing information about how this workspace works with IAM +// Identity Center. type AwsSsoAuthentication struct { _ struct{} `type:"structure"` - // The ID of the Amazon Web Services SSO-managed application that is created - // by Amazon Managed Grafana. + // The ID of the IAM Identity Center-managed application that is created by + // Amazon Managed Grafana. SsoClientId *string `locationName:"ssoClientId" type:"string"` } @@ -2128,15 +2311,14 @@ func (s *ConflictException) RequestID() string { type CreateWorkspaceApiKeyInput struct { _ struct{} `type:"structure"` - // Specifies the name of the key to create. Key names must be unique to the - // workspace. + // Specifies the name of the key. Keynames must be unique to the workspace. // // KeyName is a required field KeyName *string `locationName:"keyName" min:"1" type:"string" required:"true"` // Specifies the permission level of the key. // - // Valid Values: VIEWER | EDITOR | ADMIN + // Valid values: VIEWER|EDITOR|ADMIN // // KeyRole is a required field KeyRole *string `locationName:"keyRole" type:"string" required:"true"` @@ -2147,7 +2329,7 @@ type CreateWorkspaceApiKeyInput struct { // SecondsToLive is a required field SecondsToLive *int64 `locationName:"secondsToLive" min:"1" type:"integer" required:"true"` - // The ID of the workspace in which to create an API key. + // The ID of the workspace to create an API key. // // WorkspaceId is a required field WorkspaceId *string `location:"uri" locationName:"workspaceId" type:"string" required:"true"` @@ -2229,8 +2411,8 @@ func (s *CreateWorkspaceApiKeyInput) SetWorkspaceId(v string) *CreateWorkspaceAp type CreateWorkspaceApiKeyOutput struct { _ struct{} `type:"structure"` - // The key token that was created. Use this value as a bearer token to authenticate - // HTTP requests to the workspace. + // The key token. Use this value as a bearer token to authenticate HTTP requests + // to the workspace. // // Key is a sensitive parameter and its value will be // replaced with "sensitive" in string returned by CreateWorkspaceApiKeyOutput's @@ -2298,10 +2480,10 @@ type CreateWorkspaceInput struct { // AccountAccessType is a required field AccountAccessType *string `locationName:"accountAccessType" type:"string" required:"true" enum:"AccountAccessType"` - // Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single - // Sign On, or both to authenticate users for using the Grafana console within - // a workspace. For more information, see User authentication in Amazon Managed - // Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html). + // Specifies whether this workspace uses SAML 2.0, IAM Identity Center (successor + // to Single Sign-On), or both to authenticate users for using the Grafana console + // within a workspace. For more information, see User authentication in Amazon + // Managed Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html). // // AuthenticationProviders is a required field AuthenticationProviders []*string `locationName:"authenticationProviders" type:"list" required:"true" enum:"AuthenticationProviderTypes"` @@ -2310,6 +2492,11 @@ type CreateWorkspaceInput struct { // of the request. ClientToken *string `locationName:"clientToken" type:"string" idempotencyToken:"true"` + // The configuration string for the workspace that you create. For more information + // about the format and configuration options available, see Working in your + // Grafana workspace (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). + Configuration *string `locationName:"configuration" min:"2" type:"string"` + // The name of an IAM role that already exists to use with Organizations to // access Amazon Web Services data sources and notification channels in other // accounts in an organization. @@ -2322,8 +2509,11 @@ type CreateWorkspaceInput struct { // If you specify SERVICE_MANAGED on AWS Grafana console, Amazon Managed Grafana // automatically creates the IAM roles and provisions the permissions that the // workspace needs to use Amazon Web Services data sources and notification - // channels. In CLI mode, the permissionType SERVICE_MANAGED will not create - // the IAM role for you. + // channels. In the CLI mode, the permissionType SERVICE_MANAGED will not create + // the IAM role for you. The ability for the Amazon Managed Grafana to create + // the IAM role on behalf of the user is supported only in the Amazon Managed + // Grafana AWS console. Use only the CUSTOMER_MANAGED permission type when creating + // a workspace in the CLI. // // If you specify CUSTOMER_MANAGED, you will manage those roles and permissions // yourself. If you are creating this workspace in a member account of an organization @@ -2344,6 +2534,10 @@ type CreateWorkspaceInput struct { // The list of tags associated with the workspace. Tags map[string]*string `locationName:"tags" type:"map"` + // The configuration settings for an Amazon VPC that contains data sources for + // your Grafana workspace to connect to. + VpcConfiguration *VpcConfiguration `locationName:"vpcConfiguration" type:"structure"` + // Specify the Amazon Web Services data sources that you want to be queried // in this workspace. Specifying these data sources here enables Amazon Managed // Grafana to create IAM roles and permissions that allow Amazon Managed Grafana @@ -2425,6 +2619,9 @@ func (s *CreateWorkspaceInput) Validate() error { if s.AuthenticationProviders == nil { invalidParams.Add(request.NewErrParamRequired("AuthenticationProviders")) } + if s.Configuration != nil && len(*s.Configuration) < 2 { + invalidParams.Add(request.NewErrParamMinLen("Configuration", 2)) + } if s.OrganizationRoleName != nil && len(*s.OrganizationRoleName) < 1 { invalidParams.Add(request.NewErrParamMinLen("OrganizationRoleName", 1)) } @@ -2434,6 +2631,11 @@ func (s *CreateWorkspaceInput) Validate() error { if s.WorkspaceRoleArn != nil && len(*s.WorkspaceRoleArn) < 1 { invalidParams.Add(request.NewErrParamMinLen("WorkspaceRoleArn", 1)) } + if s.VpcConfiguration != nil { + if err := s.VpcConfiguration.Validate(); err != nil { + invalidParams.AddNested("VpcConfiguration", err.(request.ErrInvalidParams)) + } + } if invalidParams.Len() > 0 { return invalidParams @@ -2459,6 +2661,12 @@ func (s *CreateWorkspaceInput) SetClientToken(v string) *CreateWorkspaceInput { return s } +// SetConfiguration sets the Configuration field's value. +func (s *CreateWorkspaceInput) SetConfiguration(v string) *CreateWorkspaceInput { + s.Configuration = &v + return s +} + // SetOrganizationRoleName sets the OrganizationRoleName field's value. func (s *CreateWorkspaceInput) SetOrganizationRoleName(v string) *CreateWorkspaceInput { s.OrganizationRoleName = &v @@ -2483,6 +2691,12 @@ func (s *CreateWorkspaceInput) SetTags(v map[string]*string) *CreateWorkspaceInp return s } +// SetVpcConfiguration sets the VpcConfiguration field's value. +func (s *CreateWorkspaceInput) SetVpcConfiguration(v *VpcConfiguration) *CreateWorkspaceInput { + s.VpcConfiguration = v + return s +} + // SetWorkspaceDataSources sets the WorkspaceDataSources field's value. func (s *CreateWorkspaceInput) SetWorkspaceDataSources(v []*string) *CreateWorkspaceInput { s.WorkspaceDataSources = v @@ -2621,7 +2835,7 @@ func (s *DeleteWorkspaceApiKeyInput) SetWorkspaceId(v string) *DeleteWorkspaceAp type DeleteWorkspaceApiKeyOutput struct { _ struct{} `type:"structure"` - // The name of the API key that was deleted. + // The name of the key that was deleted. // // KeyName is a required field KeyName *string `locationName:"keyName" min:"1" type:"string" required:"true"` @@ -2827,6 +3041,90 @@ func (s *DescribeWorkspaceAuthenticationOutput) SetAuthentication(v *Authenticat return s } +type DescribeWorkspaceConfigurationInput struct { + _ struct{} `type:"structure" nopayload:"true"` + + // The ID of the workspace to get configuration information for. + // + // WorkspaceId is a required field + WorkspaceId *string `location:"uri" locationName:"workspaceId" type:"string" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s DescribeWorkspaceConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s DescribeWorkspaceConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeWorkspaceConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeWorkspaceConfigurationInput"} + if s.WorkspaceId == nil { + invalidParams.Add(request.NewErrParamRequired("WorkspaceId")) + } + if s.WorkspaceId != nil && len(*s.WorkspaceId) < 1 { + invalidParams.Add(request.NewErrParamMinLen("WorkspaceId", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetWorkspaceId sets the WorkspaceId field's value. +func (s *DescribeWorkspaceConfigurationInput) SetWorkspaceId(v string) *DescribeWorkspaceConfigurationInput { + s.WorkspaceId = &v + return s +} + +type DescribeWorkspaceConfigurationOutput struct { + _ struct{} `type:"structure"` + + // The configuration string for the workspace that you requested. For more information + // about the format and configuration options available, see Working in your + // Grafana workspace (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). + // + // Configuration is a required field + Configuration *string `locationName:"configuration" min:"2" type:"string" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s DescribeWorkspaceConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s DescribeWorkspaceConfigurationOutput) GoString() string { + return s.String() +} + +// SetConfiguration sets the Configuration field's value. +func (s *DescribeWorkspaceConfigurationOutput) SetConfiguration(v string) *DescribeWorkspaceConfigurationOutput { + s.Configuration = &v + return s +} + type DescribeWorkspaceInput struct { _ struct{} `type:"structure" nopayload:"true"` @@ -3011,14 +3309,15 @@ func (s *DisassociateLicenseOutput) SetWorkspace(v *WorkspaceDescription) *Disas // A structure containing the identity provider (IdP) metadata used to integrate // the identity provider with this workspace. You can specify the metadata either // by providing a URL to its location in the url parameter, or by specifying -// the full metadata in XML format in the xml parameter. +// the full metadata in XML format in the xml parameter. Specifying both will +// cause an error. type IdpMetadata struct { _ struct{} `type:"structure"` - // The URL of the location containing the metadata. + // The URL of the location containing the IdP metadata. Url *string `locationName:"url" min:"1" type:"string"` - // The actual full metadata file, in XML format. + // The full IdP metadata, in XML format. Xml *string `locationName:"xml" type:"string"` } @@ -3149,9 +3448,9 @@ type ListPermissionsInput struct { // (Optional) Limits the results to only the user that matches this ID. UserId *string `location:"querystring" locationName:"userId" min:"1" type:"string"` - // (Optional) If you specify SSO_USER, then only the permissions of Amazon Web - // Services SSO users are returned. If you specify SSO_GROUP, only the permissions - // of Amazon Web Services SSO groups are returned. + // (Optional) If you specify SSO_USER, then only the permissions of IAM Identity + // Center users are returned. If you specify SSO_GROUP, only the permissions + // of IAM Identity Center groups are returned. UserType *string `location:"querystring" locationName:"userType" type:"string" enum:"UserType"` // The ID of the workspace to list permissions for. This parameter is required. @@ -3459,12 +3758,12 @@ func (s *ListWorkspacesOutput) SetWorkspaces(v []*WorkspaceSummary) *ListWorkspa return s } -// A structure containing the identity of one user or group and the Admin or -// Editor role that they have. +// A structure containing the identity of one user or group and the Admin, Editor, +// or Viewer role that they have. type PermissionEntry struct { _ struct{} `type:"structure"` - // Specifies whether the user or group has the Admin or Editor role. + // Specifies whether the user or group has the Admin, Editor, or Viewer role. // // Role is a required field Role *string `locationName:"role" type:"string" required:"true" enum:"Role"` @@ -3582,6 +3881,8 @@ func (s *ResourceNotFoundException) RequestID() string { // This structure defines which groups defined in the SAML assertion attribute // are to be mapped to the Grafana Admin and Editor roles in the workspace. +// SAML authenticated users not part of Admin or Editor role groups have Viewer +// permission over the workspace. type RoleValues struct { _ struct{} `type:"structure"` @@ -4352,10 +4653,10 @@ func (s *UpdatePermissionsOutput) SetErrors(v []*UpdateError) *UpdatePermissions type UpdateWorkspaceAuthenticationInput struct { _ struct{} `type:"structure"` - // Specifies whether this workspace uses SAML 2.0, Amazon Web Services Single - // Sign On, or both to authenticate users for using the Grafana console within - // a workspace. For more information, see User authentication in Amazon Managed - // Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html). + // Specifies whether this workspace uses SAML 2.0, IAM Identity Center (successor + // to Single Sign-On), or both to authenticate users for using the Grafana console + // within a workspace. For more information, see User authentication in Amazon + // Managed Grafana (https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html). // // AuthenticationProviders is a required field AuthenticationProviders []*string `locationName:"authenticationProviders" type:"list" required:"true" enum:"AuthenticationProviderTypes"` @@ -4465,6 +4766,96 @@ func (s *UpdateWorkspaceAuthenticationOutput) SetAuthentication(v *Authenticatio return s } +type UpdateWorkspaceConfigurationInput struct { + _ struct{} `type:"structure"` + + // The new configuration string for the workspace. For more information about + // the format and configuration options available, see Working in your Grafana + // workspace (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). + // + // Configuration is a required field + Configuration *string `locationName:"configuration" min:"2" type:"string" required:"true"` + + // The ID of the workspace to update. + // + // WorkspaceId is a required field + WorkspaceId *string `location:"uri" locationName:"workspaceId" type:"string" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UpdateWorkspaceConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UpdateWorkspaceConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *UpdateWorkspaceConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UpdateWorkspaceConfigurationInput"} + if s.Configuration == nil { + invalidParams.Add(request.NewErrParamRequired("Configuration")) + } + if s.Configuration != nil && len(*s.Configuration) < 2 { + invalidParams.Add(request.NewErrParamMinLen("Configuration", 2)) + } + if s.WorkspaceId == nil { + invalidParams.Add(request.NewErrParamRequired("WorkspaceId")) + } + if s.WorkspaceId != nil && len(*s.WorkspaceId) < 1 { + invalidParams.Add(request.NewErrParamMinLen("WorkspaceId", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetConfiguration sets the Configuration field's value. +func (s *UpdateWorkspaceConfigurationInput) SetConfiguration(v string) *UpdateWorkspaceConfigurationInput { + s.Configuration = &v + return s +} + +// SetWorkspaceId sets the WorkspaceId field's value. +func (s *UpdateWorkspaceConfigurationInput) SetWorkspaceId(v string) *UpdateWorkspaceConfigurationInput { + s.WorkspaceId = &v + return s +} + +type UpdateWorkspaceConfigurationOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UpdateWorkspaceConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UpdateWorkspaceConfigurationOutput) GoString() string { + return s.String() +} + type UpdateWorkspaceInput struct { _ struct{} `type:"structure"` @@ -4497,10 +4888,20 @@ type UpdateWorkspaceInput struct { // for Amazon Web Services data sources and notification channels (https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html) PermissionType *string `locationName:"permissionType" type:"string" enum:"PermissionType"` + // Whether to remove the VPC configuration from the workspace. + // + // Setting this to true and providing a vpcConfiguration to set will return + // an error. + RemoveVpcConfiguration *bool `locationName:"removeVpcConfiguration" type:"boolean"` + // The name of the CloudFormation stack set to use to generate IAM roles to // be used for this workspace. StackSetName *string `locationName:"stackSetName" type:"string"` + // The configuration settings for an Amazon VPC that contains data sources for + // your Grafana workspace to connect to. + VpcConfiguration *VpcConfiguration `locationName:"vpcConfiguration" type:"structure"` + // Specify the Amazon Web Services data sources that you want to be queried // in this workspace. Specifying these data sources here enables Amazon Managed // Grafana to create IAM roles and permissions that allow Amazon Managed Grafana @@ -4593,6 +4994,11 @@ func (s *UpdateWorkspaceInput) Validate() error { if s.WorkspaceRoleArn != nil && len(*s.WorkspaceRoleArn) < 1 { invalidParams.Add(request.NewErrParamMinLen("WorkspaceRoleArn", 1)) } + if s.VpcConfiguration != nil { + if err := s.VpcConfiguration.Validate(); err != nil { + invalidParams.AddNested("VpcConfiguration", err.(request.ErrInvalidParams)) + } + } if invalidParams.Len() > 0 { return invalidParams @@ -4618,12 +5024,24 @@ func (s *UpdateWorkspaceInput) SetPermissionType(v string) *UpdateWorkspaceInput return s } +// SetRemoveVpcConfiguration sets the RemoveVpcConfiguration field's value. +func (s *UpdateWorkspaceInput) SetRemoveVpcConfiguration(v bool) *UpdateWorkspaceInput { + s.RemoveVpcConfiguration = &v + return s +} + // SetStackSetName sets the StackSetName field's value. func (s *UpdateWorkspaceInput) SetStackSetName(v string) *UpdateWorkspaceInput { s.StackSetName = &v return s } +// SetVpcConfiguration sets the VpcConfiguration field's value. +func (s *UpdateWorkspaceInput) SetVpcConfiguration(v *VpcConfiguration) *UpdateWorkspaceInput { + s.VpcConfiguration = v + return s +} + // SetWorkspaceDataSources sets the WorkspaceDataSources field's value. func (s *UpdateWorkspaceInput) SetWorkspaceDataSources(v []*string) *UpdateWorkspaceInput { s.WorkspaceDataSources = v @@ -4884,6 +5302,76 @@ func (s *ValidationExceptionField) SetName(v string) *ValidationExceptionField { return s } +// The configuration settings for an Amazon VPC that contains data sources for +// your Grafana workspace to connect to. +type VpcConfiguration struct { + _ struct{} `type:"structure"` + + // The list of Amazon EC2 security group IDs attached to the Amazon VPC for + // your Grafana workspace to connect. + // + // SecurityGroupIds is a required field + SecurityGroupIds []*string `locationName:"securityGroupIds" min:"1" type:"list" required:"true"` + + // The list of Amazon EC2 subnet IDs created in the Amazon VPC for your Grafana + // workspace to connect. + // + // SubnetIds is a required field + SubnetIds []*string `locationName:"subnetIds" min:"1" type:"list" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s VpcConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s VpcConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *VpcConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "VpcConfiguration"} + if s.SecurityGroupIds == nil { + invalidParams.Add(request.NewErrParamRequired("SecurityGroupIds")) + } + if s.SecurityGroupIds != nil && len(s.SecurityGroupIds) < 1 { + invalidParams.Add(request.NewErrParamMinLen("SecurityGroupIds", 1)) + } + if s.SubnetIds == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetIds")) + } + if s.SubnetIds != nil && len(s.SubnetIds) < 1 { + invalidParams.Add(request.NewErrParamMinLen("SubnetIds", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *VpcConfiguration) SetSecurityGroupIds(v []*string) *VpcConfiguration { + s.SecurityGroupIds = v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *VpcConfiguration) SetSubnetIds(v []*string) *VpcConfiguration { + s.SubnetIds = v + return s +} + // A structure containing information about an Amazon Managed Grafana workspace // in your account. type WorkspaceDescription struct { @@ -4896,8 +5384,8 @@ type WorkspaceDescription struct { // organizational units the workspace can access. AccountAccessType *string `locationName:"accountAccessType" type:"string" enum:"AccountAccessType"` - // A structure that describes whether the workspace uses SAML, Amazon Web Services - // SSO, or both methods for user authentication. + // A structure that describes whether the workspace uses SAML, IAM Identity + // Center, or both methods for user authentication. // // Authentication is a required field Authentication *AuthenticationSummary `locationName:"authentication" type:"structure" required:"true"` @@ -5011,6 +5499,10 @@ type WorkspaceDescription struct { // The list of tags associated with the workspace. Tags map[string]*string `locationName:"tags" type:"map"` + // The configuration for connecting to data sources in a private VPC (Amazon + // Virtual Private Cloud). + VpcConfiguration *VpcConfiguration `locationName:"vpcConfiguration" type:"structure"` + // The IAM role that grants permissions to the Amazon Web Services resources // that the workspace will view data from. This role must already exist. // @@ -5164,6 +5656,12 @@ func (s *WorkspaceDescription) SetTags(v map[string]*string) *WorkspaceDescripti return s } +// SetVpcConfiguration sets the VpcConfiguration field's value. +func (s *WorkspaceDescription) SetVpcConfiguration(v *VpcConfiguration) *WorkspaceDescription { + s.VpcConfiguration = v + return s +} + // SetWorkspaceRoleArn sets the WorkspaceRoleArn field's value. func (s *WorkspaceDescription) SetWorkspaceRoleArn(v string) *WorkspaceDescription { s.WorkspaceRoleArn = &v @@ -5373,6 +5871,9 @@ const ( // DataSourceTypeRedshift is a DataSourceType enum value DataSourceTypeRedshift = "REDSHIFT" + + // DataSourceTypeTwinmaker is a DataSourceType enum value + DataSourceTypeTwinmaker = "TWINMAKER" ) // DataSourceType_Values returns all elements of the DataSourceType enum @@ -5386,6 +5887,7 @@ func DataSourceType_Values() []string { DataSourceTypeSitewise, DataSourceTypeAthena, DataSourceTypeRedshift, + DataSourceTypeTwinmaker, } } diff --git a/service/managedgrafana/managedgrafanaiface/interface.go b/service/managedgrafana/managedgrafanaiface/interface.go index 26cc931fc1..d064c0cd07 100644 --- a/service/managedgrafana/managedgrafanaiface/interface.go +++ b/service/managedgrafana/managedgrafanaiface/interface.go @@ -88,6 +88,10 @@ type ManagedGrafanaAPI interface { DescribeWorkspaceAuthenticationWithContext(aws.Context, *managedgrafana.DescribeWorkspaceAuthenticationInput, ...request.Option) (*managedgrafana.DescribeWorkspaceAuthenticationOutput, error) DescribeWorkspaceAuthenticationRequest(*managedgrafana.DescribeWorkspaceAuthenticationInput) (*request.Request, *managedgrafana.DescribeWorkspaceAuthenticationOutput) + DescribeWorkspaceConfiguration(*managedgrafana.DescribeWorkspaceConfigurationInput) (*managedgrafana.DescribeWorkspaceConfigurationOutput, error) + DescribeWorkspaceConfigurationWithContext(aws.Context, *managedgrafana.DescribeWorkspaceConfigurationInput, ...request.Option) (*managedgrafana.DescribeWorkspaceConfigurationOutput, error) + DescribeWorkspaceConfigurationRequest(*managedgrafana.DescribeWorkspaceConfigurationInput) (*request.Request, *managedgrafana.DescribeWorkspaceConfigurationOutput) + DisassociateLicense(*managedgrafana.DisassociateLicenseInput) (*managedgrafana.DisassociateLicenseOutput, error) DisassociateLicenseWithContext(aws.Context, *managedgrafana.DisassociateLicenseInput, ...request.Option) (*managedgrafana.DisassociateLicenseOutput, error) DisassociateLicenseRequest(*managedgrafana.DisassociateLicenseInput) (*request.Request, *managedgrafana.DisassociateLicenseOutput) @@ -129,6 +133,10 @@ type ManagedGrafanaAPI interface { UpdateWorkspaceAuthentication(*managedgrafana.UpdateWorkspaceAuthenticationInput) (*managedgrafana.UpdateWorkspaceAuthenticationOutput, error) UpdateWorkspaceAuthenticationWithContext(aws.Context, *managedgrafana.UpdateWorkspaceAuthenticationInput, ...request.Option) (*managedgrafana.UpdateWorkspaceAuthenticationOutput, error) UpdateWorkspaceAuthenticationRequest(*managedgrafana.UpdateWorkspaceAuthenticationInput) (*request.Request, *managedgrafana.UpdateWorkspaceAuthenticationOutput) + + UpdateWorkspaceConfiguration(*managedgrafana.UpdateWorkspaceConfigurationInput) (*managedgrafana.UpdateWorkspaceConfigurationOutput, error) + UpdateWorkspaceConfigurationWithContext(aws.Context, *managedgrafana.UpdateWorkspaceConfigurationInput, ...request.Option) (*managedgrafana.UpdateWorkspaceConfigurationOutput, error) + UpdateWorkspaceConfigurationRequest(*managedgrafana.UpdateWorkspaceConfigurationInput) (*request.Request, *managedgrafana.UpdateWorkspaceConfigurationOutput) } var _ ManagedGrafanaAPI = (*managedgrafana.ManagedGrafana)(nil) diff --git a/service/recyclebin/api.go b/service/recyclebin/api.go index 2cff13939f..2b7727b1c7 100644 --- a/service/recyclebin/api.go +++ b/service/recyclebin/api.go @@ -4,6 +4,7 @@ package recyclebin import ( "fmt" + "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" @@ -166,6 +167,9 @@ func (c *RecycleBin) DeleteRuleRequest(input *DeleteRuleInput) (req *request.Req // - ValidationException // One or more of the parameters in the request is not valid. // +// - ConflictException +// The specified retention rule lock request can't be completed. +// // See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/DeleteRule func (c *RecycleBin) DeleteRule(input *DeleteRuleInput) (*DeleteRuleOutput, error) { req, out := c.DeleteRuleRequest(input) @@ -497,6 +501,94 @@ func (c *RecycleBin) ListTagsForResourceWithContext(ctx aws.Context, input *List return out, req.Send() } +const opLockRule = "LockRule" + +// LockRuleRequest generates a "aws/request.Request" representing the +// client's request for the LockRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// 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 LockRule for more information on using the LockRule +// 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 LockRuleRequest method. +// req, resp := client.LockRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/LockRule +func (c *RecycleBin) LockRuleRequest(input *LockRuleInput) (req *request.Request, output *LockRuleOutput) { + op := &request.Operation{ + Name: opLockRule, + HTTPMethod: "PATCH", + HTTPPath: "/rules/{identifier}/lock", + } + + if input == nil { + input = &LockRuleInput{} + } + + output = &LockRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// LockRule API operation for Amazon Recycle Bin. +// +// Locks a retention rule. A locked retention rule can't be modified or deleted. +// +// 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 Amazon Recycle Bin's +// API operation LockRule for usage and error information. +// +// Returned Error Types: +// +// - InternalServerException +// The service could not respond to the request due to an internal problem. +// +// - ResourceNotFoundException +// The specified resource was not found. +// +// - ValidationException +// One or more of the parameters in the request is not valid. +// +// - ConflictException +// The specified retention rule lock request can't be completed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/LockRule +func (c *RecycleBin) LockRule(input *LockRuleInput) (*LockRuleOutput, error) { + req, out := c.LockRuleRequest(input) + return out, req.Send() +} + +// LockRuleWithContext is the same as LockRule with the addition of +// the ability to pass a context and additional request options. +// +// See LockRule 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 *RecycleBin) LockRuleWithContext(ctx aws.Context, input *LockRuleInput, opts ...request.Option) (*LockRuleOutput, error) { + req, out := c.LockRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opTagResource = "TagResource" // TagResourceRequest generates a "aws/request.Request" representing the @@ -587,6 +679,95 @@ func (c *RecycleBin) TagResourceWithContext(ctx aws.Context, input *TagResourceI return out, req.Send() } +const opUnlockRule = "UnlockRule" + +// UnlockRuleRequest generates a "aws/request.Request" representing the +// client's request for the UnlockRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// 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 UnlockRule for more information on using the UnlockRule +// 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 UnlockRuleRequest method. +// req, resp := client.UnlockRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/UnlockRule +func (c *RecycleBin) UnlockRuleRequest(input *UnlockRuleInput) (req *request.Request, output *UnlockRuleOutput) { + op := &request.Operation{ + Name: opUnlockRule, + HTTPMethod: "PATCH", + HTTPPath: "/rules/{identifier}/unlock", + } + + if input == nil { + input = &UnlockRuleInput{} + } + + output = &UnlockRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// UnlockRule API operation for Amazon Recycle Bin. +// +// Unlocks a retention rule. After a retention rule is unlocked, it can be modified +// or deleted only after the unlock delay period expires. +// +// 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 Amazon Recycle Bin's +// API operation UnlockRule for usage and error information. +// +// Returned Error Types: +// +// - InternalServerException +// The service could not respond to the request due to an internal problem. +// +// - ResourceNotFoundException +// The specified resource was not found. +// +// - ValidationException +// One or more of the parameters in the request is not valid. +// +// - ConflictException +// The specified retention rule lock request can't be completed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/UnlockRule +func (c *RecycleBin) UnlockRule(input *UnlockRuleInput) (*UnlockRuleOutput, error) { + req, out := c.UnlockRuleRequest(input) + return out, req.Send() +} + +// UnlockRuleWithContext is the same as UnlockRule with the addition of +// the ability to pass a context and additional request options. +// +// See UnlockRule 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 *RecycleBin) UnlockRuleWithContext(ctx aws.Context, input *UnlockRuleInput, opts ...request.Option) (*UnlockRuleOutput, error) { + req, out := c.UnlockRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + const opUntagResource = "UntagResource" // UntagResourceRequest generates a "aws/request.Request" representing the @@ -716,8 +897,10 @@ func (c *RecycleBin) UpdateRuleRequest(input *UpdateRuleInput) (req *request.Req // UpdateRule API operation for Amazon Recycle Bin. // -// Updates an existing Recycle Bin retention rule. For more information, see -// Update Recycle Bin retention rules (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin-working-with-rules.html#recycle-bin-update-rule) +// Updates an existing Recycle Bin retention rule. You can update a retention +// rule's description, resource tags, and retention period at any time after +// creation. You can't update a retention rule's resource type after creation. +// For more information, see Update Recycle Bin retention rules (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin-working-with-rules.html#recycle-bin-update-rule) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -738,6 +921,9 @@ func (c *RecycleBin) UpdateRuleRequest(input *UpdateRuleInput) (req *request.Req // - ResourceNotFoundException // The specified resource was not found. // +// - ConflictException +// The specified retention rule lock request can't be completed. +// // See also, https://docs.aws.amazon.com/goto/WebAPI/rbin-2021-06-15/UpdateRule func (c *RecycleBin) UpdateRule(input *UpdateRuleInput) (*UpdateRuleOutput, error) { req, out := c.UpdateRuleRequest(input) @@ -760,12 +946,82 @@ func (c *RecycleBin) UpdateRuleWithContext(ctx aws.Context, input *UpdateRuleInp return out, req.Send() } +// The specified retention rule lock request can't be completed. +type ConflictException struct { + _ struct{} `type:"structure"` + RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"` + + Message_ *string `locationName:"Message" type:"string"` + + // The reason for the exception. + Reason *string `type:"string" enum:"ConflictExceptionReason"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s ConflictException) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s ConflictException) GoString() string { + return s.String() +} + +func newErrorConflictException(v protocol.ResponseMetadata) error { + return &ConflictException{ + RespMetadata: v, + } +} + +// Code returns the exception type name. +func (s *ConflictException) Code() string { + return "ConflictException" +} + +// Message returns the exception's message. +func (s *ConflictException) Message() string { + if s.Message_ != nil { + return *s.Message_ + } + return "" +} + +// OrigErr always returns nil, satisfies awserr.Error interface. +func (s *ConflictException) OrigErr() error { + return nil +} + +func (s *ConflictException) Error() string { + return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String()) +} + +// Status code returns the HTTP status code for the request's response error. +func (s *ConflictException) StatusCode() int { + return s.RespMetadata.StatusCode +} + +// RequestID returns the service's response RequestID for request. +func (s *ConflictException) RequestID() string { + return s.RespMetadata.RequestID +} + type CreateRuleInput struct { _ struct{} `type:"structure"` // The retention rule description. Description *string `type:"string"` + // Information about the retention rule lock configuration. + LockConfiguration *LockConfiguration `type:"structure"` + // Specifies the resource tags to use to identify resources that are to be retained // by a tag-level retention rule. For tag-level retention rules, only deleted // resources, of the specified resource type, that have one or more of the specified @@ -826,6 +1082,11 @@ func (s *CreateRuleInput) Validate() error { if s.RetentionPeriod == nil { invalidParams.Add(request.NewErrParamRequired("RetentionPeriod")) } + if s.LockConfiguration != nil { + if err := s.LockConfiguration.Validate(); err != nil { + invalidParams.AddNested("LockConfiguration", err.(request.ErrInvalidParams)) + } + } if s.ResourceTags != nil { for i, v := range s.ResourceTags { if v == nil { @@ -864,6 +1125,12 @@ func (s *CreateRuleInput) SetDescription(v string) *CreateRuleInput { return s } +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *CreateRuleInput) SetLockConfiguration(v *LockConfiguration) *CreateRuleInput { + s.LockConfiguration = v + return s +} + // SetResourceTags sets the ResourceTags field's value. func (s *CreateRuleInput) SetResourceTags(v []*ResourceTag) *CreateRuleInput { s.ResourceTags = v @@ -897,6 +1164,25 @@ type CreateRuleOutput struct { // The unique ID of the retention rule. Identifier *string `type:"string"` + // Information about the retention rule lock configuration. + LockConfiguration *LockConfiguration `type:"structure"` + + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + // Information about the resource tags used to identify resources that are retained // by the retention rule. ResourceTags []*ResourceTag `type:"list"` @@ -946,6 +1232,18 @@ func (s *CreateRuleOutput) SetIdentifier(v string) *CreateRuleOutput { return s } +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *CreateRuleOutput) SetLockConfiguration(v *LockConfiguration) *CreateRuleOutput { + s.LockConfiguration = v + return s +} + +// SetLockState sets the LockState field's value. +func (s *CreateRuleOutput) SetLockState(v string) *CreateRuleOutput { + s.LockState = &v + return s +} + // SetResourceTags sets the ResourceTags field's value. func (s *CreateRuleOutput) SetResourceTags(v []*ResourceTag) *CreateRuleOutput { s.ResourceTags = v @@ -1105,6 +1403,30 @@ type GetRuleOutput struct { // The unique ID of the retention rule. Identifier *string `type:"string"` + // Information about the retention rule lock configuration. + LockConfiguration *LockConfiguration `type:"structure"` + + // The date and time at which the unlock delay is set to expire. Only returned + // for retention rules that have been unlocked and that are still within the + // unlock delay period. + LockEndTime *time.Time `type:"timestamp"` + + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + // Information about the resource tags used to identify resources that are retained // by the retention rule. ResourceTags []*ResourceTag `type:"list"` @@ -1151,6 +1473,24 @@ func (s *GetRuleOutput) SetIdentifier(v string) *GetRuleOutput { return s } +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *GetRuleOutput) SetLockConfiguration(v *LockConfiguration) *GetRuleOutput { + s.LockConfiguration = v + return s +} + +// SetLockEndTime sets the LockEndTime field's value. +func (s *GetRuleOutput) SetLockEndTime(v time.Time) *GetRuleOutput { + s.LockEndTime = &v + return s +} + +// SetLockState sets the LockState field's value. +func (s *GetRuleOutput) SetLockState(v string) *GetRuleOutput { + s.LockState = &v + return s +} + // SetResourceTags sets the ResourceTags field's value. func (s *GetRuleOutput) SetResourceTags(v []*ResourceTag) *GetRuleOutput { s.ResourceTags = v @@ -1242,6 +1582,10 @@ func (s *InternalServerException) RequestID() string { type ListRulesInput struct { _ struct{} `type:"structure"` + // The lock state of the retention rules to list. Only retention rules with + // the specified lock state are returned. + LockState *string `type:"string" enum:"LockState"` + // The maximum number of results to return with a single call. To retrieve the // remaining results, make another call with the returned NextToken value. MaxResults *int64 `min:"1" type:"integer"` @@ -1307,6 +1651,12 @@ func (s *ListRulesInput) Validate() error { return nil } +// SetLockState sets the LockState field's value. +func (s *ListRulesInput) SetLockState(v string) *ListRulesInput { + s.LockState = &v + return s +} + // SetMaxResults sets the MaxResults field's value. func (s *ListRulesInput) SetMaxResults(v int64) *ListRulesInput { s.MaxResults = &v @@ -1452,15 +1802,14 @@ func (s *ListTagsForResourceOutput) SetTags(v []*Tag) *ListTagsForResourceOutput return s } -// The specified resource was not found. -type ResourceNotFoundException struct { - _ struct{} `type:"structure"` - RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"` - - Message_ *string `locationName:"Message" type:"string"` +// Information about a retention rule lock configuration. +type LockConfiguration struct { + _ struct{} `type:"structure"` - // The reason for the exception. - Reason *string `type:"string" enum:"ResourceNotFoundExceptionReason"` + // Information about the retention rule unlock delay. + // + // UnlockDelay is a required field + UnlockDelay *UnlockDelay `type:"structure" required:"true"` } // String returns the string representation. @@ -1468,7 +1817,7 @@ type ResourceNotFoundException struct { // API parameter values that are decorated as "sensitive" in the API will not // be included in the string output. The member name will be present, but the // value will be replaced with "sensitive". -func (s ResourceNotFoundException) String() string { +func (s LockConfiguration) String() string { return awsutil.Prettify(s) } @@ -1477,32 +1826,263 @@ func (s ResourceNotFoundException) String() string { // API parameter values that are decorated as "sensitive" in the API will not // be included in the string output. The member name will be present, but the // value will be replaced with "sensitive". -func (s ResourceNotFoundException) GoString() string { +func (s LockConfiguration) GoString() string { return s.String() } -func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error { - return &ResourceNotFoundException{ - RespMetadata: v, +// Validate inspects the fields of the type to determine if they are valid. +func (s *LockConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LockConfiguration"} + if s.UnlockDelay == nil { + invalidParams.Add(request.NewErrParamRequired("UnlockDelay")) + } + if s.UnlockDelay != nil { + if err := s.UnlockDelay.Validate(); err != nil { + invalidParams.AddNested("UnlockDelay", err.(request.ErrInvalidParams)) + } } -} - -// Code returns the exception type name. -func (s *ResourceNotFoundException) Code() string { - return "ResourceNotFoundException" -} -// Message returns the exception's message. -func (s *ResourceNotFoundException) Message() string { - if s.Message_ != nil { - return *s.Message_ + if invalidParams.Len() > 0 { + return invalidParams } - return "" + return nil } -// OrigErr always returns nil, satisfies awserr.Error interface. -func (s *ResourceNotFoundException) OrigErr() error { - return nil +// SetUnlockDelay sets the UnlockDelay field's value. +func (s *LockConfiguration) SetUnlockDelay(v *UnlockDelay) *LockConfiguration { + s.UnlockDelay = v + return s +} + +type LockRuleInput struct { + _ struct{} `type:"structure"` + + // The unique ID of the retention rule. + // + // Identifier is a required field + Identifier *string `location:"uri" locationName:"identifier" type:"string" required:"true"` + + // Information about the retention rule lock configuration. + // + // LockConfiguration is a required field + LockConfiguration *LockConfiguration `type:"structure" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s LockRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s LockRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LockRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LockRuleInput"} + if s.Identifier == nil { + invalidParams.Add(request.NewErrParamRequired("Identifier")) + } + if s.Identifier != nil && len(*s.Identifier) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Identifier", 1)) + } + if s.LockConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("LockConfiguration")) + } + if s.LockConfiguration != nil { + if err := s.LockConfiguration.Validate(); err != nil { + invalidParams.AddNested("LockConfiguration", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIdentifier sets the Identifier field's value. +func (s *LockRuleInput) SetIdentifier(v string) *LockRuleInput { + s.Identifier = &v + return s +} + +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *LockRuleInput) SetLockConfiguration(v *LockConfiguration) *LockRuleInput { + s.LockConfiguration = v + return s +} + +type LockRuleOutput struct { + _ struct{} `type:"structure"` + + // The retention rule description. + Description *string `type:"string"` + + // The unique ID of the retention rule. + Identifier *string `type:"string"` + + // Information about the retention rule lock configuration. + LockConfiguration *LockConfiguration `type:"structure"` + + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + + // Information about the resource tags used to identify resources that are retained + // by the retention rule. + ResourceTags []*ResourceTag `type:"list"` + + // The resource type retained by the retention rule. + ResourceType *string `type:"string" enum:"ResourceType"` + + // Information about the retention period for which the retention rule is to + // retain resources. + RetentionPeriod *RetentionPeriod `type:"structure"` + + // The state of the retention rule. Only retention rules that are in the available + // state retain resources. + Status *string `type:"string" enum:"RuleStatus"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s LockRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s LockRuleOutput) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *LockRuleOutput) SetDescription(v string) *LockRuleOutput { + s.Description = &v + return s +} + +// SetIdentifier sets the Identifier field's value. +func (s *LockRuleOutput) SetIdentifier(v string) *LockRuleOutput { + s.Identifier = &v + return s +} + +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *LockRuleOutput) SetLockConfiguration(v *LockConfiguration) *LockRuleOutput { + s.LockConfiguration = v + return s +} + +// SetLockState sets the LockState field's value. +func (s *LockRuleOutput) SetLockState(v string) *LockRuleOutput { + s.LockState = &v + return s +} + +// SetResourceTags sets the ResourceTags field's value. +func (s *LockRuleOutput) SetResourceTags(v []*ResourceTag) *LockRuleOutput { + s.ResourceTags = v + return s +} + +// SetResourceType sets the ResourceType field's value. +func (s *LockRuleOutput) SetResourceType(v string) *LockRuleOutput { + s.ResourceType = &v + return s +} + +// SetRetentionPeriod sets the RetentionPeriod field's value. +func (s *LockRuleOutput) SetRetentionPeriod(v *RetentionPeriod) *LockRuleOutput { + s.RetentionPeriod = v + return s +} + +// SetStatus sets the Status field's value. +func (s *LockRuleOutput) SetStatus(v string) *LockRuleOutput { + s.Status = &v + return s +} + +// The specified resource was not found. +type ResourceNotFoundException struct { + _ struct{} `type:"structure"` + RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"` + + Message_ *string `locationName:"Message" type:"string"` + + // The reason for the exception. + Reason *string `type:"string" enum:"ResourceNotFoundExceptionReason"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s ResourceNotFoundException) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s ResourceNotFoundException) GoString() string { + return s.String() +} + +func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error { + return &ResourceNotFoundException{ + RespMetadata: v, + } +} + +// Code returns the exception type name. +func (s *ResourceNotFoundException) Code() string { + return "ResourceNotFoundException" +} + +// Message returns the exception's message. +func (s *ResourceNotFoundException) Message() string { + if s.Message_ != nil { + return *s.Message_ + } + return "" +} + +// OrigErr always returns nil, satisfies awserr.Error interface. +func (s *ResourceNotFoundException) OrigErr() error { + return nil } func (s *ResourceNotFoundException) Error() string { @@ -1653,6 +2233,22 @@ type RuleSummary struct { // The unique ID of the retention rule. Identifier *string `type:"string"` + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + // Information about the retention period for which the retention rule is to // retain resources. RetentionPeriod *RetentionPeriod `type:"structure"` @@ -1688,6 +2284,12 @@ func (s *RuleSummary) SetIdentifier(v string) *RuleSummary { return s } +// SetLockState sets the LockState field's value. +func (s *RuleSummary) SetLockState(v string) *RuleSummary { + s.LockState = &v + return s +} + // SetRetentionPeriod sets the RetentionPeriod field's value. func (s *RuleSummary) SetRetentionPeriod(v *RetentionPeriod) *RuleSummary { s.RetentionPeriod = v @@ -1921,6 +2523,244 @@ func (s TagResourceOutput) GoString() string { return s.String() } +// Information about the retention rule unlock delay. The unlock delay is the +// period after which a retention rule can be modified or edited after it has +// been unlocked by a user with the required permissions. The retention rule +// can't be modified or deleted during the unlock delay. +type UnlockDelay struct { + _ struct{} `type:"structure"` + + // The unit of time in which to measure the unlock delay. Currently, the unlock + // delay can be measure only in days. + // + // UnlockDelayUnit is a required field + UnlockDelayUnit *string `type:"string" required:"true" enum:"UnlockDelayUnit"` + + // The unlock delay period, measured in the unit specified for UnlockDelayUnit. + // + // UnlockDelayValue is a required field + UnlockDelayValue *int64 `min:"7" type:"integer" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockDelay) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockDelay) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *UnlockDelay) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UnlockDelay"} + if s.UnlockDelayUnit == nil { + invalidParams.Add(request.NewErrParamRequired("UnlockDelayUnit")) + } + if s.UnlockDelayValue == nil { + invalidParams.Add(request.NewErrParamRequired("UnlockDelayValue")) + } + if s.UnlockDelayValue != nil && *s.UnlockDelayValue < 7 { + invalidParams.Add(request.NewErrParamMinValue("UnlockDelayValue", 7)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetUnlockDelayUnit sets the UnlockDelayUnit field's value. +func (s *UnlockDelay) SetUnlockDelayUnit(v string) *UnlockDelay { + s.UnlockDelayUnit = &v + return s +} + +// SetUnlockDelayValue sets the UnlockDelayValue field's value. +func (s *UnlockDelay) SetUnlockDelayValue(v int64) *UnlockDelay { + s.UnlockDelayValue = &v + return s +} + +type UnlockRuleInput struct { + _ struct{} `type:"structure" nopayload:"true"` + + // The unique ID of the retention rule. + // + // Identifier is a required field + Identifier *string `location:"uri" locationName:"identifier" type:"string" required:"true"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *UnlockRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UnlockRuleInput"} + if s.Identifier == nil { + invalidParams.Add(request.NewErrParamRequired("Identifier")) + } + if s.Identifier != nil && len(*s.Identifier) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Identifier", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIdentifier sets the Identifier field's value. +func (s *UnlockRuleInput) SetIdentifier(v string) *UnlockRuleInput { + s.Identifier = &v + return s +} + +type UnlockRuleOutput struct { + _ struct{} `type:"structure"` + + // The retention rule description. + Description *string `type:"string"` + + // The unique ID of the retention rule. + Identifier *string `type:"string"` + + // Information about the retention rule lock configuration. + LockConfiguration *LockConfiguration `type:"structure"` + + // The date and time at which the unlock delay is set to expire. Only returned + // for retention rules that have been unlocked and that are still within the + // unlock delay period. + LockEndTime *time.Time `type:"timestamp"` + + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + + // Information about the resource tags used to identify resources that are retained + // by the retention rule. + ResourceTags []*ResourceTag `type:"list"` + + // The resource type retained by the retention rule. + ResourceType *string `type:"string" enum:"ResourceType"` + + // Information about the retention period for which the retention rule is to + // retain resources. + RetentionPeriod *RetentionPeriod `type:"structure"` + + // The state of the retention rule. Only retention rules that are in the available + // state retain resources. + Status *string `type:"string" enum:"RuleStatus"` +} + +// String returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation. +// +// API parameter values that are decorated as "sensitive" in the API will not +// be included in the string output. The member name will be present, but the +// value will be replaced with "sensitive". +func (s UnlockRuleOutput) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *UnlockRuleOutput) SetDescription(v string) *UnlockRuleOutput { + s.Description = &v + return s +} + +// SetIdentifier sets the Identifier field's value. +func (s *UnlockRuleOutput) SetIdentifier(v string) *UnlockRuleOutput { + s.Identifier = &v + return s +} + +// SetLockConfiguration sets the LockConfiguration field's value. +func (s *UnlockRuleOutput) SetLockConfiguration(v *LockConfiguration) *UnlockRuleOutput { + s.LockConfiguration = v + return s +} + +// SetLockEndTime sets the LockEndTime field's value. +func (s *UnlockRuleOutput) SetLockEndTime(v time.Time) *UnlockRuleOutput { + s.LockEndTime = &v + return s +} + +// SetLockState sets the LockState field's value. +func (s *UnlockRuleOutput) SetLockState(v string) *UnlockRuleOutput { + s.LockState = &v + return s +} + +// SetResourceTags sets the ResourceTags field's value. +func (s *UnlockRuleOutput) SetResourceTags(v []*ResourceTag) *UnlockRuleOutput { + s.ResourceTags = v + return s +} + +// SetResourceType sets the ResourceType field's value. +func (s *UnlockRuleOutput) SetResourceType(v string) *UnlockRuleOutput { + s.ResourceType = &v + return s +} + +// SetRetentionPeriod sets the RetentionPeriod field's value. +func (s *UnlockRuleOutput) SetRetentionPeriod(v *RetentionPeriod) *UnlockRuleOutput { + s.RetentionPeriod = v + return s +} + +// SetStatus sets the Status field's value. +func (s *UnlockRuleOutput) SetStatus(v string) *UnlockRuleOutput { + s.Status = &v + return s +} + type UntagResourceInput struct { _ struct{} `type:"structure" nopayload:"true"` @@ -2034,9 +2874,9 @@ type UpdateRuleInput struct { // rule is created, even if the resources are not tagged. ResourceTags []*ResourceTag `type:"list"` - // The resource type to be retained by the retention rule. Currently, only Amazon - // EBS snapshots and EBS-backed AMIs are supported. To retain snapshots, specify - // EBS_SNAPSHOT. To retain EBS-backed AMIs, specify EC2_IMAGE. + // + // This parameter is currently not supported. You can't update a retention rule's + // resource type after creation. ResourceType *string `type:"string" enum:"ResourceType"` // Information about the retention period for which the retention rule is to @@ -2132,6 +2972,27 @@ type UpdateRuleOutput struct { // The unique ID of the retention rule. Identifier *string `type:"string"` + // The date and time at which the unlock delay is set to expire. Only returned + // for retention rules that have been unlocked and that are still within the + // unlock delay period. + LockEndTime *time.Time `type:"timestamp"` + + // The lock state for the retention rule. + // + // * locked - The retention rule is locked and can't be modified or deleted. + // + // * pending_unlock - The retention rule has been unlocked but it is still + // within the unlock delay period. The retention rule can be modified or + // deleted only after the unlock delay period has expired. + // + // * unlocked - The retention rule is unlocked and it can be modified or + // deleted by any user with the required permissions. + // + // * null - The retention rule has never been locked. Once a retention rule + // has been locked, it can transition between the locked and unlocked states + // only; it can never transition back to null. + LockState *string `type:"string" enum:"LockState"` + // Information about the resource tags used to identify resources that are retained // by the retention rule. ResourceTags []*ResourceTag `type:"list"` @@ -2178,6 +3039,18 @@ func (s *UpdateRuleOutput) SetIdentifier(v string) *UpdateRuleOutput { return s } +// SetLockEndTime sets the LockEndTime field's value. +func (s *UpdateRuleOutput) SetLockEndTime(v time.Time) *UpdateRuleOutput { + s.LockEndTime = &v + return s +} + +// SetLockState sets the LockState field's value. +func (s *UpdateRuleOutput) SetLockState(v string) *UpdateRuleOutput { + s.LockState = &v + return s +} + // SetResourceTags sets the ResourceTags field's value. func (s *UpdateRuleOutput) SetResourceTags(v []*ResourceTag) *UpdateRuleOutput { s.ResourceTags = v @@ -2269,6 +3142,38 @@ func (s *ValidationException) RequestID() string { return s.RespMetadata.RequestID } +const ( + // ConflictExceptionReasonInvalidRuleState is a ConflictExceptionReason enum value + ConflictExceptionReasonInvalidRuleState = "INVALID_RULE_STATE" +) + +// ConflictExceptionReason_Values returns all elements of the ConflictExceptionReason enum +func ConflictExceptionReason_Values() []string { + return []string{ + ConflictExceptionReasonInvalidRuleState, + } +} + +const ( + // LockStateLocked is a LockState enum value + LockStateLocked = "locked" + + // LockStatePendingUnlock is a LockState enum value + LockStatePendingUnlock = "pending_unlock" + + // LockStateUnlocked is a LockState enum value + LockStateUnlocked = "unlocked" +) + +// LockState_Values returns all elements of the LockState enum +func LockState_Values() []string { + return []string{ + LockStateLocked, + LockStatePendingUnlock, + LockStateUnlocked, + } +} + const ( // ResourceNotFoundExceptionReasonRuleNotFound is a ResourceNotFoundExceptionReason enum value ResourceNotFoundExceptionReasonRuleNotFound = "RULE_NOT_FOUND" @@ -2337,6 +3242,18 @@ func ServiceQuotaExceededExceptionReason_Values() []string { } } +const ( + // UnlockDelayUnitDays is a UnlockDelayUnit enum value + UnlockDelayUnitDays = "DAYS" +) + +// UnlockDelayUnit_Values returns all elements of the UnlockDelayUnit enum +func UnlockDelayUnit_Values() []string { + return []string{ + UnlockDelayUnitDays, + } +} + const ( // ValidationExceptionReasonInvalidPageToken is a ValidationExceptionReason enum value ValidationExceptionReasonInvalidPageToken = "INVALID_PAGE_TOKEN" diff --git a/service/recyclebin/errors.go b/service/recyclebin/errors.go index eddbcfa793..12f6cbd968 100644 --- a/service/recyclebin/errors.go +++ b/service/recyclebin/errors.go @@ -8,6 +8,12 @@ import ( const ( + // ErrCodeConflictException for service response error code + // "ConflictException". + // + // The specified retention rule lock request can't be completed. + ErrCodeConflictException = "ConflictException" + // ErrCodeInternalServerException for service response error code // "InternalServerException". // @@ -35,6 +41,7 @@ const ( ) var exceptionFromCode = map[string]func(protocol.ResponseMetadata) error{ + "ConflictException": newErrorConflictException, "InternalServerException": newErrorInternalServerException, "ResourceNotFoundException": newErrorResourceNotFoundException, "ServiceQuotaExceededException": newErrorServiceQuotaExceededException, diff --git a/service/recyclebin/recyclebiniface/interface.go b/service/recyclebin/recyclebiniface/interface.go index 7efb5b522f..72a6a172a5 100644 --- a/service/recyclebin/recyclebiniface/interface.go +++ b/service/recyclebin/recyclebiniface/interface.go @@ -83,10 +83,18 @@ type RecycleBinAPI interface { ListTagsForResourceWithContext(aws.Context, *recyclebin.ListTagsForResourceInput, ...request.Option) (*recyclebin.ListTagsForResourceOutput, error) ListTagsForResourceRequest(*recyclebin.ListTagsForResourceInput) (*request.Request, *recyclebin.ListTagsForResourceOutput) + LockRule(*recyclebin.LockRuleInput) (*recyclebin.LockRuleOutput, error) + LockRuleWithContext(aws.Context, *recyclebin.LockRuleInput, ...request.Option) (*recyclebin.LockRuleOutput, error) + LockRuleRequest(*recyclebin.LockRuleInput) (*request.Request, *recyclebin.LockRuleOutput) + TagResource(*recyclebin.TagResourceInput) (*recyclebin.TagResourceOutput, error) TagResourceWithContext(aws.Context, *recyclebin.TagResourceInput, ...request.Option) (*recyclebin.TagResourceOutput, error) TagResourceRequest(*recyclebin.TagResourceInput) (*request.Request, *recyclebin.TagResourceOutput) + UnlockRule(*recyclebin.UnlockRuleInput) (*recyclebin.UnlockRuleOutput, error) + UnlockRuleWithContext(aws.Context, *recyclebin.UnlockRuleInput, ...request.Option) (*recyclebin.UnlockRuleOutput, error) + UnlockRuleRequest(*recyclebin.UnlockRuleInput) (*request.Request, *recyclebin.UnlockRuleOutput) + UntagResource(*recyclebin.UntagResourceInput) (*recyclebin.UntagResourceOutput, error) UntagResourceWithContext(aws.Context, *recyclebin.UntagResourceInput, ...request.Option) (*recyclebin.UntagResourceOutput, error) UntagResourceRequest(*recyclebin.UntagResourceInput) (*request.Request, *recyclebin.UntagResourceOutput)