Repository: boto/botocore
Pull request #918 (2016-05-12 22:01:55)

Include more info in debug logs
This includes two things:

1. Add location of JSON file from loaders:

```
$ aws s3api list-buckets --debug
2016-05-12 15:00:56,727 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /Users/foo/Source/botocore/botocore/data/s3/2006-03-01/waiters-2.json
```

2. Add operation name to the repr:

```
$ aws s3 cp foo s3://bucket/ --debug 2>&1 | grep OperationModel | awk '{print $13}'
OperationModel(name=CreateMultipartUpload)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=UploadPart)
OperationModel(name=CompleteMultipartUpload)
```

cc @kyleknap @JordonPhillips 


Patch:
diff --git a/.changes/1.4.19.json b/.changes/1.4.19.json
deleted file mode 100644
index f31c4ce53..000000000
--- a/.changes/1.4.19.json
+++ /dev/null
@@ -1,22 +0,0 @@
-[
-  {
-    "category": "``ec2``", 
-    "description": "Update ec2 client to latest version", 
-    "type": "feature"
-  }, 
-  {
-    "category": "``ssm``", 
-    "description": "Update ssm client to latest version", 
-    "type": "feature"
-  }, 
-  {
-    "category": "``discovery``", 
-    "description": "Update discovery client to latest version", 
-    "type": "feature"
-  }, 
-  {
-    "category": "``cloudformation``", 
-    "description": "Update cloudformation client to latest version", 
-    "type": "feature"
-  }
-]
\ No newline at end of file
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 56d2515b7..38cfb4ec5 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -2,15 +2,6 @@
 CHANGELOG
 =========
 
-1.4.19
-======
-
-* feature:``ec2``: Update ec2 client to latest version
-* feature:``ssm``: Update ssm client to latest version
-* feature:``discovery``: Update discovery client to latest version
-* feature:``cloudformation``: Update cloudformation client to latest version
-
-
 1.4.18
 ======
 
diff --git a/botocore/__init__.py b/botocore/__init__.py
index a72646101..af4ac5c3b 100644
--- a/botocore/__init__.py
+++ b/botocore/__init__.py
@@ -16,7 +16,7 @@ import os
 import re
 import logging
 
-__version__ = '1.4.19'
+__version__ = '1.4.18'
 
 
 class NullHandler(logging.Handler):
diff --git a/botocore/data/cloudformation/2010-05-15/service-2.json b/botocore/data/cloudformation/2010-05-15/service-2.json
index 346d335fb..69d852ed7 100644
--- a/botocore/data/cloudformation/2010-05-15/service-2.json
+++ b/botocore/data/cloudformation/2010-05-15/service-2.json
@@ -16,7 +16,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"CancelUpdateStackInput"},
-      "documentation":"<p>Cancels an update on the specified stack. If the call completes successfully, the stack rolls back the update and reverts to the previous stack configuration.</p> <note> <p>You can cancel only stacks that are in the UPDATE_IN_PROGRESS state.</p> </note>"
+      "documentation":"<p>Cancels an update on the specified stack. If the call completes successfully, the stack rolls back the update and reverts to the previous stack configuration.</p> <note>You can cancel only stacks that are in the UPDATE_IN_PROGRESS state.</note> <examples></examples>"
     },
     "ContinueUpdateRollback":{
       "name":"ContinueUpdateRollback",
@@ -29,7 +29,7 @@
         "shape":"ContinueUpdateRollbackOutput",
         "resultWrapper":"ContinueUpdateRollbackResult"
       },
-      "documentation":"<p>For a specified stack that is in the <code>UPDATE_ROLLBACK_FAILED</code> state, continues rolling it back to the <code>UPDATE_ROLLBACK_COMPLETE</code> state. Depending on the cause of the failure, you can manually <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-update-rollback-failed\"> fix the error</a> and continue the rollback. By continuing the rollback, you can return your stack to a working state (the <code>UPDATE_ROLLBACK_COMPLETE</code> state), and then try to update the stack again.</p> <p>A stack goes into the <code>UPDATE_ROLLBACK_FAILED</code> state when AWS CloudFormation cannot roll back all changes after a failed stack update. For example, you might have a stack that is rolling back to an old database instance that was deleted outside of AWS CloudFormation. Because AWS CloudFormation doesn't know the database was deleted, it assumes that the database instance still exists and attempts to roll back to it, causing the update rollback to fail.</p>"
+      "documentation":"<p>For a specified stack that is in the <code>UPDATE_ROLLBACK_FAILED</code> state, continues rolling it back to the <code>UPDATE_ROLLBACK_COMPLETE</code> state. Depending on the cause of the failure, you can manually <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-update-rollback-failed\"> fix the error</a> and continue the rollback. By continuing the rollback, you can return your stack to a working state (the <code>UPDATE_ROLLBACK_COMPLETE</code> state), and then try to update the stack again.</p> <p>A stack goes into the <code>UPDATE_ROLLBACK_FAILED</code> state when AWS CloudFormation cannot roll back all changes after a failed stack update. For example, you might have a stack that is rolling back to an old database instance that was deleted outside of AWS CloudFormation. Because AWS CloudFormation doesn't know the database was deleted, it assumes that the database instance still exists and attempts to roll back to it, causing the update rollback to fail.</p> <examples></examples>"
     },
     "CreateChangeSet":{
       "name":"CreateChangeSet",
@@ -47,7 +47,7 @@
         {"shape":"InsufficientCapabilitiesException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates a list of changes for a stack. AWS CloudFormation generates the change set by comparing the stack's information with the information that you submit. A change set can help you understand which resources AWS CloudFormation will change and how it will change them before you update your stack. Change sets allow you to check before you make a change so that you don't delete or replace critical resources.</p> <p>AWS CloudFormation doesn't make any changes to the stack when you create a change set. To make the specified changes, you must execute the change set by using the <a>ExecuteChangeSet</a> action.</p> <p>After the call successfully completes, AWS CloudFormation starts creating the change set. To check the status of the change set, use the <a>DescribeChangeSet</a> action.</p>"
+      "documentation":"<p>Creates a list of changes for a stack. AWS CloudFormation generates the change set by comparing the stack's information with the information that you submit. A change set can help you understand which resources AWS CloudFormation will change and how it will change them before you update your stack. Change sets allow you to check before you make a change so that you don't delete or replace critical resources.</p> <p>AWS CloudFormation doesn't make any changes to the stack when you create a change set. To make the specified changes, you must execute the change set by using the <a>ExecuteChangeSet</a> action.</p> <p>After the call successfully completes, AWS CloudFormation starts creating the change set. To check the status of the change set, use the <a>DescribeChangeSet</a> action.</p> <examples></examples>"
     },
     "CreateStack":{
       "name":"CreateStack",
@@ -65,7 +65,7 @@
         {"shape":"AlreadyExistsException"},
         {"shape":"InsufficientCapabilitiesException"}
       ],
-      "documentation":"<p>Creates a stack as specified in the template. After the call completes successfully, the stack creation starts. You can check the status of the stack via the <a>DescribeStacks</a> API.</p>"
+      "documentation":"<p>Creates a stack as specified in the template. After the call completes successfully, the stack creation starts. You can check the status of the stack via the <a>DescribeStacks</a> API.</p> <examples></examples>"
     },
     "DeleteChangeSet":{
       "name":"DeleteChangeSet",
@@ -78,10 +78,7 @@
         "shape":"DeleteChangeSetOutput",
         "resultWrapper":"DeleteChangeSetResult"
       },
-      "errors":[
-        {"shape":"InvalidChangeSetStatusException"}
-      ],
-      "documentation":"<p>Deletes the specified change set. Deleting change sets ensures that no one executes the wrong change set.</p> <p>If the call successfully completes, AWS CloudFormation successfully deleted the change set.</p>"
+      "documentation":"<p>Deletes the specified change set. Deleting change sets ensures that no one executes the wrong change set.</p> <p>If the call successfully completes, AWS CloudFormation successfully deleted the change set.</p> <examples></examples>"
     },
     "DeleteStack":{
       "name":"DeleteStack",
@@ -90,7 +87,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"DeleteStackInput"},
-      "documentation":"<p>Deletes a specified stack. Once the call completes successfully, stack deletion starts. Deleted stacks do not show up in the <a>DescribeStacks</a> API if the deletion has been completed successfully.</p>"
+      "documentation":"<p>Deletes a specified stack. Once the call completes successfully, stack deletion starts. Deleted stacks do not show up in the <a>DescribeStacks</a> API if the deletion has been completed successfully.</p> <examples></examples>"
     },
     "DescribeAccountLimits":{
       "name":"DescribeAccountLimits",
@@ -103,7 +100,7 @@
         "shape":"DescribeAccountLimitsOutput",
         "resultWrapper":"DescribeAccountLimitsResult"
       },
-      "documentation":"<p>Retrieves your account's AWS CloudFormation limits, such as the maximum number of stacks that you can create in your account.</p>"
+      "documentation":"<p>Retrieves your account's AWS CloudFormation limits, such as the maximum number of stacks that you can create in your account.</p> <examples></examples>"
     },
     "DescribeChangeSet":{
       "name":"DescribeChangeSet",
@@ -119,7 +116,7 @@
       "errors":[
         {"shape":"ChangeSetNotFoundException"}
       ],
-      "documentation":"<p>Returns the inputs for the change set and a list of changes that AWS CloudFormation will make if you execute the change set. For more information, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html\">Updating Stacks Using Change Sets</a> in the AWS CloudFormation User Guide.</p>"
+      "documentation":"<p>Returns the inputs for the change set and a list of changes that AWS CloudFormation will make if you execute the change set. For more information, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html\">Updating Stacks Using Change Sets</a> in the AWS CloudFormation User Guide.</p> <examples></examples>"
     },
     "DescribeStackEvents":{
       "name":"DescribeStackEvents",
@@ -132,7 +129,7 @@
         "shape":"DescribeStackEventsOutput",
         "resultWrapper":"DescribeStackEventsResult"
       },
-      "documentation":"<p>Returns all stack related events for a specified stack in reverse chronological order. For more information about a stack's event history, go to <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/concept-stack.html\">Stacks</a> in the AWS CloudFormation User Guide.</p> <note> <p>You can list events for stacks that have failed to create or have been deleted by specifying the unique stack identifier (stack ID).</p> </note>"
+      "documentation":"<p>Returns all stack related events for a specified stack. For more information about a stack's event history, go to <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/concept-stack.html\">Stacks</a> in the AWS CloudFormation User Guide.</p> <note>You can list events for stacks that have failed to create or have been deleted by specifying the unique stack identifier (stack ID).</note> <examples></examples>"
     },
     "DescribeStackResource":{
       "name":"DescribeStackResource",
@@ -145,7 +142,7 @@
         "shape":"DescribeStackResourceOutput",
         "resultWrapper":"DescribeStackResourceResult"
       },
-      "documentation":"<p>Returns a description of the specified resource in the specified stack.</p> <p>For deleted stacks, DescribeStackResource returns resource information for up to 90 days after the stack has been deleted.</p>"
+      "documentation":"<p>Returns a description of the specified resource in the specified stack.</p> <p>For deleted stacks, DescribeStackResource returns resource information for up to 90 days after the stack has been deleted.</p> <examples></examples>"
     },
     "DescribeStackResources":{
       "name":"DescribeStackResources",
@@ -158,7 +155,7 @@
         "shape":"DescribeStackResourcesOutput",
         "resultWrapper":"DescribeStackResourcesResult"
       },
-      "documentation":"<p>Returns AWS resource descriptions for running and deleted stacks. If <code>StackName</code> is specified, all the associated resources that are part of the stack are returned. If <code>PhysicalResourceId</code> is specified, the associated resources of the stack that the resource belongs to are returned.</p> <note> <p>Only the first 100 resources will be returned. If your stack has more resources than this, you should use <code>ListStackResources</code> instead.</p> </note> <p>For deleted stacks, <code>DescribeStackResources</code> returns resource information for up to 90 days after the stack has been deleted.</p> <p>You must specify either <code>StackName</code> or <code>PhysicalResourceId</code>, but not both. In addition, you can specify <code>LogicalResourceId</code> to filter the returned result. For more information about resources, the <code>LogicalResourceId</code> and <code>PhysicalResourceId</code>, go to the <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/\">AWS CloudFormation User Guide</a>.</p> <note> <p>A <code>ValidationError</code> is returned if you specify both <code>StackName</code> and <code>PhysicalResourceId</code> in the same request.</p> </note>"
+      "documentation":"<p>Returns AWS resource descriptions for running and deleted stacks. If <code>StackName</code> is specified, all the associated resources that are part of the stack are returned. If <code>PhysicalResourceId</code> is specified, the associated resources of the stack that the resource belongs to are returned.</p> <note>Only the first 100 resources will be returned. If your stack has more resources than this, you should use <code>ListStackResources</code> instead.</note> <p>For deleted stacks, <code>DescribeStackResources</code> returns resource information for up to 90 days after the stack has been deleted.</p> <p>You must specify either <code>StackName</code> or <code>PhysicalResourceId</code>, but not both. In addition, you can specify <code>LogicalResourceId</code> to filter the returned result. For more information about resources, the <code>LogicalResourceId</code> and <code>PhysicalResourceId</code>, go to the <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/\">AWS CloudFormation User Guide</a>.</p> <note>A <code>ValidationError</code> is returned if you specify both <code>StackName</code> and <code>PhysicalResourceId</code> in the same request.</note> <examples></examples>"
     },
     "DescribeStacks":{
       "name":"DescribeStacks",
@@ -171,7 +168,7 @@
         "shape":"DescribeStacksOutput",
         "resultWrapper":"DescribeStacksResult"
       },
-      "documentation":"<p>Returns the description for the specified stack; if no stack name was specified, then it returns the description for all the stacks created.</p>"
+      "documentation":"<p>Returns the description for the specified stack; if no stack name was specified, then it returns the description for all the stacks created.</p> <examples></examples>"
     },
     "EstimateTemplateCost":{
       "name":"EstimateTemplateCost",
@@ -184,7 +181,7 @@
         "shape":"EstimateTemplateCostOutput",
         "resultWrapper":"EstimateTemplateCostResult"
       },
-      "documentation":"<p>Returns the estimated monthly cost of a template. The return value is an AWS Simple Monthly Calculator URL with a query string that describes the resources required to run the template.</p>"
+      "documentation":"<p>Returns the estimated monthly cost of a template. The return value is an AWS Simple Monthly Calculator URL with a query string that describes the resources required to run the template.</p> <examples></examples>"
     },
     "ExecuteChangeSet":{
       "name":"ExecuteChangeSet",
@@ -201,7 +198,7 @@
         {"shape":"InvalidChangeSetStatusException"},
         {"shape":"ChangeSetNotFoundException"}
       ],
-      "documentation":"<p>Updates a stack using the input information that was provided when the specified change set was created. After the call successfully completes, AWS CloudFormation starts updating the stack. Use the <a>DescribeStacks</a> action to view the status of the update.</p> <p>When you execute a change set, AWS CloudFormation deletes all other change sets associated with the stack because they aren't valid for the updated stack.</p> <p>If a stack policy is associated with the stack, AWS CloudFormation enforces the policy during the update. You can't specify a temporary stack policy that overrides the current policy.</p>"
+      "documentation":"<p>Updates a stack using the input information that was provided when the specified change set was created. After the call successfully completes, AWS CloudFormation starts updating the stack. Use the <a>DescribeStacks</a> action to view the status of the update.</p> <p>When you execute a change set, AWS CloudFormation deletes all other change sets associated with the stack because they aren't valid for the updated stack.</p> <p>If a stack policy is associated with the stack, AWS CloudFormation enforces the policy during the update. You can't specify a temporary stack policy that overrides the current policy.</p> <examples></examples>"
     },
     "GetStackPolicy":{
       "name":"GetStackPolicy",
@@ -214,7 +211,7 @@
         "shape":"GetStackPolicyOutput",
         "resultWrapper":"GetStackPolicyResult"
       },
