diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-dataproc
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.1.0`
+
+
+## Description
+
+A client library for the Google Cloud Dataproc.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-dataproc` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/Dataproc.hs b/gen/Network/Google/Dataproc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Dataproc.hs
@@ -0,0 +1,481 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Dataproc
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Manages Hadoop-based clusters and jobs on Google Cloud Platform.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference>
+module Network.Google.Dataproc
+    (
+    -- * Service Configuration
+      dataprocService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , DataprocAPI
+
+    -- * Resources
+
+    -- ** dataproc.projects.regions.clusters.create
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Create
+
+    -- ** dataproc.projects.regions.clusters.delete
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Delete
+
+    -- ** dataproc.projects.regions.clusters.diagnose
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Diagnose
+
+    -- ** dataproc.projects.regions.clusters.get
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Get
+
+    -- ** dataproc.projects.regions.clusters.list
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.List
+
+    -- ** dataproc.projects.regions.clusters.patch
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Patch
+
+    -- ** dataproc.projects.regions.jobs.cancel
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Cancel
+
+    -- ** dataproc.projects.regions.jobs.delete
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Delete
+
+    -- ** dataproc.projects.regions.jobs.get
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Get
+
+    -- ** dataproc.projects.regions.jobs.list
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.List
+
+    -- ** dataproc.projects.regions.jobs.submit
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Submit
+
+    -- ** dataproc.projects.regions.operations.cancel
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Cancel
+
+    -- ** dataproc.projects.regions.operations.delete
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Delete
+
+    -- ** dataproc.projects.regions.operations.get
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Get
+
+    -- ** dataproc.projects.regions.operations.list
+    , module Network.Google.Resource.Dataproc.Projects.Regions.Operations.List
+
+    -- * Types
+
+    -- ** JobReference
+    , JobReference
+    , jobReference
+    , jrJobId
+    , jrProjectId
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** OperationSchema
+    , OperationSchema
+    , operationSchema
+    , osAddtional
+
+    -- ** PySparkJobProperties
+    , PySparkJobProperties
+    , pySparkJobProperties
+    , psjpAddtional
+
+    -- ** DiagnoseClusterResults
+    , DiagnoseClusterResults
+    , diagnoseClusterResults
+    , dcrOutputURI
+
+    -- ** InstanceGroupConfig
+    , InstanceGroupConfig
+    , instanceGroupConfig
+    , igcNumInstances
+    , igcDiskConfig
+    , igcIsPreemptible
+    , igcImageURI
+    , igcInstanceNames
+    , igcManagedGroupConfig
+    , igcMachineTypeURI
+
+    -- ** SparkJob
+    , SparkJob
+    , sparkJob
+    , sjArgs
+    , sjMainJarFileURI
+    , sjJarFileURIs
+    , sjFileURIs
+    , sjArchiveURIs
+    , sjMainClass
+    , sjLoggingConfig
+    , sjProperties
+
+    -- ** SoftwareConfigProperties
+    , SoftwareConfigProperties
+    , softwareConfigProperties
+    , scpAddtional
+
+    -- ** DiskConfig
+    , DiskConfig
+    , diskConfig
+    , dcNumLocalSsds
+    , dcBootDiskSizeGb
+
+    -- ** ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- ** HiveJobScriptVariables
+    , HiveJobScriptVariables
+    , hiveJobScriptVariables
+    , hjsvAddtional
+
+    -- ** Cluster
+    , Cluster
+    , cluster
+    , cStatus
+    , cClusterUuid
+    , cConfig
+    , cClusterName
+    , cProjectId
+    , cStatusHistory
+
+    -- ** SubmitJobRequest
+    , SubmitJobRequest
+    , submitJobRequest
+    , sjrJob
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** HiveJob
+    , HiveJob
+    , hiveJob
+    , hjQueryFileURI
+    , hjJarFileURIs
+    , hjScriptVariables
+    , hjQueryList
+    , hjContinueOnFailure
+    , hjProperties
+
+    -- ** SparkSQLJobScriptVariables
+    , SparkSQLJobScriptVariables
+    , sparkSQLJobScriptVariables
+    , ssqljsvAddtional
+
+    -- ** PigJobProperties
+    , PigJobProperties
+    , pigJobProperties
+    , pjpAddtional
+
+    -- ** ClusterConfig
+    , ClusterConfig
+    , clusterConfig
+    , ccWorkerConfig
+    , ccInitializationActions
+    , ccMasterConfig
+    , ccGceClusterConfig
+    , ccConfigBucket
+    , ccSoftwareConfig
+    , ccSecondaryWorkerConfig
+
+    -- ** HadoopJobProperties
+    , HadoopJobProperties
+    , hadoopJobProperties
+    , hjpAddtional
+
+    -- ** ClusterOperationStatus
+    , ClusterOperationStatus
+    , clusterOperationStatus
+    , cosState
+    , cosInnerState
+    , cosStateStartTime
+    , cosDetails
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** SparkSQLJobProperties
+    , SparkSQLJobProperties
+    , sparkSQLJobProperties
+    , ssqljpAddtional
+
+    -- ** NodeInitializationAction
+    , NodeInitializationAction
+    , nodeInitializationAction
+    , niaExecutionTimeout
+    , niaExecutableFile
+
+    -- ** JobPlacement
+    , JobPlacement
+    , jobPlacement
+    , jpClusterUuid
+    , jpClusterName
+
+    -- ** GceClusterConfig
+    , GceClusterConfig
+    , gceClusterConfig
+    , gccSubnetworkURI
+    , gccNetworkURI
+    , gccZoneURI
+    , gccMetadata
+    , gccServiceAccountScopes
+    , gccTags
+
+    -- ** OperationStatus
+    , OperationStatus
+    , operationStatus
+    , osState
+    , osInnerState
+    , osStateStartTime
+    , osDetails
+
+    -- ** GceClusterConfigMetadata
+    , GceClusterConfigMetadata
+    , gceClusterConfigMetadata
+    , gccmAddtional
+
+    -- ** HiveJobProperties
+    , HiveJobProperties
+    , hiveJobProperties
+    , hAddtional
+
+    -- ** DiagnoseClusterOutputLocation
+    , DiagnoseClusterOutputLocation
+    , diagnoseClusterOutputLocation
+    , dcolOutputURI
+
+    -- ** Job
+    , Job
+    , job
+    , jSparkJob
+    , jStatus
+    , jDriverControlFilesURI
+    , jHiveJob
+    , jReference
+    , jSparkSQLJob
+    , jHadoopJob
+    , jPysparkJob
+    , jDriverOutputResourceURI
+    , jStatusHistory
+    , jPlacement
+    , jPigJob
+
+    -- ** DiagnoseClusterRequest
+    , DiagnoseClusterRequest
+    , diagnoseClusterRequest
+
+    -- ** HadoopJob
+    , HadoopJob
+    , hadoopJob
+    , hArgs
+    , hMainJarFileURI
+    , hJarFileURIs
+    , hFileURIs
+    , hArchiveURIs
+    , hMainClass
+    , hLoggingConfig
+    , hProperties
+
+    -- ** ClusterOperationMetadata
+    , ClusterOperationMetadata
+    , clusterOperationMetadata
+    , comStatus
+    , comClusterUuid
+    , comClusterName
+    , comOperationType
+    , comStatusHistory
+    , comDescription
+
+    -- ** SparkSQLJob
+    , SparkSQLJob
+    , sparkSQLJob
+    , ssqljQueryFileURI
+    , ssqljJarFileURIs
+    , ssqljScriptVariables
+    , ssqljQueryList
+    , ssqljLoggingConfig
+    , ssqljProperties
+
+    -- ** SoftwareConfig
+    , SoftwareConfig
+    , softwareConfig
+    , scImageVersion
+    , scProperties
+
+    -- ** ListJobsResponse
+    , ListJobsResponse
+    , listJobsResponse
+    , ljrNextPageToken
+    , ljrJobs
+
+    -- ** SparkJobProperties
+    , SparkJobProperties
+    , sparkJobProperties
+    , sjpAddtional
+
+    -- ** PySparkJob
+    , PySparkJob
+    , pySparkJob
+    , psjPythonFileURIs
+    , psjMainPythonFileURI
+    , psjArgs
+    , psjJarFileURIs
+    , psjFileURIs
+    , psjArchiveURIs
+    , psjLoggingConfig
+    , psjProperties
+
+    -- ** ManagedGroupConfig
+    , ManagedGroupConfig
+    , managedGroupConfig
+    , mgcInstanceTemplateName
+    , mgcInstanceGroupManagerName
+
+    -- ** ListClustersResponse
+    , ListClustersResponse
+    , listClustersResponse
+    , lcrNextPageToken
+    , lcrClusters
+
+    -- ** CancelJobRequest
+    , CancelJobRequest
+    , cancelJobRequest
+
+    -- ** QueryList
+    , QueryList
+    , queryList
+    , qlQueries
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omStatus
+    , omState
+    , omClusterUuid
+    , omInsertTime
+    , omStartTime
+    , omInnerState
+    , omEndTime
+    , omDetails
+    , omClusterName
+    , omOperationType
+    , omStatusHistory
+    , omDescription
+
+    -- ** JobStatus
+    , JobStatus
+    , jobStatus
+    , jsState
+    , jsStateStartTime
+    , jsDetails
+
+    -- ** PigJobScriptVariables
+    , PigJobScriptVariables
+    , pigJobScriptVariables
+    , pjsvAddtional
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** LoggingConfigDriverLogLevels
+    , LoggingConfigDriverLogLevels
+    , loggingConfigDriverLogLevels
+    , lcdllAddtional
+
+    -- ** ClusterStatus
+    , ClusterStatus
+    , clusterStatus
+    , csState
+    , csStateStartTime
+    , csDetail
+
+    -- ** PigJob
+    , PigJob
+    , pigJob
+    , pjQueryFileURI
+    , pjJarFileURIs
+    , pjScriptVariables
+    , pjQueryList
+    , pjContinueOnFailure
+    , pjLoggingConfig
+    , pjProperties
+
+    -- ** LoggingConfig
+    , LoggingConfig
+    , loggingConfig
+    , lcDriverLogLevels
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Create
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Delete
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Diagnose
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Get
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.List
+import           Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Patch
+import           Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Cancel
+import           Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Delete
+import           Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Get
+import           Network.Google.Resource.Dataproc.Projects.Regions.Jobs.List
+import           Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Submit
+import           Network.Google.Resource.Dataproc.Projects.Regions.Operations.Cancel
+import           Network.Google.Resource.Dataproc.Projects.Regions.Operations.Delete
+import           Network.Google.Resource.Dataproc.Projects.Regions.Operations.Get
+import           Network.Google.Resource.Dataproc.Projects.Regions.Operations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Google Cloud Dataproc API service.
+type DataprocAPI =
+     ProjectsRegionsJobsListResource :<|>
+       ProjectsRegionsJobsGetResource
+       :<|> ProjectsRegionsJobsSubmitResource
+       :<|> ProjectsRegionsJobsCancelResource
+       :<|> ProjectsRegionsJobsDeleteResource
+       :<|> ProjectsRegionsOperationsListResource
+       :<|> ProjectsRegionsOperationsGetResource
+       :<|> ProjectsRegionsOperationsCancelResource
+       :<|> ProjectsRegionsOperationsDeleteResource
+       :<|> ProjectsRegionsClustersDiagnoseResource
+       :<|> ProjectsRegionsClustersListResource
+       :<|> ProjectsRegionsClustersPatchResource
+       :<|> ProjectsRegionsClustersGetResource
+       :<|> ProjectsRegionsClustersCreateResource
+       :<|> ProjectsRegionsClustersDeleteResource
diff --git a/gen/Network/Google/Dataproc/Types.hs b/gen/Network/Google/Dataproc/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Dataproc/Types.hs
@@ -0,0 +1,401 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Dataproc.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Dataproc.Types
+    (
+    -- * Service Configuration
+      dataprocService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * JobReference
+    , JobReference
+    , jobReference
+    , jrJobId
+    , jrProjectId
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * OperationSchema
+    , OperationSchema
+    , operationSchema
+    , osAddtional
+
+    -- * PySparkJobProperties
+    , PySparkJobProperties
+    , pySparkJobProperties
+    , psjpAddtional
+
+    -- * DiagnoseClusterResults
+    , DiagnoseClusterResults
+    , diagnoseClusterResults
+    , dcrOutputURI
+
+    -- * InstanceGroupConfig
+    , InstanceGroupConfig
+    , instanceGroupConfig
+    , igcNumInstances
+    , igcDiskConfig
+    , igcIsPreemptible
+    , igcImageURI
+    , igcInstanceNames
+    , igcManagedGroupConfig
+    , igcMachineTypeURI
+
+    -- * SparkJob
+    , SparkJob
+    , sparkJob
+    , sjArgs
+    , sjMainJarFileURI
+    , sjJarFileURIs
+    , sjFileURIs
+    , sjArchiveURIs
+    , sjMainClass
+    , sjLoggingConfig
+    , sjProperties
+
+    -- * SoftwareConfigProperties
+    , SoftwareConfigProperties
+    , softwareConfigProperties
+    , scpAddtional
+
+    -- * DiskConfig
+    , DiskConfig
+    , diskConfig
+    , dcNumLocalSsds
+    , dcBootDiskSizeGb
+
+    -- * ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- * HiveJobScriptVariables
+    , HiveJobScriptVariables
+    , hiveJobScriptVariables
+    , hjsvAddtional
+
+    -- * Cluster
+    , Cluster
+    , cluster
+    , cStatus
+    , cClusterUuid
+    , cConfig
+    , cClusterName
+    , cProjectId
+    , cStatusHistory
+
+    -- * SubmitJobRequest
+    , SubmitJobRequest
+    , submitJobRequest
+    , sjrJob
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * HiveJob
+    , HiveJob
+    , hiveJob
+    , hjQueryFileURI
+    , hjJarFileURIs
+    , hjScriptVariables
+    , hjQueryList
+    , hjContinueOnFailure
+    , hjProperties
+
+    -- * SparkSQLJobScriptVariables
+    , SparkSQLJobScriptVariables
+    , sparkSQLJobScriptVariables
+    , ssqljsvAddtional
+
+    -- * PigJobProperties
+    , PigJobProperties
+    , pigJobProperties
+    , pjpAddtional
+
+    -- * ClusterConfig
+    , ClusterConfig
+    , clusterConfig
+    , ccWorkerConfig
+    , ccInitializationActions
+    , ccMasterConfig
+    , ccGceClusterConfig
+    , ccConfigBucket
+    , ccSoftwareConfig
+    , ccSecondaryWorkerConfig
+
+    -- * HadoopJobProperties
+    , HadoopJobProperties
+    , hadoopJobProperties
+    , hjpAddtional
+
+    -- * ClusterOperationStatus
+    , ClusterOperationStatus
+    , clusterOperationStatus
+    , cosState
+    , cosInnerState
+    , cosStateStartTime
+    , cosDetails
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * SparkSQLJobProperties
+    , SparkSQLJobProperties
+    , sparkSQLJobProperties
+    , ssqljpAddtional
+
+    -- * NodeInitializationAction
+    , NodeInitializationAction
+    , nodeInitializationAction
+    , niaExecutionTimeout
+    , niaExecutableFile
+
+    -- * JobPlacement
+    , JobPlacement
+    , jobPlacement
+    , jpClusterUuid
+    , jpClusterName
+
+    -- * GceClusterConfig
+    , GceClusterConfig
+    , gceClusterConfig
+    , gccSubnetworkURI
+    , gccNetworkURI
+    , gccZoneURI
+    , gccMetadata
+    , gccServiceAccountScopes
+    , gccTags
+
+    -- * OperationStatus
+    , OperationStatus
+    , operationStatus
+    , osState
+    , osInnerState
+    , osStateStartTime
+    , osDetails
+
+    -- * GceClusterConfigMetadata
+    , GceClusterConfigMetadata
+    , gceClusterConfigMetadata
+    , gccmAddtional
+
+    -- * HiveJobProperties
+    , HiveJobProperties
+    , hiveJobProperties
+    , hAddtional
+
+    -- * DiagnoseClusterOutputLocation
+    , DiagnoseClusterOutputLocation
+    , diagnoseClusterOutputLocation
+    , dcolOutputURI
+
+    -- * Job
+    , Job
+    , job
+    , jSparkJob
+    , jStatus
+    , jDriverControlFilesURI
+    , jHiveJob
+    , jReference
+    , jSparkSQLJob
+    , jHadoopJob
+    , jPysparkJob
+    , jDriverOutputResourceURI
+    , jStatusHistory
+    , jPlacement
+    , jPigJob
+
+    -- * DiagnoseClusterRequest
+    , DiagnoseClusterRequest
+    , diagnoseClusterRequest
+
+    -- * HadoopJob
+    , HadoopJob
+    , hadoopJob
+    , hArgs
+    , hMainJarFileURI
+    , hJarFileURIs
+    , hFileURIs
+    , hArchiveURIs
+    , hMainClass
+    , hLoggingConfig
+    , hProperties
+
+    -- * ClusterOperationMetadata
+    , ClusterOperationMetadata
+    , clusterOperationMetadata
+    , comStatus
+    , comClusterUuid
+    , comClusterName
+    , comOperationType
+    , comStatusHistory
+    , comDescription
+
+    -- * SparkSQLJob
+    , SparkSQLJob
+    , sparkSQLJob
+    , ssqljQueryFileURI
+    , ssqljJarFileURIs
+    , ssqljScriptVariables
+    , ssqljQueryList
+    , ssqljLoggingConfig
+    , ssqljProperties
+
+    -- * SoftwareConfig
+    , SoftwareConfig
+    , softwareConfig
+    , scImageVersion
+    , scProperties
+
+    -- * ListJobsResponse
+    , ListJobsResponse
+    , listJobsResponse
+    , ljrNextPageToken
+    , ljrJobs
+
+    -- * SparkJobProperties
+    , SparkJobProperties
+    , sparkJobProperties
+    , sjpAddtional
+
+    -- * PySparkJob
+    , PySparkJob
+    , pySparkJob
+    , psjPythonFileURIs
+    , psjMainPythonFileURI
+    , psjArgs
+    , psjJarFileURIs
+    , psjFileURIs
+    , psjArchiveURIs
+    , psjLoggingConfig
+    , psjProperties
+
+    -- * ManagedGroupConfig
+    , ManagedGroupConfig
+    , managedGroupConfig
+    , mgcInstanceTemplateName
+    , mgcInstanceGroupManagerName
+
+    -- * ListClustersResponse
+    , ListClustersResponse
+    , listClustersResponse
+    , lcrNextPageToken
+    , lcrClusters
+
+    -- * CancelJobRequest
+    , CancelJobRequest
+    , cancelJobRequest
+
+    -- * QueryList
+    , QueryList
+    , queryList
+    , qlQueries
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omStatus
+    , omState
+    , omClusterUuid
+    , omInsertTime
+    , omStartTime
+    , omInnerState
+    , omEndTime
+    , omDetails
+    , omClusterName
+    , omOperationType
+    , omStatusHistory
+    , omDescription
+
+    -- * JobStatus
+    , JobStatus
+    , jobStatus
+    , jsState
+    , jsStateStartTime
+    , jsDetails
+
+    -- * PigJobScriptVariables
+    , PigJobScriptVariables
+    , pigJobScriptVariables
+    , pjsvAddtional
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * LoggingConfigDriverLogLevels
+    , LoggingConfigDriverLogLevels
+    , loggingConfigDriverLogLevels
+    , lcdllAddtional
+
+    -- * ClusterStatus
+    , ClusterStatus
+    , clusterStatus
+    , csState
+    , csStateStartTime
+    , csDetail
+
+    -- * PigJob
+    , PigJob
+    , pigJob
+    , pjQueryFileURI
+    , pjJarFileURIs
+    , pjScriptVariables
+    , pjQueryList
+    , pjContinueOnFailure
+    , pjLoggingConfig
+    , pjProperties
+
+    -- * LoggingConfig
+    , LoggingConfig
+    , loggingConfig
+    , lcDriverLogLevels
+    ) where
+
+import           Network.Google.Dataproc.Types.Product
+import           Network.Google.Dataproc.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Google Cloud Dataproc API. This contains the host and root path used as a starting point for constructing service requests.
+dataprocService :: ServiceConfig
+dataprocService
+  = defaultService (ServiceId "dataproc:v1")
+      "dataproc.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
diff --git a/gen/Network/Google/Dataproc/Types/Product.hs b/gen/Network/Google/Dataproc/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Dataproc/Types/Product.hs
@@ -0,0 +1,3376 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Dataproc.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Dataproc.Types.Product where
+
+import           Network.Google.Dataproc.Types.Sum
+import           Network.Google.Prelude
+
+-- | Encapsulates the full scoping used to reference a job.
+--
+-- /See:/ 'jobReference' smart constructor.
+data JobReference = JobReference'
+    { _jrJobId     :: !(Maybe Text)
+    , _jrProjectId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jrJobId'
+--
+-- * 'jrProjectId'
+jobReference
+    :: JobReference
+jobReference =
+    JobReference'
+    { _jrJobId = Nothing
+    , _jrProjectId = Nothing
+    }
+
+-- | [Required] The job ID, which must be unique within the project. The job
+-- ID is generated by the server upon job submission or provided by the
+-- user as a means to perform retries without creating duplicate jobs. The
+-- ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_),
+-- or hyphens (-). The maximum length is 512 characters.
+jrJobId :: Lens' JobReference (Maybe Text)
+jrJobId = lens _jrJobId (\ s a -> s{_jrJobId = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+jrProjectId :: Lens' JobReference (Maybe Text)
+jrProjectId
+  = lens _jrProjectId (\ s a -> s{_jrProjectId = a})
+
+instance FromJSON JobReference where
+        parseJSON
+          = withObject "JobReference"
+              (\ o ->
+                 JobReference' <$>
+                   (o .:? "jobId") <*> (o .:? "projectId"))
+
+instance ToJSON JobReference where
+        toJSON JobReference'{..}
+          = object
+              (catMaybes
+                 [("jobId" .=) <$> _jrJobId,
+                  ("projectId" .=) <$> _jrProjectId])
+
+-- | The \`Status\` type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by [gRPC](https:\/\/github.com\/grpc). The error model is
+-- designed to be: - Simple to use and understand for most users - Flexible
+-- enough to meet unexpected needs # Overview The \`Status\` message
+-- contains three pieces of data: error code, error message, and error
+-- details. The error code should be an enum value of google.rpc.Code, but
+-- it may accept additional error codes if needed. The error message should
+-- be a developer-facing English message that helps developers *understand*
+-- and *resolve* the error. If a localized user-facing error message is
+-- needed, put the localized message in the error details or localize it in
+-- the client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package \`google.rpc\` which can be used for common error conditions. #
+-- Language mapping The \`Status\` message is the logical representation of
+-- the error model, but it is not necessarily the actual wire format. When
+-- the \`Status\` message is exposed in different client libraries and
+-- different wire protocols, it can be mapped differently. For example, it
+-- will likely be mapped to some exceptions in Java, but more likely mapped
+-- to some error codes in C. # Other uses The error model and the
+-- \`Status\` message can be used in a variety of environments, either with
+-- or without APIs, to provide a consistent developer experience across
+-- different environments. Example uses of this error model include: -
+-- Partial errors. If a service needs to return partial errors to the
+-- client, it may embed the \`Status\` in the normal response to indicate
+-- the partial errors. - Workflow errors. A typical workflow has multiple
+-- steps. Each step may have a \`Status\` message for error reporting
+-- purpose. - Batch operations. If a client uses batch request and batch
+-- response, the \`Status\` message should be used directly inside batch
+-- response, one for each error sub-response. - Asynchronous operations. If
+-- an API call embeds asynchronous operation results in its response, the
+-- status of those operations should be represented directly using the
+-- \`Status\` message. - Logging. If some API errors are stored in logs,
+-- the message \`Status\` could be used directly after any stripping needed
+-- for security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There will be a common
+-- set of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+--
+-- /See:/ 'operationSchema' smart constructor.
+newtype OperationSchema = OperationSchema'
+    { _osAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osAddtional'
+operationSchema
+    :: HashMap Text JSONValue -- ^ 'osAddtional'
+    -> OperationSchema
+operationSchema pOsAddtional_ =
+    OperationSchema'
+    { _osAddtional = _Coerce # pOsAddtional_
+    }
+
+-- | Properties of the object. Contains field \'ype with type URL.
+osAddtional :: Lens' OperationSchema (HashMap Text JSONValue)
+osAddtional
+  = lens _osAddtional (\ s a -> s{_osAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationSchema where
+        parseJSON
+          = withObject "OperationSchema"
+              (\ o -> OperationSchema' <$> (parseJSONObject o))
+
+instance ToJSON OperationSchema where
+        toJSON = toJSON . _osAddtional
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- PySpark. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/spark\/conf\/spark-defaults.conf and classes in user code.
+--
+-- /See:/ 'pySparkJobProperties' smart constructor.
+newtype PySparkJobProperties = PySparkJobProperties'
+    { _psjpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PySparkJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psjpAddtional'
+pySparkJobProperties
+    :: HashMap Text Text -- ^ 'psjpAddtional'
+    -> PySparkJobProperties
+pySparkJobProperties pPsjpAddtional_ =
+    PySparkJobProperties'
+    { _psjpAddtional = _Coerce # pPsjpAddtional_
+    }
+
+psjpAddtional :: Lens' PySparkJobProperties (HashMap Text Text)
+psjpAddtional
+  = lens _psjpAddtional
+      (\ s a -> s{_psjpAddtional = a})
+      . _Coerce
+
+instance FromJSON PySparkJobProperties where
+        parseJSON
+          = withObject "PySparkJobProperties"
+              (\ o ->
+                 PySparkJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON PySparkJobProperties where
+        toJSON = toJSON . _psjpAddtional
+
+-- | The location of diagnostic output.
+--
+-- /See:/ 'diagnoseClusterResults' smart constructor.
+newtype DiagnoseClusterResults = DiagnoseClusterResults'
+    { _dcrOutputURI :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiagnoseClusterResults' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrOutputURI'
+diagnoseClusterResults
+    :: DiagnoseClusterResults
+diagnoseClusterResults =
+    DiagnoseClusterResults'
+    { _dcrOutputURI = Nothing
+    }
+
+-- | [Output-only] The Google Cloud Storage URI of the diagnostic output.
+-- This is a plain text file with a summary of collected diagnostics.
+dcrOutputURI :: Lens' DiagnoseClusterResults (Maybe Text)
+dcrOutputURI
+  = lens _dcrOutputURI (\ s a -> s{_dcrOutputURI = a})
+
+instance FromJSON DiagnoseClusterResults where
+        parseJSON
+          = withObject "DiagnoseClusterResults"
+              (\ o ->
+                 DiagnoseClusterResults' <$> (o .:? "outputUri"))
+
+instance ToJSON DiagnoseClusterResults where
+        toJSON DiagnoseClusterResults'{..}
+          = object
+              (catMaybes [("outputUri" .=) <$> _dcrOutputURI])
+
+-- | The config settings for Google Compute Engine resources in an instance
+-- group, such as a master or worker group.
+--
+-- /See:/ 'instanceGroupConfig' smart constructor.
+data InstanceGroupConfig = InstanceGroupConfig'
+    { _igcNumInstances       :: !(Maybe (Textual Int32))
+    , _igcDiskConfig         :: !(Maybe DiskConfig)
+    , _igcIsPreemptible      :: !(Maybe Bool)
+    , _igcImageURI           :: !(Maybe Text)
+    , _igcInstanceNames      :: !(Maybe [Text])
+    , _igcManagedGroupConfig :: !(Maybe ManagedGroupConfig)
+    , _igcMachineTypeURI     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceGroupConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igcNumInstances'
+--
+-- * 'igcDiskConfig'
+--
+-- * 'igcIsPreemptible'
+--
+-- * 'igcImageURI'
+--
+-- * 'igcInstanceNames'
+--
+-- * 'igcManagedGroupConfig'
+--
+-- * 'igcMachineTypeURI'
+instanceGroupConfig
+    :: InstanceGroupConfig
+instanceGroupConfig =
+    InstanceGroupConfig'
+    { _igcNumInstances = Nothing
+    , _igcDiskConfig = Nothing
+    , _igcIsPreemptible = Nothing
+    , _igcImageURI = Nothing
+    , _igcInstanceNames = Nothing
+    , _igcManagedGroupConfig = Nothing
+    , _igcMachineTypeURI = Nothing
+    }
+
+-- | The number of VM instances in the instance group. For master instance
+-- groups, must be set to 1.
+igcNumInstances :: Lens' InstanceGroupConfig (Maybe Int32)
+igcNumInstances
+  = lens _igcNumInstances
+      (\ s a -> s{_igcNumInstances = a})
+      . mapping _Coerce
+
+-- | Disk option config settings.
+igcDiskConfig :: Lens' InstanceGroupConfig (Maybe DiskConfig)
+igcDiskConfig
+  = lens _igcDiskConfig
+      (\ s a -> s{_igcDiskConfig = a})
+
+-- | Specifies that this instance group contains Preemptible Instances.
+igcIsPreemptible :: Lens' InstanceGroupConfig (Maybe Bool)
+igcIsPreemptible
+  = lens _igcIsPreemptible
+      (\ s a -> s{_igcIsPreemptible = a})
+
+-- | [Output-only] The Google Compute Engine image resource used for cluster
+-- instances. Inferred from \`SoftwareConfig.image_version\`.
+igcImageURI :: Lens' InstanceGroupConfig (Maybe Text)
+igcImageURI
+  = lens _igcImageURI (\ s a -> s{_igcImageURI = a})
+
+-- | The list of instance names. Cloud Dataproc derives the names from
+-- \`cluster_name\`, \`num_instances\`, and the instance group if not set
+-- by user (recommended practice is to let Cloud Dataproc derive the name).
+igcInstanceNames :: Lens' InstanceGroupConfig [Text]
+igcInstanceNames
+  = lens _igcInstanceNames
+      (\ s a -> s{_igcInstanceNames = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] The config for Google Compute Engine Instance Group
+-- Manager that manages this group. This is only used for preemptible
+-- instance groups.
+igcManagedGroupConfig :: Lens' InstanceGroupConfig (Maybe ManagedGroupConfig)
+igcManagedGroupConfig
+  = lens _igcManagedGroupConfig
+      (\ s a -> s{_igcManagedGroupConfig = a})
+
+-- | The Google Compute Engine machine type used for cluster instances.
+-- Example:
+-- \`https:\/\/www.googleapis.com\/compute\/v1\/projects\/[project_id]\/zones\/us-east1-a\/machineTypes\/n1-standard-2\`.
+igcMachineTypeURI :: Lens' InstanceGroupConfig (Maybe Text)
+igcMachineTypeURI
+  = lens _igcMachineTypeURI
+      (\ s a -> s{_igcMachineTypeURI = a})
+
+instance FromJSON InstanceGroupConfig where
+        parseJSON
+          = withObject "InstanceGroupConfig"
+              (\ o ->
+                 InstanceGroupConfig' <$>
+                   (o .:? "numInstances") <*> (o .:? "diskConfig") <*>
+                     (o .:? "isPreemptible")
+                     <*> (o .:? "imageUri")
+                     <*> (o .:? "instanceNames" .!= mempty)
+                     <*> (o .:? "managedGroupConfig")
+                     <*> (o .:? "machineTypeUri"))
+
+instance ToJSON InstanceGroupConfig where
+        toJSON InstanceGroupConfig'{..}
+          = object
+              (catMaybes
+                 [("numInstances" .=) <$> _igcNumInstances,
+                  ("diskConfig" .=) <$> _igcDiskConfig,
+                  ("isPreemptible" .=) <$> _igcIsPreemptible,
+                  ("imageUri" .=) <$> _igcImageURI,
+                  ("instanceNames" .=) <$> _igcInstanceNames,
+                  ("managedGroupConfig" .=) <$> _igcManagedGroupConfig,
+                  ("machineTypeUri" .=) <$> _igcMachineTypeURI])
+
+-- | A Cloud Dataproc job for running Spark applications on YARN.
+--
+-- /See:/ 'sparkJob' smart constructor.
+data SparkJob = SparkJob'
+    { _sjArgs           :: !(Maybe [Text])
+    , _sjMainJarFileURI :: !(Maybe Text)
+    , _sjJarFileURIs    :: !(Maybe [Text])
+    , _sjFileURIs       :: !(Maybe [Text])
+    , _sjArchiveURIs    :: !(Maybe [Text])
+    , _sjMainClass      :: !(Maybe Text)
+    , _sjLoggingConfig  :: !(Maybe LoggingConfig)
+    , _sjProperties     :: !(Maybe SparkJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SparkJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sjArgs'
+--
+-- * 'sjMainJarFileURI'
+--
+-- * 'sjJarFileURIs'
+--
+-- * 'sjFileURIs'
+--
+-- * 'sjArchiveURIs'
+--
+-- * 'sjMainClass'
+--
+-- * 'sjLoggingConfig'
+--
+-- * 'sjProperties'
+sparkJob
+    :: SparkJob
+sparkJob =
+    SparkJob'
+    { _sjArgs = Nothing
+    , _sjMainJarFileURI = Nothing
+    , _sjJarFileURIs = Nothing
+    , _sjFileURIs = Nothing
+    , _sjArchiveURIs = Nothing
+    , _sjMainClass = Nothing
+    , _sjLoggingConfig = Nothing
+    , _sjProperties = Nothing
+    }
+
+-- | [Optional] The arguments to pass to the driver. Do not include
+-- arguments, such as \`--conf\`, that can be set as job properties, since
+-- a collision may occur that causes an incorrect job submission.
+sjArgs :: Lens' SparkJob [Text]
+sjArgs
+  = lens _sjArgs (\ s a -> s{_sjArgs = a}) . _Default .
+      _Coerce
+
+-- | The HCFS URI of the jar file that contains the main class.
+sjMainJarFileURI :: Lens' SparkJob (Maybe Text)
+sjMainJarFileURI
+  = lens _sjMainJarFileURI
+      (\ s a -> s{_sjMainJarFileURI = a})
+
+-- | [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the Spark
+-- driver and tasks.
+sjJarFileURIs :: Lens' SparkJob [Text]
+sjJarFileURIs
+  = lens _sjJarFileURIs
+      (\ s a -> s{_sjJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of files to be copied to the working directory of
+-- Spark drivers and distributed tasks. Useful for naively parallel tasks.
+sjFileURIs :: Lens' SparkJob [Text]
+sjFileURIs
+  = lens _sjFileURIs (\ s a -> s{_sjFileURIs = a}) .
+      _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of archives to be extracted in the working
+-- directory of Spark drivers and tasks. Supported file types: .jar, .tar,
+-- .tar.gz, .tgz, and .zip.
+sjArchiveURIs :: Lens' SparkJob [Text]
+sjArchiveURIs
+  = lens _sjArchiveURIs
+      (\ s a -> s{_sjArchiveURIs = a})
+      . _Default
+      . _Coerce
+
+-- | The name of the driver\'s main class. The jar file that contains the
+-- class must be in the default CLASSPATH or specified in
+-- \`jar_file_uris\`.
+sjMainClass :: Lens' SparkJob (Maybe Text)
+sjMainClass
+  = lens _sjMainClass (\ s a -> s{_sjMainClass = a})
+
+-- | [Optional] The runtime log config for job execution.
+sjLoggingConfig :: Lens' SparkJob (Maybe LoggingConfig)
+sjLoggingConfig
+  = lens _sjLoggingConfig
+      (\ s a -> s{_sjLoggingConfig = a})
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Spark. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/spark\/conf\/spark-defaults.conf and classes in user code.
+sjProperties :: Lens' SparkJob (Maybe SparkJobProperties)
+sjProperties
+  = lens _sjProperties (\ s a -> s{_sjProperties = a})
+
+instance FromJSON SparkJob where
+        parseJSON
+          = withObject "SparkJob"
+              (\ o ->
+                 SparkJob' <$>
+                   (o .:? "args" .!= mempty) <*>
+                     (o .:? "mainJarFileUri")
+                     <*> (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "fileUris" .!= mempty)
+                     <*> (o .:? "archiveUris" .!= mempty)
+                     <*> (o .:? "mainClass")
+                     <*> (o .:? "loggingConfig")
+                     <*> (o .:? "properties"))
+
+instance ToJSON SparkJob where
+        toJSON SparkJob'{..}
+          = object
+              (catMaybes
+                 [("args" .=) <$> _sjArgs,
+                  ("mainJarFileUri" .=) <$> _sjMainJarFileURI,
+                  ("jarFileUris" .=) <$> _sjJarFileURIs,
+                  ("fileUris" .=) <$> _sjFileURIs,
+                  ("archiveUris" .=) <$> _sjArchiveURIs,
+                  ("mainClass" .=) <$> _sjMainClass,
+                  ("loggingConfig" .=) <$> _sjLoggingConfig,
+                  ("properties" .=) <$> _sjProperties])
+
+-- | [Optional] The properties to set on daemon config files. Property keys
+-- are specified in \`prefix:property\` format, such as
+-- \`core:fs.defaultFS\`. The following are supported prefixes and their
+-- mappings: * core: \`core-site.xml\` * hdfs: \`hdfs-site.xml\` * mapred:
+-- \`mapred-site.xml\` * yarn: \`yarn-site.xml\` * hive: \`hive-site.xml\`
+-- * pig: \`pig.properties\` * spark: \`spark-defaults.conf\`
+--
+-- /See:/ 'softwareConfigProperties' smart constructor.
+newtype SoftwareConfigProperties = SoftwareConfigProperties'
+    { _scpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SoftwareConfigProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scpAddtional'
+softwareConfigProperties
+    :: HashMap Text Text -- ^ 'scpAddtional'
+    -> SoftwareConfigProperties
+softwareConfigProperties pScpAddtional_ =
+    SoftwareConfigProperties'
+    { _scpAddtional = _Coerce # pScpAddtional_
+    }
+
+scpAddtional :: Lens' SoftwareConfigProperties (HashMap Text Text)
+scpAddtional
+  = lens _scpAddtional (\ s a -> s{_scpAddtional = a})
+      . _Coerce
+
+instance FromJSON SoftwareConfigProperties where
+        parseJSON
+          = withObject "SoftwareConfigProperties"
+              (\ o ->
+                 SoftwareConfigProperties' <$> (parseJSONObject o))
+
+instance ToJSON SoftwareConfigProperties where
+        toJSON = toJSON . _scpAddtional
+
+-- | Specifies the config of disk options for a group of VM instances.
+--
+-- /See:/ 'diskConfig' smart constructor.
+data DiskConfig = DiskConfig'
+    { _dcNumLocalSsds   :: !(Maybe (Textual Int32))
+    , _dcBootDiskSizeGb :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcNumLocalSsds'
+--
+-- * 'dcBootDiskSizeGb'
+diskConfig
+    :: DiskConfig
+diskConfig =
+    DiskConfig'
+    { _dcNumLocalSsds = Nothing
+    , _dcBootDiskSizeGb = Nothing
+    }
+
+-- | [Optional] Number of attached SSDs, from 0 to 4 (default is 0). If SSDs
+-- are not attached, the boot disk is used to store runtime logs and HDFS
+-- data. If one or more SSDs are attached, this runtime bulk data is spread
+-- across them, and the boot disk contains only basic config and installed
+-- binaries.
+dcNumLocalSsds :: Lens' DiskConfig (Maybe Int32)
+dcNumLocalSsds
+  = lens _dcNumLocalSsds
+      (\ s a -> s{_dcNumLocalSsds = a})
+      . mapping _Coerce
+
+-- | [Optional] Size in GB of the boot disk (default is 500GB).
+dcBootDiskSizeGb :: Lens' DiskConfig (Maybe Int32)
+dcBootDiskSizeGb
+  = lens _dcBootDiskSizeGb
+      (\ s a -> s{_dcBootDiskSizeGb = a})
+      . mapping _Coerce
+
+instance FromJSON DiskConfig where
+        parseJSON
+          = withObject "DiskConfig"
+              (\ o ->
+                 DiskConfig' <$>
+                   (o .:? "numLocalSsds") <*> (o .:? "bootDiskSizeGb"))
+
+instance ToJSON DiskConfig where
+        toJSON DiskConfig'{..}
+          = object
+              (catMaybes
+                 [("numLocalSsds" .=) <$> _dcNumLocalSsds,
+                  ("bootDiskSizeGb" .=) <$> _dcBootDiskSizeGb])
+
+-- | The response message for Operations.ListOperations.
+--
+-- /See:/ 'listOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse'
+    { _lorNextPageToken :: !(Maybe Text)
+    , _lorOperations    :: !(Maybe [Operation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lorNextPageToken'
+--
+-- * 'lorOperations'
+listOperationsResponse
+    :: ListOperationsResponse
+listOperationsResponse =
+    ListOperationsResponse'
+    { _lorNextPageToken = Nothing
+    , _lorOperations = Nothing
+    }
+
+-- | The standard List next-page token.
+lorNextPageToken :: Lens' ListOperationsResponse (Maybe Text)
+lorNextPageToken
+  = lens _lorNextPageToken
+      (\ s a -> s{_lorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+lorOperations :: Lens' ListOperationsResponse [Operation]
+lorOperations
+  = lens _lorOperations
+      (\ s a -> s{_lorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListOperationsResponse where
+        parseJSON
+          = withObject "ListOperationsResponse"
+              (\ o ->
+                 ListOperationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON ListOperationsResponse where
+        toJSON ListOperationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lorNextPageToken,
+                  ("operations" .=) <$> _lorOperations])
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Hive command: \`SET name=\"value\";\`).
+--
+-- /See:/ 'hiveJobScriptVariables' smart constructor.
+newtype HiveJobScriptVariables = HiveJobScriptVariables'
+    { _hjsvAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HiveJobScriptVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hjsvAddtional'
+hiveJobScriptVariables
+    :: HashMap Text Text -- ^ 'hjsvAddtional'
+    -> HiveJobScriptVariables
+hiveJobScriptVariables pHjsvAddtional_ =
+    HiveJobScriptVariables'
+    { _hjsvAddtional = _Coerce # pHjsvAddtional_
+    }
+
+hjsvAddtional :: Lens' HiveJobScriptVariables (HashMap Text Text)
+hjsvAddtional
+  = lens _hjsvAddtional
+      (\ s a -> s{_hjsvAddtional = a})
+      . _Coerce
+
+instance FromJSON HiveJobScriptVariables where
+        parseJSON
+          = withObject "HiveJobScriptVariables"
+              (\ o ->
+                 HiveJobScriptVariables' <$> (parseJSONObject o))
+
+instance ToJSON HiveJobScriptVariables where
+        toJSON = toJSON . _hjsvAddtional
+
+-- | Describes the identifying information, config, and status of a cluster
+-- of Google Compute Engine instances.
+--
+-- /See:/ 'cluster' smart constructor.
+data Cluster = Cluster'
+    { _cStatus        :: !(Maybe ClusterStatus)
+    , _cClusterUuid   :: !(Maybe Text)
+    , _cConfig        :: !(Maybe ClusterConfig)
+    , _cClusterName   :: !(Maybe Text)
+    , _cProjectId     :: !(Maybe Text)
+    , _cStatusHistory :: !(Maybe [ClusterStatus])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Cluster' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cClusterUuid'
+--
+-- * 'cConfig'
+--
+-- * 'cClusterName'
+--
+-- * 'cProjectId'
+--
+-- * 'cStatusHistory'
+cluster
+    :: Cluster
+cluster =
+    Cluster'
+    { _cStatus = Nothing
+    , _cClusterUuid = Nothing
+    , _cConfig = Nothing
+    , _cClusterName = Nothing
+    , _cProjectId = Nothing
+    , _cStatusHistory = Nothing
+    }
+
+-- | [Output-only] Cluster status.
+cStatus :: Lens' Cluster (Maybe ClusterStatus)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a})
+
+-- | [Output-only] A cluster UUID (Unique Universal Identifier). Cloud
+-- Dataproc generates this value when it creates the cluster.
+cClusterUuid :: Lens' Cluster (Maybe Text)
+cClusterUuid
+  = lens _cClusterUuid (\ s a -> s{_cClusterUuid = a})
+
+-- | [Required] The cluster config. Note that Cloud Dataproc may set default
+-- values, and values may change when clusters are updated.
+cConfig :: Lens' Cluster (Maybe ClusterConfig)
+cConfig = lens _cConfig (\ s a -> s{_cConfig = a})
+
+-- | [Required] The cluster name. Cluster names within a project must be
+-- unique. Names of deleted clusters can be reused.
+cClusterName :: Lens' Cluster (Maybe Text)
+cClusterName
+  = lens _cClusterName (\ s a -> s{_cClusterName = a})
+
+-- | [Required] The Google Cloud Platform project ID that the cluster belongs
+-- to.
+cProjectId :: Lens' Cluster (Maybe Text)
+cProjectId
+  = lens _cProjectId (\ s a -> s{_cProjectId = a})
+
+-- | [Output-only] The previous cluster status.
+cStatusHistory :: Lens' Cluster [ClusterStatus]
+cStatusHistory
+  = lens _cStatusHistory
+      (\ s a -> s{_cStatusHistory = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Cluster where
+        parseJSON
+          = withObject "Cluster"
+              (\ o ->
+                 Cluster' <$>
+                   (o .:? "status") <*> (o .:? "clusterUuid") <*>
+                     (o .:? "config")
+                     <*> (o .:? "clusterName")
+                     <*> (o .:? "projectId")
+                     <*> (o .:? "statusHistory" .!= mempty))
+
+instance ToJSON Cluster where
+        toJSON Cluster'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _cStatus,
+                  ("clusterUuid" .=) <$> _cClusterUuid,
+                  ("config" .=) <$> _cConfig,
+                  ("clusterName" .=) <$> _cClusterName,
+                  ("projectId" .=) <$> _cProjectId,
+                  ("statusHistory" .=) <$> _cStatusHistory])
+
+-- | A request to submit a job.
+--
+-- /See:/ 'submitJobRequest' smart constructor.
+newtype SubmitJobRequest = SubmitJobRequest'
+    { _sjrJob :: Maybe Job
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubmitJobRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sjrJob'
+submitJobRequest
+    :: SubmitJobRequest
+submitJobRequest =
+    SubmitJobRequest'
+    { _sjrJob = Nothing
+    }
+
+-- | [Required] The job resource.
+sjrJob :: Lens' SubmitJobRequest (Maybe Job)
+sjrJob = lens _sjrJob (\ s a -> s{_sjrJob = a})
+
+instance FromJSON SubmitJobRequest where
+        parseJSON
+          = withObject "SubmitJobRequest"
+              (\ o -> SubmitJobRequest' <$> (o .:? "job"))
+
+instance ToJSON SubmitJobRequest where
+        toJSON SubmitJobRequest'{..}
+          = object (catMaybes [("job" .=) <$> _sjrJob])
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation'
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationSchema)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation'
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = Nothing
+    }
+
+-- | If the value is \`false\`, it means the operation is still in progress.
+-- If true, the operation is completed, and either \`error\` or
+-- \`response\` is available.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | The error result of the operation in case of failure.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = a})
+
+-- | The server-assigned name, which is only unique within the same service
+-- that originally returns it. If you use the default HTTP mapping, the
+-- \`name\` should have the format of \`operations\/some\/unique\/name\`.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+oMetadata :: Lens' Operation (Maybe OperationSchema)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation' <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation'{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | A Cloud Dataproc job for running Hive queries on YARN.
+--
+-- /See:/ 'hiveJob' smart constructor.
+data HiveJob = HiveJob'
+    { _hjQueryFileURI      :: !(Maybe Text)
+    , _hjJarFileURIs       :: !(Maybe [Text])
+    , _hjScriptVariables   :: !(Maybe HiveJobScriptVariables)
+    , _hjQueryList         :: !(Maybe QueryList)
+    , _hjContinueOnFailure :: !(Maybe Bool)
+    , _hjProperties        :: !(Maybe HiveJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HiveJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hjQueryFileURI'
+--
+-- * 'hjJarFileURIs'
+--
+-- * 'hjScriptVariables'
+--
+-- * 'hjQueryList'
+--
+-- * 'hjContinueOnFailure'
+--
+-- * 'hjProperties'
+hiveJob
+    :: HiveJob
+hiveJob =
+    HiveJob'
+    { _hjQueryFileURI = Nothing
+    , _hjJarFileURIs = Nothing
+    , _hjScriptVariables = Nothing
+    , _hjQueryList = Nothing
+    , _hjContinueOnFailure = Nothing
+    , _hjProperties = Nothing
+    }
+
+-- | The HCFS URI of the script that contains Hive queries.
+hjQueryFileURI :: Lens' HiveJob (Maybe Text)
+hjQueryFileURI
+  = lens _hjQueryFileURI
+      (\ s a -> s{_hjQueryFileURI = a})
+
+-- | [Optional] HCFS URIs of jar files to add to the CLASSPATH of the Hive
+-- server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and
+-- UDFs.
+hjJarFileURIs :: Lens' HiveJob [Text]
+hjJarFileURIs
+  = lens _hjJarFileURIs
+      (\ s a -> s{_hjJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Hive command: \`SET name=\"value\";\`).
+hjScriptVariables :: Lens' HiveJob (Maybe HiveJobScriptVariables)
+hjScriptVariables
+  = lens _hjScriptVariables
+      (\ s a -> s{_hjScriptVariables = a})
+
+-- | A list of queries.
+hjQueryList :: Lens' HiveJob (Maybe QueryList)
+hjQueryList
+  = lens _hjQueryList (\ s a -> s{_hjQueryList = a})
+
+-- | [Optional] Whether to continue executing queries if a query fails. The
+-- default value is \`false\`. Setting to \`true\` can be useful when
+-- executing independent parallel queries.
+hjContinueOnFailure :: Lens' HiveJob (Maybe Bool)
+hjContinueOnFailure
+  = lens _hjContinueOnFailure
+      (\ s a -> s{_hjContinueOnFailure = a})
+
+-- | [Optional] A mapping of property names and values, used to configure
+-- Hive. Properties that conflict with values set by the Cloud Dataproc API
+-- may be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site.xml, \/etc\/hive\/conf\/hive-site.xml, and
+-- classes in user code.
+hjProperties :: Lens' HiveJob (Maybe HiveJobProperties)
+hjProperties
+  = lens _hjProperties (\ s a -> s{_hjProperties = a})
+
+instance FromJSON HiveJob where
+        parseJSON
+          = withObject "HiveJob"
+              (\ o ->
+                 HiveJob' <$>
+                   (o .:? "queryFileUri") <*>
+                     (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "scriptVariables")
+                     <*> (o .:? "queryList")
+                     <*> (o .:? "continueOnFailure")
+                     <*> (o .:? "properties"))
+
+instance ToJSON HiveJob where
+        toJSON HiveJob'{..}
+          = object
+              (catMaybes
+                 [("queryFileUri" .=) <$> _hjQueryFileURI,
+                  ("jarFileUris" .=) <$> _hjJarFileURIs,
+                  ("scriptVariables" .=) <$> _hjScriptVariables,
+                  ("queryList" .=) <$> _hjQueryList,
+                  ("continueOnFailure" .=) <$> _hjContinueOnFailure,
+                  ("properties" .=) <$> _hjProperties])
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Spark SQL command: SET \`name=\"value\";\`).
+--
+-- /See:/ 'sparkSQLJobScriptVariables' smart constructor.
+newtype SparkSQLJobScriptVariables = SparkSQLJobScriptVariables'
+    { _ssqljsvAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SparkSQLJobScriptVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssqljsvAddtional'
+sparkSQLJobScriptVariables
+    :: HashMap Text Text -- ^ 'ssqljsvAddtional'
+    -> SparkSQLJobScriptVariables
+sparkSQLJobScriptVariables pSsqljsvAddtional_ =
+    SparkSQLJobScriptVariables'
+    { _ssqljsvAddtional = _Coerce # pSsqljsvAddtional_
+    }
+
+ssqljsvAddtional :: Lens' SparkSQLJobScriptVariables (HashMap Text Text)
+ssqljsvAddtional
+  = lens _ssqljsvAddtional
+      (\ s a -> s{_ssqljsvAddtional = a})
+      . _Coerce
+
+instance FromJSON SparkSQLJobScriptVariables where
+        parseJSON
+          = withObject "SparkSQLJobScriptVariables"
+              (\ o ->
+                 SparkSQLJobScriptVariables' <$> (parseJSONObject o))
+
+instance ToJSON SparkSQLJobScriptVariables where
+        toJSON = toJSON . _ssqljsvAddtional
+
+-- | [Optional] A mapping of property names to values, used to configure Pig.
+-- Properties that conflict with values set by the Cloud Dataproc API may
+-- be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site.xml, \/etc\/pig\/conf\/pig.properties, and
+-- classes in user code.
+--
+-- /See:/ 'pigJobProperties' smart constructor.
+newtype PigJobProperties = PigJobProperties'
+    { _pjpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PigJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pjpAddtional'
+pigJobProperties
+    :: HashMap Text Text -- ^ 'pjpAddtional'
+    -> PigJobProperties
+pigJobProperties pPjpAddtional_ =
+    PigJobProperties'
+    { _pjpAddtional = _Coerce # pPjpAddtional_
+    }
+
+pjpAddtional :: Lens' PigJobProperties (HashMap Text Text)
+pjpAddtional
+  = lens _pjpAddtional (\ s a -> s{_pjpAddtional = a})
+      . _Coerce
+
+instance FromJSON PigJobProperties where
+        parseJSON
+          = withObject "PigJobProperties"
+              (\ o -> PigJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON PigJobProperties where
+        toJSON = toJSON . _pjpAddtional
+
+-- | The cluster config.
+--
+-- /See:/ 'clusterConfig' smart constructor.
+data ClusterConfig = ClusterConfig'
+    { _ccWorkerConfig          :: !(Maybe InstanceGroupConfig)
+    , _ccInitializationActions :: !(Maybe [NodeInitializationAction])
+    , _ccMasterConfig          :: !(Maybe InstanceGroupConfig)
+    , _ccGceClusterConfig      :: !(Maybe GceClusterConfig)
+    , _ccConfigBucket          :: !(Maybe Text)
+    , _ccSoftwareConfig        :: !(Maybe SoftwareConfig)
+    , _ccSecondaryWorkerConfig :: !(Maybe InstanceGroupConfig)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClusterConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccWorkerConfig'
+--
+-- * 'ccInitializationActions'
+--
+-- * 'ccMasterConfig'
+--
+-- * 'ccGceClusterConfig'
+--
+-- * 'ccConfigBucket'
+--
+-- * 'ccSoftwareConfig'
+--
+-- * 'ccSecondaryWorkerConfig'
+clusterConfig
+    :: ClusterConfig
+clusterConfig =
+    ClusterConfig'
+    { _ccWorkerConfig = Nothing
+    , _ccInitializationActions = Nothing
+    , _ccMasterConfig = Nothing
+    , _ccGceClusterConfig = Nothing
+    , _ccConfigBucket = Nothing
+    , _ccSoftwareConfig = Nothing
+    , _ccSecondaryWorkerConfig = Nothing
+    }
+
+-- | [Optional] The Google Compute Engine config settings for worker
+-- instances in a cluster.
+ccWorkerConfig :: Lens' ClusterConfig (Maybe InstanceGroupConfig)
+ccWorkerConfig
+  = lens _ccWorkerConfig
+      (\ s a -> s{_ccWorkerConfig = a})
+
+-- | [Optional] Commands to execute on each node after config is completed.
+-- By default, executables are run on master and all worker nodes. You can
+-- test a node\'s role metadata to run an executable on a master or worker
+-- node, as shown below:
+-- ROLE=$(\/usr\/share\/google\/get_metadata_value attributes\/role) if [[ \"${ROLE}\"
+-- == \'Master\' ]]; then ... master specific actions ... else ... worker
+-- specific actions ... fi
+ccInitializationActions :: Lens' ClusterConfig [NodeInitializationAction]
+ccInitializationActions
+  = lens _ccInitializationActions
+      (\ s a -> s{_ccInitializationActions = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] The Google Compute Engine config settings for the master
+-- instance in a cluster.
+ccMasterConfig :: Lens' ClusterConfig (Maybe InstanceGroupConfig)
+ccMasterConfig
+  = lens _ccMasterConfig
+      (\ s a -> s{_ccMasterConfig = a})
+
+-- | [Required] The shared Google Compute Engine config settings for all
+-- instances in a cluster.
+ccGceClusterConfig :: Lens' ClusterConfig (Maybe GceClusterConfig)
+ccGceClusterConfig
+  = lens _ccGceClusterConfig
+      (\ s a -> s{_ccGceClusterConfig = a})
+
+-- | [Optional] A Google Cloud Storage staging bucket used for sharing
+-- generated SSH keys and config. If you do not specify a staging bucket,
+-- Cloud Dataproc will determine an appropriate Cloud Storage location (US,
+-- ASIA, or EU) for your cluster\'s staging bucket according to the Google
+-- Compute Engine zone where your cluster is deployed, and then it will
+-- create and manage this project-level, per-location bucket for you.
+ccConfigBucket :: Lens' ClusterConfig (Maybe Text)
+ccConfigBucket
+  = lens _ccConfigBucket
+      (\ s a -> s{_ccConfigBucket = a})
+
+-- | [Optional] The config settings for software inside the cluster.
+ccSoftwareConfig :: Lens' ClusterConfig (Maybe SoftwareConfig)
+ccSoftwareConfig
+  = lens _ccSoftwareConfig
+      (\ s a -> s{_ccSoftwareConfig = a})
+
+-- | [Optional] The Google Compute Engine config settings for additional
+-- worker instances in a cluster.
+ccSecondaryWorkerConfig :: Lens' ClusterConfig (Maybe InstanceGroupConfig)
+ccSecondaryWorkerConfig
+  = lens _ccSecondaryWorkerConfig
+      (\ s a -> s{_ccSecondaryWorkerConfig = a})
+
+instance FromJSON ClusterConfig where
+        parseJSON
+          = withObject "ClusterConfig"
+              (\ o ->
+                 ClusterConfig' <$>
+                   (o .:? "workerConfig") <*>
+                     (o .:? "initializationActions" .!= mempty)
+                     <*> (o .:? "masterConfig")
+                     <*> (o .:? "gceClusterConfig")
+                     <*> (o .:? "configBucket")
+                     <*> (o .:? "softwareConfig")
+                     <*> (o .:? "secondaryWorkerConfig"))
+
+instance ToJSON ClusterConfig where
+        toJSON ClusterConfig'{..}
+          = object
+              (catMaybes
+                 [("workerConfig" .=) <$> _ccWorkerConfig,
+                  ("initializationActions" .=) <$>
+                    _ccInitializationActions,
+                  ("masterConfig" .=) <$> _ccMasterConfig,
+                  ("gceClusterConfig" .=) <$> _ccGceClusterConfig,
+                  ("configBucket" .=) <$> _ccConfigBucket,
+                  ("softwareConfig" .=) <$> _ccSoftwareConfig,
+                  ("secondaryWorkerConfig" .=) <$>
+                    _ccSecondaryWorkerConfig])
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Hadoop. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site and classes in user code.
+--
+-- /See:/ 'hadoopJobProperties' smart constructor.
+newtype HadoopJobProperties = HadoopJobProperties'
+    { _hjpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HadoopJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hjpAddtional'
+hadoopJobProperties
+    :: HashMap Text Text -- ^ 'hjpAddtional'
+    -> HadoopJobProperties
+hadoopJobProperties pHjpAddtional_ =
+    HadoopJobProperties'
+    { _hjpAddtional = _Coerce # pHjpAddtional_
+    }
+
+hjpAddtional :: Lens' HadoopJobProperties (HashMap Text Text)
+hjpAddtional
+  = lens _hjpAddtional (\ s a -> s{_hjpAddtional = a})
+      . _Coerce
+
+instance FromJSON HadoopJobProperties where
+        parseJSON
+          = withObject "HadoopJobProperties"
+              (\ o -> HadoopJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON HadoopJobProperties where
+        toJSON = toJSON . _hjpAddtional
+
+-- | The status of the operation.
+--
+-- /See:/ 'clusterOperationStatus' smart constructor.
+data ClusterOperationStatus = ClusterOperationStatus'
+    { _cosState          :: !(Maybe Text)
+    , _cosInnerState     :: !(Maybe Text)
+    , _cosStateStartTime :: !(Maybe Text)
+    , _cosDetails        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClusterOperationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cosState'
+--
+-- * 'cosInnerState'
+--
+-- * 'cosStateStartTime'
+--
+-- * 'cosDetails'
+clusterOperationStatus
+    :: ClusterOperationStatus
+clusterOperationStatus =
+    ClusterOperationStatus'
+    { _cosState = Nothing
+    , _cosInnerState = Nothing
+    , _cosStateStartTime = Nothing
+    , _cosDetails = Nothing
+    }
+
+-- | A message containing the operation state.
+cosState :: Lens' ClusterOperationStatus (Maybe Text)
+cosState = lens _cosState (\ s a -> s{_cosState = a})
+
+-- | A message containing the detailed operation state.
+cosInnerState :: Lens' ClusterOperationStatus (Maybe Text)
+cosInnerState
+  = lens _cosInnerState
+      (\ s a -> s{_cosInnerState = a})
+
+-- | The time this state was entered.
+cosStateStartTime :: Lens' ClusterOperationStatus (Maybe Text)
+cosStateStartTime
+  = lens _cosStateStartTime
+      (\ s a -> s{_cosStateStartTime = a})
+
+-- | A message containing any operation metadata details.
+cosDetails :: Lens' ClusterOperationStatus (Maybe Text)
+cosDetails
+  = lens _cosDetails (\ s a -> s{_cosDetails = a})
+
+instance FromJSON ClusterOperationStatus where
+        parseJSON
+          = withObject "ClusterOperationStatus"
+              (\ o ->
+                 ClusterOperationStatus' <$>
+                   (o .:? "state") <*> (o .:? "innerState") <*>
+                     (o .:? "stateStartTime")
+                     <*> (o .:? "details"))
+
+instance ToJSON ClusterOperationStatus where
+        toJSON ClusterOperationStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _cosState,
+                  ("innerState" .=) <$> _cosInnerState,
+                  ("stateStartTime" .=) <$> _cosStateStartTime,
+                  ("details" .=) <$> _cosDetails])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'ype with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Spark SQL\'s SparkConf. Properties that conflict with values set by the
+-- Cloud Dataproc API may be overwritten.
+--
+-- /See:/ 'sparkSQLJobProperties' smart constructor.
+newtype SparkSQLJobProperties = SparkSQLJobProperties'
+    { _ssqljpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SparkSQLJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssqljpAddtional'
+sparkSQLJobProperties
+    :: HashMap Text Text -- ^ 'ssqljpAddtional'
+    -> SparkSQLJobProperties
+sparkSQLJobProperties pSsqljpAddtional_ =
+    SparkSQLJobProperties'
+    { _ssqljpAddtional = _Coerce # pSsqljpAddtional_
+    }
+
+ssqljpAddtional :: Lens' SparkSQLJobProperties (HashMap Text Text)
+ssqljpAddtional
+  = lens _ssqljpAddtional
+      (\ s a -> s{_ssqljpAddtional = a})
+      . _Coerce
+
+instance FromJSON SparkSQLJobProperties where
+        parseJSON
+          = withObject "SparkSQLJobProperties"
+              (\ o ->
+                 SparkSQLJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON SparkSQLJobProperties where
+        toJSON = toJSON . _ssqljpAddtional
+
+-- | Specifies an executable to run on a fully configured node and a timeout
+-- period for executable completion.
+--
+-- /See:/ 'nodeInitializationAction' smart constructor.
+data NodeInitializationAction = NodeInitializationAction'
+    { _niaExecutionTimeout :: !(Maybe Text)
+    , _niaExecutableFile   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NodeInitializationAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niaExecutionTimeout'
+--
+-- * 'niaExecutableFile'
+nodeInitializationAction
+    :: NodeInitializationAction
+nodeInitializationAction =
+    NodeInitializationAction'
+    { _niaExecutionTimeout = Nothing
+    , _niaExecutableFile = Nothing
+    }
+
+-- | [Optional] Amount of time executable has to complete. Default is 10
+-- minutes. Cluster creation fails with an explanatory error message (the
+-- name of the executable that caused the error and the exceeded timeout
+-- period) if the executable is not completed at end of the timeout period.
+niaExecutionTimeout :: Lens' NodeInitializationAction (Maybe Text)
+niaExecutionTimeout
+  = lens _niaExecutionTimeout
+      (\ s a -> s{_niaExecutionTimeout = a})
+
+-- | [Required] Google Cloud Storage URI of executable file.
+niaExecutableFile :: Lens' NodeInitializationAction (Maybe Text)
+niaExecutableFile
+  = lens _niaExecutableFile
+      (\ s a -> s{_niaExecutableFile = a})
+
+instance FromJSON NodeInitializationAction where
+        parseJSON
+          = withObject "NodeInitializationAction"
+              (\ o ->
+                 NodeInitializationAction' <$>
+                   (o .:? "executionTimeout") <*>
+                     (o .:? "executableFile"))
+
+instance ToJSON NodeInitializationAction where
+        toJSON NodeInitializationAction'{..}
+          = object
+              (catMaybes
+                 [("executionTimeout" .=) <$> _niaExecutionTimeout,
+                  ("executableFile" .=) <$> _niaExecutableFile])
+
+-- | Cloud Dataproc job config.
+--
+-- /See:/ 'jobPlacement' smart constructor.
+data JobPlacement = JobPlacement'
+    { _jpClusterUuid :: !(Maybe Text)
+    , _jpClusterName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobPlacement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jpClusterUuid'
+--
+-- * 'jpClusterName'
+jobPlacement
+    :: JobPlacement
+jobPlacement =
+    JobPlacement'
+    { _jpClusterUuid = Nothing
+    , _jpClusterName = Nothing
+    }
+
+-- | [Output-only] A cluster UUID generated by the Cloud Dataproc service
+-- when the job is submitted.
+jpClusterUuid :: Lens' JobPlacement (Maybe Text)
+jpClusterUuid
+  = lens _jpClusterUuid
+      (\ s a -> s{_jpClusterUuid = a})
+
+-- | [Required] The name of the cluster where the job will be submitted.
+jpClusterName :: Lens' JobPlacement (Maybe Text)
+jpClusterName
+  = lens _jpClusterName
+      (\ s a -> s{_jpClusterName = a})
+
+instance FromJSON JobPlacement where
+        parseJSON
+          = withObject "JobPlacement"
+              (\ o ->
+                 JobPlacement' <$>
+                   (o .:? "clusterUuid") <*> (o .:? "clusterName"))
+
+instance ToJSON JobPlacement where
+        toJSON JobPlacement'{..}
+          = object
+              (catMaybes
+                 [("clusterUuid" .=) <$> _jpClusterUuid,
+                  ("clusterName" .=) <$> _jpClusterName])
+
+-- | Common config settings for resources of Google Compute Engine cluster
+-- instances, applicable to all instances in the cluster.
+--
+-- /See:/ 'gceClusterConfig' smart constructor.
+data GceClusterConfig = GceClusterConfig'
+    { _gccSubnetworkURI        :: !(Maybe Text)
+    , _gccNetworkURI           :: !(Maybe Text)
+    , _gccZoneURI              :: !(Maybe Text)
+    , _gccMetadata             :: !(Maybe GceClusterConfigMetadata)
+    , _gccServiceAccountScopes :: !(Maybe [Text])
+    , _gccTags                 :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GceClusterConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gccSubnetworkURI'
+--
+-- * 'gccNetworkURI'
+--
+-- * 'gccZoneURI'
+--
+-- * 'gccMetadata'
+--
+-- * 'gccServiceAccountScopes'
+--
+-- * 'gccTags'
+gceClusterConfig
+    :: GceClusterConfig
+gceClusterConfig =
+    GceClusterConfig'
+    { _gccSubnetworkURI = Nothing
+    , _gccNetworkURI = Nothing
+    , _gccZoneURI = Nothing
+    , _gccMetadata = Nothing
+    , _gccServiceAccountScopes = Nothing
+    , _gccTags = Nothing
+    }
+
+-- | The Google Compute Engine subnetwork to be used for machine
+-- communications. Cannot be specified with network_uri. Example:
+-- \`https:\/\/www.googleapis.com\/compute\/v1\/projects\/[project_id]\/regions\/us-east1\/sub0\`.
+gccSubnetworkURI :: Lens' GceClusterConfig (Maybe Text)
+gccSubnetworkURI
+  = lens _gccSubnetworkURI
+      (\ s a -> s{_gccSubnetworkURI = a})
+
+-- | The Google Compute Engine network to be used for machine communications.
+-- Cannot be specified with subnetwork_uri. If neither network_uri nor
+-- subnetwork_uri is specified, the \"default\" network of the project is
+-- used, if it exists. Cannot be a \"Custom Subnet Network\" (see
+-- https:\/\/cloud.google.com\/compute\/docs\/subnetworks for more
+-- information). Example:
+-- \`https:\/\/www.googleapis.com\/compute\/v1\/projects\/[project_id]\/regions\/global\/default\`.
+gccNetworkURI :: Lens' GceClusterConfig (Maybe Text)
+gccNetworkURI
+  = lens _gccNetworkURI
+      (\ s a -> s{_gccNetworkURI = a})
+
+-- | [Required] The zone where the Google Compute Engine cluster will be
+-- located. Example:
+-- \`https:\/\/www.googleapis.com\/compute\/v1\/projects\/[project_id]\/zones\/[zone]\`.
+gccZoneURI :: Lens' GceClusterConfig (Maybe Text)
+gccZoneURI
+  = lens _gccZoneURI (\ s a -> s{_gccZoneURI = a})
+
+-- | The Google Compute Engine metadata entries to add to all instances.
+gccMetadata :: Lens' GceClusterConfig (Maybe GceClusterConfigMetadata)
+gccMetadata
+  = lens _gccMetadata (\ s a -> s{_gccMetadata = a})
+
+-- | The URIs of service account scopes to be included in Google Compute
+-- Engine instances. The following base set of scopes is always included: *
+-- https:\/\/www.googleapis.com\/auth\/cloud.useraccounts.readonly *
+-- https:\/\/www.googleapis.com\/auth\/devstorage.read_write *
+-- https:\/\/www.googleapis.com\/auth\/logging.write If no scopes are
+-- specfied, the following defaults are also provided: *
+-- https:\/\/www.googleapis.com\/auth\/bigquery *
+-- https:\/\/www.googleapis.com\/auth\/bigtable.admin.table *
+-- https:\/\/www.googleapis.com\/auth\/bigtable.data *
+-- https:\/\/www.googleapis.com\/auth\/devstorage.full_control
+gccServiceAccountScopes :: Lens' GceClusterConfig [Text]
+gccServiceAccountScopes
+  = lens _gccServiceAccountScopes
+      (\ s a -> s{_gccServiceAccountScopes = a})
+      . _Default
+      . _Coerce
+
+-- | The Google Compute Engine tags to add to all instances.
+gccTags :: Lens' GceClusterConfig [Text]
+gccTags
+  = lens _gccTags (\ s a -> s{_gccTags = a}) . _Default
+      . _Coerce
+
+instance FromJSON GceClusterConfig where
+        parseJSON
+          = withObject "GceClusterConfig"
+              (\ o ->
+                 GceClusterConfig' <$>
+                   (o .:? "subnetworkUri") <*> (o .:? "networkUri") <*>
+                     (o .:? "zoneUri")
+                     <*> (o .:? "metadata")
+                     <*> (o .:? "serviceAccountScopes" .!= mempty)
+                     <*> (o .:? "tags" .!= mempty))
+
+instance ToJSON GceClusterConfig where
+        toJSON GceClusterConfig'{..}
+          = object
+              (catMaybes
+                 [("subnetworkUri" .=) <$> _gccSubnetworkURI,
+                  ("networkUri" .=) <$> _gccNetworkURI,
+                  ("zoneUri" .=) <$> _gccZoneURI,
+                  ("metadata" .=) <$> _gccMetadata,
+                  ("serviceAccountScopes" .=) <$>
+                    _gccServiceAccountScopes,
+                  ("tags" .=) <$> _gccTags])
+
+-- | The status of the operation.
+--
+-- /See:/ 'operationStatus' smart constructor.
+data OperationStatus = OperationStatus'
+    { _osState          :: !(Maybe Text)
+    , _osInnerState     :: !(Maybe Text)
+    , _osStateStartTime :: !(Maybe Text)
+    , _osDetails        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osState'
+--
+-- * 'osInnerState'
+--
+-- * 'osStateStartTime'
+--
+-- * 'osDetails'
+operationStatus
+    :: OperationStatus
+operationStatus =
+    OperationStatus'
+    { _osState = Nothing
+    , _osInnerState = Nothing
+    , _osStateStartTime = Nothing
+    , _osDetails = Nothing
+    }
+
+-- | A message containing the operation state.
+osState :: Lens' OperationStatus (Maybe Text)
+osState = lens _osState (\ s a -> s{_osState = a})
+
+-- | A message containing the detailed operation state.
+osInnerState :: Lens' OperationStatus (Maybe Text)
+osInnerState
+  = lens _osInnerState (\ s a -> s{_osInnerState = a})
+
+-- | The time this state was entered.
+osStateStartTime :: Lens' OperationStatus (Maybe Text)
+osStateStartTime
+  = lens _osStateStartTime
+      (\ s a -> s{_osStateStartTime = a})
+
+-- | A message containing any operation metadata details.
+osDetails :: Lens' OperationStatus (Maybe Text)
+osDetails
+  = lens _osDetails (\ s a -> s{_osDetails = a})
+
+instance FromJSON OperationStatus where
+        parseJSON
+          = withObject "OperationStatus"
+              (\ o ->
+                 OperationStatus' <$>
+                   (o .:? "state") <*> (o .:? "innerState") <*>
+                     (o .:? "stateStartTime")
+                     <*> (o .:? "details"))
+
+instance ToJSON OperationStatus where
+        toJSON OperationStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _osState,
+                  ("innerState" .=) <$> _osInnerState,
+                  ("stateStartTime" .=) <$> _osStateStartTime,
+                  ("details" .=) <$> _osDetails])
+
+-- | The Google Compute Engine metadata entries to add to all instances.
+--
+-- /See:/ 'gceClusterConfigMetadata' smart constructor.
+newtype GceClusterConfigMetadata = GceClusterConfigMetadata'
+    { _gccmAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GceClusterConfigMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gccmAddtional'
+gceClusterConfigMetadata
+    :: HashMap Text Text -- ^ 'gccmAddtional'
+    -> GceClusterConfigMetadata
+gceClusterConfigMetadata pGccmAddtional_ =
+    GceClusterConfigMetadata'
+    { _gccmAddtional = _Coerce # pGccmAddtional_
+    }
+
+gccmAddtional :: Lens' GceClusterConfigMetadata (HashMap Text Text)
+gccmAddtional
+  = lens _gccmAddtional
+      (\ s a -> s{_gccmAddtional = a})
+      . _Coerce
+
+instance FromJSON GceClusterConfigMetadata where
+        parseJSON
+          = withObject "GceClusterConfigMetadata"
+              (\ o ->
+                 GceClusterConfigMetadata' <$> (parseJSONObject o))
+
+instance ToJSON GceClusterConfigMetadata where
+        toJSON = toJSON . _gccmAddtional
+
+-- | [Optional] A mapping of property names and values, used to configure
+-- Hive. Properties that conflict with values set by the Cloud Dataproc API
+-- may be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site.xml, \/etc\/hive\/conf\/hive-site.xml, and
+-- classes in user code.
+--
+-- /See:/ 'hiveJobProperties' smart constructor.
+newtype HiveJobProperties = HiveJobProperties'
+    { _hAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HiveJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hAddtional'
+hiveJobProperties
+    :: HashMap Text Text -- ^ 'hAddtional'
+    -> HiveJobProperties
+hiveJobProperties pHAddtional_ =
+    HiveJobProperties'
+    { _hAddtional = _Coerce # pHAddtional_
+    }
+
+hAddtional :: Lens' HiveJobProperties (HashMap Text Text)
+hAddtional
+  = lens _hAddtional (\ s a -> s{_hAddtional = a}) .
+      _Coerce
+
+instance FromJSON HiveJobProperties where
+        parseJSON
+          = withObject "HiveJobProperties"
+              (\ o -> HiveJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON HiveJobProperties where
+        toJSON = toJSON . _hAddtional
+
+-- | The location where output from diagnostic command can be found.
+--
+-- /See:/ 'diagnoseClusterOutputLocation' smart constructor.
+newtype DiagnoseClusterOutputLocation = DiagnoseClusterOutputLocation'
+    { _dcolOutputURI :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiagnoseClusterOutputLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcolOutputURI'
+diagnoseClusterOutputLocation
+    :: DiagnoseClusterOutputLocation
+diagnoseClusterOutputLocation =
+    DiagnoseClusterOutputLocation'
+    { _dcolOutputURI = Nothing
+    }
+
+-- | [Output-only] The Google Cloud Storage URI of the diagnostic output.
+-- This will be a plain text file with summary of collected diagnostics.
+dcolOutputURI :: Lens' DiagnoseClusterOutputLocation (Maybe Text)
+dcolOutputURI
+  = lens _dcolOutputURI
+      (\ s a -> s{_dcolOutputURI = a})
+
+instance FromJSON DiagnoseClusterOutputLocation where
+        parseJSON
+          = withObject "DiagnoseClusterOutputLocation"
+              (\ o ->
+                 DiagnoseClusterOutputLocation' <$>
+                   (o .:? "outputUri"))
+
+instance ToJSON DiagnoseClusterOutputLocation where
+        toJSON DiagnoseClusterOutputLocation'{..}
+          = object
+              (catMaybes [("outputUri" .=) <$> _dcolOutputURI])
+
+-- | A Cloud Dataproc job resource.
+--
+-- /See:/ 'job' smart constructor.
+data Job = Job'
+    { _jSparkJob                :: !(Maybe SparkJob)
+    , _jStatus                  :: !(Maybe JobStatus)
+    , _jDriverControlFilesURI   :: !(Maybe Text)
+    , _jHiveJob                 :: !(Maybe HiveJob)
+    , _jReference               :: !(Maybe JobReference)
+    , _jSparkSQLJob             :: !(Maybe SparkSQLJob)
+    , _jHadoopJob               :: !(Maybe HadoopJob)
+    , _jPysparkJob              :: !(Maybe PySparkJob)
+    , _jDriverOutputResourceURI :: !(Maybe Text)
+    , _jStatusHistory           :: !(Maybe [JobStatus])
+    , _jPlacement               :: !(Maybe JobPlacement)
+    , _jPigJob                  :: !(Maybe PigJob)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Job' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jSparkJob'
+--
+-- * 'jStatus'
+--
+-- * 'jDriverControlFilesURI'
+--
+-- * 'jHiveJob'
+--
+-- * 'jReference'
+--
+-- * 'jSparkSQLJob'
+--
+-- * 'jHadoopJob'
+--
+-- * 'jPysparkJob'
+--
+-- * 'jDriverOutputResourceURI'
+--
+-- * 'jStatusHistory'
+--
+-- * 'jPlacement'
+--
+-- * 'jPigJob'
+job
+    :: Job
+job =
+    Job'
+    { _jSparkJob = Nothing
+    , _jStatus = Nothing
+    , _jDriverControlFilesURI = Nothing
+    , _jHiveJob = Nothing
+    , _jReference = Nothing
+    , _jSparkSQLJob = Nothing
+    , _jHadoopJob = Nothing
+    , _jPysparkJob = Nothing
+    , _jDriverOutputResourceURI = Nothing
+    , _jStatusHistory = Nothing
+    , _jPlacement = Nothing
+    , _jPigJob = Nothing
+    }
+
+-- | Job is a Spark job.
+jSparkJob :: Lens' Job (Maybe SparkJob)
+jSparkJob
+  = lens _jSparkJob (\ s a -> s{_jSparkJob = a})
+
+-- | [Output-only] The job status. Additional application-specific status
+-- information may be contained in the type_job and yarn_applications
+-- fields.
+jStatus :: Lens' Job (Maybe JobStatus)
+jStatus = lens _jStatus (\ s a -> s{_jStatus = a})
+
+-- | [Output-only] If present, the location of miscellaneous control files
+-- which may be used as part of job setup and handling. If not present,
+-- control files may be placed in the same location as
+-- \`driver_output_uri\`.
+jDriverControlFilesURI :: Lens' Job (Maybe Text)
+jDriverControlFilesURI
+  = lens _jDriverControlFilesURI
+      (\ s a -> s{_jDriverControlFilesURI = a})
+
+-- | Job is a Hive job.
+jHiveJob :: Lens' Job (Maybe HiveJob)
+jHiveJob = lens _jHiveJob (\ s a -> s{_jHiveJob = a})
+
+-- | [Optional] The fully qualified reference to the job, which can be used
+-- to obtain the equivalent REST path of the job resource. If this property
+-- is not specified when a job is created, the server generates a job_id.
+jReference :: Lens' Job (Maybe JobReference)
+jReference
+  = lens _jReference (\ s a -> s{_jReference = a})
+
+-- | Job is a SparkSql job.
+jSparkSQLJob :: Lens' Job (Maybe SparkSQLJob)
+jSparkSQLJob
+  = lens _jSparkSQLJob (\ s a -> s{_jSparkSQLJob = a})
+
+-- | Job is a Hadoop job.
+jHadoopJob :: Lens' Job (Maybe HadoopJob)
+jHadoopJob
+  = lens _jHadoopJob (\ s a -> s{_jHadoopJob = a})
+
+-- | Job is a Pyspark job.
+jPysparkJob :: Lens' Job (Maybe PySparkJob)
+jPysparkJob
+  = lens _jPysparkJob (\ s a -> s{_jPysparkJob = a})
+
+-- | [Output-only] A URI pointing to the location of the stdout of the job\'s
+-- driver program.
+jDriverOutputResourceURI :: Lens' Job (Maybe Text)
+jDriverOutputResourceURI
+  = lens _jDriverOutputResourceURI
+      (\ s a -> s{_jDriverOutputResourceURI = a})
+
+-- | [Output-only] The previous job status.
+jStatusHistory :: Lens' Job [JobStatus]
+jStatusHistory
+  = lens _jStatusHistory
+      (\ s a -> s{_jStatusHistory = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] Job information, including how, when, and where to run the
+-- job.
+jPlacement :: Lens' Job (Maybe JobPlacement)
+jPlacement
+  = lens _jPlacement (\ s a -> s{_jPlacement = a})
+
+-- | Job is a Pig job.
+jPigJob :: Lens' Job (Maybe PigJob)
+jPigJob = lens _jPigJob (\ s a -> s{_jPigJob = a})
+
+instance FromJSON Job where
+        parseJSON
+          = withObject "Job"
+              (\ o ->
+                 Job' <$>
+                   (o .:? "sparkJob") <*> (o .:? "status") <*>
+                     (o .:? "driverControlFilesUri")
+                     <*> (o .:? "hiveJob")
+                     <*> (o .:? "reference")
+                     <*> (o .:? "sparkSqlJob")
+                     <*> (o .:? "hadoopJob")
+                     <*> (o .:? "pysparkJob")
+                     <*> (o .:? "driverOutputResourceUri")
+                     <*> (o .:? "statusHistory" .!= mempty)
+                     <*> (o .:? "placement")
+                     <*> (o .:? "pigJob"))
+
+instance ToJSON Job where
+        toJSON Job'{..}
+          = object
+              (catMaybes
+                 [("sparkJob" .=) <$> _jSparkJob,
+                  ("status" .=) <$> _jStatus,
+                  ("driverControlFilesUri" .=) <$>
+                    _jDriverControlFilesURI,
+                  ("hiveJob" .=) <$> _jHiveJob,
+                  ("reference" .=) <$> _jReference,
+                  ("sparkSqlJob" .=) <$> _jSparkSQLJob,
+                  ("hadoopJob" .=) <$> _jHadoopJob,
+                  ("pysparkJob" .=) <$> _jPysparkJob,
+                  ("driverOutputResourceUri" .=) <$>
+                    _jDriverOutputResourceURI,
+                  ("statusHistory" .=) <$> _jStatusHistory,
+                  ("placement" .=) <$> _jPlacement,
+                  ("pigJob" .=) <$> _jPigJob])
+
+-- | A request to collect cluster diagnostic information.
+--
+-- /See:/ 'diagnoseClusterRequest' smart constructor.
+data DiagnoseClusterRequest =
+    DiagnoseClusterRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiagnoseClusterRequest' with the minimum fields required to make a request.
+--
+diagnoseClusterRequest
+    :: DiagnoseClusterRequest
+diagnoseClusterRequest = DiagnoseClusterRequest'
+
+instance FromJSON DiagnoseClusterRequest where
+        parseJSON
+          = withObject "DiagnoseClusterRequest"
+              (\ o -> pure DiagnoseClusterRequest')
+
+instance ToJSON DiagnoseClusterRequest where
+        toJSON = const emptyObject
+
+-- | A Cloud Dataproc job for running Hadoop MapReduce jobs on YARN.
+--
+-- /See:/ 'hadoopJob' smart constructor.
+data HadoopJob = HadoopJob'
+    { _hArgs           :: !(Maybe [Text])
+    , _hMainJarFileURI :: !(Maybe Text)
+    , _hJarFileURIs    :: !(Maybe [Text])
+    , _hFileURIs       :: !(Maybe [Text])
+    , _hArchiveURIs    :: !(Maybe [Text])
+    , _hMainClass      :: !(Maybe Text)
+    , _hLoggingConfig  :: !(Maybe LoggingConfig)
+    , _hProperties     :: !(Maybe HadoopJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HadoopJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hArgs'
+--
+-- * 'hMainJarFileURI'
+--
+-- * 'hJarFileURIs'
+--
+-- * 'hFileURIs'
+--
+-- * 'hArchiveURIs'
+--
+-- * 'hMainClass'
+--
+-- * 'hLoggingConfig'
+--
+-- * 'hProperties'
+hadoopJob
+    :: HadoopJob
+hadoopJob =
+    HadoopJob'
+    { _hArgs = Nothing
+    , _hMainJarFileURI = Nothing
+    , _hJarFileURIs = Nothing
+    , _hFileURIs = Nothing
+    , _hArchiveURIs = Nothing
+    , _hMainClass = Nothing
+    , _hLoggingConfig = Nothing
+    , _hProperties = Nothing
+    }
+
+-- | [Optional] The arguments to pass to the driver. Do not include
+-- arguments, such as \`-libjars\` or \`-Dfoo=bar\`, that can be set as job
+-- properties, since a collision may occur that causes an incorrect job
+-- submission.
+hArgs :: Lens' HadoopJob [Text]
+hArgs
+  = lens _hArgs (\ s a -> s{_hArgs = a}) . _Default .
+      _Coerce
+
+-- | The HCFS URI of the jar file containing the main class. Examples:
+-- \'gs:\/\/foo-bucket\/analytics-binaries\/extract-useful-metrics-mr.jar\'
+-- \'hdfs:\/tmp\/test-samples\/custom-wordcount.jar\'
+-- \'file:\/\/\/home\/usr\/lib\/hadoop-mapreduce\/hadoop-mapreduce-examples.jar\'
+hMainJarFileURI :: Lens' HadoopJob (Maybe Text)
+hMainJarFileURI
+  = lens _hMainJarFileURI
+      (\ s a -> s{_hMainJarFileURI = a})
+
+-- | [Optional] Jar file URIs to add to the CLASSPATHs of the Hadoop driver
+-- and tasks.
+hJarFileURIs :: Lens' HadoopJob [Text]
+hJarFileURIs
+  = lens _hJarFileURIs (\ s a -> s{_hJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be
+-- copied to the working directory of Hadoop drivers and distributed tasks.
+-- Useful for naively parallel tasks.
+hFileURIs :: Lens' HadoopJob [Text]
+hFileURIs
+  = lens _hFileURIs (\ s a -> s{_hFileURIs = a}) .
+      _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of archives to be extracted in the working
+-- directory of Hadoop drivers and tasks. Supported file types: .jar, .tar,
+-- .tar.gz, .tgz, or .zip.
+hArchiveURIs :: Lens' HadoopJob [Text]
+hArchiveURIs
+  = lens _hArchiveURIs (\ s a -> s{_hArchiveURIs = a})
+      . _Default
+      . _Coerce
+
+-- | The name of the driver\'s main class. The jar file containing the class
+-- must be in the default CLASSPATH or specified in \`jar_file_uris\`.
+hMainClass :: Lens' HadoopJob (Maybe Text)
+hMainClass
+  = lens _hMainClass (\ s a -> s{_hMainClass = a})
+
+-- | [Optional] The runtime log config for job execution.
+hLoggingConfig :: Lens' HadoopJob (Maybe LoggingConfig)
+hLoggingConfig
+  = lens _hLoggingConfig
+      (\ s a -> s{_hLoggingConfig = a})
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Hadoop. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site and classes in user code.
+hProperties :: Lens' HadoopJob (Maybe HadoopJobProperties)
+hProperties
+  = lens _hProperties (\ s a -> s{_hProperties = a})
+
+instance FromJSON HadoopJob where
+        parseJSON
+          = withObject "HadoopJob"
+              (\ o ->
+                 HadoopJob' <$>
+                   (o .:? "args" .!= mempty) <*>
+                     (o .:? "mainJarFileUri")
+                     <*> (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "fileUris" .!= mempty)
+                     <*> (o .:? "archiveUris" .!= mempty)
+                     <*> (o .:? "mainClass")
+                     <*> (o .:? "loggingConfig")
+                     <*> (o .:? "properties"))
+
+instance ToJSON HadoopJob where
+        toJSON HadoopJob'{..}
+          = object
+              (catMaybes
+                 [("args" .=) <$> _hArgs,
+                  ("mainJarFileUri" .=) <$> _hMainJarFileURI,
+                  ("jarFileUris" .=) <$> _hJarFileURIs,
+                  ("fileUris" .=) <$> _hFileURIs,
+                  ("archiveUris" .=) <$> _hArchiveURIs,
+                  ("mainClass" .=) <$> _hMainClass,
+                  ("loggingConfig" .=) <$> _hLoggingConfig,
+                  ("properties" .=) <$> _hProperties])
+
+-- | Metadata describing the operation.
+--
+-- /See:/ 'clusterOperationMetadata' smart constructor.
+data ClusterOperationMetadata = ClusterOperationMetadata'
+    { _comStatus        :: !(Maybe ClusterOperationStatus)
+    , _comClusterUuid   :: !(Maybe Text)
+    , _comClusterName   :: !(Maybe Text)
+    , _comOperationType :: !(Maybe Text)
+    , _comStatusHistory :: !(Maybe [ClusterOperationStatus])
+    , _comDescription   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClusterOperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'comStatus'
+--
+-- * 'comClusterUuid'
+--
+-- * 'comClusterName'
+--
+-- * 'comOperationType'
+--
+-- * 'comStatusHistory'
+--
+-- * 'comDescription'
+clusterOperationMetadata
+    :: ClusterOperationMetadata
+clusterOperationMetadata =
+    ClusterOperationMetadata'
+    { _comStatus = Nothing
+    , _comClusterUuid = Nothing
+    , _comClusterName = Nothing
+    , _comOperationType = Nothing
+    , _comStatusHistory = Nothing
+    , _comDescription = Nothing
+    }
+
+-- | [Output-only] Current operation status.
+comStatus :: Lens' ClusterOperationMetadata (Maybe ClusterOperationStatus)
+comStatus
+  = lens _comStatus (\ s a -> s{_comStatus = a})
+
+-- | Cluster UUId for the operation.
+comClusterUuid :: Lens' ClusterOperationMetadata (Maybe Text)
+comClusterUuid
+  = lens _comClusterUuid
+      (\ s a -> s{_comClusterUuid = a})
+
+-- | Name of the cluster for the operation.
+comClusterName :: Lens' ClusterOperationMetadata (Maybe Text)
+comClusterName
+  = lens _comClusterName
+      (\ s a -> s{_comClusterName = a})
+
+-- | [Output-only] The operation type.
+comOperationType :: Lens' ClusterOperationMetadata (Maybe Text)
+comOperationType
+  = lens _comOperationType
+      (\ s a -> s{_comOperationType = a})
+
+-- | [Output-only] The previous operation status.
+comStatusHistory :: Lens' ClusterOperationMetadata [ClusterOperationStatus]
+comStatusHistory
+  = lens _comStatusHistory
+      (\ s a -> s{_comStatusHistory = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] Short description of operation.
+comDescription :: Lens' ClusterOperationMetadata (Maybe Text)
+comDescription
+  = lens _comDescription
+      (\ s a -> s{_comDescription = a})
+
+instance FromJSON ClusterOperationMetadata where
+        parseJSON
+          = withObject "ClusterOperationMetadata"
+              (\ o ->
+                 ClusterOperationMetadata' <$>
+                   (o .:? "status") <*> (o .:? "clusterUuid") <*>
+                     (o .:? "clusterName")
+                     <*> (o .:? "operationType")
+                     <*> (o .:? "statusHistory" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON ClusterOperationMetadata where
+        toJSON ClusterOperationMetadata'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _comStatus,
+                  ("clusterUuid" .=) <$> _comClusterUuid,
+                  ("clusterName" .=) <$> _comClusterName,
+                  ("operationType" .=) <$> _comOperationType,
+                  ("statusHistory" .=) <$> _comStatusHistory,
+                  ("description" .=) <$> _comDescription])
+
+-- | A Cloud Dataproc job for running Spark SQL queries.
+--
+-- /See:/ 'sparkSQLJob' smart constructor.
+data SparkSQLJob = SparkSQLJob'
+    { _ssqljQueryFileURI    :: !(Maybe Text)
+    , _ssqljJarFileURIs     :: !(Maybe [Text])
+    , _ssqljScriptVariables :: !(Maybe SparkSQLJobScriptVariables)
+    , _ssqljQueryList       :: !(Maybe QueryList)
+    , _ssqljLoggingConfig   :: !(Maybe LoggingConfig)
+    , _ssqljProperties      :: !(Maybe SparkSQLJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SparkSQLJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssqljQueryFileURI'
+--
+-- * 'ssqljJarFileURIs'
+--
+-- * 'ssqljScriptVariables'
+--
+-- * 'ssqljQueryList'
+--
+-- * 'ssqljLoggingConfig'
+--
+-- * 'ssqljProperties'
+sparkSQLJob
+    :: SparkSQLJob
+sparkSQLJob =
+    SparkSQLJob'
+    { _ssqljQueryFileURI = Nothing
+    , _ssqljJarFileURIs = Nothing
+    , _ssqljScriptVariables = Nothing
+    , _ssqljQueryList = Nothing
+    , _ssqljLoggingConfig = Nothing
+    , _ssqljProperties = Nothing
+    }
+
+-- | The HCFS URI of the script that contains SQL queries.
+ssqljQueryFileURI :: Lens' SparkSQLJob (Maybe Text)
+ssqljQueryFileURI
+  = lens _ssqljQueryFileURI
+      (\ s a -> s{_ssqljQueryFileURI = a})
+
+-- | [Optional] HCFS URIs of jar files to be added to the Spark CLASSPATH.
+ssqljJarFileURIs :: Lens' SparkSQLJob [Text]
+ssqljJarFileURIs
+  = lens _ssqljJarFileURIs
+      (\ s a -> s{_ssqljJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Spark SQL command: SET \`name=\"value\";\`).
+ssqljScriptVariables :: Lens' SparkSQLJob (Maybe SparkSQLJobScriptVariables)
+ssqljScriptVariables
+  = lens _ssqljScriptVariables
+      (\ s a -> s{_ssqljScriptVariables = a})
+
+-- | A list of queries.
+ssqljQueryList :: Lens' SparkSQLJob (Maybe QueryList)
+ssqljQueryList
+  = lens _ssqljQueryList
+      (\ s a -> s{_ssqljQueryList = a})
+
+-- | [Optional] The runtime log config for job execution.
+ssqljLoggingConfig :: Lens' SparkSQLJob (Maybe LoggingConfig)
+ssqljLoggingConfig
+  = lens _ssqljLoggingConfig
+      (\ s a -> s{_ssqljLoggingConfig = a})
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Spark SQL\'s SparkConf. Properties that conflict with values set by the
+-- Cloud Dataproc API may be overwritten.
+ssqljProperties :: Lens' SparkSQLJob (Maybe SparkSQLJobProperties)
+ssqljProperties
+  = lens _ssqljProperties
+      (\ s a -> s{_ssqljProperties = a})
+
+instance FromJSON SparkSQLJob where
+        parseJSON
+          = withObject "SparkSQLJob"
+              (\ o ->
+                 SparkSQLJob' <$>
+                   (o .:? "queryFileUri") <*>
+                     (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "scriptVariables")
+                     <*> (o .:? "queryList")
+                     <*> (o .:? "loggingConfig")
+                     <*> (o .:? "properties"))
+
+instance ToJSON SparkSQLJob where
+        toJSON SparkSQLJob'{..}
+          = object
+              (catMaybes
+                 [("queryFileUri" .=) <$> _ssqljQueryFileURI,
+                  ("jarFileUris" .=) <$> _ssqljJarFileURIs,
+                  ("scriptVariables" .=) <$> _ssqljScriptVariables,
+                  ("queryList" .=) <$> _ssqljQueryList,
+                  ("loggingConfig" .=) <$> _ssqljLoggingConfig,
+                  ("properties" .=) <$> _ssqljProperties])
+
+-- | Specifies the selection and config of software inside the cluster.
+--
+-- /See:/ 'softwareConfig' smart constructor.
+data SoftwareConfig = SoftwareConfig'
+    { _scImageVersion :: !(Maybe Text)
+    , _scProperties   :: !(Maybe SoftwareConfigProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SoftwareConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scImageVersion'
+--
+-- * 'scProperties'
+softwareConfig
+    :: SoftwareConfig
+softwareConfig =
+    SoftwareConfig'
+    { _scImageVersion = Nothing
+    , _scProperties = Nothing
+    }
+
+-- | [Optional] The version of software inside the cluster. It must match the
+-- regular expression \`[0-9]+\\.[0-9]+\`. If unspecified, it defaults to
+-- the latest version (see [Cloud Dataproc
+-- Versioning](\/dataproc\/versioning)).
+scImageVersion :: Lens' SoftwareConfig (Maybe Text)
+scImageVersion
+  = lens _scImageVersion
+      (\ s a -> s{_scImageVersion = a})
+
+-- | [Optional] The properties to set on daemon config files. Property keys
+-- are specified in \`prefix:property\` format, such as
+-- \`core:fs.defaultFS\`. The following are supported prefixes and their
+-- mappings: * core: \`core-site.xml\` * hdfs: \`hdfs-site.xml\` * mapred:
+-- \`mapred-site.xml\` * yarn: \`yarn-site.xml\` * hive: \`hive-site.xml\`
+-- * pig: \`pig.properties\` * spark: \`spark-defaults.conf\`
+scProperties :: Lens' SoftwareConfig (Maybe SoftwareConfigProperties)
+scProperties
+  = lens _scProperties (\ s a -> s{_scProperties = a})
+
+instance FromJSON SoftwareConfig where
+        parseJSON
+          = withObject "SoftwareConfig"
+              (\ o ->
+                 SoftwareConfig' <$>
+                   (o .:? "imageVersion") <*> (o .:? "properties"))
+
+instance ToJSON SoftwareConfig where
+        toJSON SoftwareConfig'{..}
+          = object
+              (catMaybes
+                 [("imageVersion" .=) <$> _scImageVersion,
+                  ("properties" .=) <$> _scProperties])
+
+-- | A list of jobs in a project.
+--
+-- /See:/ 'listJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+    { _ljrNextPageToken :: !(Maybe Text)
+    , _ljrJobs          :: !(Maybe [Job])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ljrNextPageToken'
+--
+-- * 'ljrJobs'
+listJobsResponse
+    :: ListJobsResponse
+listJobsResponse =
+    ListJobsResponse'
+    { _ljrNextPageToken = Nothing
+    , _ljrJobs = Nothing
+    }
+
+-- | [Optional] This token is included in the response if there are more
+-- results to fetch. To fetch additional results, provide this value as the
+-- \`page_token\` in a subsequent ListJobsRequest.
+ljrNextPageToken :: Lens' ListJobsResponse (Maybe Text)
+ljrNextPageToken
+  = lens _ljrNextPageToken
+      (\ s a -> s{_ljrNextPageToken = a})
+
+-- | [Output-only] Jobs list.
+ljrJobs :: Lens' ListJobsResponse [Job]
+ljrJobs
+  = lens _ljrJobs (\ s a -> s{_ljrJobs = a}) . _Default
+      . _Coerce
+
+instance FromJSON ListJobsResponse where
+        parseJSON
+          = withObject "ListJobsResponse"
+              (\ o ->
+                 ListJobsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "jobs" .!= mempty))
+
+instance ToJSON ListJobsResponse where
+        toJSON ListJobsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ljrNextPageToken,
+                  ("jobs" .=) <$> _ljrJobs])
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- Spark. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/spark\/conf\/spark-defaults.conf and classes in user code.
+--
+-- /See:/ 'sparkJobProperties' smart constructor.
+newtype SparkJobProperties = SparkJobProperties'
+    { _sjpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SparkJobProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sjpAddtional'
+sparkJobProperties
+    :: HashMap Text Text -- ^ 'sjpAddtional'
+    -> SparkJobProperties
+sparkJobProperties pSjpAddtional_ =
+    SparkJobProperties'
+    { _sjpAddtional = _Coerce # pSjpAddtional_
+    }
+
+sjpAddtional :: Lens' SparkJobProperties (HashMap Text Text)
+sjpAddtional
+  = lens _sjpAddtional (\ s a -> s{_sjpAddtional = a})
+      . _Coerce
+
+instance FromJSON SparkJobProperties where
+        parseJSON
+          = withObject "SparkJobProperties"
+              (\ o -> SparkJobProperties' <$> (parseJSONObject o))
+
+instance ToJSON SparkJobProperties where
+        toJSON = toJSON . _sjpAddtional
+
+-- | A Cloud Dataproc job for running PySpark applications on YARN.
+--
+-- /See:/ 'pySparkJob' smart constructor.
+data PySparkJob = PySparkJob'
+    { _psjPythonFileURIs    :: !(Maybe [Text])
+    , _psjMainPythonFileURI :: !(Maybe Text)
+    , _psjArgs              :: !(Maybe [Text])
+    , _psjJarFileURIs       :: !(Maybe [Text])
+    , _psjFileURIs          :: !(Maybe [Text])
+    , _psjArchiveURIs       :: !(Maybe [Text])
+    , _psjLoggingConfig     :: !(Maybe LoggingConfig)
+    , _psjProperties        :: !(Maybe PySparkJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PySparkJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psjPythonFileURIs'
+--
+-- * 'psjMainPythonFileURI'
+--
+-- * 'psjArgs'
+--
+-- * 'psjJarFileURIs'
+--
+-- * 'psjFileURIs'
+--
+-- * 'psjArchiveURIs'
+--
+-- * 'psjLoggingConfig'
+--
+-- * 'psjProperties'
+pySparkJob
+    :: PySparkJob
+pySparkJob =
+    PySparkJob'
+    { _psjPythonFileURIs = Nothing
+    , _psjMainPythonFileURI = Nothing
+    , _psjArgs = Nothing
+    , _psjJarFileURIs = Nothing
+    , _psjFileURIs = Nothing
+    , _psjArchiveURIs = Nothing
+    , _psjLoggingConfig = Nothing
+    , _psjProperties = Nothing
+    }
+
+-- | [Optional] HCFS file URIs of Python files to pass to the PySpark
+-- framework. Supported file types: .py, .egg, and .zip.
+psjPythonFileURIs :: Lens' PySparkJob [Text]
+psjPythonFileURIs
+  = lens _psjPythonFileURIs
+      (\ s a -> s{_psjPythonFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Required] The HCFS URI of the main Python file to use as the driver.
+-- Must be a .py file.
+psjMainPythonFileURI :: Lens' PySparkJob (Maybe Text)
+psjMainPythonFileURI
+  = lens _psjMainPythonFileURI
+      (\ s a -> s{_psjMainPythonFileURI = a})
+
+-- | [Optional] The arguments to pass to the driver. Do not include
+-- arguments, such as \`--conf\`, that can be set as job properties, since
+-- a collision may occur that causes an incorrect job submission.
+psjArgs :: Lens' PySparkJob [Text]
+psjArgs
+  = lens _psjArgs (\ s a -> s{_psjArgs = a}) . _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the Python
+-- driver and tasks.
+psjJarFileURIs :: Lens' PySparkJob [Text]
+psjJarFileURIs
+  = lens _psjJarFileURIs
+      (\ s a -> s{_psjJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of files to be copied to the working directory of
+-- Python drivers and distributed tasks. Useful for naively parallel tasks.
+psjFileURIs :: Lens' PySparkJob [Text]
+psjFileURIs
+  = lens _psjFileURIs (\ s a -> s{_psjFileURIs = a}) .
+      _Default
+      . _Coerce
+
+-- | [Optional] HCFS URIs of archives to be extracted in the working
+-- directory of .jar, .tar, .tar.gz, .tgz, and .zip.
+psjArchiveURIs :: Lens' PySparkJob [Text]
+psjArchiveURIs
+  = lens _psjArchiveURIs
+      (\ s a -> s{_psjArchiveURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] The runtime log config for job execution.
+psjLoggingConfig :: Lens' PySparkJob (Maybe LoggingConfig)
+psjLoggingConfig
+  = lens _psjLoggingConfig
+      (\ s a -> s{_psjLoggingConfig = a})
+
+-- | [Optional] A mapping of property names to values, used to configure
+-- PySpark. Properties that conflict with values set by the Cloud Dataproc
+-- API may be overwritten. Can include properties set in
+-- \/etc\/spark\/conf\/spark-defaults.conf and classes in user code.
+psjProperties :: Lens' PySparkJob (Maybe PySparkJobProperties)
+psjProperties
+  = lens _psjProperties
+      (\ s a -> s{_psjProperties = a})
+
+instance FromJSON PySparkJob where
+        parseJSON
+          = withObject "PySparkJob"
+              (\ o ->
+                 PySparkJob' <$>
+                   (o .:? "pythonFileUris" .!= mempty) <*>
+                     (o .:? "mainPythonFileUri")
+                     <*> (o .:? "args" .!= mempty)
+                     <*> (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "fileUris" .!= mempty)
+                     <*> (o .:? "archiveUris" .!= mempty)
+                     <*> (o .:? "loggingConfig")
+                     <*> (o .:? "properties"))
+
+instance ToJSON PySparkJob where
+        toJSON PySparkJob'{..}
+          = object
+              (catMaybes
+                 [("pythonFileUris" .=) <$> _psjPythonFileURIs,
+                  ("mainPythonFileUri" .=) <$> _psjMainPythonFileURI,
+                  ("args" .=) <$> _psjArgs,
+                  ("jarFileUris" .=) <$> _psjJarFileURIs,
+                  ("fileUris" .=) <$> _psjFileURIs,
+                  ("archiveUris" .=) <$> _psjArchiveURIs,
+                  ("loggingConfig" .=) <$> _psjLoggingConfig,
+                  ("properties" .=) <$> _psjProperties])
+
+-- | Specifies the resources used to actively manage an instance group.
+--
+-- /See:/ 'managedGroupConfig' smart constructor.
+data ManagedGroupConfig = ManagedGroupConfig'
+    { _mgcInstanceTemplateName     :: !(Maybe Text)
+    , _mgcInstanceGroupManagerName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedGroupConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mgcInstanceTemplateName'
+--
+-- * 'mgcInstanceGroupManagerName'
+managedGroupConfig
+    :: ManagedGroupConfig
+managedGroupConfig =
+    ManagedGroupConfig'
+    { _mgcInstanceTemplateName = Nothing
+    , _mgcInstanceGroupManagerName = Nothing
+    }
+
+-- | [Output-only] The name of the Instance Template used for the Managed
+-- Instance Group.
+mgcInstanceTemplateName :: Lens' ManagedGroupConfig (Maybe Text)
+mgcInstanceTemplateName
+  = lens _mgcInstanceTemplateName
+      (\ s a -> s{_mgcInstanceTemplateName = a})
+
+-- | [Output-only] The name of the Instance Group Manager for this group.
+mgcInstanceGroupManagerName :: Lens' ManagedGroupConfig (Maybe Text)
+mgcInstanceGroupManagerName
+  = lens _mgcInstanceGroupManagerName
+      (\ s a -> s{_mgcInstanceGroupManagerName = a})
+
+instance FromJSON ManagedGroupConfig where
+        parseJSON
+          = withObject "ManagedGroupConfig"
+              (\ o ->
+                 ManagedGroupConfig' <$>
+                   (o .:? "instanceTemplateName") <*>
+                     (o .:? "instanceGroupManagerName"))
+
+instance ToJSON ManagedGroupConfig where
+        toJSON ManagedGroupConfig'{..}
+          = object
+              (catMaybes
+                 [("instanceTemplateName" .=) <$>
+                    _mgcInstanceTemplateName,
+                  ("instanceGroupManagerName" .=) <$>
+                    _mgcInstanceGroupManagerName])
+
+-- | The list of all clusters in a project.
+--
+-- /See:/ 'listClustersResponse' smart constructor.
+data ListClustersResponse = ListClustersResponse'
+    { _lcrNextPageToken :: !(Maybe Text)
+    , _lcrClusters      :: !(Maybe [Cluster])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListClustersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcrNextPageToken'
+--
+-- * 'lcrClusters'
+listClustersResponse
+    :: ListClustersResponse
+listClustersResponse =
+    ListClustersResponse'
+    { _lcrNextPageToken = Nothing
+    , _lcrClusters = Nothing
+    }
+
+-- | [Optional] This token is included in the response if there are more
+-- results to fetch. To fetch additional results, provide this value as the
+-- \`page_token\` in a subsequent ListClustersRequest.
+lcrNextPageToken :: Lens' ListClustersResponse (Maybe Text)
+lcrNextPageToken
+  = lens _lcrNextPageToken
+      (\ s a -> s{_lcrNextPageToken = a})
+
+-- | [Output-only] The clusters in the project.
+lcrClusters :: Lens' ListClustersResponse [Cluster]
+lcrClusters
+  = lens _lcrClusters (\ s a -> s{_lcrClusters = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListClustersResponse where
+        parseJSON
+          = withObject "ListClustersResponse"
+              (\ o ->
+                 ListClustersResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "clusters" .!= mempty))
+
+instance ToJSON ListClustersResponse where
+        toJSON ListClustersResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lcrNextPageToken,
+                  ("clusters" .=) <$> _lcrClusters])
+
+-- | A request to cancel a job.
+--
+-- /See:/ 'cancelJobRequest' smart constructor.
+data CancelJobRequest =
+    CancelJobRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelJobRequest' with the minimum fields required to make a request.
+--
+cancelJobRequest
+    :: CancelJobRequest
+cancelJobRequest = CancelJobRequest'
+
+instance FromJSON CancelJobRequest where
+        parseJSON
+          = withObject "CancelJobRequest"
+              (\ o -> pure CancelJobRequest')
+
+instance ToJSON CancelJobRequest where
+        toJSON = const emptyObject
+
+-- | A list of queries to run on a cluster.
+--
+-- /See:/ 'queryList' smart constructor.
+newtype QueryList = QueryList'
+    { _qlQueries :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'QueryList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qlQueries'
+queryList
+    :: QueryList
+queryList =
+    QueryList'
+    { _qlQueries = Nothing
+    }
+
+-- | [Required] The queries to execute. You do not need to terminate a query
+-- with a semicolon. Multiple queries can be specified in one string by
+-- separating each with a semicolon. Here is an example of an Cloud
+-- Dataproc API snippet that uses a QueryList to specify a HiveJob:
+-- \"hiveJob\": { \"queryList\": { \"queries\": [ \"query1\", \"query2\",
+-- \"query3;query4\", ] } }
+qlQueries :: Lens' QueryList [Text]
+qlQueries
+  = lens _qlQueries (\ s a -> s{_qlQueries = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON QueryList where
+        parseJSON
+          = withObject "QueryList"
+              (\ o -> QueryList' <$> (o .:? "queries" .!= mempty))
+
+instance ToJSON QueryList where
+        toJSON QueryList'{..}
+          = object (catMaybes [("queries" .=) <$> _qlQueries])
+
+-- | Metadata describing the operation.
+--
+-- /See:/ 'operationMetadata' smart constructor.
+data OperationMetadata = OperationMetadata'
+    { _omStatus        :: !(Maybe OperationStatus)
+    , _omState         :: !(Maybe Text)
+    , _omClusterUuid   :: !(Maybe Text)
+    , _omInsertTime    :: !(Maybe Text)
+    , _omStartTime     :: !(Maybe Text)
+    , _omInnerState    :: !(Maybe Text)
+    , _omEndTime       :: !(Maybe Text)
+    , _omDetails       :: !(Maybe Text)
+    , _omClusterName   :: !(Maybe Text)
+    , _omOperationType :: !(Maybe Text)
+    , _omStatusHistory :: !(Maybe [OperationStatus])
+    , _omDescription   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omStatus'
+--
+-- * 'omState'
+--
+-- * 'omClusterUuid'
+--
+-- * 'omInsertTime'
+--
+-- * 'omStartTime'
+--
+-- * 'omInnerState'
+--
+-- * 'omEndTime'
+--
+-- * 'omDetails'
+--
+-- * 'omClusterName'
+--
+-- * 'omOperationType'
+--
+-- * 'omStatusHistory'
+--
+-- * 'omDescription'
+operationMetadata
+    :: OperationMetadata
+operationMetadata =
+    OperationMetadata'
+    { _omStatus = Nothing
+    , _omState = Nothing
+    , _omClusterUuid = Nothing
+    , _omInsertTime = Nothing
+    , _omStartTime = Nothing
+    , _omInnerState = Nothing
+    , _omEndTime = Nothing
+    , _omDetails = Nothing
+    , _omClusterName = Nothing
+    , _omOperationType = Nothing
+    , _omStatusHistory = Nothing
+    , _omDescription = Nothing
+    }
+
+-- | [Output-only] Current operation status.
+omStatus :: Lens' OperationMetadata (Maybe OperationStatus)
+omStatus = lens _omStatus (\ s a -> s{_omStatus = a})
+
+-- | A message containing the operation state.
+omState :: Lens' OperationMetadata (Maybe Text)
+omState = lens _omState (\ s a -> s{_omState = a})
+
+-- | Cluster UUId for the operation.
+omClusterUuid :: Lens' OperationMetadata (Maybe Text)
+omClusterUuid
+  = lens _omClusterUuid
+      (\ s a -> s{_omClusterUuid = a})
+
+-- | The time that the operation was requested.
+omInsertTime :: Lens' OperationMetadata (Maybe Text)
+omInsertTime
+  = lens _omInsertTime (\ s a -> s{_omInsertTime = a})
+
+-- | The time that the operation was started by the server.
+omStartTime :: Lens' OperationMetadata (Maybe Text)
+omStartTime
+  = lens _omStartTime (\ s a -> s{_omStartTime = a})
+
+-- | A message containing the detailed operation state.
+omInnerState :: Lens' OperationMetadata (Maybe Text)
+omInnerState
+  = lens _omInnerState (\ s a -> s{_omInnerState = a})
+
+-- | The time that the operation completed.
+omEndTime :: Lens' OperationMetadata (Maybe Text)
+omEndTime
+  = lens _omEndTime (\ s a -> s{_omEndTime = a})
+
+-- | A message containing any operation metadata details.
+omDetails :: Lens' OperationMetadata (Maybe Text)
+omDetails
+  = lens _omDetails (\ s a -> s{_omDetails = a})
+
+-- | Name of the cluster for the operation.
+omClusterName :: Lens' OperationMetadata (Maybe Text)
+omClusterName
+  = lens _omClusterName
+      (\ s a -> s{_omClusterName = a})
+
+-- | [Output-only] The operation type.
+omOperationType :: Lens' OperationMetadata (Maybe Text)
+omOperationType
+  = lens _omOperationType
+      (\ s a -> s{_omOperationType = a})
+
+-- | [Output-only] Previous operation status.
+omStatusHistory :: Lens' OperationMetadata [OperationStatus]
+omStatusHistory
+  = lens _omStatusHistory
+      (\ s a -> s{_omStatusHistory = a})
+      . _Default
+      . _Coerce
+
+-- | [Output-only] Short description of operation.
+omDescription :: Lens' OperationMetadata (Maybe Text)
+omDescription
+  = lens _omDescription
+      (\ s a -> s{_omDescription = a})
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o ->
+                 OperationMetadata' <$>
+                   (o .:? "status") <*> (o .:? "state") <*>
+                     (o .:? "clusterUuid")
+                     <*> (o .:? "insertTime")
+                     <*> (o .:? "startTime")
+                     <*> (o .:? "innerState")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "details")
+                     <*> (o .:? "clusterName")
+                     <*> (o .:? "operationType")
+                     <*> (o .:? "statusHistory" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON OperationMetadata where
+        toJSON OperationMetadata'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _omStatus,
+                  ("state" .=) <$> _omState,
+                  ("clusterUuid" .=) <$> _omClusterUuid,
+                  ("insertTime" .=) <$> _omInsertTime,
+                  ("startTime" .=) <$> _omStartTime,
+                  ("innerState" .=) <$> _omInnerState,
+                  ("endTime" .=) <$> _omEndTime,
+                  ("details" .=) <$> _omDetails,
+                  ("clusterName" .=) <$> _omClusterName,
+                  ("operationType" .=) <$> _omOperationType,
+                  ("statusHistory" .=) <$> _omStatusHistory,
+                  ("description" .=) <$> _omDescription])
+
+-- | Cloud Dataproc job status.
+--
+-- /See:/ 'jobStatus' smart constructor.
+data JobStatus = JobStatus'
+    { _jsState          :: !(Maybe Text)
+    , _jsStateStartTime :: !(Maybe Text)
+    , _jsDetails        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'JobStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jsState'
+--
+-- * 'jsStateStartTime'
+--
+-- * 'jsDetails'
+jobStatus
+    :: JobStatus
+jobStatus =
+    JobStatus'
+    { _jsState = Nothing
+    , _jsStateStartTime = Nothing
+    , _jsDetails = Nothing
+    }
+
+-- | [Required] A state message specifying the overall job state.
+jsState :: Lens' JobStatus (Maybe Text)
+jsState = lens _jsState (\ s a -> s{_jsState = a})
+
+-- | [Output-only] The time when this state was entered.
+jsStateStartTime :: Lens' JobStatus (Maybe Text)
+jsStateStartTime
+  = lens _jsStateStartTime
+      (\ s a -> s{_jsStateStartTime = a})
+
+-- | [Optional] Job state details, such as an error description if the state
+-- is ERROR.
+jsDetails :: Lens' JobStatus (Maybe Text)
+jsDetails
+  = lens _jsDetails (\ s a -> s{_jsDetails = a})
+
+instance FromJSON JobStatus where
+        parseJSON
+          = withObject "JobStatus"
+              (\ o ->
+                 JobStatus' <$>
+                   (o .:? "state") <*> (o .:? "stateStartTime") <*>
+                     (o .:? "details"))
+
+instance ToJSON JobStatus where
+        toJSON JobStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _jsState,
+                  ("stateStartTime" .=) <$> _jsStateStartTime,
+                  ("details" .=) <$> _jsDetails])
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Pig command: \`name=[value]\`).
+--
+-- /See:/ 'pigJobScriptVariables' smart constructor.
+newtype PigJobScriptVariables = PigJobScriptVariables'
+    { _pjsvAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PigJobScriptVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pjsvAddtional'
+pigJobScriptVariables
+    :: HashMap Text Text -- ^ 'pjsvAddtional'
+    -> PigJobScriptVariables
+pigJobScriptVariables pPjsvAddtional_ =
+    PigJobScriptVariables'
+    { _pjsvAddtional = _Coerce # pPjsvAddtional_
+    }
+
+pjsvAddtional :: Lens' PigJobScriptVariables (HashMap Text Text)
+pjsvAddtional
+  = lens _pjsvAddtional
+      (\ s a -> s{_pjsvAddtional = a})
+      . _Coerce
+
+instance FromJSON PigJobScriptVariables where
+        parseJSON
+          = withObject "PigJobScriptVariables"
+              (\ o ->
+                 PigJobScriptVariables' <$> (parseJSONObject o))
+
+instance ToJSON PigJobScriptVariables where
+        toJSON = toJSON . _pjsvAddtional
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+--
+-- /See:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse'
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse'
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'ype with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse' <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | The per-package log levels for the driver. This may include \"root\"
+-- package name to configure rootLogger. Examples: \'com.google = FATAL\',
+-- \'root = INFO\', \'org.apache = DEBUG\'
+--
+-- /See:/ 'loggingConfigDriverLogLevels' smart constructor.
+newtype LoggingConfigDriverLogLevels = LoggingConfigDriverLogLevels'
+    { _lcdllAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LoggingConfigDriverLogLevels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcdllAddtional'
+loggingConfigDriverLogLevels
+    :: HashMap Text Text -- ^ 'lcdllAddtional'
+    -> LoggingConfigDriverLogLevels
+loggingConfigDriverLogLevels pLcdllAddtional_ =
+    LoggingConfigDriverLogLevels'
+    { _lcdllAddtional = _Coerce # pLcdllAddtional_
+    }
+
+lcdllAddtional :: Lens' LoggingConfigDriverLogLevels (HashMap Text Text)
+lcdllAddtional
+  = lens _lcdllAddtional
+      (\ s a -> s{_lcdllAddtional = a})
+      . _Coerce
+
+instance FromJSON LoggingConfigDriverLogLevels where
+        parseJSON
+          = withObject "LoggingConfigDriverLogLevels"
+              (\ o ->
+                 LoggingConfigDriverLogLevels' <$>
+                   (parseJSONObject o))
+
+instance ToJSON LoggingConfigDriverLogLevels where
+        toJSON = toJSON . _lcdllAddtional
+
+-- | The status of a cluster and its instances.
+--
+-- /See:/ 'clusterStatus' smart constructor.
+data ClusterStatus = ClusterStatus'
+    { _csState          :: !(Maybe Text)
+    , _csStateStartTime :: !(Maybe Text)
+    , _csDetail         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClusterStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csState'
+--
+-- * 'csStateStartTime'
+--
+-- * 'csDetail'
+clusterStatus
+    :: ClusterStatus
+clusterStatus =
+    ClusterStatus'
+    { _csState = Nothing
+    , _csStateStartTime = Nothing
+    , _csDetail = Nothing
+    }
+
+-- | The cluster\'s state.
+csState :: Lens' ClusterStatus (Maybe Text)
+csState = lens _csState (\ s a -> s{_csState = a})
+
+-- | Time when this state was entered.
+csStateStartTime :: Lens' ClusterStatus (Maybe Text)
+csStateStartTime
+  = lens _csStateStartTime
+      (\ s a -> s{_csStateStartTime = a})
+
+-- | Optional details of cluster\'s state.
+csDetail :: Lens' ClusterStatus (Maybe Text)
+csDetail = lens _csDetail (\ s a -> s{_csDetail = a})
+
+instance FromJSON ClusterStatus where
+        parseJSON
+          = withObject "ClusterStatus"
+              (\ o ->
+                 ClusterStatus' <$>
+                   (o .:? "state") <*> (o .:? "stateStartTime") <*>
+                     (o .:? "detail"))
+
+instance ToJSON ClusterStatus where
+        toJSON ClusterStatus'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _csState,
+                  ("stateStartTime" .=) <$> _csStateStartTime,
+                  ("detail" .=) <$> _csDetail])
+
+-- | A Cloud Dataproc job for running Pig queries on YARN.
+--
+-- /See:/ 'pigJob' smart constructor.
+data PigJob = PigJob'
+    { _pjQueryFileURI      :: !(Maybe Text)
+    , _pjJarFileURIs       :: !(Maybe [Text])
+    , _pjScriptVariables   :: !(Maybe PigJobScriptVariables)
+    , _pjQueryList         :: !(Maybe QueryList)
+    , _pjContinueOnFailure :: !(Maybe Bool)
+    , _pjLoggingConfig     :: !(Maybe LoggingConfig)
+    , _pjProperties        :: !(Maybe PigJobProperties)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PigJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pjQueryFileURI'
+--
+-- * 'pjJarFileURIs'
+--
+-- * 'pjScriptVariables'
+--
+-- * 'pjQueryList'
+--
+-- * 'pjContinueOnFailure'
+--
+-- * 'pjLoggingConfig'
+--
+-- * 'pjProperties'
+pigJob
+    :: PigJob
+pigJob =
+    PigJob'
+    { _pjQueryFileURI = Nothing
+    , _pjJarFileURIs = Nothing
+    , _pjScriptVariables = Nothing
+    , _pjQueryList = Nothing
+    , _pjContinueOnFailure = Nothing
+    , _pjLoggingConfig = Nothing
+    , _pjProperties = Nothing
+    }
+
+-- | The HCFS URI of the script that contains the Pig queries.
+pjQueryFileURI :: Lens' PigJob (Maybe Text)
+pjQueryFileURI
+  = lens _pjQueryFileURI
+      (\ s a -> s{_pjQueryFileURI = a})
+
+-- | [Optional] HCFS URIs of jar files to add to the CLASSPATH of the Pig
+-- Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.
+pjJarFileURIs :: Lens' PigJob [Text]
+pjJarFileURIs
+  = lens _pjJarFileURIs
+      (\ s a -> s{_pjJarFileURIs = a})
+      . _Default
+      . _Coerce
+
+-- | [Optional] Mapping of query variable names to values (equivalent to the
+-- Pig command: \`name=[value]\`).
+pjScriptVariables :: Lens' PigJob (Maybe PigJobScriptVariables)
+pjScriptVariables
+  = lens _pjScriptVariables
+      (\ s a -> s{_pjScriptVariables = a})
+
+-- | A list of queries.
+pjQueryList :: Lens' PigJob (Maybe QueryList)
+pjQueryList
+  = lens _pjQueryList (\ s a -> s{_pjQueryList = a})
+
+-- | [Optional] Whether to continue executing queries if a query fails. The
+-- default value is \`false\`. Setting to \`true\` can be useful when
+-- executing independent parallel queries.
+pjContinueOnFailure :: Lens' PigJob (Maybe Bool)
+pjContinueOnFailure
+  = lens _pjContinueOnFailure
+      (\ s a -> s{_pjContinueOnFailure = a})
+
+-- | [Optional] The runtime log config for job execution.
+pjLoggingConfig :: Lens' PigJob (Maybe LoggingConfig)
+pjLoggingConfig
+  = lens _pjLoggingConfig
+      (\ s a -> s{_pjLoggingConfig = a})
+
+-- | [Optional] A mapping of property names to values, used to configure Pig.
+-- Properties that conflict with values set by the Cloud Dataproc API may
+-- be overwritten. Can include properties set in
+-- \/etc\/hadoop\/conf\/*-site.xml, \/etc\/pig\/conf\/pig.properties, and
+-- classes in user code.
+pjProperties :: Lens' PigJob (Maybe PigJobProperties)
+pjProperties
+  = lens _pjProperties (\ s a -> s{_pjProperties = a})
+
+instance FromJSON PigJob where
+        parseJSON
+          = withObject "PigJob"
+              (\ o ->
+                 PigJob' <$>
+                   (o .:? "queryFileUri") <*>
+                     (o .:? "jarFileUris" .!= mempty)
+                     <*> (o .:? "scriptVariables")
+                     <*> (o .:? "queryList")
+                     <*> (o .:? "continueOnFailure")
+                     <*> (o .:? "loggingConfig")
+                     <*> (o .:? "properties"))
+
+instance ToJSON PigJob where
+        toJSON PigJob'{..}
+          = object
+              (catMaybes
+                 [("queryFileUri" .=) <$> _pjQueryFileURI,
+                  ("jarFileUris" .=) <$> _pjJarFileURIs,
+                  ("scriptVariables" .=) <$> _pjScriptVariables,
+                  ("queryList" .=) <$> _pjQueryList,
+                  ("continueOnFailure" .=) <$> _pjContinueOnFailure,
+                  ("loggingConfig" .=) <$> _pjLoggingConfig,
+                  ("properties" .=) <$> _pjProperties])
+
+-- | The runtime logging config of the job.
+--
+-- /See:/ 'loggingConfig' smart constructor.
+newtype LoggingConfig = LoggingConfig'
+    { _lcDriverLogLevels :: Maybe LoggingConfigDriverLogLevels
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LoggingConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcDriverLogLevels'
+loggingConfig
+    :: LoggingConfig
+loggingConfig =
+    LoggingConfig'
+    { _lcDriverLogLevels = Nothing
+    }
+
+-- | The per-package log levels for the driver. This may include \"root\"
+-- package name to configure rootLogger. Examples: \'com.google = FATAL\',
+-- \'root = INFO\', \'org.apache = DEBUG\'
+lcDriverLogLevels :: Lens' LoggingConfig (Maybe LoggingConfigDriverLogLevels)
+lcDriverLogLevels
+  = lens _lcDriverLogLevels
+      (\ s a -> s{_lcDriverLogLevels = a})
+
+instance FromJSON LoggingConfig where
+        parseJSON
+          = withObject "LoggingConfig"
+              (\ o -> LoggingConfig' <$> (o .:? "driverLogLevels"))
+
+instance ToJSON LoggingConfig where
+        toJSON LoggingConfig'{..}
+          = object
+              (catMaybes
+                 [("driverLogLevels" .=) <$> _lcDriverLogLevels])
diff --git a/gen/Network/Google/Dataproc/Types/Sum.hs b/gen/Network/Google/Dataproc/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Dataproc/Types/Sum.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Dataproc.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Dataproc.Types.Sum where
+
+import           Network.Google.Prelude
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Create.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Create.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a cluster in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.create@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Create
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersCreateResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersCreate
+    , ProjectsRegionsClustersCreate
+
+    -- * Request Lenses
+    , prccXgafv
+    , prccUploadProtocol
+    , prccPp
+    , prccAccessToken
+    , prccUploadType
+    , prccPayload
+    , prccBearerToken
+    , prccRegion
+    , prccProjectId
+    , prccCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.create@ method which the
+-- 'ProjectsRegionsClustersCreate' request conforms to.
+type ProjectsRegionsClustersCreateResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 QueryParam "$.xgafv" Text :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "pp" Bool :>
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 ReqBody '[JSON] Cluster :>
+                                   Post '[JSON] Operation
+
+-- | Creates a cluster in a project.
+--
+-- /See:/ 'projectsRegionsClustersCreate' smart constructor.
+data ProjectsRegionsClustersCreate = ProjectsRegionsClustersCreate'
+    { _prccXgafv          :: !(Maybe Text)
+    , _prccUploadProtocol :: !(Maybe Text)
+    , _prccPp             :: !Bool
+    , _prccAccessToken    :: !(Maybe Text)
+    , _prccUploadType     :: !(Maybe Text)
+    , _prccPayload        :: !Cluster
+    , _prccBearerToken    :: !(Maybe Text)
+    , _prccRegion         :: !Text
+    , _prccProjectId      :: !Text
+    , _prccCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prccXgafv'
+--
+-- * 'prccUploadProtocol'
+--
+-- * 'prccPp'
+--
+-- * 'prccAccessToken'
+--
+-- * 'prccUploadType'
+--
+-- * 'prccPayload'
+--
+-- * 'prccBearerToken'
+--
+-- * 'prccRegion'
+--
+-- * 'prccProjectId'
+--
+-- * 'prccCallback'
+projectsRegionsClustersCreate
+    :: Cluster -- ^ 'prccPayload'
+    -> Text -- ^ 'prccRegion'
+    -> Text -- ^ 'prccProjectId'
+    -> ProjectsRegionsClustersCreate
+projectsRegionsClustersCreate pPrccPayload_ pPrccRegion_ pPrccProjectId_ =
+    ProjectsRegionsClustersCreate'
+    { _prccXgafv = Nothing
+    , _prccUploadProtocol = Nothing
+    , _prccPp = True
+    , _prccAccessToken = Nothing
+    , _prccUploadType = Nothing
+    , _prccPayload = pPrccPayload_
+    , _prccBearerToken = Nothing
+    , _prccRegion = pPrccRegion_
+    , _prccProjectId = pPrccProjectId_
+    , _prccCallback = Nothing
+    }
+
+-- | V1 error format.
+prccXgafv :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccXgafv
+  = lens _prccXgafv (\ s a -> s{_prccXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prccUploadProtocol :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccUploadProtocol
+  = lens _prccUploadProtocol
+      (\ s a -> s{_prccUploadProtocol = a})
+
+-- | Pretty-print response.
+prccPp :: Lens' ProjectsRegionsClustersCreate Bool
+prccPp = lens _prccPp (\ s a -> s{_prccPp = a})
+
+-- | OAuth access token.
+prccAccessToken :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccAccessToken
+  = lens _prccAccessToken
+      (\ s a -> s{_prccAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prccUploadType :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccUploadType
+  = lens _prccUploadType
+      (\ s a -> s{_prccUploadType = a})
+
+-- | Multipart request metadata.
+prccPayload :: Lens' ProjectsRegionsClustersCreate Cluster
+prccPayload
+  = lens _prccPayload (\ s a -> s{_prccPayload = a})
+
+-- | OAuth bearer token.
+prccBearerToken :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccBearerToken
+  = lens _prccBearerToken
+      (\ s a -> s{_prccBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prccRegion :: Lens' ProjectsRegionsClustersCreate Text
+prccRegion
+  = lens _prccRegion (\ s a -> s{_prccRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the cluster
+-- belongs to.
+prccProjectId :: Lens' ProjectsRegionsClustersCreate Text
+prccProjectId
+  = lens _prccProjectId
+      (\ s a -> s{_prccProjectId = a})
+
+-- | JSONP
+prccCallback :: Lens' ProjectsRegionsClustersCreate (Maybe Text)
+prccCallback
+  = lens _prccCallback (\ s a -> s{_prccCallback = a})
+
+instance GoogleRequest ProjectsRegionsClustersCreate
+         where
+        type Rs ProjectsRegionsClustersCreate = Operation
+        type Scopes ProjectsRegionsClustersCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersCreate'{..}
+          = go _prccProjectId _prccRegion _prccXgafv
+              _prccUploadProtocol
+              (Just _prccPp)
+              _prccAccessToken
+              _prccUploadType
+              _prccBearerToken
+              _prccCallback
+              (Just AltJSON)
+              _prccPayload
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsClustersCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Delete.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Delete.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a cluster in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.delete@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Delete
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersDeleteResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersDelete
+    , ProjectsRegionsClustersDelete
+
+    -- * Request Lenses
+    , prcdXgafv
+    , prcdUploadProtocol
+    , prcdPp
+    , prcdAccessToken
+    , prcdUploadType
+    , prcdBearerToken
+    , prcdClusterName
+    , prcdRegion
+    , prcdProjectId
+    , prcdCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.delete@ method which the
+-- 'ProjectsRegionsClustersDelete' request conforms to.
+type ProjectsRegionsClustersDeleteResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 Capture "clusterName" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Delete '[JSON] Operation
+
+-- | Deletes a cluster in a project.
+--
+-- /See:/ 'projectsRegionsClustersDelete' smart constructor.
+data ProjectsRegionsClustersDelete = ProjectsRegionsClustersDelete'
+    { _prcdXgafv          :: !(Maybe Text)
+    , _prcdUploadProtocol :: !(Maybe Text)
+    , _prcdPp             :: !Bool
+    , _prcdAccessToken    :: !(Maybe Text)
+    , _prcdUploadType     :: !(Maybe Text)
+    , _prcdBearerToken    :: !(Maybe Text)
+    , _prcdClusterName    :: !Text
+    , _prcdRegion         :: !Text
+    , _prcdProjectId      :: !Text
+    , _prcdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prcdXgafv'
+--
+-- * 'prcdUploadProtocol'
+--
+-- * 'prcdPp'
+--
+-- * 'prcdAccessToken'
+--
+-- * 'prcdUploadType'
+--
+-- * 'prcdBearerToken'
+--
+-- * 'prcdClusterName'
+--
+-- * 'prcdRegion'
+--
+-- * 'prcdProjectId'
+--
+-- * 'prcdCallback'
+projectsRegionsClustersDelete
+    :: Text -- ^ 'prcdClusterName'
+    -> Text -- ^ 'prcdRegion'
+    -> Text -- ^ 'prcdProjectId'
+    -> ProjectsRegionsClustersDelete
+projectsRegionsClustersDelete pPrcdClusterName_ pPrcdRegion_ pPrcdProjectId_ =
+    ProjectsRegionsClustersDelete'
+    { _prcdXgafv = Nothing
+    , _prcdUploadProtocol = Nothing
+    , _prcdPp = True
+    , _prcdAccessToken = Nothing
+    , _prcdUploadType = Nothing
+    , _prcdBearerToken = Nothing
+    , _prcdClusterName = pPrcdClusterName_
+    , _prcdRegion = pPrcdRegion_
+    , _prcdProjectId = pPrcdProjectId_
+    , _prcdCallback = Nothing
+    }
+
+-- | V1 error format.
+prcdXgafv :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdXgafv
+  = lens _prcdXgafv (\ s a -> s{_prcdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prcdUploadProtocol :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdUploadProtocol
+  = lens _prcdUploadProtocol
+      (\ s a -> s{_prcdUploadProtocol = a})
+
+-- | Pretty-print response.
+prcdPp :: Lens' ProjectsRegionsClustersDelete Bool
+prcdPp = lens _prcdPp (\ s a -> s{_prcdPp = a})
+
+-- | OAuth access token.
+prcdAccessToken :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdAccessToken
+  = lens _prcdAccessToken
+      (\ s a -> s{_prcdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prcdUploadType :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdUploadType
+  = lens _prcdUploadType
+      (\ s a -> s{_prcdUploadType = a})
+
+-- | OAuth bearer token.
+prcdBearerToken :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdBearerToken
+  = lens _prcdBearerToken
+      (\ s a -> s{_prcdBearerToken = a})
+
+-- | [Required] The cluster name.
+prcdClusterName :: Lens' ProjectsRegionsClustersDelete Text
+prcdClusterName
+  = lens _prcdClusterName
+      (\ s a -> s{_prcdClusterName = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prcdRegion :: Lens' ProjectsRegionsClustersDelete Text
+prcdRegion
+  = lens _prcdRegion (\ s a -> s{_prcdRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the cluster
+-- belongs to.
+prcdProjectId :: Lens' ProjectsRegionsClustersDelete Text
+prcdProjectId
+  = lens _prcdProjectId
+      (\ s a -> s{_prcdProjectId = a})
+
+-- | JSONP
+prcdCallback :: Lens' ProjectsRegionsClustersDelete (Maybe Text)
+prcdCallback
+  = lens _prcdCallback (\ s a -> s{_prcdCallback = a})
+
+instance GoogleRequest ProjectsRegionsClustersDelete
+         where
+        type Rs ProjectsRegionsClustersDelete = Operation
+        type Scopes ProjectsRegionsClustersDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersDelete'{..}
+          = go _prcdProjectId _prcdRegion _prcdClusterName
+              _prcdXgafv
+              _prcdUploadProtocol
+              (Just _prcdPp)
+              _prcdAccessToken
+              _prcdUploadType
+              _prcdBearerToken
+              _prcdCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsClustersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Diagnose.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Diagnose.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Diagnose.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Diagnose
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets cluster diagnostic information. After the operation completes, the
+-- Operation.response field contains \`DiagnoseClusterOutputLocation\`.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.diagnose@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Diagnose
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersDiagnoseResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersDiagnose
+    , ProjectsRegionsClustersDiagnose
+
+    -- * Request Lenses
+    , pXgafv
+    , pUploadProtocol
+    , pPp
+    , pAccessToken
+    , pUploadType
+    , pPayload
+    , pBearerToken
+    , pClusterName
+    , pRegion
+    , pProjectId
+    , pCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.diagnose@ method which the
+-- 'ProjectsRegionsClustersDiagnose' request conforms to.
+type ProjectsRegionsClustersDiagnoseResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 CaptureMode "clusterName" "diagnose" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON] DiagnoseClusterRequest :>
+                                     Post '[JSON] Operation
+
+-- | Gets cluster diagnostic information. After the operation completes, the
+-- Operation.response field contains \`DiagnoseClusterOutputLocation\`.
+--
+-- /See:/ 'projectsRegionsClustersDiagnose' smart constructor.
+data ProjectsRegionsClustersDiagnose = ProjectsRegionsClustersDiagnose'
+    { _pXgafv          :: !(Maybe Text)
+    , _pUploadProtocol :: !(Maybe Text)
+    , _pPp             :: !Bool
+    , _pAccessToken    :: !(Maybe Text)
+    , _pUploadType     :: !(Maybe Text)
+    , _pPayload        :: !DiagnoseClusterRequest
+    , _pBearerToken    :: !(Maybe Text)
+    , _pClusterName    :: !Text
+    , _pRegion         :: !Text
+    , _pProjectId      :: !Text
+    , _pCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersDiagnose' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pXgafv'
+--
+-- * 'pUploadProtocol'
+--
+-- * 'pPp'
+--
+-- * 'pAccessToken'
+--
+-- * 'pUploadType'
+--
+-- * 'pPayload'
+--
+-- * 'pBearerToken'
+--
+-- * 'pClusterName'
+--
+-- * 'pRegion'
+--
+-- * 'pProjectId'
+--
+-- * 'pCallback'
+projectsRegionsClustersDiagnose
+    :: DiagnoseClusterRequest -- ^ 'pPayload'
+    -> Text -- ^ 'pClusterName'
+    -> Text -- ^ 'pRegion'
+    -> Text -- ^ 'pProjectId'
+    -> ProjectsRegionsClustersDiagnose
+projectsRegionsClustersDiagnose pPPayload_ pPClusterName_ pPRegion_ pPProjectId_ =
+    ProjectsRegionsClustersDiagnose'
+    { _pXgafv = Nothing
+    , _pUploadProtocol = Nothing
+    , _pPp = True
+    , _pAccessToken = Nothing
+    , _pUploadType = Nothing
+    , _pPayload = pPPayload_
+    , _pBearerToken = Nothing
+    , _pClusterName = pPClusterName_
+    , _pRegion = pPRegion_
+    , _pProjectId = pPProjectId_
+    , _pCallback = Nothing
+    }
+
+-- | V1 error format.
+pXgafv :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pXgafv = lens _pXgafv (\ s a -> s{_pXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pUploadProtocol :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pUploadProtocol
+  = lens _pUploadProtocol
+      (\ s a -> s{_pUploadProtocol = a})
+
+-- | Pretty-print response.
+pPp :: Lens' ProjectsRegionsClustersDiagnose Bool
+pPp = lens _pPp (\ s a -> s{_pPp = a})
+
+-- | OAuth access token.
+pAccessToken :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pAccessToken
+  = lens _pAccessToken (\ s a -> s{_pAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pUploadType :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pUploadType
+  = lens _pUploadType (\ s a -> s{_pUploadType = a})
+
+-- | Multipart request metadata.
+pPayload :: Lens' ProjectsRegionsClustersDiagnose DiagnoseClusterRequest
+pPayload = lens _pPayload (\ s a -> s{_pPayload = a})
+
+-- | OAuth bearer token.
+pBearerToken :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pBearerToken
+  = lens _pBearerToken (\ s a -> s{_pBearerToken = a})
+
+-- | [Required] The cluster name.
+pClusterName :: Lens' ProjectsRegionsClustersDiagnose Text
+pClusterName
+  = lens _pClusterName (\ s a -> s{_pClusterName = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+pRegion :: Lens' ProjectsRegionsClustersDiagnose Text
+pRegion = lens _pRegion (\ s a -> s{_pRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the cluster
+-- belongs to.
+pProjectId :: Lens' ProjectsRegionsClustersDiagnose Text
+pProjectId
+  = lens _pProjectId (\ s a -> s{_pProjectId = a})
+
+-- | JSONP
+pCallback :: Lens' ProjectsRegionsClustersDiagnose (Maybe Text)
+pCallback
+  = lens _pCallback (\ s a -> s{_pCallback = a})
+
+instance GoogleRequest
+         ProjectsRegionsClustersDiagnose where
+        type Rs ProjectsRegionsClustersDiagnose = Operation
+        type Scopes ProjectsRegionsClustersDiagnose =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersDiagnose'{..}
+          = go _pProjectId _pRegion _pClusterName _pXgafv
+              _pUploadProtocol
+              (Just _pPp)
+              _pAccessToken
+              _pUploadType
+              _pBearerToken
+              _pCallback
+              (Just AltJSON)
+              _pPayload
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsClustersDiagnoseResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Get.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Get.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the resource representation for a cluster in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.get@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Get
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersGetResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersGet
+    , ProjectsRegionsClustersGet
+
+    -- * Request Lenses
+    , prcgXgafv
+    , prcgUploadProtocol
+    , prcgPp
+    , prcgAccessToken
+    , prcgUploadType
+    , prcgBearerToken
+    , prcgClusterName
+    , prcgRegion
+    , prcgProjectId
+    , prcgCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.get@ method which the
+-- 'ProjectsRegionsClustersGet' request conforms to.
+type ProjectsRegionsClustersGetResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 Capture "clusterName" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :> Get '[JSON] Cluster
+
+-- | Gets the resource representation for a cluster in a project.
+--
+-- /See:/ 'projectsRegionsClustersGet' smart constructor.
+data ProjectsRegionsClustersGet = ProjectsRegionsClustersGet'
+    { _prcgXgafv          :: !(Maybe Text)
+    , _prcgUploadProtocol :: !(Maybe Text)
+    , _prcgPp             :: !Bool
+    , _prcgAccessToken    :: !(Maybe Text)
+    , _prcgUploadType     :: !(Maybe Text)
+    , _prcgBearerToken    :: !(Maybe Text)
+    , _prcgClusterName    :: !Text
+    , _prcgRegion         :: !Text
+    , _prcgProjectId      :: !Text
+    , _prcgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prcgXgafv'
+--
+-- * 'prcgUploadProtocol'
+--
+-- * 'prcgPp'
+--
+-- * 'prcgAccessToken'
+--
+-- * 'prcgUploadType'
+--
+-- * 'prcgBearerToken'
+--
+-- * 'prcgClusterName'
+--
+-- * 'prcgRegion'
+--
+-- * 'prcgProjectId'
+--
+-- * 'prcgCallback'
+projectsRegionsClustersGet
+    :: Text -- ^ 'prcgClusterName'
+    -> Text -- ^ 'prcgRegion'
+    -> Text -- ^ 'prcgProjectId'
+    -> ProjectsRegionsClustersGet
+projectsRegionsClustersGet pPrcgClusterName_ pPrcgRegion_ pPrcgProjectId_ =
+    ProjectsRegionsClustersGet'
+    { _prcgXgafv = Nothing
+    , _prcgUploadProtocol = Nothing
+    , _prcgPp = True
+    , _prcgAccessToken = Nothing
+    , _prcgUploadType = Nothing
+    , _prcgBearerToken = Nothing
+    , _prcgClusterName = pPrcgClusterName_
+    , _prcgRegion = pPrcgRegion_
+    , _prcgProjectId = pPrcgProjectId_
+    , _prcgCallback = Nothing
+    }
+
+-- | V1 error format.
+prcgXgafv :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgXgafv
+  = lens _prcgXgafv (\ s a -> s{_prcgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prcgUploadProtocol :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgUploadProtocol
+  = lens _prcgUploadProtocol
+      (\ s a -> s{_prcgUploadProtocol = a})
+
+-- | Pretty-print response.
+prcgPp :: Lens' ProjectsRegionsClustersGet Bool
+prcgPp = lens _prcgPp (\ s a -> s{_prcgPp = a})
+
+-- | OAuth access token.
+prcgAccessToken :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgAccessToken
+  = lens _prcgAccessToken
+      (\ s a -> s{_prcgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prcgUploadType :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgUploadType
+  = lens _prcgUploadType
+      (\ s a -> s{_prcgUploadType = a})
+
+-- | OAuth bearer token.
+prcgBearerToken :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgBearerToken
+  = lens _prcgBearerToken
+      (\ s a -> s{_prcgBearerToken = a})
+
+-- | [Required] The cluster name.
+prcgClusterName :: Lens' ProjectsRegionsClustersGet Text
+prcgClusterName
+  = lens _prcgClusterName
+      (\ s a -> s{_prcgClusterName = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prcgRegion :: Lens' ProjectsRegionsClustersGet Text
+prcgRegion
+  = lens _prcgRegion (\ s a -> s{_prcgRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the cluster
+-- belongs to.
+prcgProjectId :: Lens' ProjectsRegionsClustersGet Text
+prcgProjectId
+  = lens _prcgProjectId
+      (\ s a -> s{_prcgProjectId = a})
+
+-- | JSONP
+prcgCallback :: Lens' ProjectsRegionsClustersGet (Maybe Text)
+prcgCallback
+  = lens _prcgCallback (\ s a -> s{_prcgCallback = a})
+
+instance GoogleRequest ProjectsRegionsClustersGet
+         where
+        type Rs ProjectsRegionsClustersGet = Cluster
+        type Scopes ProjectsRegionsClustersGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersGet'{..}
+          = go _prcgProjectId _prcgRegion _prcgClusterName
+              _prcgXgafv
+              _prcgUploadProtocol
+              (Just _prcgPp)
+              _prcgAccessToken
+              _prcgUploadType
+              _prcgBearerToken
+              _prcgCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsClustersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/List.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/List.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all regions\/{region}\/clusters in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.list@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.List
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersListResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersList
+    , ProjectsRegionsClustersList
+
+    -- * Request Lenses
+    , prclXgafv
+    , prclUploadProtocol
+    , prclPp
+    , prclAccessToken
+    , prclUploadType
+    , prclBearerToken
+    , prclRegion
+    , prclPageToken
+    , prclProjectId
+    , prclPageSize
+    , prclCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.list@ method which the
+-- 'ProjectsRegionsClustersList' request conforms to.
+type ProjectsRegionsClustersListResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 QueryParam "$.xgafv" Text :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "pp" Bool :>
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "pageToken" Text :>
+                               QueryParam "pageSize" (Textual Int32) :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] ListClustersResponse
+
+-- | Lists all regions\/{region}\/clusters in a project.
+--
+-- /See:/ 'projectsRegionsClustersList' smart constructor.
+data ProjectsRegionsClustersList = ProjectsRegionsClustersList'
+    { _prclXgafv          :: !(Maybe Text)
+    , _prclUploadProtocol :: !(Maybe Text)
+    , _prclPp             :: !Bool
+    , _prclAccessToken    :: !(Maybe Text)
+    , _prclUploadType     :: !(Maybe Text)
+    , _prclBearerToken    :: !(Maybe Text)
+    , _prclRegion         :: !Text
+    , _prclPageToken      :: !(Maybe Text)
+    , _prclProjectId      :: !Text
+    , _prclPageSize       :: !(Maybe (Textual Int32))
+    , _prclCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prclXgafv'
+--
+-- * 'prclUploadProtocol'
+--
+-- * 'prclPp'
+--
+-- * 'prclAccessToken'
+--
+-- * 'prclUploadType'
+--
+-- * 'prclBearerToken'
+--
+-- * 'prclRegion'
+--
+-- * 'prclPageToken'
+--
+-- * 'prclProjectId'
+--
+-- * 'prclPageSize'
+--
+-- * 'prclCallback'
+projectsRegionsClustersList
+    :: Text -- ^ 'prclRegion'
+    -> Text -- ^ 'prclProjectId'
+    -> ProjectsRegionsClustersList
+projectsRegionsClustersList pPrclRegion_ pPrclProjectId_ =
+    ProjectsRegionsClustersList'
+    { _prclXgafv = Nothing
+    , _prclUploadProtocol = Nothing
+    , _prclPp = True
+    , _prclAccessToken = Nothing
+    , _prclUploadType = Nothing
+    , _prclBearerToken = Nothing
+    , _prclRegion = pPrclRegion_
+    , _prclPageToken = Nothing
+    , _prclProjectId = pPrclProjectId_
+    , _prclPageSize = Nothing
+    , _prclCallback = Nothing
+    }
+
+-- | V1 error format.
+prclXgafv :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclXgafv
+  = lens _prclXgafv (\ s a -> s{_prclXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prclUploadProtocol :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclUploadProtocol
+  = lens _prclUploadProtocol
+      (\ s a -> s{_prclUploadProtocol = a})
+
+-- | Pretty-print response.
+prclPp :: Lens' ProjectsRegionsClustersList Bool
+prclPp = lens _prclPp (\ s a -> s{_prclPp = a})
+
+-- | OAuth access token.
+prclAccessToken :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclAccessToken
+  = lens _prclAccessToken
+      (\ s a -> s{_prclAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prclUploadType :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclUploadType
+  = lens _prclUploadType
+      (\ s a -> s{_prclUploadType = a})
+
+-- | OAuth bearer token.
+prclBearerToken :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclBearerToken
+  = lens _prclBearerToken
+      (\ s a -> s{_prclBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prclRegion :: Lens' ProjectsRegionsClustersList Text
+prclRegion
+  = lens _prclRegion (\ s a -> s{_prclRegion = a})
+
+-- | The standard List page token.
+prclPageToken :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclPageToken
+  = lens _prclPageToken
+      (\ s a -> s{_prclPageToken = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the cluster
+-- belongs to.
+prclProjectId :: Lens' ProjectsRegionsClustersList Text
+prclProjectId
+  = lens _prclProjectId
+      (\ s a -> s{_prclProjectId = a})
+
+-- | The standard List page size.
+prclPageSize :: Lens' ProjectsRegionsClustersList (Maybe Int32)
+prclPageSize
+  = lens _prclPageSize (\ s a -> s{_prclPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+prclCallback :: Lens' ProjectsRegionsClustersList (Maybe Text)
+prclCallback
+  = lens _prclCallback (\ s a -> s{_prclCallback = a})
+
+instance GoogleRequest ProjectsRegionsClustersList
+         where
+        type Rs ProjectsRegionsClustersList =
+             ListClustersResponse
+        type Scopes ProjectsRegionsClustersList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersList'{..}
+          = go _prclProjectId _prclRegion _prclXgafv
+              _prclUploadProtocol
+              (Just _prclPp)
+              _prclAccessToken
+              _prclUploadType
+              _prclBearerToken
+              _prclPageToken
+              _prclPageSize
+              _prclCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsClustersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Patch.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Clusters/Patch.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a cluster in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.clusters.patch@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Patch
+    (
+    -- * REST Resource
+      ProjectsRegionsClustersPatchResource
+
+    -- * Creating a Request
+    , projectsRegionsClustersPatch
+    , ProjectsRegionsClustersPatch
+
+    -- * Request Lenses
+    , prcpXgafv
+    , prcpUploadProtocol
+    , prcpUpdateMask
+    , prcpPp
+    , prcpAccessToken
+    , prcpUploadType
+    , prcpPayload
+    , prcpBearerToken
+    , prcpClusterName
+    , prcpRegion
+    , prcpProjectId
+    , prcpCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.clusters.patch@ method which the
+-- 'ProjectsRegionsClustersPatch' request conforms to.
+type ProjectsRegionsClustersPatchResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "clusters" :>
+                 Capture "clusterName" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "updateMask" Text :>
+                         QueryParam "pp" Bool :>
+                           QueryParam "access_token" Text :>
+                             QueryParam "uploadType" Text :>
+                               QueryParam "bearer_token" Text :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     ReqBody '[JSON] Cluster :>
+                                       Patch '[JSON] Operation
+
+-- | Updates a cluster in a project.
+--
+-- /See:/ 'projectsRegionsClustersPatch' smart constructor.
+data ProjectsRegionsClustersPatch = ProjectsRegionsClustersPatch'
+    { _prcpXgafv          :: !(Maybe Text)
+    , _prcpUploadProtocol :: !(Maybe Text)
+    , _prcpUpdateMask     :: !(Maybe Text)
+    , _prcpPp             :: !Bool
+    , _prcpAccessToken    :: !(Maybe Text)
+    , _prcpUploadType     :: !(Maybe Text)
+    , _prcpPayload        :: !Cluster
+    , _prcpBearerToken    :: !(Maybe Text)
+    , _prcpClusterName    :: !Text
+    , _prcpRegion         :: !Text
+    , _prcpProjectId      :: !Text
+    , _prcpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsClustersPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prcpXgafv'
+--
+-- * 'prcpUploadProtocol'
+--
+-- * 'prcpUpdateMask'
+--
+-- * 'prcpPp'
+--
+-- * 'prcpAccessToken'
+--
+-- * 'prcpUploadType'
+--
+-- * 'prcpPayload'
+--
+-- * 'prcpBearerToken'
+--
+-- * 'prcpClusterName'
+--
+-- * 'prcpRegion'
+--
+-- * 'prcpProjectId'
+--
+-- * 'prcpCallback'
+projectsRegionsClustersPatch
+    :: Cluster -- ^ 'prcpPayload'
+    -> Text -- ^ 'prcpClusterName'
+    -> Text -- ^ 'prcpRegion'
+    -> Text -- ^ 'prcpProjectId'
+    -> ProjectsRegionsClustersPatch
+projectsRegionsClustersPatch pPrcpPayload_ pPrcpClusterName_ pPrcpRegion_ pPrcpProjectId_ =
+    ProjectsRegionsClustersPatch'
+    { _prcpXgafv = Nothing
+    , _prcpUploadProtocol = Nothing
+    , _prcpUpdateMask = Nothing
+    , _prcpPp = True
+    , _prcpAccessToken = Nothing
+    , _prcpUploadType = Nothing
+    , _prcpPayload = pPrcpPayload_
+    , _prcpBearerToken = Nothing
+    , _prcpClusterName = pPrcpClusterName_
+    , _prcpRegion = pPrcpRegion_
+    , _prcpProjectId = pPrcpProjectId_
+    , _prcpCallback = Nothing
+    }
+
+-- | V1 error format.
+prcpXgafv :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpXgafv
+  = lens _prcpXgafv (\ s a -> s{_prcpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prcpUploadProtocol :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpUploadProtocol
+  = lens _prcpUploadProtocol
+      (\ s a -> s{_prcpUploadProtocol = a})
+
+-- | [Required] Specifies the path, relative to Cluster, of the field to
+-- update. For example, to change the number of workers in a cluster to 5,
+-- the update_mask parameter would be specified as
+-- config.worker_config.num_instances, and the \`PATCH\` request body would
+-- specify the new value, as follows: { \"config\":{ \"workerConfig\":{
+-- \"numInstances\":\"5\" } } } Similarly, to change the number of
+-- preemptible workers in a cluster to 5, the update_mask parameter would
+-- be config.secondary_worker_config.num_instances, and the \`PATCH\`
+-- request body would be set as follows: { \"config\":{
+-- \"secondaryWorkerConfig\":{ \"numInstances\":\"5\" } } } Note:
+-- Currently, config.worker_config.num_instances and
+-- config.secondary_worker_config.num_instances are the only fields that
+-- can be updated.
+prcpUpdateMask :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpUpdateMask
+  = lens _prcpUpdateMask
+      (\ s a -> s{_prcpUpdateMask = a})
+
+-- | Pretty-print response.
+prcpPp :: Lens' ProjectsRegionsClustersPatch Bool
+prcpPp = lens _prcpPp (\ s a -> s{_prcpPp = a})
+
+-- | OAuth access token.
+prcpAccessToken :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpAccessToken
+  = lens _prcpAccessToken
+      (\ s a -> s{_prcpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prcpUploadType :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpUploadType
+  = lens _prcpUploadType
+      (\ s a -> s{_prcpUploadType = a})
+
+-- | Multipart request metadata.
+prcpPayload :: Lens' ProjectsRegionsClustersPatch Cluster
+prcpPayload
+  = lens _prcpPayload (\ s a -> s{_prcpPayload = a})
+
+-- | OAuth bearer token.
+prcpBearerToken :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpBearerToken
+  = lens _prcpBearerToken
+      (\ s a -> s{_prcpBearerToken = a})
+
+-- | [Required] The cluster name.
+prcpClusterName :: Lens' ProjectsRegionsClustersPatch Text
+prcpClusterName
+  = lens _prcpClusterName
+      (\ s a -> s{_prcpClusterName = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prcpRegion :: Lens' ProjectsRegionsClustersPatch Text
+prcpRegion
+  = lens _prcpRegion (\ s a -> s{_prcpRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project the cluster
+-- belongs to.
+prcpProjectId :: Lens' ProjectsRegionsClustersPatch Text
+prcpProjectId
+  = lens _prcpProjectId
+      (\ s a -> s{_prcpProjectId = a})
+
+-- | JSONP
+prcpCallback :: Lens' ProjectsRegionsClustersPatch (Maybe Text)
+prcpCallback
+  = lens _prcpCallback (\ s a -> s{_prcpCallback = a})
+
+instance GoogleRequest ProjectsRegionsClustersPatch
+         where
+        type Rs ProjectsRegionsClustersPatch = Operation
+        type Scopes ProjectsRegionsClustersPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsClustersPatch'{..}
+          = go _prcpProjectId _prcpRegion _prcpClusterName
+              _prcpXgafv
+              _prcpUploadProtocol
+              _prcpUpdateMask
+              (Just _prcpPp)
+              _prcpAccessToken
+              _prcpUploadType
+              _prcpBearerToken
+              _prcpCallback
+              (Just AltJSON)
+              _prcpPayload
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsClustersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Cancel.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Cancel.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Cancel
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a job cancellation request. To access the job resource after
+-- cancellation, call
+-- [regions\/{region}\/jobs.list](\/dataproc\/reference\/rest\/v1\/projects.regions.jobs\/list)
+-- or
+-- [regions\/{region}\/jobs.get](\/dataproc\/reference\/rest\/v1\/projects.regions.jobs\/get).
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.jobs.cancel@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Cancel
+    (
+    -- * REST Resource
+      ProjectsRegionsJobsCancelResource
+
+    -- * Creating a Request
+    , projectsRegionsJobsCancel
+    , ProjectsRegionsJobsCancel
+
+    -- * Request Lenses
+    , prjcXgafv
+    , prjcJobId
+    , prjcUploadProtocol
+    , prjcPp
+    , prjcAccessToken
+    , prjcUploadType
+    , prjcPayload
+    , prjcBearerToken
+    , prjcRegion
+    , prjcProjectId
+    , prjcCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.jobs.cancel@ method which the
+-- 'ProjectsRegionsJobsCancel' request conforms to.
+type ProjectsRegionsJobsCancelResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "jobs" :>
+                 CaptureMode "jobId" "cancel" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON] CancelJobRequest :>
+                                     Post '[JSON] Job
+
+-- | Starts a job cancellation request. To access the job resource after
+-- cancellation, call
+-- [regions\/{region}\/jobs.list](\/dataproc\/reference\/rest\/v1\/projects.regions.jobs\/list)
+-- or
+-- [regions\/{region}\/jobs.get](\/dataproc\/reference\/rest\/v1\/projects.regions.jobs\/get).
+--
+-- /See:/ 'projectsRegionsJobsCancel' smart constructor.
+data ProjectsRegionsJobsCancel = ProjectsRegionsJobsCancel'
+    { _prjcXgafv          :: !(Maybe Text)
+    , _prjcJobId          :: !Text
+    , _prjcUploadProtocol :: !(Maybe Text)
+    , _prjcPp             :: !Bool
+    , _prjcAccessToken    :: !(Maybe Text)
+    , _prjcUploadType     :: !(Maybe Text)
+    , _prjcPayload        :: !CancelJobRequest
+    , _prjcBearerToken    :: !(Maybe Text)
+    , _prjcRegion         :: !Text
+    , _prjcProjectId      :: !Text
+    , _prjcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsJobsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prjcXgafv'
+--
+-- * 'prjcJobId'
+--
+-- * 'prjcUploadProtocol'
+--
+-- * 'prjcPp'
+--
+-- * 'prjcAccessToken'
+--
+-- * 'prjcUploadType'
+--
+-- * 'prjcPayload'
+--
+-- * 'prjcBearerToken'
+--
+-- * 'prjcRegion'
+--
+-- * 'prjcProjectId'
+--
+-- * 'prjcCallback'
+projectsRegionsJobsCancel
+    :: Text -- ^ 'prjcJobId'
+    -> CancelJobRequest -- ^ 'prjcPayload'
+    -> Text -- ^ 'prjcRegion'
+    -> Text -- ^ 'prjcProjectId'
+    -> ProjectsRegionsJobsCancel
+projectsRegionsJobsCancel pPrjcJobId_ pPrjcPayload_ pPrjcRegion_ pPrjcProjectId_ =
+    ProjectsRegionsJobsCancel'
+    { _prjcXgafv = Nothing
+    , _prjcJobId = pPrjcJobId_
+    , _prjcUploadProtocol = Nothing
+    , _prjcPp = True
+    , _prjcAccessToken = Nothing
+    , _prjcUploadType = Nothing
+    , _prjcPayload = pPrjcPayload_
+    , _prjcBearerToken = Nothing
+    , _prjcRegion = pPrjcRegion_
+    , _prjcProjectId = pPrjcProjectId_
+    , _prjcCallback = Nothing
+    }
+
+-- | V1 error format.
+prjcXgafv :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcXgafv
+  = lens _prjcXgafv (\ s a -> s{_prjcXgafv = a})
+
+-- | [Required] The job ID.
+prjcJobId :: Lens' ProjectsRegionsJobsCancel Text
+prjcJobId
+  = lens _prjcJobId (\ s a -> s{_prjcJobId = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prjcUploadProtocol :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcUploadProtocol
+  = lens _prjcUploadProtocol
+      (\ s a -> s{_prjcUploadProtocol = a})
+
+-- | Pretty-print response.
+prjcPp :: Lens' ProjectsRegionsJobsCancel Bool
+prjcPp = lens _prjcPp (\ s a -> s{_prjcPp = a})
+
+-- | OAuth access token.
+prjcAccessToken :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcAccessToken
+  = lens _prjcAccessToken
+      (\ s a -> s{_prjcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prjcUploadType :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcUploadType
+  = lens _prjcUploadType
+      (\ s a -> s{_prjcUploadType = a})
+
+-- | Multipart request metadata.
+prjcPayload :: Lens' ProjectsRegionsJobsCancel CancelJobRequest
+prjcPayload
+  = lens _prjcPayload (\ s a -> s{_prjcPayload = a})
+
+-- | OAuth bearer token.
+prjcBearerToken :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcBearerToken
+  = lens _prjcBearerToken
+      (\ s a -> s{_prjcBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prjcRegion :: Lens' ProjectsRegionsJobsCancel Text
+prjcRegion
+  = lens _prjcRegion (\ s a -> s{_prjcRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+prjcProjectId :: Lens' ProjectsRegionsJobsCancel Text
+prjcProjectId
+  = lens _prjcProjectId
+      (\ s a -> s{_prjcProjectId = a})
+
+-- | JSONP
+prjcCallback :: Lens' ProjectsRegionsJobsCancel (Maybe Text)
+prjcCallback
+  = lens _prjcCallback (\ s a -> s{_prjcCallback = a})
+
+instance GoogleRequest ProjectsRegionsJobsCancel
+         where
+        type Rs ProjectsRegionsJobsCancel = Job
+        type Scopes ProjectsRegionsJobsCancel =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsJobsCancel'{..}
+          = go _prjcProjectId _prjcRegion _prjcJobId _prjcXgafv
+              _prjcUploadProtocol
+              (Just _prjcPp)
+              _prjcAccessToken
+              _prjcUploadType
+              _prjcBearerToken
+              _prjcCallback
+              (Just AltJSON)
+              _prjcPayload
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsJobsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Delete.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Delete.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the job from the project. If the job is active, the delete
+-- fails, and the response returns \`FAILED_PRECONDITION\`.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.jobs.delete@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Delete
+    (
+    -- * REST Resource
+      ProjectsRegionsJobsDeleteResource
+
+    -- * Creating a Request
+    , projectsRegionsJobsDelete
+    , ProjectsRegionsJobsDelete
+
+    -- * Request Lenses
+    , prjdXgafv
+    , prjdJobId
+    , prjdUploadProtocol
+    , prjdPp
+    , prjdAccessToken
+    , prjdUploadType
+    , prjdBearerToken
+    , prjdRegion
+    , prjdProjectId
+    , prjdCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.jobs.delete@ method which the
+-- 'ProjectsRegionsJobsDelete' request conforms to.
+type ProjectsRegionsJobsDeleteResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "jobs" :>
+                 Capture "jobId" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Delete '[JSON] Empty
+
+-- | Deletes the job from the project. If the job is active, the delete
+-- fails, and the response returns \`FAILED_PRECONDITION\`.
+--
+-- /See:/ 'projectsRegionsJobsDelete' smart constructor.
+data ProjectsRegionsJobsDelete = ProjectsRegionsJobsDelete'
+    { _prjdXgafv          :: !(Maybe Text)
+    , _prjdJobId          :: !Text
+    , _prjdUploadProtocol :: !(Maybe Text)
+    , _prjdPp             :: !Bool
+    , _prjdAccessToken    :: !(Maybe Text)
+    , _prjdUploadType     :: !(Maybe Text)
+    , _prjdBearerToken    :: !(Maybe Text)
+    , _prjdRegion         :: !Text
+    , _prjdProjectId      :: !Text
+    , _prjdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsJobsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prjdXgafv'
+--
+-- * 'prjdJobId'
+--
+-- * 'prjdUploadProtocol'
+--
+-- * 'prjdPp'
+--
+-- * 'prjdAccessToken'
+--
+-- * 'prjdUploadType'
+--
+-- * 'prjdBearerToken'
+--
+-- * 'prjdRegion'
+--
+-- * 'prjdProjectId'
+--
+-- * 'prjdCallback'
+projectsRegionsJobsDelete
+    :: Text -- ^ 'prjdJobId'
+    -> Text -- ^ 'prjdRegion'
+    -> Text -- ^ 'prjdProjectId'
+    -> ProjectsRegionsJobsDelete
+projectsRegionsJobsDelete pPrjdJobId_ pPrjdRegion_ pPrjdProjectId_ =
+    ProjectsRegionsJobsDelete'
+    { _prjdXgafv = Nothing
+    , _prjdJobId = pPrjdJobId_
+    , _prjdUploadProtocol = Nothing
+    , _prjdPp = True
+    , _prjdAccessToken = Nothing
+    , _prjdUploadType = Nothing
+    , _prjdBearerToken = Nothing
+    , _prjdRegion = pPrjdRegion_
+    , _prjdProjectId = pPrjdProjectId_
+    , _prjdCallback = Nothing
+    }
+
+-- | V1 error format.
+prjdXgafv :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdXgafv
+  = lens _prjdXgafv (\ s a -> s{_prjdXgafv = a})
+
+-- | [Required] The job ID.
+prjdJobId :: Lens' ProjectsRegionsJobsDelete Text
+prjdJobId
+  = lens _prjdJobId (\ s a -> s{_prjdJobId = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prjdUploadProtocol :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdUploadProtocol
+  = lens _prjdUploadProtocol
+      (\ s a -> s{_prjdUploadProtocol = a})
+
+-- | Pretty-print response.
+prjdPp :: Lens' ProjectsRegionsJobsDelete Bool
+prjdPp = lens _prjdPp (\ s a -> s{_prjdPp = a})
+
+-- | OAuth access token.
+prjdAccessToken :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdAccessToken
+  = lens _prjdAccessToken
+      (\ s a -> s{_prjdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prjdUploadType :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdUploadType
+  = lens _prjdUploadType
+      (\ s a -> s{_prjdUploadType = a})
+
+-- | OAuth bearer token.
+prjdBearerToken :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdBearerToken
+  = lens _prjdBearerToken
+      (\ s a -> s{_prjdBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prjdRegion :: Lens' ProjectsRegionsJobsDelete Text
+prjdRegion
+  = lens _prjdRegion (\ s a -> s{_prjdRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+prjdProjectId :: Lens' ProjectsRegionsJobsDelete Text
+prjdProjectId
+  = lens _prjdProjectId
+      (\ s a -> s{_prjdProjectId = a})
+
+-- | JSONP
+prjdCallback :: Lens' ProjectsRegionsJobsDelete (Maybe Text)
+prjdCallback
+  = lens _prjdCallback (\ s a -> s{_prjdCallback = a})
+
+instance GoogleRequest ProjectsRegionsJobsDelete
+         where
+        type Rs ProjectsRegionsJobsDelete = Empty
+        type Scopes ProjectsRegionsJobsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsJobsDelete'{..}
+          = go _prjdProjectId _prjdRegion _prjdJobId _prjdXgafv
+              _prjdUploadProtocol
+              (Just _prjdPp)
+              _prjdAccessToken
+              _prjdUploadType
+              _prjdBearerToken
+              _prjdCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsJobsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Get.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Get.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the resource representation for a job in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.jobs.get@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Get
+    (
+    -- * REST Resource
+      ProjectsRegionsJobsGetResource
+
+    -- * Creating a Request
+    , projectsRegionsJobsGet
+    , ProjectsRegionsJobsGet
+
+    -- * Request Lenses
+    , prjgXgafv
+    , prjgJobId
+    , prjgUploadProtocol
+    , prjgPp
+    , prjgAccessToken
+    , prjgUploadType
+    , prjgBearerToken
+    , prjgRegion
+    , prjgProjectId
+    , prjgCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.jobs.get@ method which the
+-- 'ProjectsRegionsJobsGet' request conforms to.
+type ProjectsRegionsJobsGetResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "jobs" :>
+                 Capture "jobId" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :> Get '[JSON] Job
+
+-- | Gets the resource representation for a job in a project.
+--
+-- /See:/ 'projectsRegionsJobsGet' smart constructor.
+data ProjectsRegionsJobsGet = ProjectsRegionsJobsGet'
+    { _prjgXgafv          :: !(Maybe Text)
+    , _prjgJobId          :: !Text
+    , _prjgUploadProtocol :: !(Maybe Text)
+    , _prjgPp             :: !Bool
+    , _prjgAccessToken    :: !(Maybe Text)
+    , _prjgUploadType     :: !(Maybe Text)
+    , _prjgBearerToken    :: !(Maybe Text)
+    , _prjgRegion         :: !Text
+    , _prjgProjectId      :: !Text
+    , _prjgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsJobsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prjgXgafv'
+--
+-- * 'prjgJobId'
+--
+-- * 'prjgUploadProtocol'
+--
+-- * 'prjgPp'
+--
+-- * 'prjgAccessToken'
+--
+-- * 'prjgUploadType'
+--
+-- * 'prjgBearerToken'
+--
+-- * 'prjgRegion'
+--
+-- * 'prjgProjectId'
+--
+-- * 'prjgCallback'
+projectsRegionsJobsGet
+    :: Text -- ^ 'prjgJobId'
+    -> Text -- ^ 'prjgRegion'
+    -> Text -- ^ 'prjgProjectId'
+    -> ProjectsRegionsJobsGet
+projectsRegionsJobsGet pPrjgJobId_ pPrjgRegion_ pPrjgProjectId_ =
+    ProjectsRegionsJobsGet'
+    { _prjgXgafv = Nothing
+    , _prjgJobId = pPrjgJobId_
+    , _prjgUploadProtocol = Nothing
+    , _prjgPp = True
+    , _prjgAccessToken = Nothing
+    , _prjgUploadType = Nothing
+    , _prjgBearerToken = Nothing
+    , _prjgRegion = pPrjgRegion_
+    , _prjgProjectId = pPrjgProjectId_
+    , _prjgCallback = Nothing
+    }
+
+-- | V1 error format.
+prjgXgafv :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgXgafv
+  = lens _prjgXgafv (\ s a -> s{_prjgXgafv = a})
+
+-- | [Required] The job ID.
+prjgJobId :: Lens' ProjectsRegionsJobsGet Text
+prjgJobId
+  = lens _prjgJobId (\ s a -> s{_prjgJobId = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prjgUploadProtocol :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgUploadProtocol
+  = lens _prjgUploadProtocol
+      (\ s a -> s{_prjgUploadProtocol = a})
+
+-- | Pretty-print response.
+prjgPp :: Lens' ProjectsRegionsJobsGet Bool
+prjgPp = lens _prjgPp (\ s a -> s{_prjgPp = a})
+
+-- | OAuth access token.
+prjgAccessToken :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgAccessToken
+  = lens _prjgAccessToken
+      (\ s a -> s{_prjgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prjgUploadType :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgUploadType
+  = lens _prjgUploadType
+      (\ s a -> s{_prjgUploadType = a})
+
+-- | OAuth bearer token.
+prjgBearerToken :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgBearerToken
+  = lens _prjgBearerToken
+      (\ s a -> s{_prjgBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prjgRegion :: Lens' ProjectsRegionsJobsGet Text
+prjgRegion
+  = lens _prjgRegion (\ s a -> s{_prjgRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+prjgProjectId :: Lens' ProjectsRegionsJobsGet Text
+prjgProjectId
+  = lens _prjgProjectId
+      (\ s a -> s{_prjgProjectId = a})
+
+-- | JSONP
+prjgCallback :: Lens' ProjectsRegionsJobsGet (Maybe Text)
+prjgCallback
+  = lens _prjgCallback (\ s a -> s{_prjgCallback = a})
+
+instance GoogleRequest ProjectsRegionsJobsGet where
+        type Rs ProjectsRegionsJobsGet = Job
+        type Scopes ProjectsRegionsJobsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsJobsGet'{..}
+          = go _prjgProjectId _prjgRegion _prjgJobId _prjgXgafv
+              _prjgUploadProtocol
+              (Just _prjgPp)
+              _prjgAccessToken
+              _prjgUploadType
+              _prjgBearerToken
+              _prjgCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsJobsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/List.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/List.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Jobs.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists regions\/{region}\/jobs in a project.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.jobs.list@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.List
+    (
+    -- * REST Resource
+      ProjectsRegionsJobsListResource
+
+    -- * Creating a Request
+    , projectsRegionsJobsList
+    , ProjectsRegionsJobsList
+
+    -- * Request Lenses
+    , prjlJobStateMatcher
+    , prjlXgafv
+    , prjlUploadProtocol
+    , prjlPp
+    , prjlAccessToken
+    , prjlUploadType
+    , prjlBearerToken
+    , prjlClusterName
+    , prjlRegion
+    , prjlPageToken
+    , prjlProjectId
+    , prjlPageSize
+    , prjlCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.jobs.list@ method which the
+-- 'ProjectsRegionsJobsList' request conforms to.
+type ProjectsRegionsJobsListResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "jobs" :>
+                 QueryParam "jobStateMatcher" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "clusterName" Text :>
+                                 QueryParam "pageToken" Text :>
+                                   QueryParam "pageSize" (Textual Int32) :>
+                                     QueryParam "callback" Text :>
+                                       QueryParam "alt" AltJSON :>
+                                         Get '[JSON] ListJobsResponse
+
+-- | Lists regions\/{region}\/jobs in a project.
+--
+-- /See:/ 'projectsRegionsJobsList' smart constructor.
+data ProjectsRegionsJobsList = ProjectsRegionsJobsList'
+    { _prjlJobStateMatcher :: !(Maybe Text)
+    , _prjlXgafv           :: !(Maybe Text)
+    , _prjlUploadProtocol  :: !(Maybe Text)
+    , _prjlPp              :: !Bool
+    , _prjlAccessToken     :: !(Maybe Text)
+    , _prjlUploadType      :: !(Maybe Text)
+    , _prjlBearerToken     :: !(Maybe Text)
+    , _prjlClusterName     :: !(Maybe Text)
+    , _prjlRegion          :: !Text
+    , _prjlPageToken       :: !(Maybe Text)
+    , _prjlProjectId       :: !Text
+    , _prjlPageSize        :: !(Maybe (Textual Int32))
+    , _prjlCallback        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsJobsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prjlJobStateMatcher'
+--
+-- * 'prjlXgafv'
+--
+-- * 'prjlUploadProtocol'
+--
+-- * 'prjlPp'
+--
+-- * 'prjlAccessToken'
+--
+-- * 'prjlUploadType'
+--
+-- * 'prjlBearerToken'
+--
+-- * 'prjlClusterName'
+--
+-- * 'prjlRegion'
+--
+-- * 'prjlPageToken'
+--
+-- * 'prjlProjectId'
+--
+-- * 'prjlPageSize'
+--
+-- * 'prjlCallback'
+projectsRegionsJobsList
+    :: Text -- ^ 'prjlRegion'
+    -> Text -- ^ 'prjlProjectId'
+    -> ProjectsRegionsJobsList
+projectsRegionsJobsList pPrjlRegion_ pPrjlProjectId_ =
+    ProjectsRegionsJobsList'
+    { _prjlJobStateMatcher = Nothing
+    , _prjlXgafv = Nothing
+    , _prjlUploadProtocol = Nothing
+    , _prjlPp = True
+    , _prjlAccessToken = Nothing
+    , _prjlUploadType = Nothing
+    , _prjlBearerToken = Nothing
+    , _prjlClusterName = Nothing
+    , _prjlRegion = pPrjlRegion_
+    , _prjlPageToken = Nothing
+    , _prjlProjectId = pPrjlProjectId_
+    , _prjlPageSize = Nothing
+    , _prjlCallback = Nothing
+    }
+
+-- | [Optional] Specifies enumerated categories of jobs to list.
+prjlJobStateMatcher :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlJobStateMatcher
+  = lens _prjlJobStateMatcher
+      (\ s a -> s{_prjlJobStateMatcher = a})
+
+-- | V1 error format.
+prjlXgafv :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlXgafv
+  = lens _prjlXgafv (\ s a -> s{_prjlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prjlUploadProtocol :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlUploadProtocol
+  = lens _prjlUploadProtocol
+      (\ s a -> s{_prjlUploadProtocol = a})
+
+-- | Pretty-print response.
+prjlPp :: Lens' ProjectsRegionsJobsList Bool
+prjlPp = lens _prjlPp (\ s a -> s{_prjlPp = a})
+
+-- | OAuth access token.
+prjlAccessToken :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlAccessToken
+  = lens _prjlAccessToken
+      (\ s a -> s{_prjlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prjlUploadType :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlUploadType
+  = lens _prjlUploadType
+      (\ s a -> s{_prjlUploadType = a})
+
+-- | OAuth bearer token.
+prjlBearerToken :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlBearerToken
+  = lens _prjlBearerToken
+      (\ s a -> s{_prjlBearerToken = a})
+
+-- | [Optional] If set, the returned jobs list includes only jobs that were
+-- submitted to the named cluster.
+prjlClusterName :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlClusterName
+  = lens _prjlClusterName
+      (\ s a -> s{_prjlClusterName = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prjlRegion :: Lens' ProjectsRegionsJobsList Text
+prjlRegion
+  = lens _prjlRegion (\ s a -> s{_prjlRegion = a})
+
+-- | [Optional] The page token, returned by a previous call, to request the
+-- next page of results.
+prjlPageToken :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlPageToken
+  = lens _prjlPageToken
+      (\ s a -> s{_prjlPageToken = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+prjlProjectId :: Lens' ProjectsRegionsJobsList Text
+prjlProjectId
+  = lens _prjlProjectId
+      (\ s a -> s{_prjlProjectId = a})
+
+-- | [Optional] The number of results to return in each response.
+prjlPageSize :: Lens' ProjectsRegionsJobsList (Maybe Int32)
+prjlPageSize
+  = lens _prjlPageSize (\ s a -> s{_prjlPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+prjlCallback :: Lens' ProjectsRegionsJobsList (Maybe Text)
+prjlCallback
+  = lens _prjlCallback (\ s a -> s{_prjlCallback = a})
+
+instance GoogleRequest ProjectsRegionsJobsList where
+        type Rs ProjectsRegionsJobsList = ListJobsResponse
+        type Scopes ProjectsRegionsJobsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsJobsList'{..}
+          = go _prjlProjectId _prjlRegion _prjlJobStateMatcher
+              _prjlXgafv
+              _prjlUploadProtocol
+              (Just _prjlPp)
+              _prjlAccessToken
+              _prjlUploadType
+              _prjlBearerToken
+              _prjlClusterName
+              _prjlPageToken
+              _prjlPageSize
+              _prjlCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsJobsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Submit.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Submit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Jobs/Submit.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Submit
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Submits a job to a cluster.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.jobs.submit@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Submit
+    (
+    -- * REST Resource
+      ProjectsRegionsJobsSubmitResource
+
+    -- * Creating a Request
+    , projectsRegionsJobsSubmit
+    , ProjectsRegionsJobsSubmit
+
+    -- * Request Lenses
+    , prjsXgafv
+    , prjsUploadProtocol
+    , prjsPp
+    , prjsAccessToken
+    , prjsUploadType
+    , prjsPayload
+    , prjsBearerToken
+    , prjsRegion
+    , prjsProjectId
+    , prjsCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.jobs.submit@ method which the
+-- 'ProjectsRegionsJobsSubmit' request conforms to.
+type ProjectsRegionsJobsSubmitResource =
+     "v1" :>
+       "projects" :>
+         Capture "projectId" Text :>
+           "regions" :>
+             Capture "region" Text :>
+               "jobs:submit" :>
+                 QueryParam "$.xgafv" Text :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "pp" Bool :>
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 ReqBody '[JSON] SubmitJobRequest :>
+                                   Post '[JSON] Job
+
+-- | Submits a job to a cluster.
+--
+-- /See:/ 'projectsRegionsJobsSubmit' smart constructor.
+data ProjectsRegionsJobsSubmit = ProjectsRegionsJobsSubmit'
+    { _prjsXgafv          :: !(Maybe Text)
+    , _prjsUploadProtocol :: !(Maybe Text)
+    , _prjsPp             :: !Bool
+    , _prjsAccessToken    :: !(Maybe Text)
+    , _prjsUploadType     :: !(Maybe Text)
+    , _prjsPayload        :: !SubmitJobRequest
+    , _prjsBearerToken    :: !(Maybe Text)
+    , _prjsRegion         :: !Text
+    , _prjsProjectId      :: !Text
+    , _prjsCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsJobsSubmit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prjsXgafv'
+--
+-- * 'prjsUploadProtocol'
+--
+-- * 'prjsPp'
+--
+-- * 'prjsAccessToken'
+--
+-- * 'prjsUploadType'
+--
+-- * 'prjsPayload'
+--
+-- * 'prjsBearerToken'
+--
+-- * 'prjsRegion'
+--
+-- * 'prjsProjectId'
+--
+-- * 'prjsCallback'
+projectsRegionsJobsSubmit
+    :: SubmitJobRequest -- ^ 'prjsPayload'
+    -> Text -- ^ 'prjsRegion'
+    -> Text -- ^ 'prjsProjectId'
+    -> ProjectsRegionsJobsSubmit
+projectsRegionsJobsSubmit pPrjsPayload_ pPrjsRegion_ pPrjsProjectId_ =
+    ProjectsRegionsJobsSubmit'
+    { _prjsXgafv = Nothing
+    , _prjsUploadProtocol = Nothing
+    , _prjsPp = True
+    , _prjsAccessToken = Nothing
+    , _prjsUploadType = Nothing
+    , _prjsPayload = pPrjsPayload_
+    , _prjsBearerToken = Nothing
+    , _prjsRegion = pPrjsRegion_
+    , _prjsProjectId = pPrjsProjectId_
+    , _prjsCallback = Nothing
+    }
+
+-- | V1 error format.
+prjsXgafv :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsXgafv
+  = lens _prjsXgafv (\ s a -> s{_prjsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prjsUploadProtocol :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsUploadProtocol
+  = lens _prjsUploadProtocol
+      (\ s a -> s{_prjsUploadProtocol = a})
+
+-- | Pretty-print response.
+prjsPp :: Lens' ProjectsRegionsJobsSubmit Bool
+prjsPp = lens _prjsPp (\ s a -> s{_prjsPp = a})
+
+-- | OAuth access token.
+prjsAccessToken :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsAccessToken
+  = lens _prjsAccessToken
+      (\ s a -> s{_prjsAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prjsUploadType :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsUploadType
+  = lens _prjsUploadType
+      (\ s a -> s{_prjsUploadType = a})
+
+-- | Multipart request metadata.
+prjsPayload :: Lens' ProjectsRegionsJobsSubmit SubmitJobRequest
+prjsPayload
+  = lens _prjsPayload (\ s a -> s{_prjsPayload = a})
+
+-- | OAuth bearer token.
+prjsBearerToken :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsBearerToken
+  = lens _prjsBearerToken
+      (\ s a -> s{_prjsBearerToken = a})
+
+-- | [Required] The Cloud Dataproc region in which to handle the request.
+prjsRegion :: Lens' ProjectsRegionsJobsSubmit Text
+prjsRegion
+  = lens _prjsRegion (\ s a -> s{_prjsRegion = a})
+
+-- | [Required] The ID of the Google Cloud Platform project that the job
+-- belongs to.
+prjsProjectId :: Lens' ProjectsRegionsJobsSubmit Text
+prjsProjectId
+  = lens _prjsProjectId
+      (\ s a -> s{_prjsProjectId = a})
+
+-- | JSONP
+prjsCallback :: Lens' ProjectsRegionsJobsSubmit (Maybe Text)
+prjsCallback
+  = lens _prjsCallback (\ s a -> s{_prjsCallback = a})
+
+instance GoogleRequest ProjectsRegionsJobsSubmit
+         where
+        type Rs ProjectsRegionsJobsSubmit = Job
+        type Scopes ProjectsRegionsJobsSubmit =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsJobsSubmit'{..}
+          = go _prjsProjectId _prjsRegion _prjsXgafv
+              _prjsUploadProtocol
+              (Just _prjsPp)
+              _prjsAccessToken
+              _prjsUploadType
+              _prjsBearerToken
+              _prjsCallback
+              (Just AltJSON)
+              _prjsPayload
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsJobsSubmitResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Cancel.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Cancel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Cancel.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Operations.Cancel
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.operations.cancel@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Cancel
+    (
+    -- * REST Resource
+      ProjectsRegionsOperationsCancelResource
+
+    -- * Creating a Request
+    , projectsRegionsOperationsCancel
+    , ProjectsRegionsOperationsCancel
+
+    -- * Request Lenses
+    , procXgafv
+    , procUploadProtocol
+    , procPp
+    , procAccessToken
+    , procUploadType
+    , procBearerToken
+    , procName
+    , procCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.operations.cancel@ method which the
+-- 'ProjectsRegionsOperationsCancel' request conforms to.
+type ProjectsRegionsOperationsCancelResource =
+     "v1" :>
+       CaptureMode "name" "cancel" Text :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] Empty
+
+-- | Starts asynchronous cancellation on a long-running operation. The server
+-- makes a best effort to cancel the operation, but success is not
+-- guaranteed. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`. Clients can use
+-- Operations.GetOperation or other methods to check whether the
+-- cancellation succeeded or whether the operation completed despite
+-- cancellation.
+--
+-- /See:/ 'projectsRegionsOperationsCancel' smart constructor.
+data ProjectsRegionsOperationsCancel = ProjectsRegionsOperationsCancel'
+    { _procXgafv          :: !(Maybe Text)
+    , _procUploadProtocol :: !(Maybe Text)
+    , _procPp             :: !Bool
+    , _procAccessToken    :: !(Maybe Text)
+    , _procUploadType     :: !(Maybe Text)
+    , _procBearerToken    :: !(Maybe Text)
+    , _procName           :: !Text
+    , _procCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsOperationsCancel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'procXgafv'
+--
+-- * 'procUploadProtocol'
+--
+-- * 'procPp'
+--
+-- * 'procAccessToken'
+--
+-- * 'procUploadType'
+--
+-- * 'procBearerToken'
+--
+-- * 'procName'
+--
+-- * 'procCallback'
+projectsRegionsOperationsCancel
+    :: Text -- ^ 'procName'
+    -> ProjectsRegionsOperationsCancel
+projectsRegionsOperationsCancel pProcName_ =
+    ProjectsRegionsOperationsCancel'
+    { _procXgafv = Nothing
+    , _procUploadProtocol = Nothing
+    , _procPp = True
+    , _procAccessToken = Nothing
+    , _procUploadType = Nothing
+    , _procBearerToken = Nothing
+    , _procName = pProcName_
+    , _procCallback = Nothing
+    }
+
+-- | V1 error format.
+procXgafv :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procXgafv
+  = lens _procXgafv (\ s a -> s{_procXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+procUploadProtocol :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procUploadProtocol
+  = lens _procUploadProtocol
+      (\ s a -> s{_procUploadProtocol = a})
+
+-- | Pretty-print response.
+procPp :: Lens' ProjectsRegionsOperationsCancel Bool
+procPp = lens _procPp (\ s a -> s{_procPp = a})
+
+-- | OAuth access token.
+procAccessToken :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procAccessToken
+  = lens _procAccessToken
+      (\ s a -> s{_procAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+procUploadType :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procUploadType
+  = lens _procUploadType
+      (\ s a -> s{_procUploadType = a})
+
+-- | OAuth bearer token.
+procBearerToken :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procBearerToken
+  = lens _procBearerToken
+      (\ s a -> s{_procBearerToken = a})
+
+-- | The name of the operation resource to be cancelled.
+procName :: Lens' ProjectsRegionsOperationsCancel Text
+procName = lens _procName (\ s a -> s{_procName = a})
+
+-- | JSONP
+procCallback :: Lens' ProjectsRegionsOperationsCancel (Maybe Text)
+procCallback
+  = lens _procCallback (\ s a -> s{_procCallback = a})
+
+instance GoogleRequest
+         ProjectsRegionsOperationsCancel where
+        type Rs ProjectsRegionsOperationsCancel = Empty
+        type Scopes ProjectsRegionsOperationsCancel =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsOperationsCancel'{..}
+          = go _procName _procXgafv _procUploadProtocol
+              (Just _procPp)
+              _procAccessToken
+              _procUploadType
+              _procBearerToken
+              _procCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsOperationsCancelResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Delete.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Delete.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Operations.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.operations.delete@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Delete
+    (
+    -- * REST Resource
+      ProjectsRegionsOperationsDeleteResource
+
+    -- * Creating a Request
+    , projectsRegionsOperationsDelete
+    , ProjectsRegionsOperationsDelete
+
+    -- * Request Lenses
+    , prodXgafv
+    , prodUploadProtocol
+    , prodPp
+    , prodAccessToken
+    , prodUploadType
+    , prodBearerToken
+    , prodName
+    , prodCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.operations.delete@ method which the
+-- 'ProjectsRegionsOperationsDelete' request conforms to.
+type ProjectsRegionsOperationsDeleteResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a long-running operation. This method indicates that the client
+-- is no longer interested in the operation result. It does not cancel the
+-- operation. If the server doesn\'t support this method, it returns
+-- \`google.rpc.Code.UNIMPLEMENTED\`.
+--
+-- /See:/ 'projectsRegionsOperationsDelete' smart constructor.
+data ProjectsRegionsOperationsDelete = ProjectsRegionsOperationsDelete'
+    { _prodXgafv          :: !(Maybe Text)
+    , _prodUploadProtocol :: !(Maybe Text)
+    , _prodPp             :: !Bool
+    , _prodAccessToken    :: !(Maybe Text)
+    , _prodUploadType     :: !(Maybe Text)
+    , _prodBearerToken    :: !(Maybe Text)
+    , _prodName           :: !Text
+    , _prodCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsOperationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prodXgafv'
+--
+-- * 'prodUploadProtocol'
+--
+-- * 'prodPp'
+--
+-- * 'prodAccessToken'
+--
+-- * 'prodUploadType'
+--
+-- * 'prodBearerToken'
+--
+-- * 'prodName'
+--
+-- * 'prodCallback'
+projectsRegionsOperationsDelete
+    :: Text -- ^ 'prodName'
+    -> ProjectsRegionsOperationsDelete
+projectsRegionsOperationsDelete pProdName_ =
+    ProjectsRegionsOperationsDelete'
+    { _prodXgafv = Nothing
+    , _prodUploadProtocol = Nothing
+    , _prodPp = True
+    , _prodAccessToken = Nothing
+    , _prodUploadType = Nothing
+    , _prodBearerToken = Nothing
+    , _prodName = pProdName_
+    , _prodCallback = Nothing
+    }
+
+-- | V1 error format.
+prodXgafv :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodXgafv
+  = lens _prodXgafv (\ s a -> s{_prodXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prodUploadProtocol :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodUploadProtocol
+  = lens _prodUploadProtocol
+      (\ s a -> s{_prodUploadProtocol = a})
+
+-- | Pretty-print response.
+prodPp :: Lens' ProjectsRegionsOperationsDelete Bool
+prodPp = lens _prodPp (\ s a -> s{_prodPp = a})
+
+-- | OAuth access token.
+prodAccessToken :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodAccessToken
+  = lens _prodAccessToken
+      (\ s a -> s{_prodAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prodUploadType :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodUploadType
+  = lens _prodUploadType
+      (\ s a -> s{_prodUploadType = a})
+
+-- | OAuth bearer token.
+prodBearerToken :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodBearerToken
+  = lens _prodBearerToken
+      (\ s a -> s{_prodBearerToken = a})
+
+-- | The name of the operation resource to be deleted.
+prodName :: Lens' ProjectsRegionsOperationsDelete Text
+prodName = lens _prodName (\ s a -> s{_prodName = a})
+
+-- | JSONP
+prodCallback :: Lens' ProjectsRegionsOperationsDelete (Maybe Text)
+prodCallback
+  = lens _prodCallback (\ s a -> s{_prodCallback = a})
+
+instance GoogleRequest
+         ProjectsRegionsOperationsDelete where
+        type Rs ProjectsRegionsOperationsDelete = Empty
+        type Scopes ProjectsRegionsOperationsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsOperationsDelete'{..}
+          = go _prodName _prodXgafv _prodUploadProtocol
+              (Just _prodPp)
+              _prodAccessToken
+              _prodUploadType
+              _prodBearerToken
+              _prodCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsOperationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Get.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/Get.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Operations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.operations.get@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Operations.Get
+    (
+    -- * REST Resource
+      ProjectsRegionsOperationsGetResource
+
+    -- * Creating a Request
+    , projectsRegionsOperationsGet
+    , ProjectsRegionsOperationsGet
+
+    -- * Request Lenses
+    , progXgafv
+    , progUploadProtocol
+    , progPp
+    , progAccessToken
+    , progUploadType
+    , progBearerToken
+    , progName
+    , progCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.operations.get@ method which the
+-- 'ProjectsRegionsOperationsGet' request conforms to.
+type ProjectsRegionsOperationsGetResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'projectsRegionsOperationsGet' smart constructor.
+data ProjectsRegionsOperationsGet = ProjectsRegionsOperationsGet'
+    { _progXgafv          :: !(Maybe Text)
+    , _progUploadProtocol :: !(Maybe Text)
+    , _progPp             :: !Bool
+    , _progAccessToken    :: !(Maybe Text)
+    , _progUploadType     :: !(Maybe Text)
+    , _progBearerToken    :: !(Maybe Text)
+    , _progName           :: !Text
+    , _progCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'progXgafv'
+--
+-- * 'progUploadProtocol'
+--
+-- * 'progPp'
+--
+-- * 'progAccessToken'
+--
+-- * 'progUploadType'
+--
+-- * 'progBearerToken'
+--
+-- * 'progName'
+--
+-- * 'progCallback'
+projectsRegionsOperationsGet
+    :: Text -- ^ 'progName'
+    -> ProjectsRegionsOperationsGet
+projectsRegionsOperationsGet pProgName_ =
+    ProjectsRegionsOperationsGet'
+    { _progXgafv = Nothing
+    , _progUploadProtocol = Nothing
+    , _progPp = True
+    , _progAccessToken = Nothing
+    , _progUploadType = Nothing
+    , _progBearerToken = Nothing
+    , _progName = pProgName_
+    , _progCallback = Nothing
+    }
+
+-- | V1 error format.
+progXgafv :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progXgafv
+  = lens _progXgafv (\ s a -> s{_progXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+progUploadProtocol :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progUploadProtocol
+  = lens _progUploadProtocol
+      (\ s a -> s{_progUploadProtocol = a})
+
+-- | Pretty-print response.
+progPp :: Lens' ProjectsRegionsOperationsGet Bool
+progPp = lens _progPp (\ s a -> s{_progPp = a})
+
+-- | OAuth access token.
+progAccessToken :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progAccessToken
+  = lens _progAccessToken
+      (\ s a -> s{_progAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+progUploadType :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progUploadType
+  = lens _progUploadType
+      (\ s a -> s{_progUploadType = a})
+
+-- | OAuth bearer token.
+progBearerToken :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progBearerToken
+  = lens _progBearerToken
+      (\ s a -> s{_progBearerToken = a})
+
+-- | The name of the operation resource.
+progName :: Lens' ProjectsRegionsOperationsGet Text
+progName = lens _progName (\ s a -> s{_progName = a})
+
+-- | JSONP
+progCallback :: Lens' ProjectsRegionsOperationsGet (Maybe Text)
+progCallback
+  = lens _progCallback (\ s a -> s{_progCallback = a})
+
+instance GoogleRequest ProjectsRegionsOperationsGet
+         where
+        type Rs ProjectsRegionsOperationsGet = Operation
+        type Scopes ProjectsRegionsOperationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsOperationsGet'{..}
+          = go _progName _progXgafv _progUploadProtocol
+              (Just _progPp)
+              _progAccessToken
+              _progUploadType
+              _progBearerToken
+              _progCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsRegionsOperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/List.hs b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Dataproc/Projects/Regions/Operations/List.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Dataproc.Projects.Regions.Operations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding below allows API services to override the binding
+-- to use different resource name schemes, such as
+-- \`users\/*\/operations\`.
+--
+-- /See:/ <https://cloud.google.com/dataproc/ Google Cloud Dataproc API Reference> for @dataproc.projects.regions.operations.list@.
+module Network.Google.Resource.Dataproc.Projects.Regions.Operations.List
+    (
+    -- * REST Resource
+      ProjectsRegionsOperationsListResource
+
+    -- * Creating a Request
+    , projectsRegionsOperationsList
+    , ProjectsRegionsOperationsList
+
+    -- * Request Lenses
+    , prolXgafv
+    , prolUploadProtocol
+    , prolPp
+    , prolAccessToken
+    , prolUploadType
+    , prolBearerToken
+    , prolName
+    , prolFilter
+    , prolPageToken
+    , prolPageSize
+    , prolCallback
+    ) where
+
+import           Network.Google.Dataproc.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @dataproc.projects.regions.operations.list@ method which the
+-- 'ProjectsRegionsOperationsList' request conforms to.
+type ProjectsRegionsOperationsListResource =
+     "v1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "filter" Text :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "pageSize" (Textual Int32) :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Get '[JSON] ListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding below allows API services to override the binding
+-- to use different resource name schemes, such as
+-- \`users\/*\/operations\`.
+--
+-- /See:/ 'projectsRegionsOperationsList' smart constructor.
+data ProjectsRegionsOperationsList = ProjectsRegionsOperationsList'
+    { _prolXgafv          :: !(Maybe Text)
+    , _prolUploadProtocol :: !(Maybe Text)
+    , _prolPp             :: !Bool
+    , _prolAccessToken    :: !(Maybe Text)
+    , _prolUploadType     :: !(Maybe Text)
+    , _prolBearerToken    :: !(Maybe Text)
+    , _prolName           :: !Text
+    , _prolFilter         :: !(Maybe Text)
+    , _prolPageToken      :: !(Maybe Text)
+    , _prolPageSize       :: !(Maybe (Textual Int32))
+    , _prolCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsRegionsOperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prolXgafv'
+--
+-- * 'prolUploadProtocol'
+--
+-- * 'prolPp'
+--
+-- * 'prolAccessToken'
+--
+-- * 'prolUploadType'
+--
+-- * 'prolBearerToken'
+--
+-- * 'prolName'
+--
+-- * 'prolFilter'
+--
+-- * 'prolPageToken'
+--
+-- * 'prolPageSize'
+--
+-- * 'prolCallback'
+projectsRegionsOperationsList
+    :: Text -- ^ 'prolName'
+    -> ProjectsRegionsOperationsList
+projectsRegionsOperationsList pProlName_ =
+    ProjectsRegionsOperationsList'
+    { _prolXgafv = Nothing
+    , _prolUploadProtocol = Nothing
+    , _prolPp = True
+    , _prolAccessToken = Nothing
+    , _prolUploadType = Nothing
+    , _prolBearerToken = Nothing
+    , _prolName = pProlName_
+    , _prolFilter = Nothing
+    , _prolPageToken = Nothing
+    , _prolPageSize = Nothing
+    , _prolCallback = Nothing
+    }
+
+-- | V1 error format.
+prolXgafv :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolXgafv
+  = lens _prolXgafv (\ s a -> s{_prolXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+prolUploadProtocol :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolUploadProtocol
+  = lens _prolUploadProtocol
+      (\ s a -> s{_prolUploadProtocol = a})
+
+-- | Pretty-print response.
+prolPp :: Lens' ProjectsRegionsOperationsList Bool
+prolPp = lens _prolPp (\ s a -> s{_prolPp = a})
+
+-- | OAuth access token.
+prolAccessToken :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolAccessToken
+  = lens _prolAccessToken
+      (\ s a -> s{_prolAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+prolUploadType :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolUploadType
+  = lens _prolUploadType
+      (\ s a -> s{_prolUploadType = a})
+
+-- | OAuth bearer token.
+prolBearerToken :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolBearerToken
+  = lens _prolBearerToken
+      (\ s a -> s{_prolBearerToken = a})
+
+-- | The name of the operation collection.
+prolName :: Lens' ProjectsRegionsOperationsList Text
+prolName = lens _prolName (\ s a -> s{_prolName = a})
+
+-- | The standard list filter.
+prolFilter :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolFilter
+  = lens _prolFilter (\ s a -> s{_prolFilter = a})
+
+-- | The standard list page token.
+prolPageToken :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolPageToken
+  = lens _prolPageToken
+      (\ s a -> s{_prolPageToken = a})
+
+-- | The standard list page size.
+prolPageSize :: Lens' ProjectsRegionsOperationsList (Maybe Int32)
+prolPageSize
+  = lens _prolPageSize (\ s a -> s{_prolPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+prolCallback :: Lens' ProjectsRegionsOperationsList (Maybe Text)
+prolCallback
+  = lens _prolCallback (\ s a -> s{_prolCallback = a})
+
+instance GoogleRequest ProjectsRegionsOperationsList
+         where
+        type Rs ProjectsRegionsOperationsList =
+             ListOperationsResponse
+        type Scopes ProjectsRegionsOperationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsRegionsOperationsList'{..}
+          = go _prolName _prolXgafv _prolUploadProtocol
+              (Just _prolPp)
+              _prolAccessToken
+              _prolUploadType
+              _prolBearerToken
+              _prolFilter
+              _prolPageToken
+              _prolPageSize
+              _prolCallback
+              (Just AltJSON)
+              dataprocService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsRegionsOperationsListResource)
+                      mempty
diff --git a/gogol-dataproc.cabal b/gogol-dataproc.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-dataproc.cabal
@@ -0,0 +1,60 @@
+name:                  gogol-dataproc
+version:               0.1.0
+synopsis:              Google Cloud Dataproc SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Manages Hadoop-based clusters and jobs on Google Cloud Platform.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Dataproc
+        , Network.Google.Dataproc.Types
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Create
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Delete
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Diagnose
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Get
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.List
+        , Network.Google.Resource.Dataproc.Projects.Regions.Clusters.Patch
+        , Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Cancel
+        , Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Delete
+        , Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Get
+        , Network.Google.Resource.Dataproc.Projects.Regions.Jobs.List
+        , Network.Google.Resource.Dataproc.Projects.Regions.Jobs.Submit
+        , Network.Google.Resource.Dataproc.Projects.Regions.Operations.Cancel
+        , Network.Google.Resource.Dataproc.Projects.Regions.Operations.Delete
+        , Network.Google.Resource.Dataproc.Projects.Regions.Operations.Get
+        , Network.Google.Resource.Dataproc.Projects.Regions.Operations.List
+
+    other-modules:
+          Network.Google.Dataproc.Types.Product
+        , Network.Google.Dataproc.Types.Sum
+
+    build-depends:
+          gogol-core == 0.1.0.*
+        , base       >= 4.7 && < 5
