Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/iam_v1.projects.roles.html b/docs/dyn/iam_v1.projects.roles.html
new file mode 100644
index 0000000..ed643e0
--- /dev/null
+++ b/docs/dyn/iam_v1.projects.roles.html
@@ -0,0 +1,431 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="iam_v1.html">Identity and Access Management (IAM) API</a> . <a href="iam_v1.projects.html">projects</a> . <a href="iam_v1.projects.roles.html">roles</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(parent, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new Role.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, etag=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Soft deletes a role. The role is suspended and cannot be used to create new</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a Role definition.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, pageSize=None, showDeleted=None, pageToken=None, x__xgafv=None, view=None)</a></code></p>
+<p class="firstline">Lists the Roles defined on a resource.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates a Role definition.</p>
+<p class="toc_element">
+  <code><a href="#undelete">undelete(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Undelete a Role, bringing it back in its previous state.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(parent, body, x__xgafv=None)</code>
+  <pre>Creates a new Role.
+
+Args:
+  parent: string, The resource name of the parent resource in one of the following formats:
+`organizations/{ORGANIZATION_ID}`
+`projects/{PROJECT_ID}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request to create a new role.
+    "roleId": "A String", # The role id to use for this role.
+    "role": { # A role in the Identity and Access Management API. # The Role resource to create.
+      "description": "A String", # Optional.  A human-readable description for the role.
+      "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+          # is limited to 100 UTF-8 bytes.
+      "deleted": True or False, # The current deleted state of the role. This field is read only.
+          # It will be ignored in calls to CreateRole and UpdateRole.
+      "etag": "A String", # Used to perform a consistent read-modify-write.
+      "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+        "A String",
+      ],
+      "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+          # selected for a role, the `stage` field will not be included in the
+          # returned definition for the role.
+      "name": "A String", # The name of the role.
+          #
+          # When Role is used in CreateRole, the role name must not be set.
+          #
+          # When Role is used in output and other input such as UpdateRole, the role
+          # name is the complete path, e.g., roles/logging.viewer for curated roles
+          # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A role in the Identity and Access Management API.
+    "description": "A String", # Optional.  A human-readable description for the role.
+    "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+        # is limited to 100 UTF-8 bytes.
+    "deleted": True or False, # The current deleted state of the role. This field is read only.
+        # It will be ignored in calls to CreateRole and UpdateRole.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+    "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+      "A String",
+    ],
+    "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+        # selected for a role, the `stage` field will not be included in the
+        # returned definition for the role.
+    "name": "A String", # The name of the role.
+        #
+        # When Role is used in CreateRole, the role name must not be set.
+        #
+        # When Role is used in output and other input such as UpdateRole, the role
+        # name is the complete path, e.g., roles/logging.viewer for curated roles
+        # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, etag=None, x__xgafv=None)</code>
+  <pre>Soft deletes a role. The role is suspended and cannot be used to create new
+IAM Policy Bindings.
+The Role will not be included in `ListRoles()` unless `show_deleted` is set
+in the `ListRolesRequest`. The Role contains the deleted boolean set.
+Existing Bindings remains, but are inactive. The Role can be undeleted
+within 7 days. After 7 days the Role is deleted and all Bindings associated
+with the role are removed.
+
+Args:
+  name: string, The resource name of the role in one of the following formats:
+`organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+`projects/{PROJECT_ID}/roles/{ROLE_NAME}` (required)
+  etag: string, Used to perform a consistent read-modify-write.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A role in the Identity and Access Management API.
+    "description": "A String", # Optional.  A human-readable description for the role.
+    "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+        # is limited to 100 UTF-8 bytes.
+    "deleted": True or False, # The current deleted state of the role. This field is read only.
+        # It will be ignored in calls to CreateRole and UpdateRole.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+    "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+      "A String",
+    ],
+    "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+        # selected for a role, the `stage` field will not be included in the
+        # returned definition for the role.
+    "name": "A String", # The name of the role.
+        #
+        # When Role is used in CreateRole, the role name must not be set.
+        #
+        # When Role is used in output and other input such as UpdateRole, the role
+        # name is the complete path, e.g., roles/logging.viewer for curated roles
+        # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a Role definition.
+
+Args:
+  name: string, The resource name of the role in one of the following formats:
+`roles/{ROLE_NAME}`
+`organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+`projects/{PROJECT_ID}/roles/{ROLE_NAME}` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A role in the Identity and Access Management API.
+    "description": "A String", # Optional.  A human-readable description for the role.
+    "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+        # is limited to 100 UTF-8 bytes.
+    "deleted": True or False, # The current deleted state of the role. This field is read only.
+        # It will be ignored in calls to CreateRole and UpdateRole.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+    "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+      "A String",
+    ],
+    "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+        # selected for a role, the `stage` field will not be included in the
+        # returned definition for the role.
+    "name": "A String", # The name of the role.
+        #
+        # When Role is used in CreateRole, the role name must not be set.
+        #
+        # When Role is used in output and other input such as UpdateRole, the role
+        # name is the complete path, e.g., roles/logging.viewer for curated roles
+        # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, pageSize=None, showDeleted=None, pageToken=None, x__xgafv=None, view=None)</code>
+  <pre>Lists the Roles defined on a resource.
+
+Args:
+  parent: string, The resource name of the parent resource in one of the following formats:
+`` (empty string) -- this refers to curated roles.
+`organizations/{ORGANIZATION_ID}`
+`projects/{PROJECT_ID}` (required)
+  pageSize: integer, Optional limit on the number of roles to include in the response.
+  showDeleted: boolean, Include Roles that have been deleted.
+  pageToken: string, Optional pagination token returned in an earlier ListRolesResponse.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  view: string, Optional view for the returned Role objects. When `FULL` is specified,
+the `includedPermissions` field is returned, which includes a list of all
+permissions in the role. The default value is `BASIC`, which does not
+return the `includedPermissions` field.
+
+Returns:
+  An object of the form:
+
+    { # The response containing the roles defined under a resource.
+    "nextPageToken": "A String", # To retrieve the next page of results, set
+        # `ListRolesRequest.page_token` to this value.
+    "roles": [ # The Roles defined on this resource.
+      { # A role in the Identity and Access Management API.
+        "description": "A String", # Optional.  A human-readable description for the role.
+        "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+            # is limited to 100 UTF-8 bytes.
+        "deleted": True or False, # The current deleted state of the role. This field is read only.
+            # It will be ignored in calls to CreateRole and UpdateRole.
+        "etag": "A String", # Used to perform a consistent read-modify-write.
+        "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+          "A String",
+        ],
+        "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+            # selected for a role, the `stage` field will not be included in the
+            # returned definition for the role.
+        "name": "A String", # The name of the role.
+            #
+            # When Role is used in CreateRole, the role name must not be set.
+            #
+            # When Role is used in output and other input such as UpdateRole, the role
+            # name is the complete path, e.g., roles/logging.viewer for curated roles
+            # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates a Role definition.
+
+Args:
+  name: string, The resource name of the role in one of the following formats:
+`roles/{ROLE_NAME}`
+`organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+`projects/{PROJECT_ID}/roles/{ROLE_NAME}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A role in the Identity and Access Management API.
+  "description": "A String", # Optional.  A human-readable description for the role.
+  "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+      # is limited to 100 UTF-8 bytes.
+  "deleted": True or False, # The current deleted state of the role. This field is read only.
+      # It will be ignored in calls to CreateRole and UpdateRole.
+  "etag": "A String", # Used to perform a consistent read-modify-write.
+  "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+    "A String",
+  ],
+  "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+      # selected for a role, the `stage` field will not be included in the
+      # returned definition for the role.
+  "name": "A String", # The name of the role.
+      # 
+      # When Role is used in CreateRole, the role name must not be set.
+      # 
+      # When Role is used in output and other input such as UpdateRole, the role
+      # name is the complete path, e.g., roles/logging.viewer for curated roles
+      # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+}
+
+  updateMask: string, A mask describing which fields in the Role have changed.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A role in the Identity and Access Management API.
+    "description": "A String", # Optional.  A human-readable description for the role.
+    "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+        # is limited to 100 UTF-8 bytes.
+    "deleted": True or False, # The current deleted state of the role. This field is read only.
+        # It will be ignored in calls to CreateRole and UpdateRole.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+    "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+      "A String",
+    ],
+    "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+        # selected for a role, the `stage` field will not be included in the
+        # returned definition for the role.
+    "name": "A String", # The name of the role.
+        #
+        # When Role is used in CreateRole, the role name must not be set.
+        #
+        # When Role is used in output and other input such as UpdateRole, the role
+        # name is the complete path, e.g., roles/logging.viewer for curated roles
+        # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="undelete">undelete(name, body, x__xgafv=None)</code>
+  <pre>Undelete a Role, bringing it back in its previous state.
+
+Args:
+  name: string, The resource name of the role in one of the following formats:
+`organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}`
+`projects/{PROJECT_ID}/roles/{ROLE_NAME}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request to undelete an existing role.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A role in the Identity and Access Management API.
+    "description": "A String", # Optional.  A human-readable description for the role.
+    "title": "A String", # Optional.  A human-readable title for the role.  Typically this
+        # is limited to 100 UTF-8 bytes.
+    "deleted": True or False, # The current deleted state of the role. This field is read only.
+        # It will be ignored in calls to CreateRole and UpdateRole.
+    "etag": "A String", # Used to perform a consistent read-modify-write.
+    "includedPermissions": [ # The names of the permissions this role grants when bound in an IAM policy.
+      "A String",
+    ],
+    "stage": "A String", # The current launch stage of the role. If the `ALPHA` launch stage has been
+        # selected for a role, the `stage` field will not be included in the
+        # returned definition for the role.
+    "name": "A String", # The name of the role.
+        #
+        # When Role is used in CreateRole, the role name must not be set.
+        #
+        # When Role is used in output and other input such as UpdateRole, the role
+        # name is the complete path, e.g., roles/logging.viewer for curated roles
+        # and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file