-      "documentation":"<p>Returns the stack policy for a specified stack. If a stack doesn't have a policy, a null value is returned.</p>"
+      "documentation":"<p>Returns the stack policy for a specified stack. If a stack doesn't have a policy, a null value is returned.</p> <examples></examples>"
     },
     "GetTemplate":{
       "name":"GetTemplate",
@@ -227,7 +224,7 @@
         "shape":"GetTemplateOutput",
         "resultWrapper":"GetTemplateResult"
       },
-      "documentation":"<p>Returns the template body for a specified stack. You can get the template for running or deleted stacks.</p> <p>For deleted stacks, GetTemplate returns the template for up to 90 days after the stack has been deleted.</p> <note> <p> If the template does not exist, a <code>ValidationError</code> is returned. </p> </note>"
+      "documentation":"<p>Returns the template body for a specified stack. You can get the template for running or deleted stacks.</p> <p>For deleted stacks, GetTemplate returns the template for up to 90 days after the stack has been deleted.</p> <note> If the template does not exist, a <code>ValidationError</code> is returned. </note> <examples></examples>"
     },
     "GetTemplateSummary":{
       "name":"GetTemplateSummary",
@@ -240,7 +237,7 @@
         "shape":"GetTemplateSummaryOutput",
         "resultWrapper":"GetTemplateSummaryResult"
       },
-      "documentation":"<p>Returns information about a new or existing template. The <code>GetTemplateSummary</code> action is useful for viewing parameter information, such as default parameter values and parameter types, before you create or update a stack.</p> <p>You can use the <code>GetTemplateSummary</code> action when you submit a template, or you can get template information for a running or deleted stack.</p> <p>For deleted stacks, <code>GetTemplateSummary</code> returns the template information for up to 90 days after the stack has been deleted. If the template does not exist, a <code>ValidationError</code> is returned.</p>"
+      "documentation":"<p>Returns information about a new or existing template. The <code>GetTemplateSummary</code> action is useful for viewing parameter information, such as default parameter values and parameter types, before you create or update a stack.</p> <p>You can use the <code>GetTemplateSummary</code> action when you submit a template, or you can get template information for a running or deleted stack.</p> <p>For deleted stacks, <code>GetTemplateSummary</code> returns the template information for up to 90 days after the stack has been deleted. If the template does not exist, a <code>ValidationError</code> is returned.</p> <examples></examples>"
     },
     "ListChangeSets":{
       "name":"ListChangeSets",
@@ -253,7 +250,7 @@
         "shape":"ListChangeSetsOutput",
         "resultWrapper":"ListChangeSetsResult"
       },
-      "documentation":"<p>Returns the ID and status of each active change set for a stack. For example, AWS CloudFormation lists change sets that are in the <code>CREATE_IN_PROGRESS</code> or <code>CREATE_PENDING</code> state.</p>"
+      "documentation":"<p>Returns the ID and status of each active change set for a stack. For example, AWS CloudFormation lists change sets that are in the <code>CREATE_IN_PROGRESS</code> or <code>CREATE_PENDING</code> state.</p> <examples></examples>"
     },
     "ListStackResources":{
       "name":"ListStackResources",
@@ -266,7 +263,7 @@
         "shape":"ListStackResourcesOutput",
         "resultWrapper":"ListStackResourcesResult"
       },
-      "documentation":"<p>Returns descriptions of all resources of the specified stack.</p> <p>For deleted stacks, ListStackResources returns resource information for up to 90 days after the stack has been deleted.</p>"
+      "documentation":"<p>Returns descriptions of all resources of the specified stack.</p> <p>For deleted stacks, ListStackResources returns resource information for up to 90 days after the stack has been deleted.</p> <examples></examples>"
     },
     "ListStacks":{
       "name":"ListStacks",
@@ -279,7 +276,7 @@
         "shape":"ListStacksOutput",
         "resultWrapper":"ListStacksResult"
       },
-      "documentation":"<p>Returns the summary information for stacks whose status matches the specified StackStatusFilter. Summary information for stacks that have been deleted is kept for 90 days after the stack is deleted. If no StackStatusFilter is specified, summary information for all stacks is returned (including existing stacks and stacks that have been deleted).</p>"
+      "documentation":"<p>Returns the summary information for stacks whose status matches the specified StackStatusFilter. Summary information for stacks that have been deleted is kept for 90 days after the stack is deleted. If no StackStatusFilter is specified, summary information for all stacks is returned (including existing stacks and stacks that have been deleted).</p> <examples></examples>"
     },
     "SetStackPolicy":{
       "name":"SetStackPolicy",
@@ -288,7 +285,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"SetStackPolicyInput"},
-      "documentation":"<p>Sets a stack policy for a specified stack.</p>"
+      "documentation":"<p>Sets a stack policy for a specified stack.</p> <examples></examples>"
     },
     "SignalResource":{
       "name":"SignalResource",
@@ -297,7 +294,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"SignalResourceInput"},
-      "documentation":"<p>Sends a signal to the specified resource with a success or failure status. You can use the SignalResource API in conjunction with a creation policy or update policy. AWS CloudFormation doesn't proceed with a stack creation or update until resources receive the required number of signals or the timeout period is exceeded. The SignalResource API is useful in cases where you want to send signals from anywhere other than an Amazon EC2 instance.</p>"
+      "documentation":"<p>Sends a signal to the specified resource with a success or failure status. You can use the SignalResource API in conjunction with a creation policy or update policy. AWS CloudFormation doesn't proceed with a stack creation or update until resources receive the required number of signals or the timeout period is exceeded. The SignalResource API is useful in cases where you want to send signals from anywhere other than an Amazon EC2 instance.</p> <examples></examples>"
     },
     "UpdateStack":{
       "name":"UpdateStack",
@@ -313,7 +310,7 @@
       "errors":[
         {"shape":"InsufficientCapabilitiesException"}
       ],
-      "documentation":"<p>Updates a stack as specified in the template. After the call completes successfully, the stack update starts. You can check the status of the stack via the <a>DescribeStacks</a> action.</p> <p>To get a copy of the template for an existing stack, you can use the <a>GetTemplate</a> action.</p> <p>For more information about creating an update template, updating a stack, and monitoring the progress of the update, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html\">Updating a Stack</a>.</p>"
+      "documentation":"<p>Updates a stack as specified in the template. After the call completes successfully, the stack update starts. You can check the status of the stack via the <a>DescribeStacks</a> action.</p> <p>To get a copy of the template for an existing stack, you can use the <a>GetTemplate</a> action.</p> <p>For more information about creating an update template, updating a stack, and monitoring the progress of the update, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html\">Updating a Stack</a>.</p> <examples></examples>"
     },
     "ValidateTemplate":{
       "name":"ValidateTemplate",
@@ -326,7 +323,7 @@
         "shape":"ValidateTemplateOutput",
         "resultWrapper":"ValidateTemplateResult"
       },
-      "documentation":"<p>Validates a specified template.</p>"
+      "documentation":"<p>Validates a specified template.</p> <examples></examples>"
     }
   },
   "shapes":{
@@ -471,10 +468,6 @@
           "shape":"ChangeSetName",
           "documentation":"<p>The name of the change set.</p>"
         },
-        "ExecutionStatus":{
-          "shape":"ExecutionStatus",
-          "documentation":"<p>If the change set execution status is <code>AVAILABLE</code>, you can execute the change set. If you can’t execute the change set, the status indicates why. For example, a change set might be in an <code>UNAVAILABLE</code> state because AWS CloudFormation is still creating it or in an <code>OBSOLETE</code> state because the stack was already updated.</p>"
-        },
         "Status":{
           "shape":"ChangeSetStatus",
           "documentation":"<p>The state of the change set, such as <code>CREATE_IN_PROGRESS</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
@@ -608,7 +601,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name that is associated with the stack. The name must be unique in the region in which you are creating the stack.</p> <note> <p>A stack name can contain only alphanumeric characters (case sensitive) and hyphens. It must start with an alphabetic character and cannot be longer than 128 characters.</p> </note>"
+          "documentation":"<p>The name that is associated with the stack. The name must be unique in the region in which you are creating the stack.</p> <note>A stack name can contain only alphanumeric characters (case sensitive) and hyphens. It must start with an alphabetic character and cannot be longer than 128 characters.</note>"
         },
         "TemplateBody":{
           "shape":"TemplateBody",
@@ -632,7 +625,7 @@
         },
         "NotificationARNs":{
           "shape":"NotificationARNs",
-          "documentation":"<p>The Simple Notification Service (SNS) topic ARNs to publish stack related events. You can find your SNS topic ARNs using the <a href=\"https://console.aws.amazon.com/sns\">SNS console</a> or your Command Line Interface (CLI).</p>"
+          "documentation":"<p>The Simple Notification Service (SNS) topic ARNs to publish stack related events. You can find your SNS topic ARNs using the <a href=\"http://console.aws.amazon.com/sns\">SNS console</a> or your Command Line Interface (CLI).</p>"
         },
         "Capabilities":{
           "shape":"Capabilities",
@@ -640,11 +633,11 @@
         },
         "ResourceTypes":{
           "shape":"ResourceTypes",
-          "documentation":"<p>The template resource types that you have permissions to work with for this create stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>. Use the following syntax to describe template resource types: <code>AWS::*</code> (for all AWS resource), <code>Custom::*</code> (for all custom resources), <code>Custom::<i>logical_ID</i> </code> (for a specific custom resource), <code>AWS::<i>service_name</i>::*</code> (for all resources of a particular AWS service), and <code>AWS::<i>service_name</i>::<i>resource_logical_ID</i> </code> (for a specific AWS resource).</p> <p>If the list of resource types doesn't include a resource that you're creating, the stack creation fails. By default, AWS CloudFormation grants permissions to all resource types. AWS Identity and Access Management (IAM) uses this parameter for AWS CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html\">Controlling Access with AWS Identity and Access Management</a>.</p>"
+          "documentation":"<p>The template resource types that you have permissions to work with for this create stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>. Use the following syntax to describe template resource types: <code>AWS::*</code> (for all AWS resource), <code>Custom::*</code> (for all custom resources), <code>Custom::<i>logical_ID</i></code> (for a specific custom resource), <code>AWS::<i>service_name</i>::*</code> (for all resources of a particular AWS service), and <code>AWS::<i>service_name</i>::<i>resource_logical_ID</i></code> (for a specific AWS resource).</p> <p>If the list of resource types doesn't include a resource that you're creating, the stack creation fails. By default, AWS CloudFormation grants permissions to all resource types. AWS Identity and Access Management (IAM) uses this parameter for AWS CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html\">Controlling Access with AWS Identity and Access Management</a>.</p>"
         },
         "OnFailure":{
           "shape":"OnFailure",
-          "documentation":"<p>Determines what action will be taken if stack creation fails. This must be one of: DO_NOTHING, ROLLBACK, or DELETE. You can specify either <code>OnFailure</code> or <code>DisableRollback</code>, but not both.</p> <p>Default: <code>ROLLBACK</code> </p>"
+          "documentation":"<p>Determines what action will be taken if stack creation fails. This must be one of: DO_NOTHING, ROLLBACK, or DELETE. You can specify either <code>OnFailure</code> or <code>DisableRollback</code>, but not both.</p> <p>Default: <code>ROLLBACK</code></p>"
         },
         "StackPolicyBody":{
           "shape":"StackPolicyBody",
@@ -739,7 +732,7 @@
       "members":{
         "ChangeSetName":{
           "shape":"ChangeSetNameOrId",
-          "documentation":"<p>The name or Amazon Resource Name (ARN) of the change set that you want to describe.</p>"
+          "documentation":"<p>The name or Amazon Resource Name (ARN) of the change set that you want to describe. </p>"
         },
         "StackName":{
           "shape":"StackNameOrId",
@@ -783,10 +776,6 @@
           "shape":"CreationTime",
           "documentation":"<p>The start time when the change set was created, in UTC.</p>"
         },
-        "ExecutionStatus":{
-          "shape":"ExecutionStatus",
-          "documentation":"<p>If the change set execution status is <code>AVAILABLE</code>, you can execute the change set. If you can’t execute the change set, the status indicates why. For example, a change set might be in an <code>UNAVAILABLE</code> state because AWS CloudFormation is still creating it or in an <code>OBSOLETE</code> state because the stack was already updated.</p>"
-        },
         "Status":{
           "shape":"ChangeSetStatus",
           "documentation":"<p>The current status of the change set, such as <code>CREATE_IN_PROGRESS</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
@@ -823,7 +812,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -855,7 +844,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p>"
         },
         "LogicalResourceId":{
           "shape":"LogicalResourceId",
@@ -879,7 +868,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p> <p>Required: Conditional. If you do not specify <code>StackName</code>, you must specify <code>PhysicalResourceId</code>.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p> <p>Required: Conditional. If you do not specify <code>StackName</code>, you must specify <code>PhysicalResourceId</code>.</p>"
         },
         "LogicalResourceId":{
           "shape":"LogicalResourceId",
@@ -907,7 +896,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -951,8 +940,7 @@
           "shape":"Parameters",
           "documentation":"<p>A list of <code>Parameter</code> structures that specify input parameters.</p>"
         }
-      },
-      "documentation":"<p>The input for an <a>EstimateTemplateCost</a> action.</p>"
+      }
     },
     "EstimateTemplateCostOutput":{
       "type":"structure",
@@ -993,17 +981,6 @@
       },
       "documentation":"<p>The output for the <a>ExecuteChangeSet</a> action.</p>"
     },
-    "ExecutionStatus":{
-      "type":"string",
-      "enum":[
-        "UNAVAILABLE",
-        "AVAILABLE",
-        "EXECUTE_IN_PROGRESS",
-        "EXECUTE_COMPLETE",
-        "EXECUTE_FAILED",
-        "OBSOLETE"
-      ]
-    },
     "GetStackPolicyInput":{
       "type":"structure",
       "required":["StackName"],
@@ -1031,7 +1008,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p>"
         }
       },
       "documentation":"<p>The input for a <a>GetTemplate</a> action.</p>"
@@ -1172,7 +1149,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which are not always interchangeable:</p> <ul> <li>Running stacks: You can specify either the stack's name or its unique stack ID.</li> <li>Deleted stacks: You must specify the unique stack ID.</li> </ul> <p>Default: There is no default value.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -1414,7 +1391,7 @@
         },
         "ChangeSource":{
           "shape":"ChangeSource",
-          "documentation":"<p>The group to which the <code>CausingEntity</code> value belongs. There are five entity groups:</p> <ul> <li> <p> <code>ResourceReference</code> entities are <code>Ref</code> intrinsic functions that refer to resources in the template, such as <code>{ \"Ref\" : \"MyEC2InstanceResource\" }</code>.</p> </li> <li> <p> <code>ParameterReference</code> entities are <code>Ref</code> intrinsic functions that get template parameter values, such as <code>{ \"Ref\" : \"MyPasswordParameter\" }</code>.</p> </li> <li> <p> <code>ResourceAttribute</code> entities are <code>Fn::GetAtt</code> intrinsic functions that get resource attribute values, such as <code>{ \"Fn::GetAtt\" : [ \"MyEC2InstanceResource\", \"PublicDnsName\" ] }</code>.</p> </li> <li> <p> <code>DirectModification</code> entities are changes that are made directly to the template.</p> </li> <li> <p> <code>Automatic</code> entities are <code>AWS::CloudFormation::Stack</code> resource types, which are also known as nested stacks. If you made no changes to the <code>AWS::CloudFormation::Stack</code> resource, AWS CloudFormation sets the <code>ChangeSource</code> to <code>Automatic</code> because the nested stack's template might have changed. Changes to a nested stack's template aren't visible to AWS CloudFormation until you run an update on the parent stack.</p> </li> </ul>"
+          "documentation":"<p>The group to which the <code>CausingEntity</code> value belongs. There are five entity groups:</p> <ul> <li><code>ResourceReference</code> entities are <code>Ref</code> intrinsic functions that refer to resources in the template, such as <code>{ \"Ref\" : \"MyEC2InstanceResource\" }</code>.</li> <li><code>ParameterReference</code> entities are <code>Ref</code> intrinsic functions that get template parameter values, such as <code>{ \"Ref\" : \"MyPasswordParameter\" }</code>.</li> <li><code>ResourceAttribute</code> entities are <code>Fn::GetAtt</code> intrinsic functions that get resource attribute values, such as <code>{ \"Fn::GetAtt\" : [ \"MyEC2InstanceResource\", \"PublicDnsName\" ] }</code>.</li> <li><code>DirectModification</code> entities are changes that are made directly to the template.</li> <li><code>Automatic</code> entities are <code>AWS::CloudFormation::Stack</code> resource types, which are also known as nested stacks. If you made no changes to the <code>AWS::CloudFormation::Stack</code> resource, AWS CloudFormation sets the <code>ChangeSource</code> to <code>Automatic</code> because the nested stack's template might have changed. Changes to a nested stack's template aren't visible to AWS CloudFormation until you run an update on the parent stack.</li> </ul>"
         },
         "CausingEntity":{
           "shape":"CausingEntity",
@@ -1580,7 +1557,7 @@
         },
         "DisableRollback":{
           "shape":"DisableRollback",
-          "documentation":"<p>Boolean to enable or disable rollback on stack creation failures:</p> <ul> <li> <p> <code>true</code>: disable rollback</p> </li> <li> <p> <code>false</code>: enable rollback</p> </li> </ul>"
+          "documentation":"<p>Boolean to enable or disable rollback on stack creation failures:</p> <p> <ul> <li><code>true</code>: disable rollback</li> <li><code>false</code>: enable rollback</li> </ul> </p>"
         },
         "NotificationARNs":{
           "shape":"NotificationARNs",
@@ -1914,11 +1891,11 @@
       "members":{
         "Key":{
           "shape":"TagKey",
-          "documentation":"<p> <i>Required</i>. A string used to identify this tag. You can specify a maximum of 128 characters for a tag key. Tags owned by Amazon Web Services (AWS) have the reserved prefix: <code>aws:</code>.</p>"
+          "documentation":"<p><i>Required</i>. A string used to identify this tag. You can specify a maximum of 128 characters for a tag key. Tags owned by Amazon Web Services (AWS) have the reserved prefix: <code>aws:</code>.</p>"
         },
         "Value":{
           "shape":"TagValue",
-          "documentation":"<p> <i>Required</i>. A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.</p>"
+          "documentation":"<p><i>Required</i>. A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.</p>"
         }
       },
       "documentation":"<p>The Tag type enables you to specify a key-value pair that can be used to store information about an AWS CloudFormation stack.</p>"
@@ -2027,7 +2004,7 @@
           "documentation":"<p>Key-value pairs to associate with this stack. AWS CloudFormation also propagates these tags to supported resources in the stack. You can specify a maximum number of 10 tags.</p> <p>If you don't specify this parameter, AWS CloudFormation doesn't modify the stack's tags. If you specify an empty value, AWS CloudFormation removes all associated tags.</p>"
         }
       },
-      "documentation":"<p>The input for an <a>UpdateStack</a> action.</p>"
+      "documentation":"<p>The input for <a>UpdateStack</a> action.</p>"
     },
     "UpdateStackOutput":{
       "type":"structure",
@@ -2037,7 +2014,7 @@
           "documentation":"<p>Unique identifier of the stack.</p>"
         }
       },
-      "documentation":"<p>The output for an <a>UpdateStack</a> action.</p>"
+      "documentation":"<p>The output for a <a>UpdateStack</a> action.</p>"
     },
     "Url":{"type":"string"},
     "UsePreviousTemplate":{"type":"boolean"},
@@ -2080,5 +2057,5 @@
     },
     "Version":{"type":"string"}
   },
-  "documentation":"<fullname>AWS CloudFormation</fullname> <p>AWS CloudFormation enables you to create and manage AWS infrastructure deployments predictably and repeatedly. AWS CloudFormation helps you leverage AWS products such as Amazon EC2, EBS, Amazon SNS, ELB, and Auto Scaling to build highly-reliable, highly scalable, cost effective applications without worrying about creating and configuring the underlying AWS infrastructure.</p> <p>With AWS CloudFormation, you declare all of your resources and dependencies in a template file. The template defines a collection of resources as a single unit called a stack. AWS CloudFormation creates and deletes all member resources of the stack together and manages all dependencies between the resources for you.</p> <p>For more information about this product, go to the <a href=\"http://aws.amazon.com/cloudformation/\">CloudFormation Product Page</a>.</p> <p>Amazon CloudFormation makes use of other AWS products. If you need additional technical information about a specific AWS product, you can find the product's technical documentation at <a href=\"http://docs.aws.amazon.com/\">http://docs.aws.amazon.com/</a>.</p>"
+  "documentation":"<fullname>AWS CloudFormation</fullname> <p>AWS CloudFormation enables you to create and manage AWS infrastructure deployments predictably and repeatedly. AWS CloudFormation helps you leverage AWS products such as Amazon EC2, EBS, Amazon SNS, ELB, and Auto Scaling to build highly-reliable, highly scalable, cost effective applications without worrying about creating and configuring the underlying AWS infrastructure.</p> <p>With AWS CloudFormation, you declare all of your resources and dependencies in a template file. The template defines a collection of resources as a single unit called a stack. AWS CloudFormation creates and deletes all member resources of the stack together and manages all dependencies between the resources for you.</p> <p>For more information about this product, go to the <a href=\"http://aws.amazon.com/cloudformation/\">CloudFormation Product Page</a>.</p> <p>Amazon CloudFormation makes use of other AWS products. If you need additional technical information about a specific AWS product, you can find the product's technical documentation at <a href=\"http://docs.aws.amazon.com/documentation/\">http://docs.aws.amazon.com/documentation/</a>.</p>"
 }
diff --git a/botocore/data/discovery/2015-11-01/service-2.json b/botocore/data/discovery/2015-11-01/service-2.json
deleted file mode 100644
index 55ea5a4f4..000000000
--- a/botocore/data/discovery/2015-11-01/service-2.json
+++ /dev/null
@@ -1,750 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2015-11-01",
-    "endpointPrefix":"discovery",
-    "jsonVersion":"1.1",
-    "protocol":"json",
-    "serviceFullName":"AWS Application Discovery Service",
-    "signatureVersion":"v4",
-    "targetPrefix":"AWSPoseidonService_V2015_11_01"
-  },
-  "operations":{
-    "CreateTags":{
-      "name":"CreateTags",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateTagsRequest"},
-      "output":{"shape":"CreateTagsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Creates one or more tags for a configuration item. Tags are metadata that help you categorize IT assets.</p>"
-    },
-    "DeleteTags":{
-      "name":"DeleteTags",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteTagsRequest"},
-      "output":{"shape":"DeleteTagsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Deletes one or more tags associated with a configuration item.</p>"
-    },
-    "DescribeAgents":{
-      "name":"DescribeAgents",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeAgentsRequest"},
-      "output":{"shape":"DescribeAgentsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Lists AWS agents by ID or lists all agents associated with your user account if you did not specify an agent ID.</p>"
-    },
-    "DescribeTags":{
-      "name":"DescribeTags",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeTagsRequest"},
-      "output":{"shape":"DescribeTagsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Retrieve a list of configuration items that are tagged with a specific tag. Or retrieve a list all tags assigned to a specific configuration item.</p>"
-    },
-    "ExportConfigurations":{
-      "name":"ExportConfigurations",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "output":{"shape":"ExportConfigurationsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Exports the selected configurations to an Amazon S3 bucket.</p>"
-    },
-    "GetConfigurationAttributes":{
-      "name":"GetConfigurationAttributes",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetConfigurationAttributesRequest"},
-      "output":{"shape":"GetConfigurationAttributesResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Retrieve a list of attributes for a specific configuration ID. For example, the output for a <i>server</i> configuration item includes a list of attributes about the server, including host name, operating system, number of network cards, etc.</p>"
-    },
-    "GetExportStatus":{
-      "name":"GetExportStatus",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetExportStatusRequest"},
-      "output":{"shape":"GetExportStatusResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Retrieves the status of a given export process.</p>"
-    },
-    "ListConfigurations":{
-      "name":"ListConfigurations",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListConfigurationsRequest"},
-      "output":{"shape":"ListConfigurationsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Retrieve a list of configurations items according to the criteria you specify in a filter. The filter criteria identify relationship requirements.</p>"
-    },
-    "RemoveConfiguration":{
-      "name":"RemoveConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RemoveConfigurationRequest"},
-      "output":{"shape":"RemoveConfigurationResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ]
-    },
-    "StartDataCollectionByAgentIds":{
-      "name":"StartDataCollectionByAgentIds",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartDataCollectionByAgentIdsRequest"},
-      "output":{"shape":"StartDataCollectionByAgentIdsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Instructs the specified agents to start collecting data. Agents can reside on host servers or virtual machines in your data center or on AWS EC2 instances.</p>"
-    },
-    "StopDataCollectionByAgentIds":{
-      "name":"StopDataCollectionByAgentIds",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StopDataCollectionByAgentIdsRequest"},
-      "output":{"shape":"StopDataCollectionByAgentIdsResponse"},
-      "errors":[
-        {"shape":"AuthorizationErrorException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ServerInternalErrorException"}
-      ],
-      "documentation":"<p>Instructs the specified agents to stop collecting data.</p>"
-    }
-  },
-  "shapes":{
-    "AgentConfigStatus":{
-      "type":"structure",
-      "members":{
-        "agentId":{
-          "shape":"String",
-          "documentation":"<p>The agent ID.</p>"
-        },
-        "configUpdated":{
-          "shape":"Boolean",
-          "documentation":"<p>Information about whether or not the agent configuration was updated.</p>"
-        },
-        "description":{
-          "shape":"String",
-          "documentation":"<p>A description of the operation performed.</p>"
-        }
-      },
-      "documentation":"<p>Information about agents that were instructed to start collecting data. Information includes the agent ID, a description of the operation, and whether or not the agent configuration was updated.</p>"
-    },
-    "AgentConfigStatusList":{
-      "type":"list",
-      "member":{"shape":"AgentConfigStatus"}
-    },
-    "AgentId":{"type":"string"},
-    "AgentIds":{
-      "type":"list",
-      "member":{"shape":"AgentId"}
-    },
-    "AgentInfo":{
-      "type":"structure",
-      "members":{
-        "agentId":{
-          "shape":"AgentId",
-          "documentation":"<p>The agent ID.</p>"
-        },
-        "hostName":{
-          "shape":"String",
-          "documentation":"<p>The name of the host where the agent resides. The host can be a server, virtual machine, or an AWS EC2 instance.</p>"
-        },
-        "agentNetworkInfoList":{
-          "shape":"AgentNetworkInfoList",
-          "documentation":"<p>Network details about the host where the agent resides.</p>"
-        },
-        "connectorId":{
-          "shape":"String",
-          "documentation":"<p></p>"
-        },
-        "version":{
-          "shape":"String",
-          "documentation":"<p>The agent version</p>"
-        },
-        "health":{
-          "shape":"AgentStatus",
-          "documentation":"<p>The health of the agent.</p>"
-        }
-      },
-      "documentation":"<p>Information about agents associated with the user’s AWS account. Information includes agent IDs, IP addresses, MAC addresses, agent health, hostname where the agent resides, and agent version for each agent.</p>"
-    },
-    "AgentNetworkInfo":{
-      "type":"structure",
-      "members":{
-        "ipAddress":{
-          "shape":"String",
-          "documentation":"<p>The IP address for the host where the agent resides.</p>"
-        },
-        "macAddress":{
-          "shape":"String",
-          "documentation":"<p>The MAC address for the host where the agent resides.</p>"
-        }
-      },
-      "documentation":"<p>Network details about the host where the agent resides.</p>"
-    },
-    "AgentNetworkInfoList":{
-      "type":"list",
-      "member":{"shape":"AgentNetworkInfo"}
-    },
-    "AgentStatus":{
-      "type":"string",
-      "enum":[
-        "HEALTHY",
-        "UNHEALTHY",
-        "RUNNING",
-        "UNKNOWN",
-        "BLACKLISTED",
-        "SHUTDOWN"
-      ]
-    },
-    "AgentsInfo":{
-      "type":"list",
-      "member":{"shape":"AgentInfo"}
-    },
-    "Attribute":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"AttributeName",
-          "documentation":"<p>The name of the attribute.</p>"
-        },
-        "Value":{
-          "shape":"AttributeValue",
-          "documentation":"<p>A specific attribute type. For example key = serverType and value = web server.</p>"
-        }
-      },
-      "documentation":"<p>A specific detail about a configuration item. For example, the output for a <i>server</i> configuration item includes a list of attributes about the server, including host name, operating system, number of network cards, etc.</p>"
-    },
-    "AttributeList":{
-      "type":"list",
-      "member":{
-        "shape":"Attribute",
-        "locationName":"attribute"
-      }
-    },
-    "AttributeName":{"type":"string"},
-    "AttributeValue":{"type":"string"},
-    "AuthorizationErrorException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>The AWS user account does not have permission to perform the action. Check the IAM policy associated with this account.</p>",
-      "exception":true
-    },
-    "Boolean":{"type":"boolean"},
-    "Condition":{"type":"string"},
-    "ConfigIdAttributesMap":{
-      "type":"map",
-      "key":{"shape":"ConfigurationId"},
-      "value":{"shape":"AttributeList"}
-    },
-    "Configuration":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"}
-    },
-    "ConfigurationExportId":{"type":"string"},
-    "ConfigurationId":{"type":"string"},
-    "ConfigurationIdList":{
-      "type":"list",
-      "member":{"shape":"ConfigurationId"}
-    },
-    "ConfigurationItemType":{
-      "type":"string",
-      "enum":[
-        "SERVER",
-        "PROCESS",
-        "CONNECTION"
-      ]
-    },
-    "ConfigurationTag":{
-      "type":"structure",
-      "members":{
-        "configurationType":{
-          "shape":"ConfigurationItemType",
-          "documentation":"<p>A descriptor. For example, <i>serverType</i>.</p>"
-        },
-        "configurationId":{
-          "shape":"ConfigurationId",
-          "documentation":"<p>The configuration ID for the item you want to tag. You can specify a list of keys and values.</p>"
-        },
-        "key":{
-          "shape":"TagKey",
-          "documentation":"<p>A type of tag to filter on. For example <i>serverType</i>.</p>"
-        },
-        "value":{
-          "shape":"TagValue",
-          "documentation":"<p>A value to filter on. For example <i>key = serverType</i> and <i>value = web server</i>.</p>"
-        }
-      },
-      "documentation":"<p>Tags for a configuration item. Tags are metadata that help you categorize IT assets.</p>"
-    },
-    "ConfigurationTagSet":{
-      "type":"list",
-      "member":{
-        "shape":"ConfigurationTag",
-        "locationName":"item"
-      }
-    },
-    "Configurations":{
-      "type":"list",
-      "member":{"shape":"Configuration"}
-    },
-    "CreateTagsRequest":{
-      "type":"structure",
-      "required":[
-        "configurationIds",
-        "tags"
-      ],
-      "members":{
-        "configurationIds":{
-          "shape":"ConfigurationIdList",
-          "documentation":"<p>A list of configuration items that you want to tag.</p>"
-        },
-        "tags":{
-          "shape":"TagSet",
-          "documentation":"<p>Tags that you want to associate with one or more configuration items. Specify the tags that you want to create in a <i>key</i>,<i>value</i> format. For example:</p> <p> <code>{\"key\": \"serverType\", \"value\": \"webServer\"}</code> </p>"
-        }
-      }
-    },
-    "CreateTagsResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteTagsRequest":{
-      "type":"structure",
-      "required":["configurationIds"],
-      "members":{
-        "configurationIds":{
-          "shape":"ConfigurationIdList",
-          "documentation":"<p>A list of configuration items with tags that you want to delete.</p>"
-        },
-        "tags":{
-          "shape":"TagSet",
-          "documentation":"<p>Tags that you want to delete from one or more configuration items. Specify the tags that you want to delete in a <i>key</i>, <i>value</i> format. For example:</p> <p> <code>{\"key\": \"serverType\", \"value\": \"webServer\"}</code> </p>"
-        }
-      }
-    },
-    "DeleteTagsResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DescribeAgentsRequest":{
-      "type":"structure",
-      "members":{
-        "agentIds":{
-          "shape":"AgentIds",
-          "documentation":"<p>The agent IDs for which you want information. If you specify no IDs, the system returns information about all agents associated with your AWS user account.</p>"
-        },
-        "maxResults":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of items to return. The maximum value is 100.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to start the list. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "DescribeAgentsResponse":{
-      "type":"structure",
-      "members":{
-        "agentsInfo":{
-          "shape":"AgentsInfo",
-          "documentation":"<p>Lists AWS agents by ID or lists all agents associated with your user account if you did not specify an agent ID. The output includes agent IDs, IP addresses, MAC addresses, agent health, host name where the agent resides, and the version number of each agent.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The call returns a token. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "DescribeTagsRequest":{
-      "type":"structure",
-      "members":{
-        "filter":{
-          "shape":"TagFilters",
-          "documentation":"<p>You can filter the list using a key, value format. For example:</p> <p> <code>{\"key\": \"serverType\", \"value\": \"webServer\"}</code> </p> <p>You can separate these items by using logical operators. Allowed filters include tagkey, tagValue, and configid. </p>"
-        },
-        "maxResults":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of items to return. The maximum value is 100.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to start the list. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "DescribeTagsResponse":{
-      "type":"structure",
-      "members":{
-        "tags":{
-          "shape":"ConfigurationTagSet",
-          "documentation":"<p>Depending on the input, a list of configuration items tagged with a specific tag, or a list of tags for a specific configuration item.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The call returns a token. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "ExportConfigurationsResponse":{
-      "type":"structure",
-      "members":{
-        "exportId":{
-          "shape":"ConfigurationExportId",
-          "documentation":"<p>A unique identifier which you can use to query the export status.</p>"
-        }
-      }
-    },
-    "ExportStatusMap":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"}
-    },
-    "Filter":{
-      "type":"structure",
-      "required":[
-        "name",
-        "values",
-        "condition"
-      ],
-      "members":{
-        "name":{
-          "shape":"String",
-          "documentation":"<p>The name of the filter you want to use.</p>"
-        },
-        "values":{
-          "shape":"FilterValues",
-          "documentation":"<p>The value you want to filter on.</p>"
-        },
-        "condition":{
-          "shape":"Condition",
-          "documentation":"<p>A conditional operator for the filter.</p>"
-        }
-      },
-      "documentation":"<p>A means of limiting responses.</p>"
-    },
-    "FilterName":{"type":"string"},
-    "FilterValue":{"type":"string"},
-    "FilterValues":{
-      "type":"list",
-      "member":{
-        "shape":"FilterValue",
-        "locationName":"item"
-      }
-    },
-    "Filters":{
-      "type":"list",
-      "member":{"shape":"Filter"}
-    },
-    "GetConfigurationAttributesRequest":{
-      "type":"structure",
-      "required":["configurationIds"],
-      "members":{
-        "configurationIds":{
-          "shape":"ConfigurationIdList",
-          "documentation":"<p>One or more configuration IDs.</p>"
-        }
-      }
-    },
-    "GetConfigurationAttributesResponse":{
-      "type":"structure",
-      "members":{
-        "configurations":{
-          "shape":"ConfigIdAttributesMap",
-          "documentation":"<p>Returns configuration details, including the configuration ID, attribute names, and attribute values.</p>"
-        }
-      }
-    },
-    "GetExportStatusRequest":{
-      "type":"structure",
-      "required":["exportId"],
-      "members":{
-        "exportId":{
-          "shape":"ConfigurationExportId",
-          "documentation":"<p>A unique identifier which you can use to query the export status.</p>"
-        }
-      }
-    },
-    "GetExportStatusResponse":{
-      "type":"structure",
-      "members":{
-        "exportId":{
-          "shape":"ConfigurationExportId",
-          "documentation":"<p>Returns configuration details, including the configuration ID, attribute names, and attribute values.</p>"
-        },
-        "exportStatusMap":{
-          "shape":"ExportStatusMap",
-          "documentation":"<p>Returns export details. When the status is complete, the response includes a URL for an Amazon S3 bucket where you can view the data in a CSV file.</p>"
-        }
-      }
-    },
-    "Integer":{"type":"integer"},
-    "InvalidParameterException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>One or more parameters are not valid. Verify the parameters and try again.</p>",
-      "exception":true
-    },
-    "InvalidParameterValueException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>The value of one or more parameters are either invalid or out of range. Verify the parameter values and try again.</p>",
-      "exception":true
-    },
-    "ListConfigurationsRequest":{
-      "type":"structure",
-      "required":["configurationType"],
-      "members":{
-        "configurationType":{
-          "shape":"ConfigurationItemType",
-          "documentation":"<p>A valid configuration identified by the Discovery Service. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>You can filter the list using a key, value format. For example:</p> <p> <code>{\"key\": \"serverType\", \"value\": \"webServer\"}</code> </p>"
-        },
-        "maxResults":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of items to return. The maximum value is 100.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to start the list. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "ListConfigurationsResponse":{
-      "type":"structure",
-      "members":{
-        "configurations":{
-          "shape":"Configurations",
-          "documentation":"<p>Returns a list of configuration item IDs.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The call returns a token. Use this token to get the next set of results.</p>"
-        }
-      }
-    },
-    "Message":{"type":"string"},
-    "NextToken":{"type":"string"},
-    "OperationNotPermittedException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>This operation is not permitted.</p>",
-      "exception":true
-    },
-    "RemoveConfigurationRequest":{
-      "type":"structure",
-      "required":["configurationId"],
-      "members":{
-        "configurationId":{"shape":"ConfigurationId"}
-      }
-    },
-    "RemoveConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>The specified configuration ID was not located. Verify the configuration ID and try again.</p>",
-      "exception":true
-    },
-    "ServerInternalErrorException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"Message"}
-      },
-      "documentation":"<p>The server experienced an internal error. </p>",
-      "exception":true,
-      "fault":true
-    },
-    "StartDataCollectionByAgentIdsRequest":{
-      "type":"structure",
-      "required":["agentIds"],
-      "members":{
-        "agentIds":{
-          "shape":"AgentIds",
-          "documentation":"<p>The IDs of the agents that you want to start collecting data.</p>"
-        }
-      }
-    },
-    "StartDataCollectionByAgentIdsResponse":{
-      "type":"structure",
-      "members":{
-        "agentsConfigStatus":{
-          "shape":"AgentConfigStatusList",
-          "documentation":"<p>Information about agents that were instructed to start collecting data. Information includes the agent ID, a description of the operation performed, and whether or not the agent configuration was updated.</p>"
-        }
-      }
-    },
-    "StopDataCollectionByAgentIdsRequest":{
-      "type":"structure",
-      "required":["agentIds"],
-      "members":{
-        "agentIds":{
-          "shape":"AgentIds",
-          "documentation":"<p>The IDs of the agents that you want to stop collecting data.</p>"
-        }
-      }
-    },
-    "StopDataCollectionByAgentIdsResponse":{
-      "type":"structure",
-      "members":{
-        "agentsConfigStatus":{
-          "shape":"AgentConfigStatusList",
-          "documentation":"<p>Information about agents that were instructed to stop collecting data. Information includes the agent ID, a description of the operation performed, and whether or not the agent configuration was updated.</p>"
-        }
-      }
-    },
-    "String":{"type":"string"},
-    "Tag":{
-      "type":"structure",
-      "required":[
-        "key",
-        "value"
-      ],
-      "members":{
-        "key":{
-          "shape":"TagKey",
-          "documentation":"<p>A type of tag to filter on.</p>"
-        },
-        "value":{
-          "shape":"TagValue",
-          "documentation":"<p>A value for a tag key to filter on.</p>"
-        }
-      },
-      "documentation":"<p>Metadata that help you categorize IT assets.</p>"
-    },
-    "TagFilter":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "Values"
-      ],
-      "members":{
-        "Name":{
-          "shape":"FilterName",
-          "documentation":"<p>A name of a tag filter.</p>"
-        },
-        "Values":{
-          "shape":"FilterValues",
-          "documentation":"<p>Values of a tag filter.</p>"
-        }
-      },
-      "documentation":"<p>A means of limiting responses when searching for tags.</p>"
-    },
-    "TagFilters":{
-      "type":"list",
-      "member":{"shape":"TagFilter"}
-    },
-    "TagKey":{"type":"string"},
-    "TagSet":{
-      "type":"list",
-      "member":{
-        "shape":"Tag",
-        "locationName":"item"
-      }
-    },
-    "TagValue":{"type":"string"}
-  },
-  "documentation":"<p>This is the AWS Discovery Service API Reference. The AWS Discovery Service streamlines the process of migrating to Amazon Web Services by helping you identify assets in your data center, including servers, virtual machines, applications, application dependencies, and network infrastructure. You can use this information to find the workloads that make up an application, analyze dependencies, and build migration strategies. The service also collects performance data about your workloads which you can use to assess migration outcomes.</p> <p>This API reference provides descriptions, syntax, and usage examples for each of the actions and data types for the Discovery Service. The topic for each action shows the API request parameters and the response. Alternatively, you can use one of the AWS SDKs to access an API that's tailored to the programming language or platform that you're using. For more information, see <a href=\"http://aws.amazon.com/tools/#SDKs\">AWS SDKs</a>.</p> <p>This guide is intended for use with the <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/remote-commands-prereq.html\">AWS Discovery Service user guide</a>.</p> <p>The following are short descriptions of each API action, organized by function.</p> <p> <b>Managing AWS Agents</b> </p> <p>The AWS agent is an Amazon application that you install on servers and virtual machines in your data center or on Amazon EC2 instances. The agent captures server configuration and activity information (including hardware profile, network, file system, and process activity) and sends this data to the AWS Application Discovery Service. The Discovery Service processes this data and maps the application dependencies for your workloads.</p> <ul> <li> <p> <i>StartDataCollectionByAgentIds</i>: Instructs the specified agents to start collecting data. Agents can reside on host servers or virtual machines in your data center or on AWS EC2 instances.</p> </li> <li> <p> <i>StopDataCollectionByAgentIds</i>: Instructs the specified agents to stop collecting data.</p> </li> <li> <p> <i>DescribeAgents</i>: Lists AWS agents by ID or lists all agents associated with your user account if you did not specify an agent ID. The output includes agent IDs, IP addresses, MAC addresses, agent health, host name where the agent resides, and the version number of each agent.</p> </li> </ul> <p> <b>Querying Configuration Items</b> </p> <p>A <i>configuration item</i> is an IT asset that was discovered in your data center by an AWS agent. With the Discovery Service, you can specify filters and query specific configuration items. For example, using this API, you could create a filter to query for a process configuration item named apache and an operating system configuration item named Ubuntu.</p> <ul> <li> <p> <i>GetConfigurationAttributes</i>: Retrieves a list of attributes for a specific configuration ID. For example, the output for a <i>server</i> configuration item includes a list of attributes about the server, including host name, operating system, number of network cards, etc.</p> </li> <li> <p> <i>ListConfigurations</i>: Retrieves a list of configurations items according to the criteria you specify in a filter. The filter criteria identify relationship requirements. For example, the following filter specifies criteria of process.name and values of <i>nginx</i> and <i>apache</i>.</p> <p> <code>ConfigurationType = Process Filters = [WebServerCriteria] WebServerCriteria = { ‘key’ : process.name, ‘values’ : [ ‘nginx’, ‘apache’ ], ‘condition’ : ‘contains’ } </code> </p> </li> </ul> <p> <b>Tagging Discovered Configuration Items</b> </p> <p>You can tag discovered configuration items. Tags are metadata that help you categorize IT assets in your data center. Tags use a <i>key</i>,<i>value</i> format. For example, <code>{\"key\": \"serverType\", \"value\": \"webServer\"}</code>. </p> <ul> <li> <p> <i>CreateTags</i>: Creates one or more tags for a configuration item. Tags are metadata that help you categorize IT assets.</p> </li> <li> <p> <i>DescribeTags</i>: Retrieve a list of configuration items that are tagged with a specific tag. Or retrieve a list all tags assigned to a specific configuration item.</p> </li> <li> <p> <i>DeleteTags</i>: Deletes one or more tags associated with a configuration item.</p> </li> </ul> <p> <b>Exporting Data</b> </p> <p>You can export discovered data to an Amazon S3 bucket in the form of CSV files.</p> <ul> <li> <p> <i>ExportConfigurations</i>: Exports all discovered configuration data to an Amazon S3 bucket. Data includes processes, connections, servers, and system performance.</p> </li> <li> <p> <i>GetExportStatus</i>: Gets the status of the data export. When the export is complete, the service returns an Amazon S3 URL where you can download CSV files that include the data.</p> </li> </ul>"
-}
diff --git a/botocore/data/ec2/2015-10-01/service-2.json b/botocore/data/ec2/2015-10-01/service-2.json
index f8213d664..ecd2f1d6e 100644
--- a/botocore/data/ec2/2015-10-01/service-2.json
+++ b/botocore/data/ec2/2015-10-01/service-2.json
@@ -1108,16 +1108,6 @@
       "output":{"shape":"DescribeScheduledInstancesResult"},
       "documentation":"<p>Describes one or more of your Scheduled Instances.</p>"
     },
-    "DescribeSecurityGroupReferences":{
-      "name":"DescribeSecurityGroupReferences",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeSecurityGroupReferencesRequest"},
-      "output":{"shape":"DescribeSecurityGroupReferencesResult"},
-      "documentation":"<p>[EC2-VPC only] Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request. </p>"
-    },
     "DescribeSecurityGroups":{
       "name":"DescribeSecurityGroups",
       "http":{
@@ -1208,16 +1198,6 @@
       "output":{"shape":"DescribeSpotPriceHistoryResult"},
       "documentation":"<p>Describes the Spot price history. The prices returned are listed in chronological order, from the oldest to the most recent, for up to the past 90 days. For more information, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html\">Spot Instance Pricing History</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you specify a start and end time, this operation returns the prices of the instance types within the time range that you specified and the time when the price changed. The price is valid within the time period that you specified; the response merely indicates the last time that the price changed.</p>"
     },
-    "DescribeStaleSecurityGroups":{
-      "name":"DescribeStaleSecurityGroups",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStaleSecurityGroupsRequest"},
-      "output":{"shape":"DescribeStaleSecurityGroupsResult"},
-      "documentation":"<p>[EC2-VPC only] Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in a peer VPC, or a security group in a peer VPC for which the VPC peering connection has been deleted. </p>"
-    },
     "DescribeSubnets":{
       "name":"DescribeSubnets",
       "http":{
@@ -1863,7 +1843,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"ResetInstanceAttributeRequest"},
-      "documentation":"<p>Resets an attribute of an instance to its default value. To reset the <code>kernel</code> or <code>ramdisk</code>, the instance must be in a stopped state. To reset the <code>sourceDestCheck</code>, the instance can be either running or stopped.</p> <p>The <code>sourceDestCheck</code> attribute controls whether source/destination checking is enabled. The default value is <code>true</code>, which means checking is enabled. This value must be <code>false</code> for a NAT instance to perform NAT. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html\">NAT Instances</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
+      "documentation":"<p>Resets an attribute of an instance to its default value. To reset the <code>kernel</code> or <code>ramdisk</code>, the instance must be in a stopped state. To reset the <code>SourceDestCheck</code>, the instance can be either running or stopped.</p> <p>The <code>SourceDestCheck</code> attribute controls whether source/destination checking is enabled. The default value is <code>true</code>, which means checking is enabled. This value must be <code>false</code> for a NAT instance to perform NAT. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html\">NAT Instances</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
     },
     "ResetNetworkInterfaceAttribute":{
       "name":"ResetNetworkInterfaceAttribute",
@@ -1949,7 +1929,7 @@
       },
       "input":{"shape":"StopInstancesRequest"},
       "output":{"shape":"StopInstancesResult"},
-      "documentation":"<p>Stops an Amazon EBS-backed instance. </p> <p>We don't charge hourly usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains, continues to persist your data, and you are charged for Amazon EBS volume usage. Each time you transition an instance from stopped to started, Amazon EC2 charges a full instance hour, even if transitions happen multiple times within a single hour.</p> <p>You can't start or stop Spot instances, and you can't stop instance store-backed instances.</p> <p>When you stop an instance, we shut it down. You can restart your instance at any time. Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM.</p> <p>Stopping an instance is different to rebooting or terminating it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, and terminating instances, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance Lifecycle</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshooting Stopping Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+      "documentation":"<p>Stops an Amazon EBS-backed instance. </p> <p>We don't charge hourly usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains, continues to persist your data, and you are charged for Amazon EBS volume usage. Each time you transition an instance from stopped to started, Amazon EC2 charges a full instance hour, even if transitions happen multiple times within a single hour.</p> <p>You can't start or stop Spot instances, and you can't stop instance store-backed instances.</p> <p>When you stop an instance, we shut it down. You can restart your instance at any time. Before stopping an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM.</p> <p>Stopping an instance is different to rebooting or terminating it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, and terminating instances, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance Lifecycle</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>For more information about troubleshooting, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshooting Stopping Your Instance</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
     },
     "TerminateInstances":{
       "name":"TerminateInstances",
@@ -3668,7 +3648,7 @@
       "members":{
         "ResourceIds":{
           "shape":"ValueStringList",
-          "documentation":"<p>One or more subnet, network interface, or VPC IDs.</p> <p>Constraints: Maximum of 1000 resources</p>",
+          "documentation":"<p>One or more subnet, network interface, or VPC IDs.</p>",
           "locationName":"ResourceId"
         },
         "ResourceType":{
@@ -5809,7 +5789,7 @@
         },
         "MaxResults":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter or tag filters in the same call.</p>",
+          "documentation":"<p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.</p>",
           "locationName":"maxResults"
         }
       },
@@ -6536,30 +6516,6 @@
       },
       "documentation":"<p>Contains the output of DescribeScheduledInstances.</p>"
     },
-    "DescribeSecurityGroupReferencesRequest":{
-      "type":"structure",
-      "required":["GroupId"],
-      "members":{
-        "DryRun":{
-          "shape":"Boolean",
-          "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.</p>"
-        },
-        "GroupId":{
-          "shape":"GroupIds",
-          "documentation":"<p>One or more security group IDs in your account.</p>"
-        }
-      }
-    },
-    "DescribeSecurityGroupReferencesResult":{
-      "type":"structure",
-      "members":{
-        "SecurityGroupReferenceSet":{
-          "shape":"SecurityGroupReferences",
-          "documentation":"<p>Information about the VPCs with the referencing security groups.</p>",
-          "locationName":"securityGroupReferenceSet"
-        }
-      }
-    },
     "DescribeSecurityGroupsRequest":{
       "type":"structure",
       "members":{
@@ -6989,43 +6945,6 @@
       },
       "documentation":"<p>Contains the output of DescribeSpotPriceHistory.</p>"
     },
-    "DescribeStaleSecurityGroupsRequest":{
-      "type":"structure",
-      "required":["VpcId"],
-      "members":{
-        "DryRun":{
-          "shape":"Boolean",
-          "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.</p>"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of items to return. (You received this token from a prior call.)</p>"
-        }
-      }
-    },
-    "DescribeStaleSecurityGroupsResult":{
-      "type":"structure",
-      "members":{
-        "StaleSecurityGroupSet":{
-          "shape":"StaleSecurityGroupSet",
-          "documentation":"<p>Information about the stale security groups.</p>",
-          "locationName":"staleSecurityGroupSet"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.</p>",
-          "locationName":"nextToken"
-        }
-      }
-    },
     "DescribeSubnetsRequest":{
       "type":"structure",
       "members":{
@@ -8503,13 +8422,6 @@
         "locationName":"item"
       }
     },
-    "GroupIds":{
-      "type":"list",
-      "member":{
-        "shape":"String",
-        "locationName":"item"
-      }
-    },
     "GroupNameStringList":{
       "type":"list",
       "member":{
@@ -10604,13 +10516,6 @@
         "locationName":"item"
       }
     },
-    "IpRanges":{
-      "type":"list",
-      "member":{
-        "shape":"String",
-        "locationName":"item"
-      }
-    },
     "KeyNameStringList":{
       "type":"list",
       "member":{
@@ -11462,7 +11367,7 @@
         },
         "State":{
           "shape":"NatGatewayState",
-          "documentation":"<p>The state of the NAT gateway.</p> <ul> <li> <p><code>pending</code>: The NAT gateway is being created and is not ready to process traffic.</p> </li> <li> <p><code>failed</code>: The NAT gateway could not be created. Check the <code>failureCode</code> and <code>failureMessage</code> fields for the reason.</p> </li> <li> <p><code>available</code>: The NAT gateway is able to process traffic. This status remains until you delete the NAT gateway, and does not indicate the health of the NAT gateway.</p> </li> <li> <p><code>deleting</code>: The NAT gateway is in the process of being terminated and may still be processing traffic.</p> </li> <li> <p><code>deleted</code>: The NAT gateway has been terminated and is no longer processing traffic.</p> </li> </ul>",
+          "documentation":"<p>The state of the NAT gateway.</p>",
           "locationName":"state"
         },
         "FailureCode":{
@@ -12145,13 +12050,6 @@
         "locationName":"item"
       }
     },
-    "PrefixListIdSet":{
-      "type":"list",
-      "member":{
-        "shape":"String",
-        "locationName":"item"
-      }
-    },
     "PrefixListSet":{
       "type":"list",
       "member":{
@@ -13617,7 +13515,7 @@
         },
         "Attribute":{
           "shape":"InstanceAttributeName",
-          "documentation":"<p>The attribute to reset.</p> <important><p>You can only reset the following attributes: <code>kernel</code> | <code>ramdisk</code> | <code>sourceDestCheck</code>. To change an instance attribute, use <a>ModifyInstanceAttribute</a>.</p></important>",
+          "documentation":"<p>The attribute to reset.</p>",
           "locationName":"attribute"
         }
       },
@@ -14727,38 +14625,6 @@
         "locationName":"item"
       }
     },
-    "SecurityGroupReference":{
-      "type":"structure",
-      "required":[
-        "GroupId",
-        "ReferencingVpcId"
-      ],
-      "members":{
-        "GroupId":{
-          "shape":"String",
-          "documentation":"<p>The ID of your security group.</p>",
-          "locationName":"groupId"
-        },
-        "ReferencingVpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC with the referencing security group.</p>",
-          "locationName":"referencingVpcId"
-        },
-        "VpcPeeringConnectionId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC peering connection.</p>",
-          "locationName":"vpcPeeringConnectionId"
-        }
-      },
-      "documentation":"<p>Describes a VPC with a security group that references your security group.</p>"
-    },
-    "SecurityGroupReferences":{
-      "type":"list",
-      "member":{
-        "shape":"SecurityGroupReference",
-        "locationName":"item"
-      }
-    },
     "SecurityGroupStringList":{
       "type":"list",
       "member":{
@@ -15498,93 +15364,6 @@
         "locationName":"item"
       }
     },
-    "StaleIpPermission":{
-      "type":"structure",
-      "members":{
-        "FromPort":{
-          "shape":"Integer",
-          "documentation":"<p>The start of the port range for the TCP and UDP protocols, or an ICMP type number. A value of <code>-1</code> indicates all ICMP types. </p>",
-          "locationName":"fromPort"
-        },
-        "IpProtocol":{
-          "shape":"String",
-          "documentation":"<p>The IP protocol name (for <code>tcp</code>, <code>udp</code>, and <code>icmp</code>) or number (see <a href=\"http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml\">Protocol Numbers)</a>.</p>",
-          "locationName":"ipProtocol"
-        },
-        "IpRanges":{
-          "shape":"IpRanges",
-          "documentation":"<p>One or more IP ranges. Not applicable for stale security group rules.</p>",
-          "locationName":"ipRanges"
-        },
-        "PrefixListIds":{
-          "shape":"PrefixListIdSet",
-          "documentation":"<p>One or more prefix list IDs for an AWS service. Not applicable for stale security group rules.</p>",
-          "locationName":"prefixListIds"
-        },
-        "ToPort":{
-          "shape":"Integer",
-          "documentation":"<p>The end of the port range for the TCP and UDP protocols, or an ICMP type number. A value of <code>-1</code> indicates all ICMP types. </p>",
-          "locationName":"toPort"
-        },
-        "UserIdGroupPairs":{
-          "shape":"UserIdGroupPairSet",
-          "documentation":"<p>One or more security group pairs. Returns the ID of the referenced security group and VPC, and the ID and status of the VPC peering connection.</p>",
-          "locationName":"groups"
-        }
-      },
-      "documentation":"<p>Describes a stale rule in a security group.</p>"
-    },
-    "StaleIpPermissionSet":{
-      "type":"list",
-      "member":{
-        "shape":"StaleIpPermission",
-        "locationName":"item"
-      }
-    },
-    "StaleSecurityGroup":{
-      "type":"structure",
-      "required":["GroupId"],
-      "members":{
-        "GroupId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the security group.</p>",
-          "locationName":"groupId"
-        },
-        "GroupName":{
-          "shape":"String",
-          "documentation":"<p>The name of the security group.</p>",
-          "locationName":"groupName"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p>The description of the security group.</p>",
-          "locationName":"description"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC for the security group.</p>",
-          "locationName":"vpcId"
-        },
-        "StaleIpPermissions":{
-          "shape":"StaleIpPermissionSet",
-          "documentation":"<p>Information about the stale inbound rules in the security group.</p>",
-          "locationName":"staleIpPermissions"
-        },
-        "StaleIpPermissionsEgress":{
-          "shape":"StaleIpPermissionSet",
-          "documentation":"<p>Information about the stale outbound rules in the security group.</p>",
-          "locationName":"staleIpPermissionsEgress"
-        }
-      },
-      "documentation":"<p>Describes a stale security group (a security group that contains stale rules).</p>"
-    },
-    "StaleSecurityGroupSet":{
-      "type":"list",
-      "member":{
-        "shape":"StaleSecurityGroup",
-        "locationName":"item"
-      }
-    },
     "StartInstancesRequest":{
       "type":"structure",
       "required":["InstanceIds"],
@@ -15949,15 +15728,15 @@
       "type":"structure",
       "required":["Error"],
       "members":{
-        "ResourceId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the resource.</p>",
-          "locationName":"resourceId"
-        },
         "Error":{
           "shape":"UnsuccessfulItemError",
           "documentation":"<p>Information about the error.</p>",
           "locationName":"error"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the resource.</p>",
+          "locationName":"resourceId"
         }
       },
       "documentation":"<p>Information about items that were not successfully processed in a batch call.</p>"
@@ -16049,7 +15828,7 @@
       "members":{
         "UserId":{
           "shape":"String",
-          "documentation":"<p>The ID of an AWS account. For a referenced security group in another VPC, the account ID of the referenced security group is returned.</p> <p>[EC2-Classic] Required when adding or removing rules that reference a security group in another AWS account.</p>",
+          "documentation":"<p>The ID of an AWS account.</p> <p>[EC2-Classic] Required when adding or removing rules that reference a security group in another AWS account.</p>",
           "locationName":"userId"
         },
         "GroupName":{
@@ -16087,13 +15866,6 @@
         "locationName":"item"
       }
     },
-    "UserIdGroupPairSet":{
-      "type":"list",
-      "member":{
-        "shape":"UserIdGroupPair",
-        "locationName":"item"
-      }
-    },
     "UserIdStringList":{
       "type":"list",
       "member":{
@@ -16661,7 +16433,7 @@
       "members":{
         "AccepterVpcInfo":{
           "shape":"VpcPeeringConnectionVpcInfo",
-          "documentation":"<p>Information about the accepter VPC. CIDR block information is not returned when creating a VPC peering connection, or when describing a VPC peering connection that's in the <code>initiating-request</code> or <code>pending-acceptance</code> state.</p>",
+          "documentation":"<p>Information about the peer VPC. CIDR block information is not returned when creating a VPC peering connection, or when describing a VPC peering connection that's in the <code>initiating-request</code> or <code>pending-acceptance</code> state.</p>",
           "locationName":"accepterVpcInfo"
         },
         "ExpirationTime":{
diff --git a/botocore/data/ssm/2014-11-06/service-2.json b/botocore/data/ssm/2014-11-06/service-2.json
index a3c47329c..04da6eb1b 100644
--- a/botocore/data/ssm/2014-11-06/service-2.json
+++ b/botocore/data/ssm/2014-11-06/service-2.json
@@ -20,7 +20,6 @@
       "input":{"shape":"CancelCommandRequest"},
       "output":{"shape":"CancelCommandResult"},
       "errors":[
-        {"shape":"InternalServerError"},
         {"shape":"InvalidCommandId"},
         {"shape":"InvalidInstanceId"},
         {"shape":"DuplicateInstanceId"}
@@ -80,7 +79,7 @@
         {"shape":"InvalidDocumentContent"},
         {"shape":"DocumentLimitExceeded"}
       ],
-      "documentation":"<p>Creates an SSM document.</p> <p>After you create an SSM document, you can use CreateAssociation to associate it with one or more running instances.</p>"
+      "documentation":"<p>Creates an SSM document.</p> <p>After you create an SSM document, you can use <a>CreateAssociation</a> to associate it with one or more running instances.</p>"
     },
     "DeleteAssociation":{
       "name":"DeleteAssociation",
@@ -110,7 +109,6 @@
       "errors":[
         {"shape":"InternalServerError"},
         {"shape":"InvalidDocument"},
-        {"shape":"InvalidDocumentOperation"},
         {"shape":"AssociatedInstances"}
       ],
       "documentation":"<p>Deletes the SSM document and all instance associations to the document.</p> <p>Before you delete the SSM document, we recommend that you use DeleteAssociation to disassociate all instances that are associated with the document.</p>"
@@ -145,21 +143,6 @@
       ],
       "documentation":"<p>Describes the specified SSM document.</p>"
     },
-    "DescribeDocumentPermission":{
-      "name":"DescribeDocumentPermission",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeDocumentPermissionRequest"},
-      "output":{"shape":"DescribeDocumentPermissionResponse"},
-      "errors":[
-        {"shape":"InternalServerError"},
-        {"shape":"InvalidDocument"},
-        {"shape":"InvalidPermissionType"}
-      ],
-      "documentation":"<p>Describes the permissions for an SSM document. If you created the document, you are the owner. If a document is shared, it can either be shared privately (by specifying a user’s AWS account ID) or publicly (<i>All</i>). </p>"
-    },
     "DescribeInstanceInformation":{
       "name":"DescribeInstanceInformation",
       "http":{
@@ -175,7 +158,7 @@
         {"shape":"InvalidInstanceInformationFilterValue"},
         {"shape":"InvalidFilterKey"}
       ],
-      "documentation":"<p>Describes one or more of your instances. You can use this to get information about instances like the operating system platform, the SSM agent version, status etc. If you specify one or more instance IDs, it returns information for those instances. If you do not specify instance IDs, it returns information for all your instances. If you specify an instance ID that is not valid or an instance that you do not own, you receive an error. </p>"
+      "documentation":"Describes one or more of your instances. You can use this to get information about instances like the operating system platform, the SSM agent version, status etc. If you specify one or more instance IDs, it returns information for those instances. If you do not specify instance IDs, it returns information for all your instances. If you specify an instance ID that is not valid or an instance that you do not own, you receive an error."
     },
     "GetDocument":{
       "name":"GetDocument",
@@ -214,13 +197,12 @@
       "input":{"shape":"ListCommandInvocationsRequest"},
       "output":{"shape":"ListCommandInvocationsResult"},
       "errors":[
-        {"shape":"InternalServerError"},
         {"shape":"InvalidCommandId"},
         {"shape":"InvalidInstanceId"},
         {"shape":"InvalidFilterKey"},
         {"shape":"InvalidNextToken"}
       ],
-      "documentation":"<p>An invocation is copy of a command sent to a specific instance. A command can apply to one or more instances. A command invocation applies to one instance. For example, if a user executes SendCommand against three instances, then a command invocation is created for each requested instance ID. ListCommandInvocations provide status about command execution.</p>"
+      "documentation":"An invocation is copy of a command sent to a specific instance. A command can apply to one or more instances. A command invocation applies to one instance. For example, if a user executes SendCommand against three instances, then a command invocation is created for each requested instance ID. ListCommandInvocations provide status about command execution."
     },
     "ListCommands":{
       "name":"ListCommands",
@@ -231,7 +213,6 @@
       "input":{"shape":"ListCommandsRequest"},
       "output":{"shape":"ListCommandsResult"},
       "errors":[
-        {"shape":"InternalServerError"},
         {"shape":"InvalidCommandId"},
         {"shape":"InvalidInstanceId"},
         {"shape":"InvalidFilterKey"},
@@ -254,23 +235,6 @@
       ],
       "documentation":"<p>Describes one or more of your SSM documents.</p>"
     },
-    "ModifyDocumentPermission":{
-      "name":"ModifyDocumentPermission",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ModifyDocumentPermissionRequest"},
-      "output":{"shape":"ModifyDocumentPermissionResponse"},
-      "errors":[
-        {"shape":"InternalServerError"},
-        {"shape":"InvalidDocument"},
-        {"shape":"InvalidPermissionType"},
-        {"shape":"DocumentPermissionLimit"},
-        {"shape":"DocumentLimitExceeded"}
-      ],
-      "documentation":"<p>Share a document publicly or privately. If you share a document privately, you must specify the AWS user account IDs for those people who can use the document. If you share a document publicly, you must specify <i>All</i> as the account ID.</p>"
-    },
     "SendCommand":{
       "name":"SendCommand",
       "http":{
@@ -281,15 +245,13 @@
       "output":{"shape":"SendCommandResult"},
       "errors":[
         {"shape":"DuplicateInstanceId"},
-        {"shape":"InternalServerError"},
         {"shape":"InvalidInstanceId"},
         {"shape":"InvalidDocument"},
         {"shape":"InvalidOutputFolder"},
         {"shape":"InvalidParameters"},
-        {"shape":"UnsupportedPlatformType"},
-        {"shape":"MaxDocumentSizeExceeded"}
+        {"shape":"UnsupportedPlatformType"}
       ],
-      "documentation":"<p>Executes commands on one or more remote instances.</p>"
+      "documentation":"Executes commands on one or more remote instances."
     },
     "UpdateAssociationStatus":{
       "name":"UpdateAssociationStatus",
@@ -311,18 +273,6 @@
     }
   },
   "shapes":{
-    "AccountId":{
-      "type":"string",
-      "pattern":"(?i)all|[0-9]{12}"
-    },
-    "AccountIdList":{
-      "type":"list",
-      "member":{
-        "shape":"AccountId",
-        "locationName":"AccountId"
-      },
-      "max":20
-    },
     "AssociatedInstances":{
       "type":"structure",
       "members":{
@@ -372,7 +322,7 @@
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>A description of the parameters for a document. </p>"
+          "documentation":"A description of the parameters for a document."
         }
       },
       "documentation":"<p>Describes the parameters for a document.</p>"
@@ -485,14 +435,13 @@
       "members":{
         "CommandId":{
           "shape":"CommandId",
-          "documentation":"<p>The ID of the command you want to cancel.</p>"
+          "documentation":"The ID of the command you want to cancel."
         },
         "InstanceIds":{
           "shape":"InstanceIdList",
           "documentation":"<p>(Optional) A list of instance IDs on which you want to cancel the command. If not provided, the command is canceled on every instance on which it was requested.</p>"
         }
-      },
-      "documentation":"<p/>"
+      }
     },
     "CancelCommandResult":{
       "type":"structure",
@@ -505,46 +454,46 @@
       "members":{
         "CommandId":{
           "shape":"CommandId",
-          "documentation":"<p>A unique identifier for this command.</p>"
+          "documentation":"A unique identifier for this command."
         },
         "DocumentName":{
           "shape":"DocumentName",
-          "documentation":"<p>The name of the SSM document requested for execution.</p>"
+          "documentation":"The name of the SSM document requested for execution."
         },
         "Comment":{
           "shape":"Comment",
-          "documentation":"<p>User-specified information about the command, such as a brief description of what the command should do.</p>"
+          "documentation":"User-specified information about the command, such as a brief description of what the command should do."
         },
         "ExpiresAfter":{
           "shape":"DateTime",
-          "documentation":"<p>If this time is reached and the command has not already started executing, it will not execute. Calculated based on the ExpiresAfter user input provided as part of the SendCommand API.</p>"
+          "documentation":"If this time is reached and the command has not already started executing, it will not execute. Calculated based on the ExpiresAfter user input provided as part of the SendCommand API."
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>The parameter values to be inserted in the SSM document when executing the command.</p>"
+          "documentation":"The parameter values to be inserted in the SSM document when executing the command."
         },
         "InstanceIds":{
           "shape":"InstanceIdList",
-          "documentation":"<p>The instance IDs against which this command was requested.</p>"
+          "documentation":"The instance IDs against which this command was requested."
         },
         "RequestedDateTime":{
           "shape":"DateTime",
-          "documentation":"<p>The date and time the command was requested.</p>"
+          "documentation":"The date and time the command was requested."
         },
         "Status":{
           "shape":"CommandStatus",
-          "documentation":"<p>The status of the command.</p>"
+          "documentation":"The status of the command."
         },
         "OutputS3BucketName":{
           "shape":"S3BucketName",
-          "documentation":"<p>The S3 bucket where the responses to the command executions should be stored. This was requested when issuing the command.</p>"
+          "documentation":"The S3 bucket where the responses to the command executions should be stored. This was requested when issuing the command."
         },
         "OutputS3KeyPrefix":{
           "shape":"S3KeyPrefix",
-          "documentation":"<p>The S3 directory path inside the bucket where the responses to the command executions should be stored. This was requested when issuing the command.</p>"
+          "documentation":"The S3 directory path inside the bucket where the responses to the command executions should be stored. This was requested when issuing the command."
         }
       },
-      "documentation":"<p>Describes a command request.</p>"
+      "documentation":"Describes a command request."
     },
     "CommandFilter":{
       "type":"structure",
@@ -555,14 +504,14 @@
       "members":{
         "key":{
           "shape":"CommandFilterKey",
-          "documentation":"<p>The name of the filter. For example, requested date and time.</p>"
+          "documentation":"The name of the filter. For example, requested date and time."
         },
         "value":{
           "shape":"CommandFilterValue",
-          "documentation":"<p>The filter value. For example: June 30, 2015.</p>"
+          "documentation":"The filter value. For example: June 30, 2015."
         }
       },
-      "documentation":"<p>Describes a command filter.</p>"
+      "documentation":"Describes a command filter."
     },
     "CommandFilterKey":{
       "type":"string",
@@ -592,35 +541,35 @@
       "members":{
         "CommandId":{
           "shape":"CommandId",
-          "documentation":"<p>The command against which this invocation was requested.</p>"
+          "documentation":"The command against which this invocation was requested."
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The instance ID in which this invocation was requested.</p>"
+          "documentation":"The instance ID in which this invocation was requested."
         },
         "Comment":{
           "shape":"Comment",
-          "documentation":"<p>User-specified information about the command, such as a brief description of what the command should do.</p>"
+          "documentation":"User-specified information about the command, such as a brief description of what the command should do."
         },
         "DocumentName":{
           "shape":"DocumentName",
-          "documentation":"<p>The document name that was requested for execution.</p>"
+          "documentation":"The document name that was requested for execution."
         },
         "RequestedDateTime":{
           "shape":"DateTime",
-          "documentation":"<p>The time and date the request was sent to this instance.</p>"
+          "documentation":"The time and date the request was sent to this instance."
         },
         "Status":{
           "shape":"CommandInvocationStatus",
-          "documentation":"<p>Whether or not the invocation succeeded, failed, or is pending.</p>"
+          "documentation":"Whether or not the invocation succeeded, failed, or is pending."
         },
         "TraceOutput":{
           "shape":"InvocationTraceOutput",
-          "documentation":"<p> Gets the trace output sent by the agent. </p>"
+          "documentation":"Gets the trace output sent by the agent."
         },
         "CommandPlugins":{"shape":"CommandPluginList"}
       },
-      "documentation":"<p>An invocation is copy of a command sent to a specific instance. A command can apply to one or more instances. A command invocation applies to one instance. For example, if a user executes SendCommand against three instances, then a command invocation is created for each requested instance ID. A command invocation returns status and detail information about a command you executed. </p>"
+      "documentation":"An invocation is copy of a command sent to a specific instance. A command can apply to one or more instances. A command invocation applies to one instance. For example, if a user executes SendCommand against three instances, then a command invocation is created for each requested instance ID. A command invocation returns status and detail information about a command you executed."
     },
     "CommandInvocationList":{
       "type":"list",
@@ -652,38 +601,38 @@
       "members":{
         "Name":{
           "shape":"CommandPluginName",
-          "documentation":"<p>The name of the plugin. Must be one of the following: aws:updateAgent, aws:domainjoin, aws:applications, aws:runPowerShellScript, aws:psmodule, aws:cloudWatch, aws:runShellScript, or aws:updateSSMAgent. </p>"
+          "documentation":"The name of the plugin. Must be one of the following: aws:updateAgent, aws:domainjoin, aws:applications, aws:runPowerShellScript, aws:psmodule, aws:cloudWatch, aws:runShellScript, or aws:updateSSMAgent."
         },
         "Status":{
           "shape":"CommandPluginStatus",
-          "documentation":"<p>The status of this plugin. You can execute a document with multiple plugins.</p>"
+          "documentation":"The status of this plugin. You can execute a document with multiple plugins."
         },
         "ResponseCode":{
           "shape":"ResponseCode",
-          "documentation":"<p>A numeric response code generated after executing the plugin. </p>"
+          "documentation":"A numeric response code generated after executing the plugin."
         },
         "ResponseStartDateTime":{
           "shape":"DateTime",
-          "documentation":"<p>The time the plugin started executing. </p>"
+          "documentation":"The time the plugin started executing."
         },
         "ResponseFinishDateTime":{
           "shape":"DateTime",
-          "documentation":"<p>The time the plugin stopped executing. Could stop prematurely if, for example, a cancel command was sent. </p>"
+          "documentation":"The time the plugin stopped executing. Could stop prematurely if, for example, a cancel command was sent."
         },
         "Output":{
           "shape":"CommandPluginOutput",
-          "documentation":"<p>Output of the plugin execution.</p>"
+          "documentation":"Output of the plugin execution."
         },
         "OutputS3BucketName":{
           "shape":"S3BucketName",
-          "documentation":"<p>The S3 bucket where the responses to the command executions should be stored. This was requested when issuing the command.</p>"
+          "documentation":"The S3 bucket where the responses to the command executions should be stored. This was requested when issuing the command."
         },
         "OutputS3KeyPrefix":{
           "shape":"S3KeyPrefix",
-          "documentation":"<p>The S3 directory path inside the bucket where the responses to the command executions should be stored. This was requested when issuing the command. </p>"
+          "documentation":"The S3 directory path inside the bucket where the responses to the command executions should be stored. This was requested when issuing the command."
         }
       },
-      "documentation":"<p>Describes plugin details.</p>"
+      "documentation":"Describes plugin details."
     },
     "CommandPluginList":{
       "type":"list",
@@ -746,18 +695,18 @@
       "members":{
         "Name":{
           "shape":"DocumentName",
-          "documentation":"<p> The name of the configuration document. </p>"
+          "documentation":"The name of the configuration document."
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p> The ID of the instance. </p>"
+          "documentation":"The ID of the instance."
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>A description of the parameters for a document. </p>"
+          "documentation":"A description of the parameters for a document."
         }
       },
-      "documentation":"<p> Describes the association of an SSM document and an instance. </p>"
+      "documentation":"Describes the association of an SSM document and an instance."
     },
     "CreateAssociationBatchResult":{
       "type":"structure",
@@ -785,11 +734,11 @@
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The instance ID.</p>"
+          "documentation":"<p>The Windows Server instance ID.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>The parameters for the documents runtime configuration. </p>"
+          "documentation":"The parameters for the documents runtime configuration."
         }
       }
     },
@@ -811,7 +760,7 @@
       "members":{
         "Content":{
           "shape":"DocumentContent",
-          "documentation":"<p>A valid JSON string.</p>"
+          "documentation":"<p>A valid JSON string. For more information about the contents of this string, see <a href=\"http://docs.aws.amazon.com/ssm/latest/APIReference/aws-ssm-document.html\">SSM Document</a>.</p>"
         },
         "Name":{
           "shape":"DocumentName",
@@ -879,7 +828,7 @@
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The instance ID.</p>"
+          "documentation":"<p>The Windows Server instance ID.</p>"
         }
       }
     },
@@ -892,38 +841,12 @@
         }
       }
     },
-    "DescribeDocumentPermissionRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "PermissionType"
-      ],
-      "members":{
-        "Name":{
-          "shape":"DocumentName",
-          "documentation":"<p>The name of the document for which you are the owner.</p>"
-        },
-        "PermissionType":{
-          "shape":"DocumentPermissionType",
-          "documentation":"<p>The permission type for the document. The permission type can be <i>Share</i>.</p>"
-        }
-      }
-    },
-    "DescribeDocumentPermissionResponse":{
-      "type":"structure",
-      "members":{
-        "AccountIds":{
-          "shape":"AccountIdList",
-          "documentation":"<p>The account IDs that have permission to use this document. The ID can be either an AWS account or <i>All</i>.</p>"
-        }
-      }
-    },
     "DescribeDocumentRequest":{
       "type":"structure",
       "required":["Name"],
       "members":{
         "Name":{
-          "shape":"DocumentARN",
+          "shape":"DocumentName",
           "documentation":"<p>The name of the SSM document.</p>"
         }
       }
@@ -942,16 +865,16 @@
       "members":{
         "InstanceInformationFilterList":{
           "shape":"InstanceInformationFilterList",
-          "documentation":"<p>One or more filters. Use a filter to return a more specific list of instances.</p>"
+          "documentation":"One or more filters. Use a filter to return a more specific list of instances."
         },
         "MaxResults":{
           "shape":"MaxResultsEC2Compatible",
-          "documentation":"<p>The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results. </p>",
+          "documentation":"The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.",
           "box":true
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The token for the next set of items to return. (You received this token from a previous call.)</p>"
+          "documentation":"The token for the next set of items to return. (You received this token from a previous call.)"
         }
       }
     },
@@ -960,23 +883,18 @@
       "members":{
         "InstanceInformationList":{
           "shape":"InstanceInformationList",
-          "documentation":"<p>The instance information list.</p>"
+          "documentation":"The instance information list."
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The token to use when requesting the next set of items. If there are no additional items to return, the string is empty. </p>"
+          "documentation":"The token to use when requesting the next set of items. If there are no additional items to return, the string is empty."
         }
       }
     },
     "DescriptionInDocument":{"type":"string"},
-    "DocumentARN":{
-      "type":"string",
-      "pattern":"^[a-zA-Z0-9_\\-.:/]{3,128}$"
-    },
     "DocumentAlreadyExists":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
       },
       "documentation":"<p>The specified SSM document already exists.</p>",
       "exception":true
@@ -992,25 +910,13 @@
           "shape":"DocumentSha1",
           "documentation":"<p>The SHA1 hash of the document, which you can use for verification purposes.</p>"
         },
-        "Hash":{
-          "shape":"DocumentHash",
-          "documentation":"<p>The Sha256 or Sha1 hash created by the system when the document was created. </p> <note> <p>Sha1 hashes have been deprecated.</p> </note>"
-        },
-        "HashType":{
-          "shape":"DocumentHashType",
-          "documentation":"<p>Sha256 or Sha1.</p> <note> <p>Sha1 hashes have been deprecated.</p> </note>"
-        },
         "Name":{
-          "shape":"DocumentARN",
+          "shape":"DocumentName",
           "documentation":"<p>The name of the SSM document.</p>"
         },
-        "Owner":{
-          "shape":"DocumentOwner",
-          "documentation":"<p>The AWS user account of the person who created the document.</p>"
-        },
         "CreatedDate":{
           "shape":"DateTime",
-          "documentation":"<p> The date when the SSM document was created. </p>"
+          "documentation":"The date when the SSM document was created."
         },
         "Status":{
           "shape":"DocumentStatus",
@@ -1018,7 +924,7 @@
         },
         "Description":{
           "shape":"DescriptionInDocument",
-          "documentation":"<p> A description of the document. </p>"
+          "documentation":"A description of the document."
         },
         "Parameters":{
           "shape":"DocumentParameterList",
@@ -1026,10 +932,10 @@
         },
         "PlatformTypes":{
           "shape":"PlatformTypeList",
-          "documentation":"<p>The list of OS platforms compatible with this SSM document. </p>"
+          "documentation":"The list of OS platforms compatible with this SSM document."
         }
       },
-      "documentation":"<p> Describes an SSM document. </p>"
+      "documentation":"Describes an SSM document."
     },
     "DocumentFilter":{
       "type":"structure",
@@ -1069,31 +975,16 @@
       "type":"string",
       "min":1
     },
-    "DocumentHash":{
-      "type":"string",
-      "max":256
-    },
-    "DocumentHashType":{
-      "type":"string",
-      "enum":[
-        "Sha256",
-        "Sha1"
-      ]
-    },
     "DocumentIdentifier":{
       "type":"structure",
       "members":{
         "Name":{
-          "shape":"DocumentARN",
+          "shape":"DocumentName",
           "documentation":"<p>The name of the SSM document.</p>"
         },
-        "Owner":{
-          "shape":"DocumentOwner",
-          "documentation":"<p>The AWS user account of the person who created the document.</p>"
-        },
         "PlatformTypes":{
           "shape":"PlatformTypeList",
-          "documentation":"<p>The operating system platform. </p>"
+          "documentation":"The operating system platform."
         }
       },
       "documentation":"<p>Describes the name of an SSM document.</p>"
@@ -1108,7 +999,6 @@
     "DocumentLimitExceeded":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
       },
       "documentation":"<p>You can have at most 100 active SSM documents.</p>",
       "exception":true
@@ -1117,7 +1007,6 @@
       "type":"string",
       "pattern":"^[a-zA-Z0-9_\\-.]{3,128}$"
     },
-    "DocumentOwner":{"type":"string"},
     "DocumentParameter":{
       "type":"structure",
       "members":{
@@ -1137,8 +1026,7 @@
           "shape":"DocumentParameterDefaultValue",
           "documentation":"<p>If specified, the default values for the parameters. Parameters without a default value are required. Parameters with a default value are optional.</p>"
         }
-      },
-      "documentation":"<p>Parameters specified in the SSM document that execute on the server when the command is run. </p>"
+      }
     },
     "DocumentParameterDefaultValue":{"type":"string"},
     "DocumentParameterDescrption":{"type":"string"},
@@ -1157,18 +1045,6 @@
         "StringList"
       ]
     },
-    "DocumentPermissionLimit":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"String"}
-      },
-      "documentation":"<p>The document cannot be shared with more AWS user accounts. You can share a document with a maximum of 20 accounts. You can publicly share up to five documents. If you need to increase this limit, contact AWS Support.</p>",
-      "exception":true
-    },
-    "DocumentPermissionType":{
-      "type":"string",
-      "enum":["Share"]
-    },
     "DocumentSha1":{"type":"string"},
     "DocumentStatus":{
       "type":"string",
@@ -1223,7 +1099,7 @@
       "required":["Name"],
       "members":{
         "Name":{
-          "shape":"DocumentARN",
+          "shape":"DocumentName",
           "documentation":"<p>The name of the SSM document.</p>"
         }
       }
@@ -1232,7 +1108,7 @@
       "type":"structure",
       "members":{
         "Name":{
-          "shape":"DocumentARN",
+          "shape":"DocumentName",
           "documentation":"<p>The name of the SSM document.</p>"
         },
         "Content":{
@@ -1256,40 +1132,40 @@
       "members":{
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The instance ID. </p>"
+          "documentation":"The instance ID."
         },
         "PingStatus":{
           "shape":"PingStatus",
-          "documentation":"<p>Connection status of the SSM agent. </p>"
+          "documentation":"Connection status of the SSM agent."
         },
         "LastPingDateTime":{
           "shape":"DateTime",
-          "documentation":"<p>The date and time when agent last pinged SSM service. </p>",
+          "documentation":"The date and time when agent last pinged SSM service.",
           "box":true
         },
         "AgentVersion":{
           "shape":"Version",
-          "documentation":"<p>The version of the SSM agent running on your instance. </p>"
+          "documentation":"The version of the SSM agent running on your instance."
         },
         "IsLatestVersion":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether latest version of the SSM agent is running on your instance. </p>",
+          "documentation":"Indicates whether latest version of the SSM agent is running on your instance.",
           "box":true
         },
         "PlatformType":{
           "shape":"PlatformType",
-          "documentation":"<p>The operating system platform type. </p>"
+          "documentation":"The operating system platform type."
         },
         "PlatformName":{
           "shape":"String",
-          "documentation":"<p>The name of the operating system platform running on your instance. </p>"
+          "documentation":"The name of the operating system platform running on your instance."
         },
         "PlatformVersion":{
           "shape":"String",
-          "documentation":"<p>The version of the OS platform running on your instance. </p>"
+          "documentation":"The version of the OS platform running on your instance."
         }
       },
-      "documentation":"<p>Describes a filter for a specific list of instances. </p>"
+      "documentation":"Describes a filter for a specific list of instances."
     },
     "InstanceInformationFilter":{
       "type":"structure",
@@ -1300,14 +1176,14 @@
       "members":{
         "key":{
           "shape":"InstanceInformationFilterKey",
-          "documentation":"<p>The name of the filter. </p>"
+          "documentation":"The name of the filter."
         },
         "valueSet":{
           "shape":"InstanceInformationFilterValueSet",
-          "documentation":"<p>The filter values. </p>"
+          "documentation":"The filter values."
         }
       },
-      "documentation":"<p>Describes a filter for a specific list of instances. </p>"
+      "documentation":"Describes a filter for a specific list of instances."
     },
     "InstanceInformationFilterKey":{
       "type":"string",
@@ -1349,7 +1225,10 @@
     "InternalServerError":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"An error occurred on the server side."
+        }
       },
       "documentation":"<p>An error occurred on the server side.</p>",
       "exception":true
@@ -1363,7 +1242,7 @@
     "InvalidDocument":{
       "type":"structure",
       "members":{
-        "Message":{
+        "message":{
           "shape":"String",
           "documentation":"<p>The SSM document does not exist or the document is not available to the user. This exception can be issued by CreateAssociation, CreateAssociationBatch, DeleteAssociation, DeleteDocument, DescribeAssociation, DescribeDocument, GetDocument, SendCommand, or UpdateAssociationStatus. </p>"
         }
@@ -1374,7 +1253,7 @@
     "InvalidDocumentContent":{
       "type":"structure",
       "members":{
-        "Message":{
+        "message":{
           "shape":"String",
           "documentation":"<p>A description of the validation error.</p>"
         }
@@ -1382,25 +1261,16 @@
       "documentation":"<p>The content for the SSM document is not valid.</p>",
       "exception":true
     },
-    "InvalidDocumentOperation":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"String"}
-      },
-      "documentation":"<p>You attempted to delete a document while it is still shared. You must stop sharing the document before you can delete it.</p>",
-      "exception":true
-    },
     "InvalidFilterKey":{
       "type":"structure",
       "members":{
       },
-      "documentation":"<p>The specified key is not valid.</p>",
+      "documentation":"The specified key is not valid.",
       "exception":true
     },
     "InvalidInstanceId":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
       },
       "documentation":"<p>The instance is not in valid state. Valid states are: Running, Pending, Stopped, Stopping. Invalid states are: Shutting-down and Terminated. </p>",
       "exception":true
@@ -1410,7 +1280,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The specified filter value is not valid.</p>",
+      "documentation":"The specified filter value is not valid.",
       "exception":true
     },
     "InvalidNextToken":{
@@ -1424,23 +1294,18 @@
       "type":"structure",
       "members":{
       },
-      "documentation":"<p>The S3 bucket does not exist.</p>",
+      "documentation":"The S3 bucket does not exist.",
       "exception":true
     },
     "InvalidParameters":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
-      },
-      "documentation":"<p>You must specify values for all required parameters in the SSM document. You can only supply values to parameters defined in the SSM document.</p>",
-      "exception":true
-    },
-    "InvalidPermissionType":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The parameter values entered by the user do not work in the SSM document. For example, incorrect type. This exception can be issued by CreateAssociation, CreateAssociationBatch, or SendCommand. </p>"
+        }
       },
-      "documentation":"<p>The permission type is not supported. <i>Share</i> is the only supported permission type.</p>",
+      "documentation":"You must specify values for all required parameters in the SSM document. You can only supply values to parameters defined in the SSM document.",
       "exception":true
     },
     "InvocationTraceOutput":{
@@ -1484,28 +1349,28 @@
       "members":{
         "CommandId":{
           "shape":"CommandId",
-          "documentation":"<p>(Optional) The invocations for a specific command ID.</p>"
+          "documentation":"(Optional) The invocations for a specific command ID."
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>(Optional) The command execution details for a specific instance ID.</p>"
+          "documentation":"(Optional) The command execution details for a specific instance ID."
         },
         "MaxResults":{
           "shape":"CommandMaxResults",
-          "documentation":"<p>(Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.</p>",
+          "documentation":"(Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.",
           "box":true
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>(Optional) The token for the next set of items to return. (You received this token from a previous call.)</p>"
+          "documentation":"(Optional) The token for the next set of items to return. (You received this token from a previous call.)"
         },
         "Filters":{
           "shape":"CommandFilterList",
-          "documentation":"<p>(Optional) One or more filters. Use a filter to return a more specific list of results.</p>"
+          "documentation":"(Optional) One or more filters. Use a filter to return a more specific list of results."
         },
         "Details":{
           "shape":"Boolean",
-          "documentation":"<p>(Optional) If set this returns the response of the command executions and any command output. By default this is set to False. </p>"
+          "documentation":"(Optional) If set this returns the response of the command executions and any command output. By default this is set to False."
         }
       }
     },
@@ -1514,11 +1379,11 @@
       "members":{
         "CommandInvocations":{
           "shape":"CommandInvocationList",
-          "documentation":"<p>(Optional) A list of all invocations. </p>"
+          "documentation":"(Optional) A list of all invocations."
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>(Optional) The token for the next set of items to return. (You received this token from a previous call.)</p>"
+          "documentation":"(Optional) The token for the next set of items to return. (You received this token from a previous call.)"
         }
       }
     },
@@ -1527,24 +1392,24 @@
       "members":{
         "CommandId":{
           "shape":"CommandId",
-          "documentation":"<p>(Optional) If provided, lists only the specified command.</p>"
+          "documentation":"(Optional) If provided, lists only the specified command."
         },
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>(Optional) Lists commands issued against this instance ID.</p>"
+          "documentation":"(Optional) Lists commands issued against this instance ID."
         },
         "MaxResults":{
           "shape":"CommandMaxResults",
-          "documentation":"<p>(Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.</p>",
+          "documentation":"(Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.",
           "box":true
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>(Optional) The token for the next set of items to return. (You received this token from a previous call.)</p>"
+          "documentation":"(Optional) The token for the next set of items to return. (You received this token from a previous call.)"
         },
         "Filters":{
           "shape":"CommandFilterList",
-          "documentation":"<p>(Optional) One or more filters. Use a filter to return a more specific list of results. </p>"
+          "documentation":"(Optional) One or more filters. Use a filter to return a more specific list of results."
         }
       }
     },
@@ -1553,19 +1418,14 @@
       "members":{
         "Commands":{
           "shape":"CommandList",
-          "documentation":"<p>(Optional) The list of commands requested by the user. </p>"
+          "documentation":"(Optional) The list of commands requested by the user."
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>(Optional) The token for the next set of items to return. (You received this token from a previous call.)</p>"
+          "documentation":"(Optional) The token for the next set of items to return. (You received this token from a previous call.)"
         }
       }
     },
-    "ListDocumentsMaxResults":{
-      "type":"integer",
-      "max":50,
-      "min":1
-    },
     "ListDocumentsRequest":{
       "type":"structure",
       "members":{
@@ -1574,7 +1434,7 @@
           "documentation":"<p>One or more filters. Use a filter to return a more specific list of results.</p>"
         },
         "MaxResults":{
-          "shape":"ListDocumentsMaxResults",
+          "shape":"MaxResults",
           "documentation":"<p>The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.</p>",
           "box":true
         },
@@ -1600,7 +1460,6 @@
     "MaxDocumentSizeExceeded":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
       },
       "documentation":"<p>The size limit of an SSM document is 64 KB.</p>",
       "exception":true
@@ -1615,36 +1474,6 @@
       "max":50,
       "min":5
     },
-    "ModifyDocumentPermissionRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "PermissionType"
-      ],
-      "members":{
-        "Name":{
-          "shape":"DocumentName",
-          "documentation":"<p>The name of the document that you want to share.</p>"
-        },
-        "PermissionType":{
-          "shape":"DocumentPermissionType",
-          "documentation":"<p>The permission type for the document. The permission type can be <i>Share</i>.</p>"
-        },
-        "AccountIdsToAdd":{
-          "shape":"AccountIdList",
-          "documentation":"<p>The AWS user accounts that should have access to the document. The account IDs can either be a group of account IDs or <i>All</i>.</p>"
-        },
-        "AccountIdsToRemove":{
-          "shape":"AccountIdList",
-          "documentation":"<p>The AWS user accounts that should no longer have access to the document. The AWS user account can either be a group of account IDs or <i>All</i>. This action has a higher priority than <i>AccountIdsToAdd</i>. If you specify an account ID to add and the same ID to remove, the system removes access to the document.</p>"
-        }
-      }
-    },
-    "ModifyDocumentPermissionResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
     "NextToken":{"type":"string"},
     "ParameterName":{"type":"string"},
     "ParameterValue":{"type":"string"},
@@ -1698,40 +1527,32 @@
       "members":{
         "InstanceIds":{
           "shape":"InstanceIdList",
-          "documentation":"<p>Required. The instance IDs where the command should execute.</p>"
+          "documentation":"Required. The instance IDs where the command should execute."
         },
         "DocumentName":{
-          "shape":"DocumentARN",
-          "documentation":"<p>Required. The name of the SSM document to execute. This can be an SSM public document or a custom document.</p>"
-        },
-        "DocumentHash":{
-          "shape":"DocumentHash",
-          "documentation":"<p>The Sha256 or Sha1 hash created by the system when the document was created. </p> <note> <p>Sha1 hashes have been deprecated.</p> </note>"
-        },
-        "DocumentHashType":{
-          "shape":"DocumentHashType",
-          "documentation":"<p>Sha256 or Sha1.</p> <note> <p>Sha1 hashes have been deprecated.</p> </note>"
+          "shape":"DocumentName",
+          "documentation":"Required. The name of the SSM document to execute. This can be an SSM public document or a custom document."
         },
         "TimeoutSeconds":{
           "shape":"TimeoutSeconds",
-          "documentation":"<p>If this time is reached and the command has not already started executing, it will not execute.</p>",
+          "documentation":"If this time is reached and the command has not already started executing, it will not execute.",
           "box":true
         },
         "Comment":{
           "shape":"Comment",
-          "documentation":"<p>User-specified information about the command, such as a brief description of what the command should do.</p>"
+          "documentation":"User-specified information about the command, such as a brief description of what the command should do."
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>The required and optional parameters specified in the SSM document being executed.</p>"
+          "documentation":"The required and optional parameters specified in the SSM document being executed."
         },
         "OutputS3BucketName":{
           "shape":"S3BucketName",
-          "documentation":"<p>The name of the S3 bucket where command execution responses should be stored.</p>"
+          "documentation":"The name of the S3 bucket where command execution responses should be stored."
         },
         "OutputS3KeyPrefix":{
           "shape":"S3KeyPrefix",
-          "documentation":"<p>The directory structure within the S3 bucket where the responses should be stored.</p>"
+          "documentation":"The directory structure within the S3 bucket where the responses should be stored."
         }
       }
     },
@@ -1740,7 +1561,7 @@
       "members":{
         "Command":{
           "shape":"Command",
-          "documentation":"<p>The request as it was received by SSM. Also provides the command ID which can be used future references to this request.</p>"
+          "documentation":"The request as it was received by SSM. Also provides the command ID which can be used future references to this request."
         }
       }
     },
@@ -1775,9 +1596,9 @@
     "UnsupportedPlatformType":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"String"}
+        "message":{"shape":"String"}
       },
-      "documentation":"<p>The document does not support the platform type of the given instance ID(s). For example, you sent an SSM document for a Windows instance to a Linux instance.</p>",
+      "documentation":"The document does not support the platform type of the given instance ID(s).",
       "exception":true
     },
     "UpdateAssociationStatusRequest":{
@@ -1816,5 +1637,5 @@
       "pattern":"^[0-9]{1,6}(\\.[0-9]{1,6}){2,3}$"
     }
   },
-  "documentation":"<p>This is the Amazon Simple Systems Manager (SSM) API Reference. SSM enables you to remotely manage the configuration of your Amazon EC2 instance using scripts or commands with either an on-demand solution called <i>SSM Run Command</i> or a lightweight instance configuration solution called <i>SSM Config</i>. </p> <p>This references is intended to be used with the SSM User Guide for <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/execute-remote-commands.html\">Linux</a> or <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/execute-remote-commands.html\">Windows</a>.</p> <p> <b>Run Command</b> </p> <p>Run Command provides an on-demand experience for executing commands. You can use pre-defined Amazon SSM documents to perform the actions listed later in this section, or you can create your own documents. With these documents, you can remotely configure your instances by sending commands using the <b>Commands</b> page in the <a href=\"http://console.aws.amazon.com/ec2/\">Amazon EC2 console</a>, <a href=\"http://docs.aws.amazon.com/powershell/latest/reference/items/Amazon_Simple_Systems_Management_cmdlets.html\">AWS Tools for Windows PowerShell</a>, the <a href=\"http://docs.aws.amazon.com/cli/latest/reference/ssm/index.html\">AWS CLI</a>, or AWS SDKs.</p> <p>Run Command reports the status of the command execution for each instance targeted by a command. You can also audit the command execution to understand who executed commands, when, and what changes were made. By switching between different SSM documents, you can quickly configure your instances with different types of commands. To get started with Run Command, verify that your environment meets the prerequisites for remotely running commands on EC2 instances (<a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/remote-commands-prereq.html\">Linux</a> or <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/remote-commands-prereq.html\">Windows</a>). </p> <p/> <p> <b>SSM Config</b> </p> <p>SSM Config is a lightweight instance configuration solution. SSM Config is currently only available for Windows instances. With SSM Config, you can specify a setup configuration for your instances. SSM Config is similar to EC2 User Data, which is another way of running one-time scripts or applying settings during instance launch. SSM Config is an extension of this capability. Using SSM documents, you can specify which actions the system should perform on your instances, including which applications to install, which AWS Directory Service directory to join, which Microsoft PowerShell modules to install, etc. If an instance is missing one or more of these configurations, the system makes those changes. By default, the system checks every five minutes to see if there is a new configuration to apply as defined in a new SSM document. If so, the system updates the instances accordingly. In this way, you can remotely maintain a consistent configuration baseline on your instances. SSM Config is available using the AWS CLI or the AWS Tools for Windows PowerShell. For more information, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-configuration-manage.html\">Managing Windows Instance Configuration</a>.</p> <p>SSM Config and SSM Run Command include the following pre-defined documents.</p> <p> <b>Linux</b> </p> <ul> <li> <p> <b>AWS-RunShellScript</b> to run shell scripts</p> </li> <li> <p> <b>AWS-UpdateSSMAgent</b> to update the Amazon SSM agent</p> </li> </ul> <p/> <p> <b>Windows</b> </p> <ul> <li> <p> <b>AWS-JoinDirectoryServiceDomain</b> to join an AWS Directory</p> </li> <li> <p> <b>AWS-RunPowerShellScript</b> to run PowerShell commands or scripts</p> </li> <li> <p> <b>AWS-UpdateEC2Config</b> to update the EC2Config service</p> </li> <li> <p> <b>AWS-ConfigureWindowsUpdate</b> to configure Windows Update settings</p> </li> <li> <p> <b>AWS-InstallApplication</b> to install, repair, or uninstall software using an MSI package</p> </li> <li> <p> <b>AWS-InstallPowerShellModule</b> to install PowerShell modules </p> </li> <li> <p> <b>AWS-ConfigureCloudWatch</b> to configure Amazon CloudWatch Logs to monitor applications and systems</p> </li> <li> <p> <b>AWS-ListWindowsInventory</b> to collect information about an EC2 instance running in Windows.</p> </li> <li> <p> <b>AWS-FindWindowsUpdates</b> to scan an instance and determines which updates are missing.</p> </li> <li> <p> <b>AWS-InstallMissingWindowsUpdates</b> to install missing updates on your EC2 instance.</p> </li> <li> <p> <b>AWS-InstallSpecificWindowsUpdates</b> to install one or more specific updates.</p> </li> </ul> <important> <p>The commands or scripts specified in SSM documents run with administrative privilege on your instances because the Amazon SSM agent runs as root on Linux and the EC2Config service runs in the Local System account on Windows. If a user has permission to execute any of the pre-defined SSM documents (any document that begins with AWS-*) then that user also has administrator access to the instance. Delegate access to SSM and Run Command judiciously. This becomes extremely important if you create your own SSM documents. Amazon Web Services does not provide guidance about how to create secure SSM documents. You create SSM documents and delegate access to Run Command at your own risk. As a security best practice, we recommend that you assign access to \"AWS-*\" documents, especially the AWS-RunShellScript document on Linux and the AWS-RunPowerShellScript document on Windows, to trusted administrators only. You can create SSM documents for specific tasks and delegate access to non-administrators.</p> </important> <p>For information about creating and sharing SSM documents, see the following topics in the SSM User Guide: </p> <ul> <li> <p> <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-ssm-doc.html\">Creating SSM Documents</a> and <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssm-sharing.html\">Sharing SSM Documents</a> (Linux)</p> </li> <li> <p> <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/create-ssm-doc.html\">Creating SSM Documents</a> and <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ssm-sharing.html\">Sharing SSM Documents</a> (Windows)</p> </li> </ul>"
+  "documentation":"<p>Simple Systems Manager (SSM) enables you to remotely manage the configuration of your Amazon EC2 instance. Using SSM, you can run scripts or commands using either EC2 Run Command or SSM Config. (SSM Config is currently available only for Windows instances.) </p> <p/> <b>Run Command</b> <p>Run Command provides an on-demand experience for executing commands. You can use pre-defined Amazon SSM documents to perform the actions listed later in this section, or you can create your own documents. With these documents, you can remotely configure your instances by sending commands using the <b>Commands</b> page in the <a href=\"http://console.aws.amazon.com/ec2/\">Amazon EC2 console</a>, <a href=\"http://docs.aws.amazon.com/powershell/latest/reference/items/Amazon_Simple_Systems_Management_cmdlets.html\">AWS Tools for Windows PowerShell</a>, or the <a href=\"http://docs.aws.amazon.com/cli/latest/reference/ssm/index.html\">AWS CLI</a>.</p> <p>Run Command reports the status of the command execution for each instance targeted by a command. You can also audit the command execution to understand who executed commands, when, and what changes were made. By switching between different SSM documents, you can quickly configure your instances with different types of commands. To get started with Run Command, verify that your environment meets the prerequisites for remotely running commands on EC2 instances (<a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/remote-commands-prereq.html\">Linux</a> or <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/remote-commands-prereq.html\">Windows</a>). </p> <p/> <b>SSM Config</b> <p>SSM Config is a lightweight instance configuration solution. SSM Config is currently only available for Windows instances. With SSM Config, you can specify a setup configuration for your instances. SSM Config is similar to EC2 User Data, which is another way of running one-time scripts or applying settings during instance launch. SSM Config is an extension of this capability. Using SSM documents, you can specify which actions the system should perform on your instances, including which applications to install, which AWS Directory Service directory to join, which Microsoft PowerShell modules to install, etc. If an instance is missing one or more of these configurations, the system makes those changes. By default, the system checks every five minutes to see if there is a new configuration to apply as defined in a new SSM document. If so, the system updates the instances accordingly. In this way, you can remotely maintain a consistent configuration baseline on your instances. SSM Config is available using the AWS CLI or the AWS Tools for Windows PowerShell. For more information, see <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-configuration-manage.html\">Managing Windows Instance Configuration</a>.</p> <p>SSM Config and Run Command include the following pre-defined documents.</p> <table> <title>Amazon Pre-defined SSM Documents</title> <tgroup cols=\"3\"> <colspec colname=\"col1\" colnum=\"1\" colwidth=\"1*\"/> <colspec colname=\"col2\" colnum=\"2\" colwidth=\"1*\"/> <colspec colname=\"col3\" colnum=\"3\" colwidth=\"1*\"/> <thead> <row> <entry>Name</entry> <entry>Description</entry> <entry>Platform</entry> </row> </thead> <tbody> <row> <entry> <p>AWS-RunShellScript</p> </entry> <entry> <p>Run shell scripts</p> </entry> <entry> <p>Linux</p> </entry> </row> <row> <entry> <p>AWS-UpdateSSMAgent</p> </entry> <entry> <p>Update the Amazon SSM agent</p> </entry> <entry> <p>Linux</p> </entry> </row> <row> <entry> <p>AWS-JoinDirectoryServiceDomain </p> </entry> <entry> <p>Join an AWS Directory </p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-RunPowerShellScript</p> </entry> <entry> <p>Run PowerShell commands or scripts</p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-UpdateEC2Config</p> </entry> <entry> <p>Update the EC2Config service </p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-ConfigureWindowsUpdate</p> </entry> <entry> <p>Configure Windows Update settings</p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-InstallApplication</p> </entry> <entry> <p>Install, repair, or uninstall software using an MSI package</p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-InstallPowerShellModule</p> </entry> <entry> <p>Install PowerShell modules </p> </entry> <entry> <p>Windows</p> </entry> </row> <row> <entry> <p>AWS-ConfigureCloudWatch</p> </entry> <entry> <p>Configure Amazon CloudWatch Logs to monitor applications and systems</p> </entry> <entry> <p>Windows</p> </entry> </row> </tbody> </tgroup> </table> <important> <simpara>The commands or scripts specified in SSM documents run with administrative privilege on your instances because the Amazon SSM agent runs as root on Linux and the EC2Config service runs in the Local System account on Windows. If a user has permission to execute any of the pre-defined SSM documents (any document that begins with AWS-*) then that user also has administrator access to the instance. Delegate access to SSM and Run Command judiciously. This becomes extremely important if you create your own SSM documents. Amazon Web Services does not provide guidance about how to create secure SSM documents. You create SSM documents and delegate access to Run Command at your own risk. As a security best practice, we recommend that you assign access to \"AWS-*\" documents, especially the AWS-RunShellScript document on Linux and the AWS-RunPowerShellScript document on Windows, to trusted administrators only. You can create SSM documents for specific tasks and delegate access to non-administrators.</simpara> </important>"
 }
diff --git a/botocore/loaders.py b/botocore/loaders.py
index 5177b16be..390c98378 100644
--- a/botocore/loaders.py
+++ b/botocore/loaders.py
@@ -94,6 +94,7 @@ version to use.
 
 """
 import os
+import logging
 
 from botocore import BOTOCORE_ROOT
 from botocore.compat import json
@@ -101,6 +102,9 @@ from botocore.compat import OrderedDict
 from botocore.exceptions import DataNotFoundError, UnknownServiceError
 
 
+logger = logging.getLogger(__name__)
+
+
 def instance_cache(func):
     """Cache the result of a method on a per instance basis.
 
@@ -158,6 +162,7 @@ class JSONFileLoader(object):
         # We specify "utf8" here to ensure the correct behavior.
         with open(full_path, 'rb') as fp:
             payload = fp.read().decode('utf-8')
+            logger.debug("Loading JSON file: %s", full_path)
             return json.loads(payload, object_pairs_hook=OrderedDict)
 
 
diff --git a/botocore/model.py b/botocore/model.py
index 3edd99a4f..59c7df399 100644
--- a/botocore/model.py
+++ b/botocore/model.py
@@ -432,6 +432,9 @@ class OperationModel(object):
                 return payload_shape
         return None
 
+    def __repr__(self):
+        return '%s(name=%s)' % (self.__class__.__name__, self.name)
+
 
 class ShapeResolver(object):
     """Resolves shape references."""
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 09c3fbb5a..86bae9767 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -54,7 +54,7 @@ copyright = u'2013, Mitch Garnaat'
 # The short X.Y version.
 version = '1.4.'
 # The full version, including alpha/beta/rc tags.
-release = '1.4.19'
+release = '1.4.18'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.


Test patch:
diff --git a/tests/unit/test_model.py b/tests/unit/test_model.py
index 6979dedff..5d5ff6579 100644
--- a/tests/unit/test_model.py
+++ b/tests/unit/test_model.py
@@ -123,6 +123,11 @@ class TestOperationModelFromService(unittest.TestCase):
         self.assertEqual(operation.name, 'Foo')
         self.assertEqual(operation.wire_name, 'OperationName')
 
+    def test_operation_name_in_repr(self):
+        service_model = model.ServiceModel(self.model)
+        operation = service_model.operation_model('OperationName')
+        self.assertIn('OperationName', repr(operation))
+
     def test_name_and_wire_name_defaults_to_same_value(self):
         service_model = model.ServiceModel(self.model)
         operation = model.OperationModel(