diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright &copy; 2016 _SoundCloud Ltd._
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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/client/Main.hs b/client/Main.hs
new file mode 100644
--- /dev/null
+++ b/client/Main.hs
@@ -0,0 +1,159 @@
+-- This source code is distributed under the terms of a MIT license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE TypeOperators #-}
+
+module Main where
+
+import Control.Monad (void)
+import Control.Monad.Trans.Either
+import Control.Monad.IO.Class
+import Servant.API
+import Servant.Client
+
+import Data.List.Split (splitOn)
+import Network.URI (URI (..), URIAuth (..), parseURI)
+import Data.Maybe (fromMaybe)
+import Test.QuickCheck
+import Control.Monad
+import Kubernetes.Model.V1.Node
+import Kubernetes.Model.V1.PersistentVolumeClaimList
+import Kubernetes.Model.V1.ObjectFieldSelector
+import Kubernetes.Model.V1.SELinuxOptions
+import Kubernetes.Model.V1.ContainerStateRunning
+import Kubernetes.Model.V1.VolumeMount
+import Kubernetes.Model.V1.PersistentVolumeClaimSpec
+import Kubernetes.Model.V1.CephFSVolumeSource
+import Kubernetes.Model.V1.DownwardAPIVolumeSource
+import Kubernetes.Model.Unversioned.StatusCause
+import Kubernetes.Model.V1.GCEPersistentDiskVolumeSource
+import Kubernetes.Model.V1.ResourceQuotaSpec
+import Kubernetes.Model.V1.NamespaceStatus
+import Kubernetes.Model.V1.NamespaceSpec
+import Kubernetes.Model.V1.PersistentVolume
+import Kubernetes.Model.V1.ConfigMapList
+import Kubernetes.Model.V1.PersistentVolumeStatus
+import Kubernetes.Model.V1.EndpointsList
+import Kubernetes.Model.V1.GitRepoVolumeSource
+import Kubernetes.Model.V1.ConfigMap
+import Kubernetes.Model.V1.Capabilities
+import Kubernetes.Model.V1.PodTemplateList
+import Kubernetes.Model.V1.NodeCondition
+import Kubernetes.Model.V1.LocalObjectReference
+import Kubernetes.Model.V1.ResourceQuotaStatus
+import Kubernetes.Model.V1.ExecAction
+import Kubernetes.Model.V1.ObjectMeta
+import Kubernetes.Model.V1.LimitRangeSpec
+import Kubernetes.Model.V1.ISCSIVolumeSource
+import Kubernetes.Model.V1.EmptyDirVolumeSource
+import Kubernetes.Model.V1.NodeList
+import Kubernetes.Model.Unversioned.Patch
+import Kubernetes.Model.V1.PersistentVolumeClaim
+import Kubernetes.Model.V1.NamespaceList
+import Kubernetes.Model.V1.ServiceAccount
+import Kubernetes.Model.V1.NodeAddress
+import Kubernetes.Model.V1.Namespace
+import Kubernetes.Model.V1.FlockerVolumeSource
+import Kubernetes.Model.V1.PersistentVolumeClaimVolumeSource
+import Kubernetes.Model.Unversioned.ListMeta
+import Kubernetes.Model.V1.ResourceQuotaList
+import Kubernetes.Model.V1.PersistentVolumeClaimStatus
+import Kubernetes.Model.V1.EndpointSubset
+import Kubernetes.Model.V1.SecretVolumeSource
+import Kubernetes.Model.V1.FlexVolumeSource
+import Kubernetes.Model.V1.EnvVarSource
+import Kubernetes.Model.V1.LoadBalancerIngress
+import Kubernetes.Model.V1.Service
+import Kubernetes.Model.V1.ServiceAccountList
+import Kubernetes.Model.V1.LimitRangeList
+import Kubernetes.Model.V1.Endpoints
+import Kubernetes.Model.V1.DeleteOptions
+import Kubernetes.Model.V1.Volume
+-- import Kubernetes.Model.integer
+import Kubernetes.Model.V1.Probe
+import Kubernetes.Model.V1.SecretKeySelector
+import Kubernetes.Model.V1.ReplicationController
+import Kubernetes.Model.V1.Capability
+import Kubernetes.Model.V1.LimitRange
+import Kubernetes.Model.V1.DownwardAPIVolumeFile
+import Kubernetes.Model.V1.PodStatus
+import Kubernetes.Model.V1.PodSpec
+import Kubernetes.Model.V1.ContainerPort
+import Kubernetes.Model.V1.ResourceQuota
+import Kubernetes.Model.V1.EventList
+import Kubernetes.Model.V1.Lifecycle
+import Kubernetes.Model.V1.ReplicationControllerSpec
+import Kubernetes.Model.V1.NodeStatus
+import Kubernetes.Model.V1.GlusterfsVolumeSource
+import Kubernetes.Model.V1.Handler
+import Kubernetes.Model.V1.EventSource
+import Kubernetes.Model.V1.PodCondition
+import Kubernetes.Model.V1.RBDVolumeSource
+import Kubernetes.Model.V1.PodTemplate
+import Kubernetes.Model.V1.ServiceStatus
+import Kubernetes.Model.V1.NFSVolumeSource
+import Kubernetes.Model.V1.FCVolumeSource
+import Kubernetes.Model.V1.EndpointPort
+import Kubernetes.Model.V1.TCPSocketAction
+import Kubernetes.Model.Unversioned.StatusDetails
+import Kubernetes.Model.V1.HTTPGetAction
+import Kubernetes.Model.V1.LoadBalancerStatus
+import Kubernetes.Model.V1.SecretList
+import Kubernetes.Model.V1.Container
+import Kubernetes.Model.V1.PersistentVolumeSpec
+import Kubernetes.Model.V1.PodSecurityContext
+import Kubernetes.Model.V1.ReplicationControllerStatus
+import Kubernetes.Model.V1.FinalizerName
+import Kubernetes.Model.V1.ServicePort
+import Kubernetes.Model.V1.ComponentCondition
+import Kubernetes.Model.V1.ComponentStatusList
+import Kubernetes.Model.V1.HostPathVolumeSource
+import Kubernetes.Model.Json.WatchEvent
+import Kubernetes.Model.V1.ContainerStateTerminated
+import Kubernetes.Model.V1.Binding
+import Kubernetes.Model.V1.CinderVolumeSource
+import Kubernetes.Model.V1.ContainerState
+import Kubernetes.Model.V1.SecurityContext
+import Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource
+import Kubernetes.Model.V1.ContainerStatus
+import Kubernetes.Model.V1.ContainerImage
+import Kubernetes.Model.V1.ReplicationControllerList
+import Kubernetes.Model.V1.NodeDaemonEndpoints
+import Kubernetes.Model.V1.Secret
+import Kubernetes.Model.V1.Event
+import Kubernetes.Model.V1.EnvVar
+import Kubernetes.Model.V1.ResourceRequirements
+import Kubernetes.Model.V1.PersistentVolumeAccessMode
+import Kubernetes.Model.V1.ComponentStatus
+import Kubernetes.Model.V1.LimitRangeItem
+import Kubernetes.Model.V1.PodTemplateSpec
+import Kubernetes.Model.V1.PodList
+import Kubernetes.Model.V1.ServiceList
+import Kubernetes.Model.V1.PersistentVolumeList
+import Kubernetes.Model.V1.ObjectReference
+import Kubernetes.Model.V1.ContainerStateWaiting
+import Kubernetes.Model.Unversioned.Status
+import Kubernetes.Model.V1.ConfigMapKeySelector
+import Kubernetes.Model.V1.NodeSystemInfo
+import Kubernetes.Model.V1.ServiceSpec
+import Kubernetes.Model.V1.Pod
+import Kubernetes.Model.V1.NodeSpec
+import Kubernetes.Model.V1.EndpointAddress
+import Kubernetes.Model.V1.DaemonEndpoint
+import Kubernetes.Api.ApivApi
+
+-- userClient :: IO ()
+-- userClient = do 
+--     users <- sample' (arbitrary :: Gen String)
+--     let user = last users
+--     void . runEitherT $ do
+--         getUserByName user >>= (liftIO . putStrLn . show)
+
+main :: IO ()
+main = putStrLn "Hello Server!"
diff --git a/haskell-kubernetes.cabal b/haskell-kubernetes.cabal
new file mode 100644
--- /dev/null
+++ b/haskell-kubernetes.cabal
@@ -0,0 +1,194 @@
+name:                haskell-kubernetes
+version:             0.3.2
+synopsis:            Haskell bindings to the Kubernetes API (via swagger-codegen)
+description:         Please see README.md
+homepage:            https://github.com/soundcloud/haskell-kubernetes
+license:             MIT
+license-file:        LICENSE
+author:              Aaron Levin
+maintainer:          Aaron Levin <aaron.levin@soundcloud.com>
+copyright:           2016 - SoundCloud Ltd.
+category:            Web
+build-type:          Simple
+-- extra-source-files:
+cabal-version:       >= 1.10
+description:
+  This project contains haskell bindings to the v1 Kubernetes api generated via <https://github.com/swagger-api/swagger-codegen swagger-codegen>. The client and (mock) server generated use the <https://github.com/haskell-servant/servant servant> project, thanks to the work of <(https://github.com/algas Masahiro Yamauchi>!
+
+library
+  hs-source-dirs:      lib
+  exposed-modules:     Kubernetes.Apis
+                     , Kubernetes.Api.ApivApi
+                     , Kubernetes.Model.Json.WatchEvent
+                     , Kubernetes.Model.Unversioned.ListMeta
+                     , Kubernetes.Model.Unversioned.Patch
+                     , Kubernetes.Model.Unversioned.Status
+                     , Kubernetes.Model.Unversioned.StatusCause
+                     , Kubernetes.Model.Unversioned.StatusDetails
+                     , Kubernetes.Model.V1.Any
+                     , Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource
+                     , Kubernetes.Model.V1.Binding
+                     , Kubernetes.Model.V1.Capabilities
+                     , Kubernetes.Model.V1.Capability
+                     , Kubernetes.Model.V1.CephFSVolumeSource
+                     , Kubernetes.Model.V1.CinderVolumeSource
+                     , Kubernetes.Model.V1.ComponentCondition
+                     , Kubernetes.Model.V1.ComponentStatus
+                     , Kubernetes.Model.V1.ComponentStatusList
+                     , Kubernetes.Model.V1.ConfigMap
+                     , Kubernetes.Model.V1.ConfigMapKeySelector
+                     , Kubernetes.Model.V1.ConfigMapList
+                     , Kubernetes.Model.V1.Container
+                     , Kubernetes.Model.V1.ContainerImage
+                     , Kubernetes.Model.V1.ContainerPort
+                     , Kubernetes.Model.V1.ContainerState
+                     , Kubernetes.Model.V1.ContainerStateRunning
+                     , Kubernetes.Model.V1.ContainerStateTerminated
+                     , Kubernetes.Model.V1.ContainerStateWaiting
+                     , Kubernetes.Model.V1.ContainerStatus
+                     , Kubernetes.Model.V1.DaemonEndpoint
+                     , Kubernetes.Model.V1.DeleteOptions
+                     , Kubernetes.Model.V1.DownwardAPIVolumeFile
+                     , Kubernetes.Model.V1.DownwardAPIVolumeSource
+                     , Kubernetes.Model.V1.EmptyDirVolumeSource
+                     , Kubernetes.Model.V1.EndpointAddress
+                     , Kubernetes.Model.V1.EndpointPort
+                     , Kubernetes.Model.V1.EndpointSubset
+                     , Kubernetes.Model.V1.Endpoints
+                     , Kubernetes.Model.V1.EndpointsList
+                     , Kubernetes.Model.V1.EnvVar
+                     , Kubernetes.Model.V1.EnvVarSource
+                     , Kubernetes.Model.V1.Event
+                     , Kubernetes.Model.V1.EventList
+                     , Kubernetes.Model.V1.EventSource
+                     , Kubernetes.Model.V1.ExecAction
+                     , Kubernetes.Model.V1.FCVolumeSource
+                     , Kubernetes.Model.V1.FinalizerName
+                     , Kubernetes.Model.V1.FlexVolumeSource
+                     , Kubernetes.Model.V1.FlockerVolumeSource
+                     , Kubernetes.Model.V1.GCEPersistentDiskVolumeSource
+                     , Kubernetes.Model.V1.GitRepoVolumeSource
+                     , Kubernetes.Model.V1.GlusterfsVolumeSource
+                     , Kubernetes.Model.V1.HTTPGetAction
+                     , Kubernetes.Model.V1.Handler
+                     , Kubernetes.Model.V1.HostPathVolumeSource
+                     , Kubernetes.Model.V1.ISCSIVolumeSource
+                     , Kubernetes.Model.V1.Lifecycle
+                     , Kubernetes.Model.V1.LimitRange
+                     , Kubernetes.Model.V1.LimitRangeItem
+                     , Kubernetes.Model.V1.LimitRangeList
+                     , Kubernetes.Model.V1.LimitRangeSpec
+                     , Kubernetes.Model.V1.LoadBalancerIngress
+                     , Kubernetes.Model.V1.LoadBalancerStatus
+                     , Kubernetes.Model.V1.LocalObjectReference
+                     , Kubernetes.Model.V1.NFSVolumeSource
+                     , Kubernetes.Model.V1.Namespace
+                     , Kubernetes.Model.V1.NamespaceList
+                     , Kubernetes.Model.V1.NamespaceSpec
+                     , Kubernetes.Model.V1.NamespaceStatus
+                     , Kubernetes.Model.V1.Node
+                     , Kubernetes.Model.V1.NodeAddress
+                     , Kubernetes.Model.V1.NodeCondition
+                     , Kubernetes.Model.V1.NodeDaemonEndpoints
+                     , Kubernetes.Model.V1.NodeList
+                     , Kubernetes.Model.V1.NodeSpec
+                     , Kubernetes.Model.V1.NodeStatus
+                     , Kubernetes.Model.V1.NodeSystemInfo
+                     , Kubernetes.Model.V1.ObjectFieldSelector
+                     , Kubernetes.Model.V1.ObjectMeta
+                     , Kubernetes.Model.V1.ObjectReference
+                     , Kubernetes.Model.V1.PersistentVolume
+                     , Kubernetes.Model.V1.PersistentVolumeAccessMode
+                     , Kubernetes.Model.V1.PersistentVolumeClaim
+                     , Kubernetes.Model.V1.PersistentVolumeClaimList
+                     , Kubernetes.Model.V1.PersistentVolumeClaimSpec
+                     , Kubernetes.Model.V1.PersistentVolumeClaimStatus
+                     , Kubernetes.Model.V1.PersistentVolumeClaimVolumeSource
+                     , Kubernetes.Model.V1.PersistentVolumeList
+                     , Kubernetes.Model.V1.PersistentVolumeSpec
+                     , Kubernetes.Model.V1.PersistentVolumeStatus
+                     , Kubernetes.Model.V1.Pod
+                     , Kubernetes.Model.V1.PodCondition
+                     , Kubernetes.Model.V1.PodList
+                     , Kubernetes.Model.V1.PodSecurityContext
+                     , Kubernetes.Model.V1.PodSpec
+                     , Kubernetes.Model.V1.PodStatus
+                     , Kubernetes.Model.V1.PodTemplate
+                     , Kubernetes.Model.V1.PodTemplateList
+                     , Kubernetes.Model.V1.PodTemplateSpec
+                     , Kubernetes.Model.V1.Probe
+                     , Kubernetes.Model.V1.RBDVolumeSource
+                     , Kubernetes.Model.V1.ReplicationController
+                     , Kubernetes.Model.V1.ReplicationControllerList
+                     , Kubernetes.Model.V1.ReplicationControllerSpec
+                     , Kubernetes.Model.V1.ReplicationControllerStatus
+                     , Kubernetes.Model.V1.ResourceQuota
+                     , Kubernetes.Model.V1.ResourceQuotaList
+                     , Kubernetes.Model.V1.ResourceQuotaSpec
+                     , Kubernetes.Model.V1.ResourceQuotaStatus
+                     , Kubernetes.Model.V1.ResourceRequirements
+                     , Kubernetes.Model.V1.SELinuxOptions
+                     , Kubernetes.Model.V1.Secret
+                     , Kubernetes.Model.V1.SecretKeySelector
+                     , Kubernetes.Model.V1.SecretList
+                     , Kubernetes.Model.V1.SecretVolumeSource
+                     , Kubernetes.Model.V1.SecurityContext
+                     , Kubernetes.Model.V1.Service
+                     , Kubernetes.Model.V1.ServiceAccount
+                     , Kubernetes.Model.V1.ServiceAccountList
+                     , Kubernetes.Model.V1.ServiceList
+                     , Kubernetes.Model.V1.ServicePort
+                     , Kubernetes.Model.V1.ServiceSpec
+                     , Kubernetes.Model.V1.ServiceStatus
+                     , Kubernetes.Model.V1.TCPSocketAction
+                     , Kubernetes.Model.V1.Volume
+                     , Kubernetes.Model.V1.VolumeMount
+                       Kubernetes.Utils
+  ghc-options:         -Wall -fcontext-stack=10000
+  build-depends:       base                 >= 4.8  && < 4.9
+                     , aeson                >= 0.9  && < 0.12
+                     , bytestring           >= 0.10 && < 0.11
+                     , containers           >= 0.5  && < 0.6
+                     , either               >= 4.4  && < 4.5
+                     , http-types           == 0.9.*
+                     , lens                 == 4.13.*
+                     , network-uri          >= 2.6  && < 2.7
+                     , QuickCheck           >= 2.8  && < 2.9
+                     , quickcheck-instances >= 0.3  && < 0.4
+                     , scientific           >= 0.3  && < 0.4
+                     , servant              >= 0.4  && < 0.5
+                     , servant-client       >= 0.4  && < 0.5
+                     , servant-server       >= 0.4  && < 0.5
+                     , split                >= 0.2  && < 0.3
+                     , text                 >= 1.2  && < 1.3
+                     , unordered-containers >= 0.2  && < 0.3
+                     , vector               >= 0.11 && < 0.12
+                     , wai                  >= 3.2  && < 3.3
+
+  default-language:    Haskell2010
+
+executable client
+  hs-source-dirs:      client
+  main-is:             Main.hs
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
+  build-depends:       base
+                     , either               >= 4.4 && < 4.5
+                     , haskell-kubernetes   >= 0.3 && < 0.4
+                     , network-uri          >= 2.6 && < 2.7
+                     , QuickCheck           >= 2.8 && < 2.9
+                     , servant              >= 0.4 && < 0.5
+                     , servant-client       >= 0.4 && < 0.5
+                     , split                >= 0.2 && < 0.3
+                     , transformers         >= 0.4 && < 0.5
+  default-language:    Haskell2010
+
+executable server
+  hs-source-dirs:      server
+  main-is:             Main.hs
+  ghc-options:         -threaded -fcontext-stack=1000 -rtsopts -with-rtsopts=-N
+  build-depends:       base
+                     , haskell-kubernetes   >= 0.3 && < 0.4
+                     , servant-server       >= 0.4 && < 0.5
+                     , servant-mock         >= 0.4 && < 0.5
+                     , warp                 >= 3.2 && < 3.3
+  default-language:    Haskell2010
diff --git a/lib/Kubernetes/Api/ApivApi.hs b/lib/Kubernetes/Api/ApivApi.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Api/ApivApi.hs
@@ -0,0 +1,769 @@
+-- This source code is distributed under the terms of a MIT license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Kubernetes.Api.ApivApi (
+      getAPIResources
+    , listNamespacedComponentStatus
+    , readNamespacedComponentStatus
+    , listConfigMap
+    , listEndpoints
+    , listEvent
+    , listLimitRange
+    , listNamespacedNamespace
+    , createNamespacedNamespace
+    , deletecollectionNamespacedNamespace
+    , createNamespacedBinding
+    , listNamespacedConfigMap
+    , createNamespacedConfigMap
+    , deletecollectionNamespacedConfigMap
+    , readNamespacedConfigMap
+    , replaceNamespacedConfigMap
+    , deleteNamespacedConfigMap
+    , patchNamespacedConfigMap
+    , listNamespacedEndpoints
+    , createNamespacedEndpoints
+    , deletecollectionNamespacedEndpoints
+    , readNamespacedEndpoints
+    , replaceNamespacedEndpoints
+    , deleteNamespacedEndpoints
+    , patchNamespacedEndpoints
+    , listNamespacedEvent
+    , createNamespacedEvent
+    , deletecollectionNamespacedEvent
+    , readNamespacedEvent
+    , replaceNamespacedEvent
+    , deleteNamespacedEvent
+    , patchNamespacedEvent
+    , listNamespacedLimitRange
+    , createNamespacedLimitRange
+    , deletecollectionNamespacedLimitRange
+    , readNamespacedLimitRange
+    , replaceNamespacedLimitRange
+    , deleteNamespacedLimitRange
+    , patchNamespacedLimitRange
+    , listNamespacedPersistentVolumeClaim
+    , createNamespacedPersistentVolumeClaim
+    , deletecollectionNamespacedPersistentVolumeClaim
+    , readNamespacedPersistentVolumeClaim
+    , replaceNamespacedPersistentVolumeClaim
+    , deleteNamespacedPersistentVolumeClaim
+    , patchNamespacedPersistentVolumeClaim
+    , replaceNamespacedPersistentVolumeClaimStatus
+    , listNamespacedPod
+    , createNamespacedPod
+    , deletecollectionNamespacedPod
+    , readNamespacedPod
+    , replaceNamespacedPod
+    , deleteNamespacedPod
+    , patchNamespacedPod
+    , connectGetNamespacedPodAttach
+    , connectPostNamespacedPodAttach
+    , createNamespacedBindingBinding
+    , connectGetNamespacedPodExec
+    , connectPostNamespacedPodExec
+    , readNamespacedPodLog
+    , connectGetNamespacedPodPortforward
+    , connectPostNamespacedPodPortforward
+    , connectGetNamespacedPodProxy
+    -- , connectHeadNamespacedPodProxy
+    , connectPutNamespacedPodProxy
+    , connectPostNamespacedPodProxy
+    , connectDeleteNamespacedPodProxy
+    -- , connectOptionsNamespacedPodProxy
+    , connectGetNamespacedPodProxy_0
+    -- , connectHeadNamespacedPodProxy_0
+    , connectPutNamespacedPodProxy_0
+    , connectPostNamespacedPodProxy_0
+    , connectDeleteNamespacedPodProxy_0
+    -- , connectOptionsNamespacedPodProxy_0
+    , replaceNamespacedPodStatus
+    , listNamespacedPodTemplate
+    , createNamespacedPodTemplate
+    , deletecollectionNamespacedPodTemplate
+    , readNamespacedPodTemplate
+    , replaceNamespacedPodTemplate
+    , deleteNamespacedPodTemplate
+    , patchNamespacedPodTemplate
+    , listNamespacedReplicationController
+    , createNamespacedReplicationController
+    , deletecollectionNamespacedReplicationController
+    , readNamespacedReplicationController
+    , replaceNamespacedReplicationController
+    , deleteNamespacedReplicationController
+    , patchNamespacedReplicationController
+    , replaceNamespacedReplicationControllerStatus
+    , listNamespacedResourceQuota
+    , createNamespacedResourceQuota
+    , deletecollectionNamespacedResourceQuota
+    , readNamespacedResourceQuota
+    , replaceNamespacedResourceQuota
+    , deleteNamespacedResourceQuota
+    , patchNamespacedResourceQuota
+    , replaceNamespacedResourceQuotaStatus
+    , listNamespacedSecret
+    , createNamespacedSecret
+    , deletecollectionNamespacedSecret
+    , readNamespacedSecret
+    , replaceNamespacedSecret
+    , deleteNamespacedSecret
+    , patchNamespacedSecret
+    , listNamespacedServiceAccount
+    , createNamespacedServiceAccount
+    , deletecollectionNamespacedServiceAccount
+    , readNamespacedServiceAccount
+    , replaceNamespacedServiceAccount
+    , deleteNamespacedServiceAccount
+    , patchNamespacedServiceAccount
+    , listNamespacedService
+    , createNamespacedService
+    , readNamespacedService
+    , replaceNamespacedService
+    , deleteNamespacedService
+    , patchNamespacedService
+    , replaceNamespacedServiceStatus
+    , readNamespacedNamespace
+    , replaceNamespacedNamespace
+    , deleteNamespacedNamespace
+    , patchNamespacedNamespace
+    , replaceNamespacedNamespaceFinalize
+    , replaceNamespacedNamespaceStatus
+    , listNamespacedNode
+    , createNamespacedNode
+    , deletecollectionNamespacedNode
+    , readNamespacedNode
+    , replaceNamespacedNode
+    , deleteNamespacedNode
+    , patchNamespacedNode
+    , replaceNamespacedNodeStatus
+    , listPersistentVolumeClaim
+    , listNamespacedPersistentVolume
+    , createNamespacedPersistentVolume
+    , deletecollectionNamespacedPersistentVolume
+    , readNamespacedPersistentVolume
+    , replaceNamespacedPersistentVolume
+    , deleteNamespacedPersistentVolume
+    , patchNamespacedPersistentVolume
+    , replaceNamespacedPersistentVolumeStatus
+    , listPod
+    , listPodTemplate
+    , proxyGETNamespacedPod
+    -- , proxyHEADNamespacedPod
+    , proxyPUTNamespacedPod
+    , proxyPOSTNamespacedPod
+    , proxyDELETENamespacedPod
+    -- , proxyOPTIONSNamespacedPod
+    , proxyGETNamespacedPod_0
+    -- , proxyHEADNamespacedPod_0
+    , proxyPUTNamespacedPod_0
+    , proxyPOSTNamespacedPod_0
+    , proxyDELETENamespacedPod_0
+    -- , proxyOPTIONSNamespacedPod_0
+    , proxyGETNamespacedService
+    -- , proxyHEADNamespacedService
+    , proxyPUTNamespacedService
+    , proxyPOSTNamespacedService
+    , proxyDELETENamespacedService
+    -- , proxyOPTIONSNamespacedService
+    , proxyGETNamespacedService_0
+    -- , proxyHEADNamespacedService_0
+    , proxyPUTNamespacedService_0
+    , proxyPOSTNamespacedService_0
+    , proxyDELETENamespacedService_0
+    -- , proxyOPTIONSNamespacedService_0
+    , proxyGETNamespacedNode
+    -- , proxyHEADNamespacedNode
+    , proxyPUTNamespacedNode
+    , proxyPOSTNamespacedNode
+    , proxyDELETENamespacedNode
+    -- , proxyOPTIONSNamespacedNode
+    , proxyGETNamespacedNode_0
+    -- , proxyHEADNamespacedNode_0
+    , proxyPUTNamespacedNode_0
+    , proxyPOSTNamespacedNode_0
+    , proxyDELETENamespacedNode_0
+    -- , proxyOPTIONSNamespacedNode_0
+    , listReplicationController
+    , listResourceQuota
+    , listSecret
+    , listServiceAccount
+    , listService
+    , watchConfigMapList
+    , watchEndpointsList
+    , watchEventList
+    , watchLimitRangeList
+    , watchNamespacedNamespaceList
+    , watchNamespacedConfigMapList
+    , watchNamespacedConfigMap
+    , watchNamespacedEndpointsList
+    , watchNamespacedEndpoints
+    , watchNamespacedEventList
+    , watchNamespacedEvent
+    , watchNamespacedLimitRangeList
+    , watchNamespacedLimitRange
+    , watchNamespacedPersistentVolumeClaimList
+    , watchNamespacedPersistentVolumeClaim
+    , watchNamespacedPodList
+    , watchNamespacedPod
+    , watchNamespacedPodTemplateList
+    , watchNamespacedPodTemplate
+    , watchNamespacedReplicationControllerList
+    , watchNamespacedReplicationController
+    , watchNamespacedResourceQuotaList
+    , watchNamespacedResourceQuota
+    , watchNamespacedSecretList
+    , watchNamespacedSecret
+    , watchNamespacedServiceAccountList
+    , watchNamespacedServiceAccount
+    , watchNamespacedServiceList
+    , watchNamespacedService
+    , watchNamespacedNamespace
+    , watchNamespacedNodeList
+    , watchNamespacedNode
+    , watchPersistentVolumeClaimList
+    , watchNamespacedPersistentVolumeList
+    , watchNamespacedPersistentVolume
+    , watchPodList
+    , watchPodTemplateList
+    , watchReplicationControllerList
+    , watchResourceQuotaList
+    , watchSecretList
+    , watchServiceAccountList
+    , watchServiceList
+    , proxyApivApi
+    , ApivApi
+    ) where
+
+import Data.Proxy
+import Data.Text (Text)
+import Servant.API
+import Servant.Client
+import Network.URI (URIAuth (..), parseURI)
+import Kubernetes.Model.V1.ComponentStatusList
+import Kubernetes.Model.V1.ComponentStatus
+import Kubernetes.Model.V1.ConfigMapList
+import Kubernetes.Model.V1.EndpointsList
+import Kubernetes.Model.V1.EventList
+import Kubernetes.Model.V1.LimitRangeList
+import Kubernetes.Model.V1.NamespaceList
+import Kubernetes.Model.V1.Namespace
+import Kubernetes.Model.Unversioned.Status
+import Kubernetes.Model.V1.Binding
+import Kubernetes.Model.V1.ConfigMap
+import Kubernetes.Model.V1.DeleteOptions
+import qualified Kubernetes.Model.Unversioned.Patch as KubePatch
+import Kubernetes.Model.V1.Endpoints
+import Kubernetes.Model.V1.Event
+import Kubernetes.Model.V1.LimitRange
+import Kubernetes.Model.V1.PersistentVolumeClaimList
+import Kubernetes.Model.V1.PersistentVolumeClaim
+import Kubernetes.Model.V1.PodList
+import Kubernetes.Model.V1.Pod
+import Kubernetes.Model.V1.PodTemplateList
+import Kubernetes.Model.V1.PodTemplate
+import Kubernetes.Model.V1.ReplicationControllerList
+import Kubernetes.Model.V1.ReplicationController
+import Kubernetes.Model.V1.ResourceQuotaList
+import Kubernetes.Model.V1.ResourceQuota
+import Kubernetes.Model.V1.SecretList
+import Kubernetes.Model.V1.Secret
+import Kubernetes.Model.V1.ServiceAccountList
+import Kubernetes.Model.V1.ServiceAccount
+import Kubernetes.Model.V1.ServiceList
+import Kubernetes.Model.V1.Service
+import Kubernetes.Model.V1.NodeList
+import Kubernetes.Model.V1.Node
+import Kubernetes.Model.V1.PersistentVolumeList
+import Kubernetes.Model.V1.PersistentVolume
+import Kubernetes.Model.Json.WatchEvent
+
+type ApivApi = "api" :> "v1" :> Get '[JSON] () -- getAPIResources
+    :<|> "api" :> "v1" :> "componentstatuses" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ComponentStatusList -- listNamespacedComponentStatus
+    :<|> "api" :> "v1" :> "componentstatuses" :> Capture "name" Text :> QueryParam "pretty" Text :> Get '[JSON] ComponentStatus -- readNamespacedComponentStatus
+    :<|> "api" :> "v1" :> "configmaps" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ConfigMapList -- listConfigMap
+    :<|> "api" :> "v1" :> "endpoints" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] EndpointsList -- listEndpoints
+    :<|> "api" :> "v1" :> "events" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] EventList -- listEvent
+    :<|> "api" :> "v1" :> "limitranges" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] LimitRangeList -- listLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] NamespaceList -- listNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> QueryParam "pretty" Text :> ReqBody '[JSON] Namespace :> Post '[JSON] Namespace -- createNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "bindings" :> QueryParam "pretty" Text :> ReqBody '[JSON] Binding :> Post '[JSON] Binding -- createNamespacedBinding
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ConfigMapList -- listNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> QueryParam "pretty" Text :> ReqBody '[JSON] ConfigMap :> Post '[JSON] ConfigMap -- createNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] ConfigMap -- readNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] ConfigMap :> Put '[JSON] ConfigMap -- replaceNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] ConfigMap -- patchNamespacedConfigMap
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] EndpointsList -- listNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> QueryParam "pretty" Text :> ReqBody '[JSON] Endpoints :> Post '[JSON] Endpoints -- createNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Endpoints -- readNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Endpoints :> Put '[JSON] Endpoints -- replaceNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Endpoints -- patchNamespacedEndpoints
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] EventList -- listNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> QueryParam "pretty" Text :> ReqBody '[JSON] Event :> Post '[JSON] Event -- createNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Event -- readNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Event :> Put '[JSON] Event -- replaceNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "events" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Event -- patchNamespacedEvent
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] LimitRangeList -- listNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> QueryParam "pretty" Text :> ReqBody '[JSON] LimitRange :> Post '[JSON] LimitRange -- createNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] LimitRange -- readNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] LimitRange :> Put '[JSON] LimitRange -- replaceNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] LimitRange -- patchNamespacedLimitRange
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PersistentVolumeClaimList -- listNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolumeClaim :> Post '[JSON] PersistentVolumeClaim -- createNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] PersistentVolumeClaim -- readNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolumeClaim :> Put '[JSON] PersistentVolumeClaim -- replaceNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] PersistentVolumeClaim -- patchNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolumeClaim :> Put '[JSON] PersistentVolumeClaim -- replaceNamespacedPersistentVolumeClaimStatus
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PodList -- listNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> QueryParam "pretty" Text :> ReqBody '[JSON] Pod :> Post '[JSON] Pod -- createNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Pod -- readNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Pod :> Put '[JSON] Pod -- replaceNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Pod -- patchNamespacedPod
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "attach" :> QueryParam "stdin" Bool :> QueryParam "stdout" Bool :> QueryParam "stderr" Bool :> QueryParam "tty" Bool :> QueryParam "container" Text :> Get '[JSON] Text -- connectGetNamespacedPodAttach
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "attach" :> QueryParam "stdin" Bool :> QueryParam "stdout" Bool :> QueryParam "stderr" Bool :> QueryParam "tty" Bool :> QueryParam "container" Text :> Post '[JSON] Text -- connectPostNamespacedPodAttach
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "binding" :> QueryParam "pretty" Text :> ReqBody '[JSON] Binding :> Post '[JSON] Binding -- createNamespacedBindingBinding
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "exec" :> QueryParam "stdin" Bool :> QueryParam "stdout" Bool :> QueryParam "stderr" Bool :> QueryParam "tty" Bool :> QueryParam "container" Text :> QueryParam "command" Text :> Get '[JSON] Text -- connectGetNamespacedPodExec
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "exec" :> QueryParam "stdin" Bool :> QueryParam "stdout" Bool :> QueryParam "stderr" Bool :> QueryParam "tty" Bool :> QueryParam "container" Text :> QueryParam "command" Text :> Post '[JSON] Text -- connectPostNamespacedPodExec
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "log" :> QueryParam "pretty" Text :> QueryParam "container" Text :> QueryParam "follow" Bool :> QueryParam "previous" Bool :> QueryParam "sinceSeconds" Integer :> QueryParam "sinceTime" Text :> QueryParam "timestamps" Bool :> QueryParam "tailLines" Integer :> QueryParam "limitBytes" Integer :> Get '[JSON] Pod -- readNamespacedPodLog
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "portforward" :> Get '[JSON] Text -- connectGetNamespacedPodPortforward
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "portforward" :> Post '[JSON] Text -- connectPostNamespacedPodPortforward
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Get '[JSON] Text -- connectGetNamespacedPodProxy
+    -- :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Head '[JSON] Text -- connectHeadNamespacedPodProxy
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Put '[JSON] Text -- connectPutNamespacedPodProxy
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Post '[JSON] Text -- connectPostNamespacedPodProxy
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Delete '[JSON] Text -- connectDeleteNamespacedPodProxy
+    -- :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> QueryParam "path" Text :> Options '[JSON] Text -- connectOptionsNamespacedPodProxy
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Get '[JSON] Text -- connectGetNamespacedPodProxy_0
+    -- :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Head '[JSON] Text -- connectHeadNamespacedPodProxy_0
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Put '[JSON] Text -- connectPutNamespacedPodProxy_0
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Post '[JSON] Text -- connectPostNamespacedPodProxy_0
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Delete '[JSON] Text -- connectDeleteNamespacedPodProxy_0
+    -- :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "proxy" :> Capture "path" Text :> QueryParam "path" Text :> Options '[JSON] Text -- connectOptionsNamespacedPodProxy_0
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] Pod :> Put '[JSON] Pod -- replaceNamespacedPodStatus
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PodTemplateList -- listNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> QueryParam "pretty" Text :> ReqBody '[JSON] PodTemplate :> Post '[JSON] PodTemplate -- createNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] PodTemplate -- readNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] PodTemplate :> Put '[JSON] PodTemplate -- replaceNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] PodTemplate -- patchNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ReplicationControllerList -- listNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> QueryParam "pretty" Text :> ReqBody '[JSON] ReplicationController :> Post '[JSON] ReplicationController -- createNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] ReplicationController -- readNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] ReplicationController :> Put '[JSON] ReplicationController -- replaceNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] ReplicationController -- patchNamespacedReplicationController
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] ReplicationController :> Put '[JSON] ReplicationController -- replaceNamespacedReplicationControllerStatus
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ResourceQuotaList -- listNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> QueryParam "pretty" Text :> ReqBody '[JSON] ResourceQuota :> Post '[JSON] ResourceQuota -- createNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] ResourceQuota -- readNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] ResourceQuota :> Put '[JSON] ResourceQuota -- replaceNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] ResourceQuota -- patchNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] ResourceQuota :> Put '[JSON] ResourceQuota -- replaceNamespacedResourceQuotaStatus
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] SecretList -- listNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> QueryParam "pretty" Text :> ReqBody '[JSON] Secret :> Post '[JSON] Secret -- createNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Secret -- readNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Secret :> Put '[JSON] Secret -- replaceNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Secret -- patchNamespacedSecret
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ServiceAccountList -- listNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> QueryParam "pretty" Text :> ReqBody '[JSON] ServiceAccount :> Post '[JSON] ServiceAccount -- createNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] ServiceAccount -- readNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] ServiceAccount :> Put '[JSON] ServiceAccount -- replaceNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] ServiceAccount -- patchNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ServiceList -- listNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> QueryParam "pretty" Text :> ReqBody '[JSON] Service :> Post '[JSON] Service -- createNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> QueryParam "pretty" Text :> Get '[JSON] Service -- readNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Service :> Put '[JSON] Service -- replaceNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> QueryParam "pretty" Text :> Delete '[JSON] Status -- deleteNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Service -- patchNamespacedService
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] Service :> Put '[JSON] Service -- replaceNamespacedServiceStatus
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Namespace -- readNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Namespace :> Put '[JSON] Namespace -- replaceNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Namespace -- patchNamespacedNamespace
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> "finalize" :> QueryParam "pretty" Text :> ReqBody '[JSON] Namespace :> Put '[JSON] Namespace -- replaceNamespacedNamespaceFinalize
+    :<|> "api" :> "v1" :> "namespaces" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] Namespace :> Put '[JSON] Namespace -- replaceNamespacedNamespaceStatus
+    :<|> "api" :> "v1" :> "nodes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] NodeList -- listNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> QueryParam "pretty" Text :> ReqBody '[JSON] Node :> Post '[JSON] Node -- createNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] Node -- readNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] Node :> Put '[JSON] Node -- replaceNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] Node -- patchNamespacedNode
+    :<|> "api" :> "v1" :> "nodes" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] Node :> Put '[JSON] Node -- replaceNamespacedNodeStatus
+    :<|> "api" :> "v1" :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PersistentVolumeClaimList -- listPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "persistentvolumes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PersistentVolumeList -- listNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolume :> Post '[JSON] PersistentVolume -- createNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Delete '[JSON] Status -- deletecollectionNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "export" Bool :> QueryParam "exact" Bool :> Get '[JSON] PersistentVolume -- readNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolume :> Put '[JSON] PersistentVolume -- replaceNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] DeleteOptions :> Delete '[JSON] Status -- deleteNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> Capture "name" Text :> QueryParam "pretty" Text :> ReqBody '[JSON] KubePatch.Patch :> Patch '[JSON] PersistentVolume -- patchNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "persistentvolumes" :> Capture "name" Text :> "status" :> QueryParam "pretty" Text :> ReqBody '[JSON] PersistentVolume :> Put '[JSON] PersistentVolume -- replaceNamespacedPersistentVolumeStatus
+    :<|> "api" :> "v1" :> "pods" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PodList -- listPod
+    :<|> "api" :> "v1" :> "podtemplates" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] PodTemplateList -- listPodTemplate
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Get '[JSON] Text -- proxyGETNamespacedPod
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Head '[JSON] Text -- proxyHEADNamespacedPod
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Put '[JSON] Text -- proxyPUTNamespacedPod
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Post '[JSON] Text -- proxyPOSTNamespacedPod
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Delete '[JSON] Text -- proxyDELETENamespacedPod
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedPod
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Get '[JSON] Text -- proxyGETNamespacedPod_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Head '[JSON] Text -- proxyHEADNamespacedPod_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Put '[JSON] Text -- proxyPUTNamespacedPod_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Post '[JSON] Text -- proxyPOSTNamespacedPod_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Delete '[JSON] Text -- proxyDELETENamespacedPod_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> Capture "path" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedPod_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Get '[JSON] Text -- proxyGETNamespacedService
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Head '[JSON] Text -- proxyHEADNamespacedService
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Put '[JSON] Text -- proxyPUTNamespacedService
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Post '[JSON] Text -- proxyPOSTNamespacedService
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Delete '[JSON] Text -- proxyDELETENamespacedService
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedService
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Get '[JSON] Text -- proxyGETNamespacedService_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Head '[JSON] Text -- proxyHEADNamespacedService_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Put '[JSON] Text -- proxyPUTNamespacedService_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Post '[JSON] Text -- proxyPOSTNamespacedService_0
+    :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Delete '[JSON] Text -- proxyDELETENamespacedService_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> Capture "path" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedService_0
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Get '[JSON] Text -- proxyGETNamespacedNode
+    -- :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Head '[JSON] Text -- proxyHEADNamespacedNode
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Put '[JSON] Text -- proxyPUTNamespacedNode
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Post '[JSON] Text -- proxyPOSTNamespacedNode
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Delete '[JSON] Text -- proxyDELETENamespacedNode
+    -- :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedNode
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Get '[JSON] Text -- proxyGETNamespacedNode_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Head '[JSON] Text -- proxyHEADNamespacedNode_0
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Put '[JSON] Text -- proxyPUTNamespacedNode_0
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Post '[JSON] Text -- proxyPOSTNamespacedNode_0
+    :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Delete '[JSON] Text -- proxyDELETENamespacedNode_0
+    -- :<|> "api" :> "v1" :> "proxy" :> "nodes" :> Capture "name" Text :> Capture "path" Text :> Options '[JSON] Text -- proxyOPTIONSNamespacedNode_0
+    :<|> "api" :> "v1" :> "replicationcontrollers" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ReplicationControllerList -- listReplicationController
+    :<|> "api" :> "v1" :> "resourcequotas" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ResourceQuotaList -- listResourceQuota
+    :<|> "api" :> "v1" :> "secrets" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] SecretList -- listSecret
+    :<|> "api" :> "v1" :> "serviceaccounts" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ServiceAccountList -- listServiceAccount
+    :<|> "api" :> "v1" :> "services" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] ServiceList -- listService
+    :<|> "api" :> "v1" :> "watch" :> "configmaps" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchConfigMapList
+    :<|> "api" :> "v1" :> "watch" :> "endpoints" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchEndpointsList
+    :<|> "api" :> "v1" :> "watch" :> "events" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchEventList
+    :<|> "api" :> "v1" :> "watch" :> "limitranges" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchLimitRangeList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedNamespaceList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedConfigMapList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "configmaps" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedConfigMap
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedEndpointsList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "endpoints" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedEndpoints
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "events" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedEventList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "events" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedEvent
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedLimitRangeList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "limitranges" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedLimitRange
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPersistentVolumeClaimList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "persistentvolumeclaims" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPersistentVolumeClaim
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "pods" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPodList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "pods" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPod
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPodTemplateList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "podtemplates" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPodTemplate
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedReplicationControllerList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "replicationcontrollers" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedReplicationController
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedResourceQuotaList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "resourcequotas" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedResourceQuota
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedSecretList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "secrets" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedSecret
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedServiceAccountList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "serviceaccounts" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedServiceAccount
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "services" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedServiceList
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "namespace" Text :> "services" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedService
+    :<|> "api" :> "v1" :> "watch" :> "namespaces" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedNamespace
+    :<|> "api" :> "v1" :> "watch" :> "nodes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedNodeList
+    :<|> "api" :> "v1" :> "watch" :> "nodes" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedNode
+    :<|> "api" :> "v1" :> "watch" :> "persistentvolumeclaims" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchPersistentVolumeClaimList
+    :<|> "api" :> "v1" :> "watch" :> "persistentvolumes" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPersistentVolumeList
+    :<|> "api" :> "v1" :> "watch" :> "persistentvolumes" :> Capture "name" Text :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchNamespacedPersistentVolume
+    :<|> "api" :> "v1" :> "watch" :> "pods" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchPodList
+    :<|> "api" :> "v1" :> "watch" :> "podtemplates" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchPodTemplateList
+    :<|> "api" :> "v1" :> "watch" :> "replicationcontrollers" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchReplicationControllerList
+    :<|> "api" :> "v1" :> "watch" :> "resourcequotas" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchResourceQuotaList
+    :<|> "api" :> "v1" :> "watch" :> "secrets" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchSecretList
+    :<|> "api" :> "v1" :> "watch" :> "serviceaccounts" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchServiceAccountList
+    :<|> "api" :> "v1" :> "watch" :> "services" :> QueryParam "pretty" Text :> QueryParam "labelSelector" Text :> QueryParam "fieldSelector" Text :> QueryParam "watch" Bool :> QueryParam "resourceVersion" Text :> QueryParam "timeoutSeconds" Integer :> Get '[JSON] WatchEvent -- watchServiceList
+
+proxyApivApi :: Proxy ApivApi
+proxyApivApi = Proxy
+
+
+serverPath :: String
+serverPath = "https://127.0.0.1:8080/"
+
+parseHostPort :: String -> (String, Int)
+parseHostPort path = (h,p)
+    where
+        authority = case parseURI path of
+            Just x -> uriAuthority x
+            _      -> Nothing
+        (h, p) = case authority of
+            Just y -> (uriRegName y, (getPort . uriPort) y)
+            _      -> ("localhost", 8080)
+        getPort p' = case (length p') of
+            0 -> 80
+            _ -> (read . drop 1) p'
+
+(host, port) = parseHostPort serverPath
+
+getAPIResources
+    :<|> listNamespacedComponentStatus
+    :<|> readNamespacedComponentStatus
+    :<|> listConfigMap
+    :<|> listEndpoints
+    :<|> listEvent
+    :<|> listLimitRange
+    :<|> listNamespacedNamespace
+    :<|> createNamespacedNamespace
+    :<|> deletecollectionNamespacedNamespace
+    :<|> createNamespacedBinding
+    :<|> listNamespacedConfigMap
+    :<|> createNamespacedConfigMap
+    :<|> deletecollectionNamespacedConfigMap
+    :<|> readNamespacedConfigMap
+    :<|> replaceNamespacedConfigMap
+    :<|> deleteNamespacedConfigMap
+    :<|> patchNamespacedConfigMap
+    :<|> listNamespacedEndpoints
+    :<|> createNamespacedEndpoints
+    :<|> deletecollectionNamespacedEndpoints
+    :<|> readNamespacedEndpoints
+    :<|> replaceNamespacedEndpoints
+    :<|> deleteNamespacedEndpoints
+    :<|> patchNamespacedEndpoints
+    :<|> listNamespacedEvent
+    :<|> createNamespacedEvent
+    :<|> deletecollectionNamespacedEvent
+    :<|> readNamespacedEvent
+    :<|> replaceNamespacedEvent
+    :<|> deleteNamespacedEvent
+    :<|> patchNamespacedEvent
+    :<|> listNamespacedLimitRange
+    :<|> createNamespacedLimitRange
+    :<|> deletecollectionNamespacedLimitRange
+    :<|> readNamespacedLimitRange
+    :<|> replaceNamespacedLimitRange
+    :<|> deleteNamespacedLimitRange
+    :<|> patchNamespacedLimitRange
+    :<|> listNamespacedPersistentVolumeClaim
+    :<|> createNamespacedPersistentVolumeClaim
+    :<|> deletecollectionNamespacedPersistentVolumeClaim
+    :<|> readNamespacedPersistentVolumeClaim
+    :<|> replaceNamespacedPersistentVolumeClaim
+    :<|> deleteNamespacedPersistentVolumeClaim
+    :<|> patchNamespacedPersistentVolumeClaim
+    :<|> replaceNamespacedPersistentVolumeClaimStatus
+    :<|> listNamespacedPod
+    :<|> createNamespacedPod
+    :<|> deletecollectionNamespacedPod
+    :<|> readNamespacedPod
+    :<|> replaceNamespacedPod
+    :<|> deleteNamespacedPod
+    :<|> patchNamespacedPod
+    :<|> connectGetNamespacedPodAttach
+    :<|> connectPostNamespacedPodAttach
+    :<|> createNamespacedBindingBinding
+    :<|> connectGetNamespacedPodExec
+    :<|> connectPostNamespacedPodExec
+    :<|> readNamespacedPodLog
+    :<|> connectGetNamespacedPodPortforward
+    :<|> connectPostNamespacedPodPortforward
+    :<|> connectGetNamespacedPodProxy
+    -- :<|> connectHeadNamespacedPodProxy
+    :<|> connectPutNamespacedPodProxy
+    :<|> connectPostNamespacedPodProxy
+    :<|> connectDeleteNamespacedPodProxy
+    -- :<|> connectOptionsNamespacedPodProxy
+    :<|> connectGetNamespacedPodProxy_0
+    -- :<|> connectHeadNamespacedPodProxy_0
+    :<|> connectPutNamespacedPodProxy_0
+    :<|> connectPostNamespacedPodProxy_0
+    :<|> connectDeleteNamespacedPodProxy_0
+    -- :<|> connectOptionsNamespacedPodProxy_0
+    :<|> replaceNamespacedPodStatus
+    :<|> listNamespacedPodTemplate
+    :<|> createNamespacedPodTemplate
+    :<|> deletecollectionNamespacedPodTemplate
+    :<|> readNamespacedPodTemplate
+    :<|> replaceNamespacedPodTemplate
+    :<|> deleteNamespacedPodTemplate
+    :<|> patchNamespacedPodTemplate
+    :<|> listNamespacedReplicationController
+    :<|> createNamespacedReplicationController
+    :<|> deletecollectionNamespacedReplicationController
+    :<|> readNamespacedReplicationController
+    :<|> replaceNamespacedReplicationController
+    :<|> deleteNamespacedReplicationController
+    :<|> patchNamespacedReplicationController
+    :<|> replaceNamespacedReplicationControllerStatus
+    :<|> listNamespacedResourceQuota
+    :<|> createNamespacedResourceQuota
+    :<|> deletecollectionNamespacedResourceQuota
+    :<|> readNamespacedResourceQuota
+    :<|> replaceNamespacedResourceQuota
+    :<|> deleteNamespacedResourceQuota
+    :<|> patchNamespacedResourceQuota
+    :<|> replaceNamespacedResourceQuotaStatus
+    :<|> listNamespacedSecret
+    :<|> createNamespacedSecret
+    :<|> deletecollectionNamespacedSecret
+    :<|> readNamespacedSecret
+    :<|> replaceNamespacedSecret
+    :<|> deleteNamespacedSecret
+    :<|> patchNamespacedSecret
+    :<|> listNamespacedServiceAccount
+    :<|> createNamespacedServiceAccount
+    :<|> deletecollectionNamespacedServiceAccount
+    :<|> readNamespacedServiceAccount
+    :<|> replaceNamespacedServiceAccount
+    :<|> deleteNamespacedServiceAccount
+    :<|> patchNamespacedServiceAccount
+    :<|> listNamespacedService
+    :<|> createNamespacedService
+    :<|> readNamespacedService
+    :<|> replaceNamespacedService
+    :<|> deleteNamespacedService
+    :<|> patchNamespacedService
+    :<|> replaceNamespacedServiceStatus
+    :<|> readNamespacedNamespace
+    :<|> replaceNamespacedNamespace
+    :<|> deleteNamespacedNamespace
+    :<|> patchNamespacedNamespace
+    :<|> replaceNamespacedNamespaceFinalize
+    :<|> replaceNamespacedNamespaceStatus
+    :<|> listNamespacedNode
+    :<|> createNamespacedNode
+    :<|> deletecollectionNamespacedNode
+    :<|> readNamespacedNode
+    :<|> replaceNamespacedNode
+    :<|> deleteNamespacedNode
+    :<|> patchNamespacedNode
+    :<|> replaceNamespacedNodeStatus
+    :<|> listPersistentVolumeClaim
+    :<|> listNamespacedPersistentVolume
+    :<|> createNamespacedPersistentVolume
+    :<|> deletecollectionNamespacedPersistentVolume
+    :<|> readNamespacedPersistentVolume
+    :<|> replaceNamespacedPersistentVolume
+    :<|> deleteNamespacedPersistentVolume
+    :<|> patchNamespacedPersistentVolume
+    :<|> replaceNamespacedPersistentVolumeStatus
+    :<|> listPod
+    :<|> listPodTemplate
+    :<|> proxyGETNamespacedPod
+    -- :<|> proxyHEADNamespacedPod
+    :<|> proxyPUTNamespacedPod
+    :<|> proxyPOSTNamespacedPod
+    :<|> proxyDELETENamespacedPod
+    -- :<|> proxyOPTIONSNamespacedPod
+    :<|> proxyGETNamespacedPod_0
+    -- :<|> proxyHEADNamespacedPod_0
+    :<|> proxyPUTNamespacedPod_0
+    :<|> proxyPOSTNamespacedPod_0
+    :<|> proxyDELETENamespacedPod_0
+    -- :<|> proxyOPTIONSNamespacedPod_0
+    :<|> proxyGETNamespacedService
+    -- :<|> proxyHEADNamespacedService
+    :<|> proxyPUTNamespacedService
+    :<|> proxyPOSTNamespacedService
+    :<|> proxyDELETENamespacedService
+    -- :<|> proxyOPTIONSNamespacedService
+    :<|> proxyGETNamespacedService_0
+    -- :<|> proxyHEADNamespacedService_0
+    :<|> proxyPUTNamespacedService_0
+    :<|> proxyPOSTNamespacedService_0
+    :<|> proxyDELETENamespacedService_0
+    -- :<|> proxyOPTIONSNamespacedService_0
+    :<|> proxyGETNamespacedNode
+    -- :<|> proxyHEADNamespacedNode
+    :<|> proxyPUTNamespacedNode
+    :<|> proxyPOSTNamespacedNode
+    :<|> proxyDELETENamespacedNode
+    -- :<|> proxyOPTIONSNamespacedNode
+    :<|> proxyGETNamespacedNode_0
+    -- :<|> proxyHEADNamespacedNode_0
+    :<|> proxyPUTNamespacedNode_0
+    :<|> proxyPOSTNamespacedNode_0
+    :<|> proxyDELETENamespacedNode_0
+    -- :<|> proxyOPTIONSNamespacedNode_0
+    :<|> listReplicationController
+    :<|> listResourceQuota
+    :<|> listSecret
+    :<|> listServiceAccount
+    :<|> listService
+    :<|> watchConfigMapList
+    :<|> watchEndpointsList
+    :<|> watchEventList
+    :<|> watchLimitRangeList
+    :<|> watchNamespacedNamespaceList
+    :<|> watchNamespacedConfigMapList
+    :<|> watchNamespacedConfigMap
+    :<|> watchNamespacedEndpointsList
+    :<|> watchNamespacedEndpoints
+    :<|> watchNamespacedEventList
+    :<|> watchNamespacedEvent
+    :<|> watchNamespacedLimitRangeList
+    :<|> watchNamespacedLimitRange
+    :<|> watchNamespacedPersistentVolumeClaimList
+    :<|> watchNamespacedPersistentVolumeClaim
+    :<|> watchNamespacedPodList
+    :<|> watchNamespacedPod
+    :<|> watchNamespacedPodTemplateList
+    :<|> watchNamespacedPodTemplate
+    :<|> watchNamespacedReplicationControllerList
+    :<|> watchNamespacedReplicationController
+    :<|> watchNamespacedResourceQuotaList
+    :<|> watchNamespacedResourceQuota
+    :<|> watchNamespacedSecretList
+    :<|> watchNamespacedSecret
+    :<|> watchNamespacedServiceAccountList
+    :<|> watchNamespacedServiceAccount
+    :<|> watchNamespacedServiceList
+    :<|> watchNamespacedService
+    :<|> watchNamespacedNamespace
+    :<|> watchNamespacedNodeList
+    :<|> watchNamespacedNode
+    :<|> watchPersistentVolumeClaimList
+    :<|> watchNamespacedPersistentVolumeList
+    :<|> watchNamespacedPersistentVolume
+    :<|> watchPodList
+    :<|> watchPodTemplateList
+    :<|> watchReplicationControllerList
+    :<|> watchResourceQuotaList
+    :<|> watchSecretList
+    :<|> watchServiceAccountList
+    :<|> watchServiceList
+    = client proxyApivApi $ BaseUrl Http host port
diff --git a/lib/Kubernetes/Apis.hs b/lib/Kubernetes/Apis.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Apis.hs
@@ -0,0 +1,24 @@
+-- This source code is distributed under the terms of a MIT license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleInstances #-}
+module Kubernetes.Apis (
+      api
+    , API
+    ) where
+
+import Data.Proxy
+import Kubernetes.Api.ApivApi (ApivApi)
+
+type API = ApivApi
+
+api :: Proxy API
+api = Proxy
diff --git a/lib/Kubernetes/Model/Json/WatchEvent.hs b/lib/Kubernetes/Model/Json/WatchEvent.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Json/WatchEvent.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Json.WatchEvent
+    ( WatchEvent (..)
+    , type_
+    , object
+    , mkWatchEvent
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- |
+data WatchEvent = WatchEvent
+    { _type_  :: !(Maybe Text)
+    , _object :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''WatchEvent
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''WatchEvent)
+
+instance Arbitrary WatchEvent where
+    arbitrary = WatchEvent <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a WatchEvent
+mkWatchEvent :: WatchEvent
+mkWatchEvent = WatchEvent Nothing Nothing
diff --git a/lib/Kubernetes/Model/Unversioned/ListMeta.hs b/lib/Kubernetes/Model/Unversioned/ListMeta.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Unversioned/ListMeta.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Unversioned.ListMeta
+    ( ListMeta (..)
+    , selfLink
+    , resourceVersion
+    , mkListMeta
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
+data ListMeta = ListMeta
+    { _selfLink        :: !(Maybe Text)
+    , _resourceVersion :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ListMeta
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ListMeta)
+
+instance Arbitrary ListMeta where
+    arbitrary = ListMeta <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ListMeta
+mkListMeta :: ListMeta
+mkListMeta = ListMeta Nothing Nothing
diff --git a/lib/Kubernetes/Model/Unversioned/Patch.hs b/lib/Kubernetes/Model/Unversioned/Patch.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Unversioned/Patch.hs
@@ -0,0 +1,36 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Unversioned.Patch
+    ( Patch (..)
+    , mkPatch
+    ) where
+
+import           Control.Lens.TH (makeLenses)
+import           Data.Aeson.TH   (defaultOptions, deriveJSON,
+                                  fieldLabelModifier)
+import           GHC.Generics    (Generic)
+import           Prelude         hiding (drop, error, max, min)
+import qualified Prelude         as P
+import           Test.QuickCheck (Arbitrary, arbitrary)
+
+-- | Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.
+data Patch = Patch deriving (Show, Eq, Generic)
+
+makeLenses ''Patch
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Patch)
+
+instance Arbitrary Patch where
+    arbitrary = return Patch
+
+-- | Use this method to build a Patch
+mkPatch :: Patch
+mkPatch = Patch
diff --git a/lib/Kubernetes/Model/Unversioned/Status.hs b/lib/Kubernetes/Model/Unversioned/Status.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Unversioned/Status.hs
@@ -0,0 +1,60 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Unversioned.Status
+    ( Status (..)
+    , kind
+    , apiVersion
+    , metadata
+    , status
+    , message
+    , reason
+    , details
+    , code
+    , mkStatus
+    ) where
+
+import           Control.Lens.TH                            (makeLenses)
+import           Data.Aeson.TH                              (defaultOptions,
+                                                             deriveJSON,
+                                                             fieldLabelModifier)
+import           Data.Text                                  (Text)
+import           GHC.Generics                               (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta      (ListMeta)
+import           Kubernetes.Model.Unversioned.StatusDetails (StatusDetails)
+import           Prelude                                    hiding (drop, error,
+                                                             max, min)
+import qualified Prelude                                    as P
+import           Test.QuickCheck                            (Arbitrary,
+                                                             arbitrary)
+import           Test.QuickCheck.Instances                  ()
+
+-- | Status is a return value for calls that don&#39;t return other objects.
+data Status = Status
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _status     :: !(Maybe Text)
+    , _message    :: !(Maybe Text)
+    , _reason     :: !(Maybe Text)
+    , _details    :: !(Maybe StatusDetails)
+    , _code       :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Status
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Status)
+
+instance Arbitrary Status where
+    arbitrary = Status <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Status
+mkStatus :: Status
+mkStatus = Status Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/Unversioned/StatusCause.hs b/lib/Kubernetes/Model/Unversioned/StatusCause.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Unversioned/StatusCause.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Unversioned.StatusCause
+    ( StatusCause (..)
+    , reason
+    , message
+    , field
+    , mkStatusCause
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.
+data StatusCause = StatusCause
+    { _reason  :: !(Maybe Text)
+    , _message :: !(Maybe Text)
+    , _field   :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''StatusCause
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''StatusCause)
+
+instance Arbitrary StatusCause where
+    arbitrary = StatusCause <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a StatusCause
+mkStatusCause :: StatusCause
+mkStatusCause = StatusCause Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/Unversioned/StatusDetails.hs b/lib/Kubernetes/Model/Unversioned/StatusDetails.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/Unversioned/StatusDetails.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.Unversioned.StatusDetails
+    ( StatusDetails (..)
+    , name
+    , group
+    , kind
+    , causes
+    , retryAfterSeconds
+    , mkStatusDetails
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.Unversioned.StatusCause (StatusCause)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.
+data StatusDetails = StatusDetails
+    { _name              :: !(Maybe Text)
+    , _group             :: !(Maybe Text)
+    , _kind              :: !(Maybe Text)
+    , _causes            :: !(Maybe [StatusCause])
+    , _retryAfterSeconds :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''StatusDetails
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''StatusDetails)
+
+instance Arbitrary StatusDetails where
+    arbitrary = StatusDetails <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a StatusDetails
+mkStatusDetails :: StatusDetails
+mkStatusDetails = StatusDetails Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/AWSElasticBlockStoreVolumeSource.hs b/lib/Kubernetes/Model/V1/AWSElasticBlockStoreVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/AWSElasticBlockStoreVolumeSource.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource
+    ( AWSElasticBlockStoreVolumeSource (..)
+    , volumeID
+    , fsType
+    , partition
+    , readOnly
+    , mkAWSElasticBlockStoreVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist and be formatted before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.
+data AWSElasticBlockStoreVolumeSource = AWSElasticBlockStoreVolumeSource
+    { _volumeID  :: !(Text)
+    , _fsType    :: !(Text)
+    , _partition :: !(Maybe Integer)
+    , _readOnly  :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''AWSElasticBlockStoreVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''AWSElasticBlockStoreVolumeSource)
+
+instance Arbitrary AWSElasticBlockStoreVolumeSource where
+    arbitrary = AWSElasticBlockStoreVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a AWSElasticBlockStoreVolumeSource
+mkAWSElasticBlockStoreVolumeSource :: Text -> Text -> AWSElasticBlockStoreVolumeSource
+mkAWSElasticBlockStoreVolumeSource xvolumeIDx xfsTypex = AWSElasticBlockStoreVolumeSource xvolumeIDx xfsTypex Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Any.hs b/lib/Kubernetes/Model/V1/Any.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Any.hs
@@ -0,0 +1,68 @@
+-- This source code is distributed under the terms of a BSD license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a BSD license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TemplateHaskell            #-}
+{-# LANGUAGE TypeOperators              #-}
+
+module Kubernetes.Model.V1.Any
+    ( Any (..)
+    , any
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Control.Monad             (mzero, replicateM)
+import           Data.Aeson
+import qualified Data.HashMap.Strict       as HMap
+import           Data.Text                 (Text)
+import           Data.Vector               (fromList)
+import           GHC.Generics
+import           Prelude                   hiding (any)
+import           Test.QuickCheck
+import           Test.QuickCheck.Instances ()
+
+newtype Any =
+  Any { _any :: Object
+      } deriving (Show, Eq, Generic)
+
+makeLenses ''Any
+
+instance FromJSON Any where
+  parseJSON (Object o) = return . Any $ o
+  parseJSON _          = mzero
+
+instance ToJSON Any where
+  toJSON (Any o) = Object o
+
+arbValue :: Gen Value
+arbValue =
+  let
+    aValue :: Int -> Gen Value
+    aValue 0 = oneof [ return Null
+                     , Bool <$> arbitrary
+                     , Number . fromInteger <$> arbitrary
+                     , String <$> arbitrary
+                     ]
+    aValue n = do
+      (Positive m) <- arbitrary
+      let n' = quot n (m+1)
+      oneof [ return Null
+            , Bool <$> arbitrary
+            , Number . fromInteger <$> arbitrary
+            , String <$> arbitrary
+            , Array . fromList <$> replicateM m (aValue n')
+            ]
+  in arbitrary >>= aValue
+
+instance Arbitrary Any where
+  arbitrary = Any . HMap.fromList <$> do
+    keys <- listOf (arbitrary :: Gen Text)
+    mapM (\k -> (,) k <$> arbValue) keys
+
diff --git a/lib/Kubernetes/Model/V1/Binding.hs b/lib/Kubernetes/Model/V1/Binding.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Binding.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Binding
+    ( Binding (..)
+    , kind
+    , apiVersion
+    , metadata
+    , target
+    , mkBinding
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ObjectMeta      (ObjectMeta)
+import           Kubernetes.Model.V1.ObjectReference (ObjectReference)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | Binding ties one object to another. For example, a pod is bound to a node by a scheduler.
+data Binding = Binding
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _target     :: !(ObjectReference)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Binding
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Binding)
+
+instance Arbitrary Binding where
+    arbitrary = Binding <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Binding
+mkBinding :: ObjectReference -> Binding
+mkBinding xtargetx = Binding Nothing Nothing Nothing xtargetx
diff --git a/lib/Kubernetes/Model/V1/Capabilities.hs b/lib/Kubernetes/Model/V1/Capabilities.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Capabilities.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Capabilities
+    ( Capabilities (..)
+    , add
+    , drop
+    , mkCapabilities
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.Capability (Capability)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | Adds and removes POSIX capabilities from running containers.
+data Capabilities = Capabilities
+    { _add  :: !(Maybe [Capability])
+    , _drop :: !(Maybe [Capability])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Capabilities
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Capabilities)
+
+instance Arbitrary Capabilities where
+    arbitrary = Capabilities <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a Capabilities
+mkCapabilities :: Capabilities
+mkCapabilities = Capabilities Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Capability.hs b/lib/Kubernetes/Model/V1/Capability.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Capability.hs
@@ -0,0 +1,36 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Capability
+    ( Capability (..)
+    , mkCapability
+    ) where
+
+import           Control.Lens.TH (makeLenses)
+import           Data.Aeson.TH   (defaultOptions, deriveJSON,
+                                  fieldLabelModifier)
+import           GHC.Generics    (Generic)
+import           Prelude         hiding (drop, error, max, min)
+import qualified Prelude         as P
+import           Test.QuickCheck (Arbitrary, arbitrary)
+
+-- |
+data Capability = Capability deriving (Show, Eq, Generic)
+
+makeLenses ''Capability
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Capability)
+
+instance Arbitrary Capability where
+    arbitrary = return Capability
+
+-- | Use this method to build a Capability
+mkCapability :: Capability
+mkCapability = Capability
diff --git a/lib/Kubernetes/Model/V1/CephFSVolumeSource.hs b/lib/Kubernetes/Model/V1/CephFSVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/CephFSVolumeSource.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.CephFSVolumeSource
+    ( CephFSVolumeSource (..)
+    , monitors
+    , user
+    , secretFile
+    , secretRef
+    , readOnly
+    , mkCephFSVolumeSource
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.LocalObjectReference (LocalObjectReference)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.
+data CephFSVolumeSource = CephFSVolumeSource
+    { _monitors   :: !([Text])
+    , _user       :: !(Maybe Text)
+    , _secretFile :: !(Maybe Text)
+    , _secretRef  :: !(Maybe LocalObjectReference)
+    , _readOnly   :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''CephFSVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''CephFSVolumeSource)
+
+instance Arbitrary CephFSVolumeSource where
+    arbitrary = CephFSVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a CephFSVolumeSource
+mkCephFSVolumeSource :: [Text] -> CephFSVolumeSource
+mkCephFSVolumeSource xmonitorsx = CephFSVolumeSource xmonitorsx Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/CinderVolumeSource.hs b/lib/Kubernetes/Model/V1/CinderVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/CinderVolumeSource.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.CinderVolumeSource
+    ( CinderVolumeSource (..)
+    , volumeID
+    , fsType
+    , readOnly
+    , mkCinderVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.
+data CinderVolumeSource = CinderVolumeSource
+    { _volumeID :: !(Text)
+    , _fsType   :: !(Maybe Text)
+    , _readOnly :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''CinderVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''CinderVolumeSource)
+
+instance Arbitrary CinderVolumeSource where
+    arbitrary = CinderVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a CinderVolumeSource
+mkCinderVolumeSource :: Text -> CinderVolumeSource
+mkCinderVolumeSource xvolumeIDx = CinderVolumeSource xvolumeIDx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ComponentCondition.hs b/lib/Kubernetes/Model/V1/ComponentCondition.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ComponentCondition.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ComponentCondition
+    ( ComponentCondition (..)
+    , type_
+    , status
+    , message
+    , error
+    , mkComponentCondition
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Information about the condition of a component.
+data ComponentCondition = ComponentCondition
+    { _type_   :: !(Text)
+    , _status  :: !(Text)
+    , _message :: !(Maybe Text)
+    , _error   :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ComponentCondition
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ComponentCondition)
+
+instance Arbitrary ComponentCondition where
+    arbitrary = ComponentCondition <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ComponentCondition
+mkComponentCondition :: Text -> Text -> ComponentCondition
+mkComponentCondition xtype_x xstatusx = ComponentCondition xtype_x xstatusx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ComponentStatus.hs b/lib/Kubernetes/Model/V1/ComponentStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ComponentStatus.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ComponentStatus
+    ( ComponentStatus (..)
+    , kind
+    , apiVersion
+    , metadata
+    , conditions
+    , mkComponentStatus
+    ) where
+
+import           Control.Lens.TH                        (makeLenses)
+import           Data.Aeson.TH                          (defaultOptions,
+                                                         deriveJSON,
+                                                         fieldLabelModifier)
+import           Data.Text                              (Text)
+import           GHC.Generics                           (Generic)
+import           Kubernetes.Model.V1.ComponentCondition (ComponentCondition)
+import           Kubernetes.Model.V1.ObjectMeta         (ObjectMeta)
+import           Prelude                                hiding (drop, error,
+                                                         max, min)
+import qualified Prelude                                as P
+import           Test.QuickCheck                        (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances              ()
+
+-- | ComponentStatus (and ComponentStatusList) holds the cluster validation info.
+data ComponentStatus = ComponentStatus
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _conditions :: !(Maybe [ComponentCondition])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ComponentStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ComponentStatus)
+
+instance Arbitrary ComponentStatus where
+    arbitrary = ComponentStatus <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ComponentStatus
+mkComponentStatus :: ComponentStatus
+mkComponentStatus = ComponentStatus Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ComponentStatusList.hs b/lib/Kubernetes/Model/V1/ComponentStatusList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ComponentStatusList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ComponentStatusList
+    ( ComponentStatusList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkComponentStatusList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.ComponentStatus   (ComponentStatus)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | Status of all the conditions for the component as a list of ComponentStatus objects.
+data ComponentStatusList = ComponentStatusList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([ComponentStatus])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ComponentStatusList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ComponentStatusList)
+
+instance Arbitrary ComponentStatusList where
+    arbitrary = ComponentStatusList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ComponentStatusList
+mkComponentStatusList :: [ComponentStatus] -> ComponentStatusList
+mkComponentStatusList xitemsx = ComponentStatusList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/ConfigMap.hs b/lib/Kubernetes/Model/V1/ConfigMap.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ConfigMap.hs
@@ -0,0 +1,49 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ConfigMap
+    ( ConfigMap (..)
+    , kind
+    , apiVersion
+    , metadata
+    , data_
+    , mkConfigMap
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           Data.Text                      (Text)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.Any        (Any)
+import           Kubernetes.Model.V1.ObjectMeta (ObjectMeta)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | ConfigMap holds configuration data for pods to consume.
+data ConfigMap = ConfigMap
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _data_      :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ConfigMap
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ConfigMap)
+
+instance Arbitrary ConfigMap where
+    arbitrary = ConfigMap <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ConfigMap
+mkConfigMap :: ConfigMap
+mkConfigMap = ConfigMap Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ConfigMapKeySelector.hs b/lib/Kubernetes/Model/V1/ConfigMapKeySelector.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ConfigMapKeySelector.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ConfigMapKeySelector
+    ( ConfigMapKeySelector (..)
+    , name
+    , key
+    , mkConfigMapKeySelector
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Selects a key from a ConfigMap.
+data ConfigMapKeySelector = ConfigMapKeySelector
+    { _name :: !(Maybe Text)
+    , _key  :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ConfigMapKeySelector
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ConfigMapKeySelector)
+
+instance Arbitrary ConfigMapKeySelector where
+    arbitrary = ConfigMapKeySelector <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ConfigMapKeySelector
+mkConfigMapKeySelector :: Text -> ConfigMapKeySelector
+mkConfigMapKeySelector xkeyx = ConfigMapKeySelector Nothing xkeyx
diff --git a/lib/Kubernetes/Model/V1/ConfigMapList.hs b/lib/Kubernetes/Model/V1/ConfigMapList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ConfigMapList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ConfigMapList
+    ( ConfigMapList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkConfigMapList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.ConfigMap         (ConfigMap)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | ConfigMapList is a resource containing a list of ConfigMap objects.
+data ConfigMapList = ConfigMapList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !(Maybe [ConfigMap])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ConfigMapList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ConfigMapList)
+
+instance Arbitrary ConfigMapList where
+    arbitrary = ConfigMapList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ConfigMapList
+mkConfigMapList :: ConfigMapList
+mkConfigMapList = ConfigMapList Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Container.hs b/lib/Kubernetes/Model/V1/Container.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Container.hs
@@ -0,0 +1,84 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Container
+    ( Container (..)
+    , name
+    , image
+    , command
+    , args
+    , workingDir
+    , ports
+    , env
+    , resources
+    , volumeMounts
+    , livenessProbe
+    , readinessProbe
+    , lifecycle
+    , terminationMessagePath
+    , imagePullPolicy
+    , securityContext
+    , stdin
+    , stdinOnce
+    , tty
+    , mkContainer
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.ContainerPort        (ContainerPort)
+import           Kubernetes.Model.V1.EnvVar               (EnvVar)
+import           Kubernetes.Model.V1.Lifecycle            (Lifecycle)
+import           Kubernetes.Model.V1.Probe                (Probe)
+import           Kubernetes.Model.V1.ResourceRequirements (ResourceRequirements)
+import           Kubernetes.Model.V1.SecurityContext      (SecurityContext)
+import           Kubernetes.Model.V1.VolumeMount          (VolumeMount)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | A single application container that you want to run within a pod.
+data Container = Container
+    { _name                   :: !(Text)
+    , _image                  :: !(Maybe Text)
+    , _command                :: !(Maybe [Text])
+    , _args                   :: !(Maybe [Text])
+    , _workingDir             :: !(Maybe Text)
+    , _ports                  :: !(Maybe [ContainerPort])
+    , _env                    :: !(Maybe [EnvVar])
+    , _resources              :: !(Maybe ResourceRequirements)
+    , _volumeMounts           :: !(Maybe [VolumeMount])
+    , _livenessProbe          :: !(Maybe Probe)
+    , _readinessProbe         :: !(Maybe Probe)
+    , _lifecycle              :: !(Maybe Lifecycle)
+    , _terminationMessagePath :: !(Maybe Text)
+    , _imagePullPolicy        :: !(Maybe Text)
+    , _securityContext        :: !(Maybe SecurityContext)
+    , _stdin                  :: !(Maybe Bool)
+    , _stdinOnce              :: !(Maybe Bool)
+    , _tty                    :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Container
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Container)
+
+instance Arbitrary Container where
+    arbitrary = Container <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Container
+mkContainer :: Text -> Container
+mkContainer xnamex = Container xnamex Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerImage.hs b/lib/Kubernetes/Model/V1/ContainerImage.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerImage.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerImage
+    ( ContainerImage (..)
+    , repoTags
+    , size
+    , mkContainerImage
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Describe a container image
+data ContainerImage = ContainerImage
+    { _repoTags :: !([Text])
+    , _size     :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerImage
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerImage)
+
+instance Arbitrary ContainerImage where
+    arbitrary = ContainerImage <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerImage
+mkContainerImage :: [Text] -> ContainerImage
+mkContainerImage xrepoTagsx = ContainerImage xrepoTagsx Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerPort.hs b/lib/Kubernetes/Model/V1/ContainerPort.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerPort.hs
@@ -0,0 +1,49 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerPort
+    ( ContainerPort (..)
+    , name
+    , hostPort
+    , containerPort
+    , protocol
+    , hostIP
+    , mkContainerPort
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ContainerPort represents a network port in a single container.
+data ContainerPort = ContainerPort
+    { _name          :: !(Maybe Text)
+    , _hostPort      :: !(Maybe Integer)
+    , _containerPort :: !(Integer)
+    , _protocol      :: !(Maybe Text)
+    , _hostIP        :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerPort
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerPort)
+
+instance Arbitrary ContainerPort where
+    arbitrary = ContainerPort <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerPort
+mkContainerPort :: Integer -> ContainerPort
+mkContainerPort xcontainerPortx = ContainerPort Nothing Nothing xcontainerPortx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerState.hs b/lib/Kubernetes/Model/V1/ContainerState.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerState.hs
@@ -0,0 +1,49 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerState
+    ( ContainerState (..)
+    , waiting
+    , running
+    , terminated
+    , mkContainerState
+    ) where
+
+import           Control.Lens.TH                              (makeLenses)
+import           Data.Aeson.TH                                (defaultOptions,
+                                                               deriveJSON, fieldLabelModifier)
+import           GHC.Generics                                 (Generic)
+import           Kubernetes.Model.V1.ContainerStateRunning    (ContainerStateRunning)
+import           Kubernetes.Model.V1.ContainerStateTerminated (ContainerStateTerminated)
+import           Kubernetes.Model.V1.ContainerStateWaiting    (ContainerStateWaiting)
+import           Prelude                                      hiding (drop,
+                                                               error, max, min)
+import qualified Prelude                                      as P
+import           Test.QuickCheck                              (Arbitrary,
+                                                               arbitrary)
+import           Test.QuickCheck.Instances                    ()
+
+-- | ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.
+data ContainerState = ContainerState
+    { _waiting    :: !(Maybe ContainerStateWaiting)
+    , _running    :: !(Maybe ContainerStateRunning)
+    , _terminated :: !(Maybe ContainerStateTerminated)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerState
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerState)
+
+instance Arbitrary ContainerState where
+    arbitrary = ContainerState <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerState
+mkContainerState :: ContainerState
+mkContainerState = ContainerState Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerStateRunning.hs b/lib/Kubernetes/Model/V1/ContainerStateRunning.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerStateRunning.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerStateRunning
+    ( ContainerStateRunning (..)
+    , startedAt
+    , mkContainerStateRunning
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ContainerStateRunning is a running state of a container.
+data ContainerStateRunning = ContainerStateRunning
+    { _startedAt :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerStateRunning
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerStateRunning)
+
+instance Arbitrary ContainerStateRunning where
+    arbitrary = ContainerStateRunning <$> arbitrary
+
+-- | Use this method to build a ContainerStateRunning
+mkContainerStateRunning :: ContainerStateRunning
+mkContainerStateRunning = ContainerStateRunning Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerStateTerminated.hs b/lib/Kubernetes/Model/V1/ContainerStateTerminated.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerStateTerminated.hs
@@ -0,0 +1,53 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerStateTerminated
+    ( ContainerStateTerminated (..)
+    , exitCode
+    , signal
+    , reason
+    , message
+    , startedAt
+    , finishedAt
+    , containerID
+    , mkContainerStateTerminated
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ContainerStateTerminated is a terminated state of a container.
+data ContainerStateTerminated = ContainerStateTerminated
+    { _exitCode    :: !(Integer)
+    , _signal      :: !(Maybe Integer)
+    , _reason      :: !(Maybe Text)
+    , _message     :: !(Maybe Text)
+    , _startedAt   :: !(Maybe Text)
+    , _finishedAt  :: !(Maybe Text)
+    , _containerID :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerStateTerminated
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerStateTerminated)
+
+instance Arbitrary ContainerStateTerminated where
+    arbitrary = ContainerStateTerminated <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerStateTerminated
+mkContainerStateTerminated :: Integer -> ContainerStateTerminated
+mkContainerStateTerminated xexitCodex = ContainerStateTerminated xexitCodex Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerStateWaiting.hs b/lib/Kubernetes/Model/V1/ContainerStateWaiting.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerStateWaiting.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerStateWaiting
+    ( ContainerStateWaiting (..)
+    , reason
+    , message
+    , mkContainerStateWaiting
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ContainerStateWaiting is a waiting state of a container.
+data ContainerStateWaiting = ContainerStateWaiting
+    { _reason  :: !(Maybe Text)
+    , _message :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerStateWaiting
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerStateWaiting)
+
+instance Arbitrary ContainerStateWaiting where
+    arbitrary = ContainerStateWaiting <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerStateWaiting
+mkContainerStateWaiting :: ContainerStateWaiting
+mkContainerStateWaiting = ContainerStateWaiting Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ContainerStatus.hs b/lib/Kubernetes/Model/V1/ContainerStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ContainerStatus.hs
@@ -0,0 +1,57 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ContainerStatus
+    ( ContainerStatus (..)
+    , name
+    , state
+    , lastState
+    , ready
+    , restartCount
+    , image
+    , imageID
+    , containerID
+    , mkContainerStatus
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           Data.Text                          (Text)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.ContainerState (ContainerState)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | ContainerStatus contains details for the current status of this container.
+data ContainerStatus = ContainerStatus
+    { _name         :: !(Text)
+    , _state        :: !(Maybe ContainerState)
+    , _lastState    :: !(Maybe ContainerState)
+    , _ready        :: !(Bool)
+    , _restartCount :: !(Integer)
+    , _image        :: !(Text)
+    , _imageID      :: !(Text)
+    , _containerID  :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ContainerStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ContainerStatus)
+
+instance Arbitrary ContainerStatus where
+    arbitrary = ContainerStatus <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ContainerStatus
+mkContainerStatus :: Text -> Bool -> Integer -> Text -> Text -> ContainerStatus
+mkContainerStatus xnamex xreadyx xrestartCountx ximagex ximageIDx = ContainerStatus xnamex Nothing Nothing xreadyx xrestartCountx ximagex ximageIDx Nothing
diff --git a/lib/Kubernetes/Model/V1/DaemonEndpoint.hs b/lib/Kubernetes/Model/V1/DaemonEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/DaemonEndpoint.hs
@@ -0,0 +1,40 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.DaemonEndpoint
+    ( DaemonEndpoint (..)
+    , port
+    , mkDaemonEndpoint
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | DaemonEndpoint contains information about a single Daemon endpoint.
+data DaemonEndpoint = DaemonEndpoint
+    { _port :: !(Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''DaemonEndpoint
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''DaemonEndpoint)
+
+instance Arbitrary DaemonEndpoint where
+    arbitrary = DaemonEndpoint <$> arbitrary
+
+-- | Use this method to build a DaemonEndpoint
+mkDaemonEndpoint :: Integer -> DaemonEndpoint
+mkDaemonEndpoint xportx = DaemonEndpoint xportx
diff --git a/lib/Kubernetes/Model/V1/DeleteOptions.hs b/lib/Kubernetes/Model/V1/DeleteOptions.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/DeleteOptions.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.DeleteOptions
+    ( DeleteOptions (..)
+    , kind
+    , apiVersion
+    , gracePeriodSeconds
+    , mkDeleteOptions
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | DeleteOptions may be provided when deleting an API object
+data DeleteOptions = DeleteOptions
+    { _kind               :: !(Maybe Text)
+    , _apiVersion         :: !(Maybe Text)
+    , _gracePeriodSeconds :: !(Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''DeleteOptions
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''DeleteOptions)
+
+instance Arbitrary DeleteOptions where
+    arbitrary = DeleteOptions <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a DeleteOptions
+mkDeleteOptions :: Integer -> DeleteOptions
+mkDeleteOptions xgracePeriodSecondsx = DeleteOptions Nothing Nothing xgracePeriodSecondsx
diff --git a/lib/Kubernetes/Model/V1/DownwardAPIVolumeFile.hs b/lib/Kubernetes/Model/V1/DownwardAPIVolumeFile.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/DownwardAPIVolumeFile.hs
@@ -0,0 +1,46 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.DownwardAPIVolumeFile
+    ( DownwardAPIVolumeFile (..)
+    , path
+    , fieldRef
+    , mkDownwardAPIVolumeFile
+    ) where
+
+import           Control.Lens.TH                         (makeLenses)
+import           Data.Aeson.TH                           (defaultOptions,
+                                                          deriveJSON,
+                                                          fieldLabelModifier)
+import           Data.Text                               (Text)
+import           GHC.Generics                            (Generic)
+import           Kubernetes.Model.V1.ObjectFieldSelector (ObjectFieldSelector)
+import           Prelude                                 hiding (drop, error,
+                                                          max, min)
+import qualified Prelude                                 as P
+import           Test.QuickCheck                         (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances               ()
+
+-- | DownwardAPIVolumeFile represents information to create the file containing the pod field
+data DownwardAPIVolumeFile = DownwardAPIVolumeFile
+    { _path     :: !(Text)
+    , _fieldRef :: !(ObjectFieldSelector)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''DownwardAPIVolumeFile
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''DownwardAPIVolumeFile)
+
+instance Arbitrary DownwardAPIVolumeFile where
+    arbitrary = DownwardAPIVolumeFile <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a DownwardAPIVolumeFile
+mkDownwardAPIVolumeFile :: Text -> ObjectFieldSelector -> DownwardAPIVolumeFile
+mkDownwardAPIVolumeFile xpathx xfieldRefx = DownwardAPIVolumeFile xpathx xfieldRefx
diff --git a/lib/Kubernetes/Model/V1/DownwardAPIVolumeSource.hs b/lib/Kubernetes/Model/V1/DownwardAPIVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/DownwardAPIVolumeSource.hs
@@ -0,0 +1,44 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.DownwardAPIVolumeSource
+    ( DownwardAPIVolumeSource (..)
+    , items
+    , mkDownwardAPIVolumeSource
+    ) where
+
+import           Control.Lens.TH                           (makeLenses)
+import           Data.Aeson.TH                             (defaultOptions,
+                                                            deriveJSON,
+                                                            fieldLabelModifier)
+import           GHC.Generics                              (Generic)
+import           Kubernetes.Model.V1.DownwardAPIVolumeFile (DownwardAPIVolumeFile)
+import           Prelude                                   hiding (drop, error,
+                                                            max, min)
+import qualified Prelude                                   as P
+import           Test.QuickCheck                           (Arbitrary,
+                                                            arbitrary)
+import           Test.QuickCheck.Instances                 ()
+
+-- | DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.
+data DownwardAPIVolumeSource = DownwardAPIVolumeSource
+    { _items :: !(Maybe [DownwardAPIVolumeFile])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''DownwardAPIVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''DownwardAPIVolumeSource)
+
+instance Arbitrary DownwardAPIVolumeSource where
+    arbitrary = DownwardAPIVolumeSource <$> arbitrary
+
+-- | Use this method to build a DownwardAPIVolumeSource
+mkDownwardAPIVolumeSource :: DownwardAPIVolumeSource
+mkDownwardAPIVolumeSource = DownwardAPIVolumeSource Nothing
diff --git a/lib/Kubernetes/Model/V1/EmptyDirVolumeSource.hs b/lib/Kubernetes/Model/V1/EmptyDirVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EmptyDirVolumeSource.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EmptyDirVolumeSource
+    ( EmptyDirVolumeSource (..)
+    , medium
+    , mkEmptyDirVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.
+data EmptyDirVolumeSource = EmptyDirVolumeSource
+    { _medium :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EmptyDirVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EmptyDirVolumeSource)
+
+instance Arbitrary EmptyDirVolumeSource where
+    arbitrary = EmptyDirVolumeSource <$> arbitrary
+
+-- | Use this method to build a EmptyDirVolumeSource
+mkEmptyDirVolumeSource :: EmptyDirVolumeSource
+mkEmptyDirVolumeSource = EmptyDirVolumeSource Nothing
diff --git a/lib/Kubernetes/Model/V1/EndpointAddress.hs b/lib/Kubernetes/Model/V1/EndpointAddress.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EndpointAddress.hs
@@ -0,0 +1,46 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EndpointAddress
+    ( EndpointAddress (..)
+    , ip
+    , targetRef
+    , mkEndpointAddress
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ObjectReference (ObjectReference)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | EndpointAddress is a tuple that describes single IP address.
+data EndpointAddress = EndpointAddress
+    { _ip        :: !(Text)
+    , _targetRef :: !(Maybe ObjectReference)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EndpointAddress
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EndpointAddress)
+
+instance Arbitrary EndpointAddress where
+    arbitrary = EndpointAddress <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a EndpointAddress
+mkEndpointAddress :: Text -> EndpointAddress
+mkEndpointAddress xipx = EndpointAddress xipx Nothing
diff --git a/lib/Kubernetes/Model/V1/EndpointPort.hs b/lib/Kubernetes/Model/V1/EndpointPort.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EndpointPort.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EndpointPort
+    ( EndpointPort (..)
+    , name
+    , port
+    , protocol
+    , mkEndpointPort
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | EndpointPort is a tuple that describes a single port.
+data EndpointPort = EndpointPort
+    { _name     :: !(Maybe Text)
+    , _port     :: !(Integer)
+    , _protocol :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EndpointPort
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EndpointPort)
+
+instance Arbitrary EndpointPort where
+    arbitrary = EndpointPort <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EndpointPort
+mkEndpointPort :: Integer -> EndpointPort
+mkEndpointPort xportx = EndpointPort Nothing xportx Nothing
diff --git a/lib/Kubernetes/Model/V1/EndpointSubset.hs b/lib/Kubernetes/Model/V1/EndpointSubset.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EndpointSubset.hs
@@ -0,0 +1,48 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EndpointSubset
+    ( EndpointSubset (..)
+    , addresses
+    , notReadyAddresses
+    , ports
+    , mkEndpointSubset
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.EndpointAddress (EndpointAddress)
+import           Kubernetes.Model.V1.EndpointPort    (EndpointPort)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n  {\n    Addresses: [{\&quot;ip\&quot;: \&quot;10.10.1.1\&quot;}, {\&quot;ip\&quot;: \&quot;10.10.2.2\&quot;}],\n    Ports:     [{\&quot;name\&quot;: \&quot;a\&quot;, \&quot;port\&quot;: 8675}, {\&quot;name\&quot;: \&quot;b\&quot;, \&quot;port\&quot;: 309}]\n  }\nThe resulting set of endpoints can be viewed as:\n    a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n    b: [ 10.10.1.1:309, 10.10.2.2:309 ]
+data EndpointSubset = EndpointSubset
+    { _addresses         :: !(Maybe [EndpointAddress])
+    , _notReadyAddresses :: !(Maybe [EndpointAddress])
+    , _ports             :: !(Maybe [EndpointPort])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EndpointSubset
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EndpointSubset)
+
+instance Arbitrary EndpointSubset where
+    arbitrary = EndpointSubset <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EndpointSubset
+mkEndpointSubset :: EndpointSubset
+mkEndpointSubset = EndpointSubset Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Endpoints.hs b/lib/Kubernetes/Model/V1/Endpoints.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Endpoints.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Endpoints
+    ( Endpoints (..)
+    , kind
+    , apiVersion
+    , metadata
+    , subsets
+    , mkEndpoints
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           Data.Text                          (Text)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.EndpointSubset (EndpointSubset)
+import           Kubernetes.Model.V1.ObjectMeta     (ObjectMeta)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | Endpoints is a collection of endpoints that implement the actual service. Example:\n  Name: \&quot;mysvc\&quot;,\n  Subsets: [\n    {\n      Addresses: [{\&quot;ip\&quot;: \&quot;10.10.1.1\&quot;}, {\&quot;ip\&quot;: \&quot;10.10.2.2\&quot;}],\n      Ports: [{\&quot;name\&quot;: \&quot;a\&quot;, \&quot;port\&quot;: 8675}, {\&quot;name\&quot;: \&quot;b\&quot;, \&quot;port\&quot;: 309}]\n    },\n    {\n      Addresses: [{\&quot;ip\&quot;: \&quot;10.10.3.3\&quot;}],\n      Ports: [{\&quot;name\&quot;: \&quot;a\&quot;, \&quot;port\&quot;: 93}, {\&quot;name\&quot;: \&quot;b\&quot;, \&quot;port\&quot;: 76}]\n    },\n ]
+data Endpoints = Endpoints
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _subsets    :: !([EndpointSubset])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Endpoints
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Endpoints)
+
+instance Arbitrary Endpoints where
+    arbitrary = Endpoints <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Endpoints
+mkEndpoints :: [EndpointSubset] -> Endpoints
+mkEndpoints xsubsetsx = Endpoints Nothing Nothing Nothing xsubsetsx
diff --git a/lib/Kubernetes/Model/V1/EndpointsList.hs b/lib/Kubernetes/Model/V1/EndpointsList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EndpointsList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EndpointsList
+    ( EndpointsList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkEndpointsList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Endpoints         (Endpoints)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | EndpointsList is a list of endpoints.
+data EndpointsList = EndpointsList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Endpoints])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EndpointsList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EndpointsList)
+
+instance Arbitrary EndpointsList where
+    arbitrary = EndpointsList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EndpointsList
+mkEndpointsList :: [Endpoints] -> EndpointsList
+mkEndpointsList xitemsx = EndpointsList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/EnvVar.hs b/lib/Kubernetes/Model/V1/EnvVar.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EnvVar.hs
@@ -0,0 +1,46 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EnvVar
+    ( EnvVar (..)
+    , name
+    , value
+    , valueFrom
+    , mkEnvVar
+    ) where
+
+import           Control.Lens.TH                  (makeLenses)
+import           Data.Aeson.TH                    (defaultOptions, deriveJSON,
+                                                   fieldLabelModifier)
+import           Data.Text                        (Text)
+import           GHC.Generics                     (Generic)
+import           Kubernetes.Model.V1.EnvVarSource (EnvVarSource)
+import           Prelude                          hiding (drop, error, max, min)
+import qualified Prelude                          as P
+import           Test.QuickCheck                  (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances        ()
+
+-- | EnvVar represents an environment variable present in a Container.
+data EnvVar = EnvVar
+    { _name      :: !(Text)
+    , _value     :: !(Maybe Text)
+    , _valueFrom :: !(Maybe EnvVarSource)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EnvVar
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EnvVar)
+
+instance Arbitrary EnvVar where
+    arbitrary = EnvVar <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EnvVar
+mkEnvVar :: Text -> EnvVar
+mkEnvVar xnamex = EnvVar xnamex Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/EnvVarSource.hs b/lib/Kubernetes/Model/V1/EnvVarSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EnvVarSource.hs
@@ -0,0 +1,49 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EnvVarSource
+    ( EnvVarSource (..)
+    , fieldRef
+    , configMapKeyRef
+    , secretKeyRef
+    , mkEnvVarSource
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.ConfigMapKeySelector (ConfigMapKeySelector)
+import           Kubernetes.Model.V1.ObjectFieldSelector  (ObjectFieldSelector)
+import           Kubernetes.Model.V1.SecretKeySelector    (SecretKeySelector)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | EnvVarSource represents a source for the value of an EnvVar.
+data EnvVarSource = EnvVarSource
+    { _fieldRef        :: !(Maybe ObjectFieldSelector)
+    , _configMapKeyRef :: !(Maybe ConfigMapKeySelector)
+    , _secretKeyRef    :: !(Maybe SecretKeySelector)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EnvVarSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EnvVarSource)
+
+instance Arbitrary EnvVarSource where
+    arbitrary = EnvVarSource <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EnvVarSource
+mkEnvVarSource :: EnvVarSource
+mkEnvVarSource = EnvVarSource Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Event.hs b/lib/Kubernetes/Model/V1/Event.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Event.hs
@@ -0,0 +1,66 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Event
+    ( Event (..)
+    , kind
+    , apiVersion
+    , metadata
+    , involvedObject
+    , reason
+    , message
+    , source
+    , firstTimestamp
+    , lastTimestamp
+    , count
+    , type_
+    , mkEvent
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.EventSource     (EventSource)
+import           Kubernetes.Model.V1.ObjectMeta      (ObjectMeta)
+import           Kubernetes.Model.V1.ObjectReference (ObjectReference)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | Event is a report of an event somewhere in the cluster.
+data Event = Event
+    { _kind           :: !(Maybe Text)
+    , _apiVersion     :: !(Maybe Text)
+    , _metadata       :: !(ObjectMeta)
+    , _involvedObject :: !(ObjectReference)
+    , _reason         :: !(Maybe Text)
+    , _message        :: !(Maybe Text)
+    , _source         :: !(Maybe EventSource)
+    , _firstTimestamp :: !(Maybe Text)
+    , _lastTimestamp  :: !(Maybe Text)
+    , _count          :: !(Maybe Integer)
+    , _type_          :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Event
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Event)
+
+instance Arbitrary Event where
+    arbitrary = Event <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Event
+mkEvent :: ObjectMeta -> ObjectReference -> Event
+mkEvent xmetadatax xinvolvedObjectx = Event Nothing Nothing xmetadatax xinvolvedObjectx Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/EventList.hs b/lib/Kubernetes/Model/V1/EventList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EventList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EventList
+    ( EventList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkEventList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Event             (Event)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | EventList is a list of events.
+data EventList = EventList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Event])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EventList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EventList)
+
+instance Arbitrary EventList where
+    arbitrary = EventList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a EventList
+mkEventList :: [Event] -> EventList
+mkEventList xitemsx = EventList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/EventSource.hs b/lib/Kubernetes/Model/V1/EventSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/EventSource.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.EventSource
+    ( EventSource (..)
+    , component
+    , host
+    , mkEventSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | EventSource contains information for an event.
+data EventSource = EventSource
+    { _component :: !(Maybe Text)
+    , _host      :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''EventSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''EventSource)
+
+instance Arbitrary EventSource where
+    arbitrary = EventSource <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a EventSource
+mkEventSource :: EventSource
+mkEventSource = EventSource Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ExecAction.hs b/lib/Kubernetes/Model/V1/ExecAction.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ExecAction.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ExecAction
+    ( ExecAction (..)
+    , command
+    , mkExecAction
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ExecAction describes a \&quot;run in container\&quot; action.
+data ExecAction = ExecAction
+    { _command :: !(Maybe [Text])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ExecAction
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ExecAction)
+
+instance Arbitrary ExecAction where
+    arbitrary = ExecAction <$> arbitrary
+
+-- | Use this method to build a ExecAction
+mkExecAction :: ExecAction
+mkExecAction = ExecAction Nothing
diff --git a/lib/Kubernetes/Model/V1/FCVolumeSource.hs b/lib/Kubernetes/Model/V1/FCVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/FCVolumeSource.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.FCVolumeSource
+    ( FCVolumeSource (..)
+    , targetWWNs
+    , lun
+    , fsType
+    , readOnly
+    , mkFCVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.
+data FCVolumeSource = FCVolumeSource
+    { _targetWWNs :: !([Text])
+    , _lun        :: !(Integer)
+    , _fsType     :: !(Text)
+    , _readOnly   :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''FCVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''FCVolumeSource)
+
+instance Arbitrary FCVolumeSource where
+    arbitrary = FCVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a FCVolumeSource
+mkFCVolumeSource :: [Text] -> Integer -> Text -> FCVolumeSource
+mkFCVolumeSource xtargetWWNsx xlunx xfsTypex = FCVolumeSource xtargetWWNsx xlunx xfsTypex Nothing
diff --git a/lib/Kubernetes/Model/V1/FinalizerName.hs b/lib/Kubernetes/Model/V1/FinalizerName.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/FinalizerName.hs
@@ -0,0 +1,36 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.FinalizerName
+    ( FinalizerName (..)
+    , mkFinalizerName
+    ) where
+
+import           Control.Lens.TH (makeLenses)
+import           Data.Aeson.TH   (defaultOptions, deriveJSON,
+                                  fieldLabelModifier)
+import           GHC.Generics    (Generic)
+import           Prelude         hiding (drop, error, max, min)
+import qualified Prelude         as P
+import           Test.QuickCheck (Arbitrary, arbitrary)
+
+-- |
+data FinalizerName = FinalizerName deriving (Show, Eq, Generic)
+
+makeLenses ''FinalizerName
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''FinalizerName)
+
+instance Arbitrary FinalizerName where
+    arbitrary = return FinalizerName
+
+-- | Use this method to build a FinalizerName
+mkFinalizerName :: FinalizerName
+mkFinalizerName = FinalizerName
diff --git a/lib/Kubernetes/Model/V1/FlexVolumeSource.hs b/lib/Kubernetes/Model/V1/FlexVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/FlexVolumeSource.hs
@@ -0,0 +1,53 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.FlexVolumeSource
+    ( FlexVolumeSource (..)
+    , driver
+    , fsType
+    , secretRef
+    , readOnly
+    , options
+    , mkFlexVolumeSource
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.Any                  (Any)
+import           Kubernetes.Model.V1.LocalObjectReference (LocalObjectReference)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.
+data FlexVolumeSource = FlexVolumeSource
+    { _driver    :: !(Text)
+    , _fsType    :: !(Maybe Text)
+    , _secretRef :: !(Maybe LocalObjectReference)
+    , _readOnly  :: !(Maybe Bool)
+    , _options   :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''FlexVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''FlexVolumeSource)
+
+instance Arbitrary FlexVolumeSource where
+    arbitrary = FlexVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a FlexVolumeSource
+mkFlexVolumeSource :: Text -> FlexVolumeSource
+mkFlexVolumeSource xdriverx = FlexVolumeSource xdriverx Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/FlockerVolumeSource.hs b/lib/Kubernetes/Model/V1/FlockerVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/FlockerVolumeSource.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.FlockerVolumeSource
+    ( FlockerVolumeSource (..)
+    , datasetName
+    , mkFlockerVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a Flocker volume mounted by the Flocker agent. Flocker volumes do not support ownership management or SELinux relabeling.
+data FlockerVolumeSource = FlockerVolumeSource
+    { _datasetName :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''FlockerVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''FlockerVolumeSource)
+
+instance Arbitrary FlockerVolumeSource where
+    arbitrary = FlockerVolumeSource <$> arbitrary
+
+-- | Use this method to build a FlockerVolumeSource
+mkFlockerVolumeSource :: Text -> FlockerVolumeSource
+mkFlockerVolumeSource xdatasetNamex = FlockerVolumeSource xdatasetNamex
diff --git a/lib/Kubernetes/Model/V1/GCEPersistentDiskVolumeSource.hs b/lib/Kubernetes/Model/V1/GCEPersistentDiskVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/GCEPersistentDiskVolumeSource.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.GCEPersistentDiskVolumeSource
+    ( GCEPersistentDiskVolumeSource (..)
+    , pdName
+    , fsType
+    , partition
+    , readOnly
+    , mkGCEPersistentDiskVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist and be formatted before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once. GCE PDs support ownership management and SELinux relabeling.
+data GCEPersistentDiskVolumeSource = GCEPersistentDiskVolumeSource
+    { _pdName    :: !(Text)
+    , _fsType    :: !(Text)
+    , _partition :: !(Maybe Integer)
+    , _readOnly  :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''GCEPersistentDiskVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''GCEPersistentDiskVolumeSource)
+
+instance Arbitrary GCEPersistentDiskVolumeSource where
+    arbitrary = GCEPersistentDiskVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a GCEPersistentDiskVolumeSource
+mkGCEPersistentDiskVolumeSource :: Text -> Text -> GCEPersistentDiskVolumeSource
+mkGCEPersistentDiskVolumeSource xpdNamex xfsTypex = GCEPersistentDiskVolumeSource xpdNamex xfsTypex Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/GitRepoVolumeSource.hs b/lib/Kubernetes/Model/V1/GitRepoVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/GitRepoVolumeSource.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.GitRepoVolumeSource
+    ( GitRepoVolumeSource (..)
+    , repository
+    , revision
+    , directory
+    , mkGitRepoVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.
+data GitRepoVolumeSource = GitRepoVolumeSource
+    { _repository :: !(Text)
+    , _revision   :: !(Maybe Text)
+    , _directory  :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''GitRepoVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''GitRepoVolumeSource)
+
+instance Arbitrary GitRepoVolumeSource where
+    arbitrary = GitRepoVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a GitRepoVolumeSource
+mkGitRepoVolumeSource :: Text -> GitRepoVolumeSource
+mkGitRepoVolumeSource xrepositoryx = GitRepoVolumeSource xrepositoryx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/GlusterfsVolumeSource.hs b/lib/Kubernetes/Model/V1/GlusterfsVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/GlusterfsVolumeSource.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.GlusterfsVolumeSource
+    ( GlusterfsVolumeSource (..)
+    , endpoints
+    , path
+    , readOnly
+    , mkGlusterfsVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.
+data GlusterfsVolumeSource = GlusterfsVolumeSource
+    { _endpoints :: !(Text)
+    , _path      :: !(Text)
+    , _readOnly  :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''GlusterfsVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''GlusterfsVolumeSource)
+
+instance Arbitrary GlusterfsVolumeSource where
+    arbitrary = GlusterfsVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a GlusterfsVolumeSource
+mkGlusterfsVolumeSource :: Text -> Text -> GlusterfsVolumeSource
+mkGlusterfsVolumeSource xendpointsx xpathx = GlusterfsVolumeSource xendpointsx xpathx Nothing
diff --git a/lib/Kubernetes/Model/V1/HTTPGetAction.hs b/lib/Kubernetes/Model/V1/HTTPGetAction.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/HTTPGetAction.hs
@@ -0,0 +1,48 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.HTTPGetAction
+    ( HTTPGetAction (..)
+    , path
+    , port
+    , host
+    , scheme
+    , mkHTTPGetAction
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Utils          (IntegerOrText)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | HTTPGetAction describes an action based on HTTP Get requests.
+data HTTPGetAction = HTTPGetAction
+    { _path   :: !(Maybe Text)
+    , _port   :: !(IntegerOrText)
+    , _host   :: !(Maybe Text)
+    , _scheme :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''HTTPGetAction
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''HTTPGetAction)
+
+instance Arbitrary HTTPGetAction where
+    arbitrary = HTTPGetAction <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a HTTPGetAction
+mkHTTPGetAction :: IntegerOrText -> HTTPGetAction
+mkHTTPGetAction xportx = HTTPGetAction Nothing xportx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Handler.hs b/lib/Kubernetes/Model/V1/Handler.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Handler.hs
@@ -0,0 +1,49 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Handler
+    ( Handler (..)
+    , exec
+    , httpGet
+    , tcpSocket
+    , mkHandler
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ExecAction      (ExecAction)
+import           Kubernetes.Model.V1.HTTPGetAction   (HTTPGetAction)
+import           Kubernetes.Model.V1.TCPSocketAction (TCPSocketAction)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | Handler defines a specific action that should be taken
+data Handler = Handler
+    { _exec      :: !(Maybe ExecAction)
+    , _httpGet   :: !(Maybe HTTPGetAction)
+    , _tcpSocket :: !(Maybe TCPSocketAction)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Handler
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Handler)
+
+instance Arbitrary Handler where
+    arbitrary = Handler <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Handler
+mkHandler :: Handler
+mkHandler = Handler Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/HostPathVolumeSource.hs b/lib/Kubernetes/Model/V1/HostPathVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/HostPathVolumeSource.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.HostPathVolumeSource
+    ( HostPathVolumeSource (..)
+    , path
+    , mkHostPathVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.
+data HostPathVolumeSource = HostPathVolumeSource
+    { _path :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''HostPathVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''HostPathVolumeSource)
+
+instance Arbitrary HostPathVolumeSource where
+    arbitrary = HostPathVolumeSource <$> arbitrary
+
+-- | Use this method to build a HostPathVolumeSource
+mkHostPathVolumeSource :: Text -> HostPathVolumeSource
+mkHostPathVolumeSource xpathx = HostPathVolumeSource xpathx
diff --git a/lib/Kubernetes/Model/V1/ISCSIVolumeSource.hs b/lib/Kubernetes/Model/V1/ISCSIVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ISCSIVolumeSource.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ISCSIVolumeSource
+    ( ISCSIVolumeSource (..)
+    , targetPortal
+    , iqn
+    , lun
+    , iscsiInterface
+    , fsType
+    , readOnly
+    , mkISCSIVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.
+data ISCSIVolumeSource = ISCSIVolumeSource
+    { _targetPortal   :: !(Text)
+    , _iqn            :: !(Text)
+    , _lun            :: !(Integer)
+    , _iscsiInterface :: !(Maybe Text)
+    , _fsType         :: !(Text)
+    , _readOnly       :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ISCSIVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ISCSIVolumeSource)
+
+instance Arbitrary ISCSIVolumeSource where
+    arbitrary = ISCSIVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ISCSIVolumeSource
+mkISCSIVolumeSource :: Text -> Text -> Integer -> Text -> ISCSIVolumeSource
+mkISCSIVolumeSource xtargetPortalx xiqnx xlunx xfsTypex = ISCSIVolumeSource xtargetPortalx xiqnx xlunx Nothing xfsTypex Nothing
diff --git a/lib/Kubernetes/Model/V1/Lifecycle.hs b/lib/Kubernetes/Model/V1/Lifecycle.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Lifecycle.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Lifecycle
+    ( Lifecycle (..)
+    , postStart
+    , preStop
+    , mkLifecycle
+    ) where
+
+import           Control.Lens.TH             (makeLenses)
+import           Data.Aeson.TH               (defaultOptions, deriveJSON,
+                                              fieldLabelModifier)
+import           GHC.Generics                (Generic)
+import           Kubernetes.Model.V1.Handler (Handler)
+import           Prelude                     hiding (drop, error, max, min)
+import qualified Prelude                     as P
+import           Test.QuickCheck             (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances   ()
+
+-- | Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.
+data Lifecycle = Lifecycle
+    { _postStart :: !(Maybe Handler)
+    , _preStop   :: !(Maybe Handler)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Lifecycle
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Lifecycle)
+
+instance Arbitrary Lifecycle where
+    arbitrary = Lifecycle <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a Lifecycle
+mkLifecycle :: Lifecycle
+mkLifecycle = Lifecycle Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/LimitRange.hs b/lib/Kubernetes/Model/V1/LimitRange.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LimitRange.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LimitRange
+    ( LimitRange (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , mkLimitRange
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           Data.Text                          (Text)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.LimitRangeSpec (LimitRangeSpec)
+import           Kubernetes.Model.V1.ObjectMeta     (ObjectMeta)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | LimitRange sets resource usage limits for each kind of resource in a Namespace.
+data LimitRange = LimitRange
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe LimitRangeSpec)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LimitRange
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LimitRange)
+
+instance Arbitrary LimitRange where
+    arbitrary = LimitRange <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a LimitRange
+mkLimitRange :: LimitRange
+mkLimitRange = LimitRange Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/LimitRangeItem.hs b/lib/Kubernetes/Model/V1/LimitRangeItem.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LimitRangeItem.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LimitRangeItem
+    ( LimitRangeItem (..)
+    , type_
+    , max
+    , min
+    , default_
+    , defaultRequest
+    , maxLimitRequestRatio
+    , mkLimitRangeItem
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Model.V1.Any   (Any)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | LimitRangeItem defines a min/max usage limit for any resource that matches on kind.
+data LimitRangeItem = LimitRangeItem
+    { _type_                :: !(Maybe Text)
+    , _max                  :: !(Maybe Any)
+    , _min                  :: !(Maybe Any)
+    , _default_             :: !(Maybe Any)
+    , _defaultRequest       :: !(Maybe Any)
+    , _maxLimitRequestRatio :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LimitRangeItem
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LimitRangeItem)
+
+instance Arbitrary LimitRangeItem where
+    arbitrary = LimitRangeItem <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a LimitRangeItem
+mkLimitRangeItem :: LimitRangeItem
+mkLimitRangeItem = LimitRangeItem Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/LimitRangeList.hs b/lib/Kubernetes/Model/V1/LimitRangeList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LimitRangeList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LimitRangeList
+    ( LimitRangeList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkLimitRangeList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.LimitRange        (LimitRange)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | LimitRangeList is a list of LimitRange items.
+data LimitRangeList = LimitRangeList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([LimitRange])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LimitRangeList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LimitRangeList)
+
+instance Arbitrary LimitRangeList where
+    arbitrary = LimitRangeList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a LimitRangeList
+mkLimitRangeList :: [LimitRange] -> LimitRangeList
+mkLimitRangeList xitemsx = LimitRangeList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/LimitRangeSpec.hs b/lib/Kubernetes/Model/V1/LimitRangeSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LimitRangeSpec.hs
@@ -0,0 +1,42 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LimitRangeSpec
+    ( LimitRangeSpec (..)
+    , limits
+    , mkLimitRangeSpec
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.LimitRangeItem (LimitRangeItem)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | LimitRangeSpec defines a min/max usage limit for resources that match on kind.
+data LimitRangeSpec = LimitRangeSpec
+    { _limits :: !([LimitRangeItem])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LimitRangeSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LimitRangeSpec)
+
+instance Arbitrary LimitRangeSpec where
+    arbitrary = LimitRangeSpec <$> arbitrary
+
+-- | Use this method to build a LimitRangeSpec
+mkLimitRangeSpec :: [LimitRangeItem] -> LimitRangeSpec
+mkLimitRangeSpec xlimitsx = LimitRangeSpec xlimitsx
diff --git a/lib/Kubernetes/Model/V1/LoadBalancerIngress.hs b/lib/Kubernetes/Model/V1/LoadBalancerIngress.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LoadBalancerIngress.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LoadBalancerIngress
+    ( LoadBalancerIngress (..)
+    , ip
+    , hostname
+    , mkLoadBalancerIngress
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.
+data LoadBalancerIngress = LoadBalancerIngress
+    { _ip       :: !(Maybe Text)
+    , _hostname :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LoadBalancerIngress
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LoadBalancerIngress)
+
+instance Arbitrary LoadBalancerIngress where
+    arbitrary = LoadBalancerIngress <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a LoadBalancerIngress
+mkLoadBalancerIngress :: LoadBalancerIngress
+mkLoadBalancerIngress = LoadBalancerIngress Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/LoadBalancerStatus.hs b/lib/Kubernetes/Model/V1/LoadBalancerStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LoadBalancerStatus.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LoadBalancerStatus
+    ( LoadBalancerStatus (..)
+    , ingress
+    , mkLoadBalancerStatus
+    ) where
+
+import           Control.Lens.TH                         (makeLenses)
+import           Data.Aeson.TH                           (defaultOptions,
+                                                          deriveJSON,
+                                                          fieldLabelModifier)
+import           GHC.Generics                            (Generic)
+import           Kubernetes.Model.V1.LoadBalancerIngress (LoadBalancerIngress)
+import           Prelude                                 hiding (drop, error,
+                                                          max, min)
+import qualified Prelude                                 as P
+import           Test.QuickCheck                         (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances               ()
+
+-- | LoadBalancerStatus represents the status of a load-balancer.
+data LoadBalancerStatus = LoadBalancerStatus
+    { _ingress :: !(Maybe [LoadBalancerIngress])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LoadBalancerStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LoadBalancerStatus)
+
+instance Arbitrary LoadBalancerStatus where
+    arbitrary = LoadBalancerStatus <$> arbitrary
+
+-- | Use this method to build a LoadBalancerStatus
+mkLoadBalancerStatus :: LoadBalancerStatus
+mkLoadBalancerStatus = LoadBalancerStatus Nothing
diff --git a/lib/Kubernetes/Model/V1/LocalObjectReference.hs b/lib/Kubernetes/Model/V1/LocalObjectReference.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/LocalObjectReference.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.LocalObjectReference
+    ( LocalObjectReference (..)
+    , name
+    , mkLocalObjectReference
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.
+data LocalObjectReference = LocalObjectReference
+    { _name :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''LocalObjectReference
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''LocalObjectReference)
+
+instance Arbitrary LocalObjectReference where
+    arbitrary = LocalObjectReference <$> arbitrary
+
+-- | Use this method to build a LocalObjectReference
+mkLocalObjectReference :: LocalObjectReference
+mkLocalObjectReference = LocalObjectReference Nothing
diff --git a/lib/Kubernetes/Model/V1/NFSVolumeSource.hs b/lib/Kubernetes/Model/V1/NFSVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NFSVolumeSource.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NFSVolumeSource
+    ( NFSVolumeSource (..)
+    , server
+    , path
+    , readOnly
+    , mkNFSVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.
+data NFSVolumeSource = NFSVolumeSource
+    { _server   :: !(Text)
+    , _path     :: !(Text)
+    , _readOnly :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NFSVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NFSVolumeSource)
+
+instance Arbitrary NFSVolumeSource where
+    arbitrary = NFSVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NFSVolumeSource
+mkNFSVolumeSource :: Text -> Text -> NFSVolumeSource
+mkNFSVolumeSource xserverx xpathx = NFSVolumeSource xserverx xpathx Nothing
diff --git a/lib/Kubernetes/Model/V1/Namespace.hs b/lib/Kubernetes/Model/V1/Namespace.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Namespace.hs
@@ -0,0 +1,54 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Namespace
+    ( Namespace (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkNamespace
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.NamespaceSpec   (NamespaceSpec)
+import           Kubernetes.Model.V1.NamespaceStatus (NamespaceStatus)
+import           Kubernetes.Model.V1.ObjectMeta      (ObjectMeta)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | Namespace provides a scope for Names. Use of multiple namespaces is optional.
+data Namespace = Namespace
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe NamespaceSpec)
+    , _status     :: !(Maybe NamespaceStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Namespace
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Namespace)
+
+instance Arbitrary Namespace where
+    arbitrary = Namespace <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Namespace
+mkNamespace :: Namespace
+mkNamespace = Namespace Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/NamespaceList.hs b/lib/Kubernetes/Model/V1/NamespaceList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NamespaceList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NamespaceList
+    ( NamespaceList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkNamespaceList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Namespace         (Namespace)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | NamespaceList is a list of Namespaces.
+data NamespaceList = NamespaceList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Namespace])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NamespaceList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NamespaceList)
+
+instance Arbitrary NamespaceList where
+    arbitrary = NamespaceList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NamespaceList
+mkNamespaceList :: [Namespace] -> NamespaceList
+mkNamespaceList xitemsx = NamespaceList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/NamespaceSpec.hs b/lib/Kubernetes/Model/V1/NamespaceSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NamespaceSpec.hs
@@ -0,0 +1,42 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NamespaceSpec
+    ( NamespaceSpec (..)
+    , finalizers
+    , mkNamespaceSpec
+    ) where
+
+import           Control.Lens.TH                   (makeLenses)
+import           Data.Aeson.TH                     (defaultOptions, deriveJSON,
+                                                    fieldLabelModifier)
+import           GHC.Generics                      (Generic)
+import           Kubernetes.Model.V1.FinalizerName (FinalizerName)
+import           Prelude                           hiding (drop, error, max,
+                                                    min)
+import qualified Prelude                           as P
+import           Test.QuickCheck                   (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances         ()
+
+-- | NamespaceSpec describes the attributes on a Namespace.
+data NamespaceSpec = NamespaceSpec
+    { _finalizers :: !(Maybe [FinalizerName])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NamespaceSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NamespaceSpec)
+
+instance Arbitrary NamespaceSpec where
+    arbitrary = NamespaceSpec <$> arbitrary
+
+-- | Use this method to build a NamespaceSpec
+mkNamespaceSpec :: NamespaceSpec
+mkNamespaceSpec = NamespaceSpec Nothing
diff --git a/lib/Kubernetes/Model/V1/NamespaceStatus.hs b/lib/Kubernetes/Model/V1/NamespaceStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NamespaceStatus.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NamespaceStatus
+    ( NamespaceStatus (..)
+    , phase
+    , mkNamespaceStatus
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | NamespaceStatus is information about the current status of a Namespace.
+data NamespaceStatus = NamespaceStatus
+    { _phase :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NamespaceStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NamespaceStatus)
+
+instance Arbitrary NamespaceStatus where
+    arbitrary = NamespaceStatus <$> arbitrary
+
+-- | Use this method to build a NamespaceStatus
+mkNamespaceStatus :: NamespaceStatus
+mkNamespaceStatus = NamespaceStatus Nothing
diff --git a/lib/Kubernetes/Model/V1/Node.hs b/lib/Kubernetes/Model/V1/Node.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Node.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Node
+    ( Node (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkNode
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           Data.Text                      (Text)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.NodeSpec   (NodeSpec)
+import           Kubernetes.Model.V1.NodeStatus (NodeStatus)
+import           Kubernetes.Model.V1.ObjectMeta (ObjectMeta)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | Node is a worker node in Kubernetes, formerly known as minion. Each node will have a unique identifier in the cache (i.e. in etcd).
+data Node = Node
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe NodeSpec)
+    , _status     :: !(Maybe NodeStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Node
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Node)
+
+instance Arbitrary Node where
+    arbitrary = Node <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Node
+mkNode :: Node
+mkNode = Node Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/NodeAddress.hs b/lib/Kubernetes/Model/V1/NodeAddress.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeAddress.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeAddress
+    ( NodeAddress (..)
+    , type_
+    , address
+    , mkNodeAddress
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | NodeAddress contains information for the node&#39;s address.
+data NodeAddress = NodeAddress
+    { _type_   :: !(Text)
+    , _address :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeAddress
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeAddress)
+
+instance Arbitrary NodeAddress where
+    arbitrary = NodeAddress <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeAddress
+mkNodeAddress :: Text -> Text -> NodeAddress
+mkNodeAddress xtype_x xaddressx = NodeAddress xtype_x xaddressx
diff --git a/lib/Kubernetes/Model/V1/NodeCondition.hs b/lib/Kubernetes/Model/V1/NodeCondition.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeCondition.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeCondition
+    ( NodeCondition (..)
+    , type_
+    , status
+    , lastHeartbeatTime
+    , lastTransitionTime
+    , reason
+    , message
+    , mkNodeCondition
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | NodeCondition contains condition infromation for a node.
+data NodeCondition = NodeCondition
+    { _type_              :: !(Text)
+    , _status             :: !(Text)
+    , _lastHeartbeatTime  :: !(Maybe Text)
+    , _lastTransitionTime :: !(Maybe Text)
+    , _reason             :: !(Maybe Text)
+    , _message            :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeCondition
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeCondition)
+
+instance Arbitrary NodeCondition where
+    arbitrary = NodeCondition <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeCondition
+mkNodeCondition :: Text -> Text -> NodeCondition
+mkNodeCondition xtype_x xstatusx = NodeCondition xtype_x xstatusx Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/NodeDaemonEndpoints.hs b/lib/Kubernetes/Model/V1/NodeDaemonEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeDaemonEndpoints.hs
@@ -0,0 +1,42 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeDaemonEndpoints
+    ( NodeDaemonEndpoints (..)
+    , kubeletEndpoint
+    , mkNodeDaemonEndpoints
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.DaemonEndpoint (DaemonEndpoint)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | NodeDaemonEndpoints lists ports opened by daemons running on the Node.
+data NodeDaemonEndpoints = NodeDaemonEndpoints
+    { _kubeletEndpoint :: !(Maybe DaemonEndpoint)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeDaemonEndpoints
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeDaemonEndpoints)
+
+instance Arbitrary NodeDaemonEndpoints where
+    arbitrary = NodeDaemonEndpoints <$> arbitrary
+
+-- | Use this method to build a NodeDaemonEndpoints
+mkNodeDaemonEndpoints :: NodeDaemonEndpoints
+mkNodeDaemonEndpoints = NodeDaemonEndpoints Nothing
diff --git a/lib/Kubernetes/Model/V1/NodeList.hs b/lib/Kubernetes/Model/V1/NodeList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeList
+    ( NodeList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkNodeList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Node              (Node)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | NodeList is the whole list of all Nodes which have been registered with master.
+data NodeList = NodeList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Node])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeList)
+
+instance Arbitrary NodeList where
+    arbitrary = NodeList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeList
+mkNodeList :: [Node] -> NodeList
+mkNodeList xitemsx = NodeList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/NodeSpec.hs b/lib/Kubernetes/Model/V1/NodeSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeSpec.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeSpec
+    ( NodeSpec (..)
+    , podCIDR
+    , externalID
+    , providerID
+    , unschedulable
+    , mkNodeSpec
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | NodeSpec describes the attributes that a node is created with.
+data NodeSpec = NodeSpec
+    { _podCIDR       :: !(Maybe Text)
+    , _externalID    :: !(Maybe Text)
+    , _providerID    :: !(Maybe Text)
+    , _unschedulable :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeSpec)
+
+instance Arbitrary NodeSpec where
+    arbitrary = NodeSpec <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeSpec
+mkNodeSpec :: NodeSpec
+mkNodeSpec = NodeSpec Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/NodeStatus.hs b/lib/Kubernetes/Model/V1/NodeStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeStatus.hs
@@ -0,0 +1,63 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeStatus
+    ( NodeStatus (..)
+    , capacity
+    , allocatable
+    , phase
+    , conditions
+    , addresses
+    , daemonEndpoints
+    , nodeInfo
+    , images
+    , mkNodeStatus
+    ) where
+
+import           Control.Lens.TH                         (makeLenses)
+import           Data.Aeson.TH                           (defaultOptions,
+                                                          deriveJSON,
+                                                          fieldLabelModifier)
+import           Data.Text                               (Text)
+import           GHC.Generics                            (Generic)
+import           Kubernetes.Model.V1.Any                 (Any)
+import           Kubernetes.Model.V1.ContainerImage      (ContainerImage)
+import           Kubernetes.Model.V1.NodeAddress         (NodeAddress)
+import           Kubernetes.Model.V1.NodeCondition       (NodeCondition)
+import           Kubernetes.Model.V1.NodeDaemonEndpoints (NodeDaemonEndpoints)
+import           Kubernetes.Model.V1.NodeSystemInfo      (NodeSystemInfo)
+import           Prelude                                 hiding (drop, error,
+                                                          max, min)
+import qualified Prelude                                 as P
+import           Test.QuickCheck                         (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances               ()
+
+-- | NodeStatus is information about the current status of a node.
+data NodeStatus = NodeStatus
+    { _capacity        :: !(Maybe Any)
+    , _allocatable     :: !(Maybe Any)
+    , _phase           :: !(Maybe Text)
+    , _conditions      :: !(Maybe [NodeCondition])
+    , _addresses       :: !(Maybe [NodeAddress])
+    , _daemonEndpoints :: !(Maybe NodeDaemonEndpoints)
+    , _nodeInfo        :: !(Maybe NodeSystemInfo)
+    , _images          :: !([ContainerImage])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeStatus)
+
+instance Arbitrary NodeStatus where
+    arbitrary = NodeStatus <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeStatus
+mkNodeStatus :: [ContainerImage] -> NodeStatus
+mkNodeStatus ximagesx = NodeStatus Nothing Nothing Nothing Nothing Nothing Nothing Nothing ximagesx
diff --git a/lib/Kubernetes/Model/V1/NodeSystemInfo.hs b/lib/Kubernetes/Model/V1/NodeSystemInfo.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/NodeSystemInfo.hs
@@ -0,0 +1,55 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.NodeSystemInfo
+    ( NodeSystemInfo (..)
+    , machineID
+    , systemUUID
+    , bootID
+    , kernelVersion
+    , osImage
+    , containerRuntimeVersion
+    , kubeletVersion
+    , kubeProxyVersion
+    , mkNodeSystemInfo
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
+data NodeSystemInfo = NodeSystemInfo
+    { _machineID               :: !(Text)
+    , _systemUUID              :: !(Text)
+    , _bootID                  :: !(Text)
+    , _kernelVersion           :: !(Text)
+    , _osImage                 :: !(Text)
+    , _containerRuntimeVersion :: !(Text)
+    , _kubeletVersion          :: !(Text)
+    , _kubeProxyVersion        :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''NodeSystemInfo
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''NodeSystemInfo)
+
+instance Arbitrary NodeSystemInfo where
+    arbitrary = NodeSystemInfo <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a NodeSystemInfo
+mkNodeSystemInfo :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> NodeSystemInfo
+mkNodeSystemInfo xmachineIDx xsystemUUIDx xbootIDx xkernelVersionx xosImagex xcontainerRuntimeVersionx xkubeletVersionx xkubeProxyVersionx = NodeSystemInfo xmachineIDx xsystemUUIDx xbootIDx xkernelVersionx xosImagex xcontainerRuntimeVersionx xkubeletVersionx xkubeProxyVersionx
diff --git a/lib/Kubernetes/Model/V1/ObjectFieldSelector.hs b/lib/Kubernetes/Model/V1/ObjectFieldSelector.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ObjectFieldSelector.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ObjectFieldSelector
+    ( ObjectFieldSelector (..)
+    , apiVersion
+    , fieldPath
+    , mkObjectFieldSelector
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ObjectFieldSelector selects an APIVersioned field of an object.
+data ObjectFieldSelector = ObjectFieldSelector
+    { _apiVersion :: !(Maybe Text)
+    , _fieldPath  :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ObjectFieldSelector
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ObjectFieldSelector)
+
+instance Arbitrary ObjectFieldSelector where
+    arbitrary = ObjectFieldSelector <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ObjectFieldSelector
+mkObjectFieldSelector :: Text -> ObjectFieldSelector
+mkObjectFieldSelector xfieldPathx = ObjectFieldSelector Nothing xfieldPathx
diff --git a/lib/Kubernetes/Model/V1/ObjectMeta.hs b/lib/Kubernetes/Model/V1/ObjectMeta.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ObjectMeta.hs
@@ -0,0 +1,64 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ObjectMeta
+    ( ObjectMeta (..)
+    , name
+    , generateName
+    , namespace
+    , selfLink
+    , uid
+    , resourceVersion
+    , generation
+    , creationTimestamp
+    , deletionTimestamp
+    , deletionGracePeriodSeconds
+    , labels
+    , annotations
+    , mkObjectMeta
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Model.V1.Any   (Any)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.
+data ObjectMeta = ObjectMeta
+    { _name                       :: !(Maybe Text)
+    , _generateName               :: !(Maybe Text)
+    , _namespace                  :: !(Maybe Text)
+    , _selfLink                   :: !(Maybe Text)
+    , _uid                        :: !(Maybe Text)
+    , _resourceVersion            :: !(Maybe Text)
+    , _generation                 :: !(Maybe Integer)
+    , _creationTimestamp          :: !(Maybe Text)
+    , _deletionTimestamp          :: !(Maybe Text)
+    , _deletionGracePeriodSeconds :: !(Maybe Integer)
+    , _labels                     :: !(Maybe Any)
+    , _annotations                :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ObjectMeta
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ObjectMeta)
+
+instance Arbitrary ObjectMeta where
+    arbitrary = ObjectMeta <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ObjectMeta
+mkObjectMeta :: ObjectMeta
+mkObjectMeta = ObjectMeta Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ObjectReference.hs b/lib/Kubernetes/Model/V1/ObjectReference.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ObjectReference.hs
@@ -0,0 +1,53 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ObjectReference
+    ( ObjectReference (..)
+    , kind
+    , namespace
+    , name
+    , uid
+    , apiVersion
+    , resourceVersion
+    , fieldPath
+    , mkObjectReference
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ObjectReference contains enough information to let you inspect or modify the referred object.
+data ObjectReference = ObjectReference
+    { _kind            :: !(Maybe Text)
+    , _namespace       :: !(Maybe Text)
+    , _name            :: !(Maybe Text)
+    , _uid             :: !(Maybe Text)
+    , _apiVersion      :: !(Maybe Text)
+    , _resourceVersion :: !(Maybe Text)
+    , _fieldPath       :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ObjectReference
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ObjectReference)
+
+instance Arbitrary ObjectReference where
+    arbitrary = ObjectReference <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ObjectReference
+mkObjectReference :: ObjectReference
+mkObjectReference = ObjectReference Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolume.hs b/lib/Kubernetes/Model/V1/PersistentVolume.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolume.hs
@@ -0,0 +1,55 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolume
+    ( PersistentVolume (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkPersistentVolume
+    ) where
+
+import           Control.Lens.TH                            (makeLenses)
+import           Data.Aeson.TH                              (defaultOptions,
+                                                             deriveJSON,
+                                                             fieldLabelModifier)
+import           Data.Text                                  (Text)
+import           GHC.Generics                               (Generic)
+import           Kubernetes.Model.V1.ObjectMeta             (ObjectMeta)
+import           Kubernetes.Model.V1.PersistentVolumeSpec   (PersistentVolumeSpec)
+import           Kubernetes.Model.V1.PersistentVolumeStatus (PersistentVolumeStatus)
+import           Prelude                                    hiding (drop, error,
+                                                             max, min)
+import qualified Prelude                                    as P
+import           Test.QuickCheck                            (Arbitrary,
+                                                             arbitrary)
+import           Test.QuickCheck.Instances                  ()
+
+-- | PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md
+data PersistentVolume = PersistentVolume
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe PersistentVolumeSpec)
+    , _status     :: !(Maybe PersistentVolumeStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolume
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolume)
+
+instance Arbitrary PersistentVolume where
+    arbitrary = PersistentVolume <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolume
+mkPersistentVolume :: PersistentVolume
+mkPersistentVolume = PersistentVolume Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeAccessMode.hs b/lib/Kubernetes/Model/V1/PersistentVolumeAccessMode.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeAccessMode.hs
@@ -0,0 +1,36 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeAccessMode
+    ( PersistentVolumeAccessMode (..)
+    , mkPersistentVolumeAccessMode
+    ) where
+
+import           Control.Lens.TH (makeLenses)
+import           Data.Aeson.TH   (defaultOptions, deriveJSON,
+                                  fieldLabelModifier)
+import           GHC.Generics    (Generic)
+import           Prelude         hiding (drop, error, max, min)
+import qualified Prelude         as P
+import           Test.QuickCheck (Arbitrary, arbitrary)
+
+-- |
+data PersistentVolumeAccessMode = PersistentVolumeAccessMode deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeAccessMode
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeAccessMode)
+
+instance Arbitrary PersistentVolumeAccessMode where
+    arbitrary = return PersistentVolumeAccessMode
+
+-- | Use this method to build a PersistentVolumeAccessMode
+mkPersistentVolumeAccessMode :: PersistentVolumeAccessMode
+mkPersistentVolumeAccessMode = PersistentVolumeAccessMode
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeClaim.hs b/lib/Kubernetes/Model/V1/PersistentVolumeClaim.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeClaim.hs
@@ -0,0 +1,55 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeClaim
+    ( PersistentVolumeClaim (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkPersistentVolumeClaim
+    ) where
+
+import           Control.Lens.TH                                 (makeLenses)
+import           Data.Aeson.TH                                   (defaultOptions,
+                                                                  deriveJSON, fieldLabelModifier)
+import           Data.Text                                       (Text)
+import           GHC.Generics                                    (Generic)
+import           Kubernetes.Model.V1.ObjectMeta                  (ObjectMeta)
+import           Kubernetes.Model.V1.PersistentVolumeClaimSpec   (PersistentVolumeClaimSpec)
+import           Kubernetes.Model.V1.PersistentVolumeClaimStatus (PersistentVolumeClaimStatus)
+import           Prelude                                         hiding (drop,
+                                                                  error, max,
+                                                                  min)
+import qualified Prelude                                         as P
+import           Test.QuickCheck                                 (Arbitrary,
+                                                                  arbitrary)
+import           Test.QuickCheck.Instances                       ()
+
+-- | PersistentVolumeClaim is a user&#39;s request for and claim to a persistent volume
+data PersistentVolumeClaim = PersistentVolumeClaim
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe PersistentVolumeClaimSpec)
+    , _status     :: !(Maybe PersistentVolumeClaimStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeClaim
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeClaim)
+
+instance Arbitrary PersistentVolumeClaim where
+    arbitrary = PersistentVolumeClaim <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeClaim
+mkPersistentVolumeClaim :: PersistentVolumeClaim
+mkPersistentVolumeClaim = PersistentVolumeClaim Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeClaimList.hs b/lib/Kubernetes/Model/V1/PersistentVolumeClaimList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeClaimList.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeClaimList
+    ( PersistentVolumeClaimList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkPersistentVolumeClaimList
+    ) where
+
+import           Control.Lens.TH                           (makeLenses)
+import           Data.Aeson.TH                             (defaultOptions,
+                                                            deriveJSON,
+                                                            fieldLabelModifier)
+import           Data.Text                                 (Text)
+import           GHC.Generics                              (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta     (ListMeta)
+import           Kubernetes.Model.V1.PersistentVolumeClaim (PersistentVolumeClaim)
+import           Prelude                                   hiding (drop, error,
+                                                            max, min)
+import qualified Prelude                                   as P
+import           Test.QuickCheck                           (Arbitrary,
+                                                            arbitrary)
+import           Test.QuickCheck.Instances                 ()
+
+-- | PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
+data PersistentVolumeClaimList = PersistentVolumeClaimList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([PersistentVolumeClaim])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeClaimList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeClaimList)
+
+instance Arbitrary PersistentVolumeClaimList where
+    arbitrary = PersistentVolumeClaimList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeClaimList
+mkPersistentVolumeClaimList :: [PersistentVolumeClaim] -> PersistentVolumeClaimList
+mkPersistentVolumeClaimList xitemsx = PersistentVolumeClaimList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeClaimSpec.hs b/lib/Kubernetes/Model/V1/PersistentVolumeClaimSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeClaimSpec.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeClaimSpec
+    ( PersistentVolumeClaimSpec (..)
+    , accessModes
+    , resources
+    , volumeName
+    , mkPersistentVolumeClaimSpec
+    ) where
+
+import           Control.Lens.TH                                (makeLenses)
+import           Data.Aeson.TH                                  (defaultOptions,
+                                                                 deriveJSON, fieldLabelModifier)
+import           Data.Text                                      (Text)
+import           GHC.Generics                                   (Generic)
+import           Kubernetes.Model.V1.PersistentVolumeAccessMode (PersistentVolumeAccessMode)
+import           Kubernetes.Model.V1.ResourceRequirements       (ResourceRequirements)
+import           Prelude                                        hiding (drop,
+                                                                 error, max,
+                                                                 min)
+import qualified Prelude                                        as P
+import           Test.QuickCheck                                (Arbitrary,
+                                                                 arbitrary)
+import           Test.QuickCheck.Instances                      ()
+
+-- | PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes
+data PersistentVolumeClaimSpec = PersistentVolumeClaimSpec
+    { _accessModes :: !(Maybe [PersistentVolumeAccessMode])
+    , _resources   :: !(Maybe ResourceRequirements)
+    , _volumeName  :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeClaimSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeClaimSpec)
+
+instance Arbitrary PersistentVolumeClaimSpec where
+    arbitrary = PersistentVolumeClaimSpec <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeClaimSpec
+mkPersistentVolumeClaimSpec :: PersistentVolumeClaimSpec
+mkPersistentVolumeClaimSpec = PersistentVolumeClaimSpec Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeClaimStatus.hs b/lib/Kubernetes/Model/V1/PersistentVolumeClaimStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeClaimStatus.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeClaimStatus
+    ( PersistentVolumeClaimStatus (..)
+    , phase
+    , accessModes
+    , capacity
+    , mkPersistentVolumeClaimStatus
+    ) where
+
+import           Control.Lens.TH                                (makeLenses)
+import           Data.Aeson.TH                                  (defaultOptions,
+                                                                 deriveJSON, fieldLabelModifier)
+import           Data.Text                                      (Text)
+import           GHC.Generics                                   (Generic)
+import           Kubernetes.Model.V1.Any                        (Any)
+import           Kubernetes.Model.V1.PersistentVolumeAccessMode (PersistentVolumeAccessMode)
+import           Prelude                                        hiding (drop,
+                                                                 error, max,
+                                                                 min)
+import qualified Prelude                                        as P
+import           Test.QuickCheck                                (Arbitrary,
+                                                                 arbitrary)
+import           Test.QuickCheck.Instances                      ()
+
+-- | PersistentVolumeClaimStatus is the current status of a persistent volume claim.
+data PersistentVolumeClaimStatus = PersistentVolumeClaimStatus
+    { _phase       :: !(Maybe Text)
+    , _accessModes :: !(Maybe [PersistentVolumeAccessMode])
+    , _capacity    :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeClaimStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeClaimStatus)
+
+instance Arbitrary PersistentVolumeClaimStatus where
+    arbitrary = PersistentVolumeClaimStatus <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeClaimStatus
+mkPersistentVolumeClaimStatus :: PersistentVolumeClaimStatus
+mkPersistentVolumeClaimStatus = PersistentVolumeClaimStatus Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeClaimVolumeSource.hs b/lib/Kubernetes/Model/V1/PersistentVolumeClaimVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeClaimVolumeSource.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeClaimVolumeSource
+    ( PersistentVolumeClaimVolumeSource (..)
+    , claimName
+    , readOnly
+    , mkPersistentVolumeClaimVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | PersistentVolumeClaimVolumeSource references the user&#39;s PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).
+data PersistentVolumeClaimVolumeSource = PersistentVolumeClaimVolumeSource
+    { _claimName :: !(Text)
+    , _readOnly  :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeClaimVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeClaimVolumeSource)
+
+instance Arbitrary PersistentVolumeClaimVolumeSource where
+    arbitrary = PersistentVolumeClaimVolumeSource <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeClaimVolumeSource
+mkPersistentVolumeClaimVolumeSource :: Text -> PersistentVolumeClaimVolumeSource
+mkPersistentVolumeClaimVolumeSource xclaimNamex = PersistentVolumeClaimVolumeSource xclaimNamex Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeList.hs b/lib/Kubernetes/Model/V1/PersistentVolumeList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeList
+    ( PersistentVolumeList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkPersistentVolumeList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.PersistentVolume  (PersistentVolume)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | PersistentVolumeList is a list of PersistentVolume items.
+data PersistentVolumeList = PersistentVolumeList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([PersistentVolume])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeList)
+
+instance Arbitrary PersistentVolumeList where
+    arbitrary = PersistentVolumeList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeList
+mkPersistentVolumeList :: [PersistentVolume] -> PersistentVolumeList
+mkPersistentVolumeList xitemsx = PersistentVolumeList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeSpec.hs b/lib/Kubernetes/Model/V1/PersistentVolumeSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeSpec.hs
@@ -0,0 +1,88 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeSpec
+    ( PersistentVolumeSpec (..)
+    , capacity
+    , gcePersistentDisk
+    , awsElasticBlockStore
+    , hostPath
+    , glusterfs
+    , nfs
+    , rbd
+    , iscsi
+    , cinder
+    , cephfs
+    , fc
+    , flocker
+    , flexVolume
+    , accessModes
+    , claimRef
+    , persistentVolumeReclaimPolicy
+    , mkPersistentVolumeSpec
+    ) where
+
+import           Control.Lens.TH                                      (makeLenses)
+import           Data.Aeson.TH                                        (defaultOptions, deriveJSON, fieldLabelModifier)
+import           Data.Text                                            (Text)
+import           GHC.Generics                                         (Generic)
+import           Kubernetes.Model.V1.Any                              (Any)
+import           Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource (AWSElasticBlockStoreVolumeSource)
+import           Kubernetes.Model.V1.CephFSVolumeSource               (CephFSVolumeSource)
+import           Kubernetes.Model.V1.CinderVolumeSource               (CinderVolumeSource)
+import           Kubernetes.Model.V1.FCVolumeSource                   (FCVolumeSource)
+import           Kubernetes.Model.V1.FlexVolumeSource                 (FlexVolumeSource)
+import           Kubernetes.Model.V1.FlockerVolumeSource              (FlockerVolumeSource)
+import           Kubernetes.Model.V1.GCEPersistentDiskVolumeSource    (GCEPersistentDiskVolumeSource)
+import           Kubernetes.Model.V1.GlusterfsVolumeSource            (GlusterfsVolumeSource)
+import           Kubernetes.Model.V1.HostPathVolumeSource             (HostPathVolumeSource)
+import           Kubernetes.Model.V1.ISCSIVolumeSource                (ISCSIVolumeSource)
+import           Kubernetes.Model.V1.NFSVolumeSource                  (NFSVolumeSource)
+import           Kubernetes.Model.V1.ObjectReference                  (ObjectReference)
+import           Kubernetes.Model.V1.PersistentVolumeAccessMode       (PersistentVolumeAccessMode)
+import           Kubernetes.Model.V1.RBDVolumeSource                  (RBDVolumeSource)
+import           Prelude                                              hiding
+                                                                       (drop,
+                                                                       error,
+                                                                       max, min)
+import qualified Prelude                                              as P
+import           Test.QuickCheck                                      (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                            ()
+
+-- | PersistentVolumeSpec is the specification of a persistent volume.
+data PersistentVolumeSpec = PersistentVolumeSpec
+    { _capacity                      :: !(Maybe Any)
+    , _gcePersistentDisk             :: !(Maybe GCEPersistentDiskVolumeSource)
+    , _awsElasticBlockStore          :: !(Maybe AWSElasticBlockStoreVolumeSource)
+    , _hostPath                      :: !(Maybe HostPathVolumeSource)
+    , _glusterfs                     :: !(Maybe GlusterfsVolumeSource)
+    , _nfs                           :: !(Maybe NFSVolumeSource)
+    , _rbd                           :: !(Maybe RBDVolumeSource)
+    , _iscsi                         :: !(Maybe ISCSIVolumeSource)
+    , _cinder                        :: !(Maybe CinderVolumeSource)
+    , _cephfs                        :: !(Maybe CephFSVolumeSource)
+    , _fc                            :: !(Maybe FCVolumeSource)
+    , _flocker                       :: !(Maybe FlockerVolumeSource)
+    , _flexVolume                    :: !(Maybe FlexVolumeSource)
+    , _accessModes                   :: !(Maybe [PersistentVolumeAccessMode])
+    , _claimRef                      :: !(Maybe ObjectReference)
+    , _persistentVolumeReclaimPolicy :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeSpec)
+
+instance Arbitrary PersistentVolumeSpec where
+    arbitrary = PersistentVolumeSpec <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeSpec
+mkPersistentVolumeSpec :: PersistentVolumeSpec
+mkPersistentVolumeSpec = PersistentVolumeSpec Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PersistentVolumeStatus.hs b/lib/Kubernetes/Model/V1/PersistentVolumeStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PersistentVolumeStatus.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PersistentVolumeStatus
+    ( PersistentVolumeStatus (..)
+    , phase
+    , message
+    , reason
+    , mkPersistentVolumeStatus
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | PersistentVolumeStatus is the current status of a persistent volume.
+data PersistentVolumeStatus = PersistentVolumeStatus
+    { _phase   :: !(Maybe Text)
+    , _message :: !(Maybe Text)
+    , _reason  :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PersistentVolumeStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PersistentVolumeStatus)
+
+instance Arbitrary PersistentVolumeStatus where
+    arbitrary = PersistentVolumeStatus <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PersistentVolumeStatus
+mkPersistentVolumeStatus :: PersistentVolumeStatus
+mkPersistentVolumeStatus = PersistentVolumeStatus Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Pod.hs b/lib/Kubernetes/Model/V1/Pod.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Pod.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Pod
+    ( Pod (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkPod
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           Data.Text                      (Text)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.ObjectMeta (ObjectMeta)
+import           Kubernetes.Model.V1.PodSpec    (PodSpec)
+import           Kubernetes.Model.V1.PodStatus  (PodStatus)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.
+data Pod = Pod
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe PodSpec)
+    , _status     :: !(Maybe PodStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Pod
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Pod)
+
+instance Arbitrary Pod where
+    arbitrary = Pod <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Pod
+mkPod :: Pod
+mkPod = Pod Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodCondition.hs b/lib/Kubernetes/Model/V1/PodCondition.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodCondition.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodCondition
+    ( PodCondition (..)
+    , type_
+    , status
+    , lastProbeTime
+    , lastTransitionTime
+    , reason
+    , message
+    , mkPodCondition
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | PodCondition contains details for the current condition of this pod.
+data PodCondition = PodCondition
+    { _type_              :: !(Text)
+    , _status             :: !(Text)
+    , _lastProbeTime      :: !(Maybe Text)
+    , _lastTransitionTime :: !(Maybe Text)
+    , _reason             :: !(Maybe Text)
+    , _message            :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodCondition
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodCondition)
+
+instance Arbitrary PodCondition where
+    arbitrary = PodCondition <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodCondition
+mkPodCondition :: Text -> Text -> PodCondition
+mkPodCondition xtype_x xstatusx = PodCondition xtype_x xstatusx Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodList.hs b/lib/Kubernetes/Model/V1/PodList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodList
+    ( PodList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkPodList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Pod               (Pod)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | PodList is a list of Pods.
+data PodList = PodList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Pod])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodList)
+
+instance Arbitrary PodList where
+    arbitrary = PodList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodList
+mkPodList :: [Pod] -> PodList
+mkPodList xitemsx = PodList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/PodSecurityContext.hs b/lib/Kubernetes/Model/V1/PodSecurityContext.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodSecurityContext.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodSecurityContext
+    ( PodSecurityContext (..)
+    , seLinuxOptions
+    , runAsUser
+    , runAsNonRoot
+    , supplementalGroups
+    , fsGroup
+    , mkPodSecurityContext
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.SELinuxOptions (SELinuxOptions)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext.  Field values of container.securityContext take precedence over field values of PodSecurityContext.
+data PodSecurityContext = PodSecurityContext
+    { _seLinuxOptions     :: !(Maybe SELinuxOptions)
+    , _runAsUser          :: !(Maybe Integer)
+    , _runAsNonRoot       :: !(Maybe Bool)
+    , _supplementalGroups :: !(Maybe [Integer])
+    , _fsGroup            :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodSecurityContext
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodSecurityContext)
+
+instance Arbitrary PodSecurityContext where
+    arbitrary = PodSecurityContext <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodSecurityContext
+mkPodSecurityContext :: PodSecurityContext
+mkPodSecurityContext = PodSecurityContext Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodSpec.hs b/lib/Kubernetes/Model/V1/PodSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodSpec.hs
@@ -0,0 +1,76 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodSpec
+    ( PodSpec (..)
+    , volumes
+    , containers
+    , restartPolicy
+    , terminationGracePeriodSeconds
+    , activeDeadlineSeconds
+    , dnsPolicy
+    , nodeSelector
+    , serviceAccountName
+    , serviceAccount
+    , nodeName
+    , hostNetwork
+    , hostPID
+    , hostIPC
+    , securityContext
+    , imagePullSecrets
+    , mkPodSpec
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.Any                  (Any)
+import           Kubernetes.Model.V1.Container            (Container)
+import           Kubernetes.Model.V1.LocalObjectReference (LocalObjectReference)
+import           Kubernetes.Model.V1.PodSecurityContext   (PodSecurityContext)
+import           Kubernetes.Model.V1.Volume               (Volume)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | PodSpec is a description of a pod.
+data PodSpec = PodSpec
+    { _volumes                       :: !(Maybe [Volume])
+    , _containers                    :: !([Container])
+    , _restartPolicy                 :: !(Maybe Text)
+    , _terminationGracePeriodSeconds :: !(Maybe Integer)
+    , _activeDeadlineSeconds         :: !(Maybe Integer)
+    , _dnsPolicy                     :: !(Maybe Text)
+    , _nodeSelector                  :: !(Maybe Any)
+    , _serviceAccountName            :: !(Maybe Text)
+    , _serviceAccount                :: !(Maybe Text)
+    , _nodeName                      :: !(Maybe Text)
+    , _hostNetwork                   :: !(Maybe Bool)
+    , _hostPID                       :: !(Maybe Bool)
+    , _hostIPC                       :: !(Maybe Bool)
+    , _securityContext               :: !(Maybe PodSecurityContext)
+    , _imagePullSecrets              :: !(Maybe [LocalObjectReference])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodSpec)
+
+instance Arbitrary PodSpec where
+    arbitrary = PodSpec <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodSpec
+mkPodSpec :: [Container] -> PodSpec
+mkPodSpec xcontainersx = PodSpec Nothing xcontainersx Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodStatus.hs b/lib/Kubernetes/Model/V1/PodStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodStatus.hs
@@ -0,0 +1,59 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodStatus
+    ( PodStatus (..)
+    , phase
+    , conditions
+    , message
+    , reason
+    , hostIP
+    , podIP
+    , startTime
+    , containerStatuses
+    , mkPodStatus
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ContainerStatus (ContainerStatus)
+import           Kubernetes.Model.V1.PodCondition    (PodCondition)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | PodStatus represents information about the status of a pod. Status may trail the actual state of a system.
+data PodStatus = PodStatus
+    { _phase             :: !(Maybe Text)
+    , _conditions        :: !(Maybe [PodCondition])
+    , _message           :: !(Maybe Text)
+    , _reason            :: !(Maybe Text)
+    , _hostIP            :: !(Maybe Text)
+    , _podIP             :: !(Maybe Text)
+    , _startTime         :: !(Maybe Text)
+    , _containerStatuses :: !(Maybe [ContainerStatus])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodStatus)
+
+instance Arbitrary PodStatus where
+    arbitrary = PodStatus <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodStatus
+mkPodStatus :: PodStatus
+mkPodStatus = PodStatus Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodTemplate.hs b/lib/Kubernetes/Model/V1/PodTemplate.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodTemplate.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodTemplate
+    ( PodTemplate (..)
+    , kind
+    , apiVersion
+    , metadata
+    , template
+    , mkPodTemplate
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           Data.Text                           (Text)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ObjectMeta      (ObjectMeta)
+import           Kubernetes.Model.V1.PodTemplateSpec (PodTemplateSpec)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | PodTemplate describes a template for creating copies of a predefined pod.
+data PodTemplate = PodTemplate
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _template   :: !(Maybe PodTemplateSpec)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodTemplate
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodTemplate)
+
+instance Arbitrary PodTemplate where
+    arbitrary = PodTemplate <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodTemplate
+mkPodTemplate :: PodTemplate
+mkPodTemplate = PodTemplate Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/PodTemplateList.hs b/lib/Kubernetes/Model/V1/PodTemplateList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodTemplateList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodTemplateList
+    ( PodTemplateList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkPodTemplateList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.PodTemplate       (PodTemplate)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | PodTemplateList is a list of PodTemplates.
+data PodTemplateList = PodTemplateList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([PodTemplate])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodTemplateList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodTemplateList)
+
+instance Arbitrary PodTemplateList where
+    arbitrary = PodTemplateList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodTemplateList
+mkPodTemplateList :: [PodTemplate] -> PodTemplateList
+mkPodTemplateList xitemsx = PodTemplateList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/PodTemplateSpec.hs b/lib/Kubernetes/Model/V1/PodTemplateSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/PodTemplateSpec.hs
@@ -0,0 +1,44 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.PodTemplateSpec
+    ( PodTemplateSpec (..)
+    , metadata
+    , spec
+    , mkPodTemplateSpec
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.ObjectMeta (ObjectMeta)
+import           Kubernetes.Model.V1.PodSpec    (PodSpec)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | PodTemplateSpec describes the data a pod should have when created from a template
+data PodTemplateSpec = PodTemplateSpec
+    { _metadata :: !(Maybe ObjectMeta)
+    , _spec     :: !(Maybe PodSpec)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''PodTemplateSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''PodTemplateSpec)
+
+instance Arbitrary PodTemplateSpec where
+    arbitrary = PodTemplateSpec <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a PodTemplateSpec
+mkPodTemplateSpec :: PodTemplateSpec
+mkPodTemplateSpec = PodTemplateSpec Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Probe.hs b/lib/Kubernetes/Model/V1/Probe.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Probe.hs
@@ -0,0 +1,59 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Probe
+    ( Probe (..)
+    , exec
+    , httpGet
+    , tcpSocket
+    , initialDelaySeconds
+    , timeoutSeconds
+    , periodSeconds
+    , successThreshold
+    , failureThreshold
+    , mkProbe
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.ExecAction      (ExecAction)
+import           Kubernetes.Model.V1.HTTPGetAction   (HTTPGetAction)
+import           Kubernetes.Model.V1.TCPSocketAction (TCPSocketAction)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.
+data Probe = Probe
+    { _exec                :: !(Maybe ExecAction)
+    , _httpGet             :: !(Maybe HTTPGetAction)
+    , _tcpSocket           :: !(Maybe TCPSocketAction)
+    , _initialDelaySeconds :: !(Maybe Integer)
+    , _timeoutSeconds      :: !(Maybe Integer)
+    , _periodSeconds       :: !(Maybe Integer)
+    , _successThreshold    :: !(Maybe Integer)
+    , _failureThreshold    :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Probe
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Probe)
+
+instance Arbitrary Probe where
+    arbitrary = Probe <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Probe
+mkProbe :: Probe
+mkProbe = Probe Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/RBDVolumeSource.hs b/lib/Kubernetes/Model/V1/RBDVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/RBDVolumeSource.hs
@@ -0,0 +1,58 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.RBDVolumeSource
+    ( RBDVolumeSource (..)
+    , monitors
+    , image
+    , fsType
+    , pool
+    , user
+    , keyring
+    , secretRef
+    , readOnly
+    , mkRBDVolumeSource
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.LocalObjectReference (LocalObjectReference)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.
+data RBDVolumeSource = RBDVolumeSource
+    { _monitors  :: !([Text])
+    , _image     :: !(Text)
+    , _fsType    :: !(Maybe Text)
+    , _pool      :: !(Text)
+    , _user      :: !(Text)
+    , _keyring   :: !(Text)
+    , _secretRef :: !(LocalObjectReference)
+    , _readOnly  :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''RBDVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''RBDVolumeSource)
+
+instance Arbitrary RBDVolumeSource where
+    arbitrary = RBDVolumeSource <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a RBDVolumeSource
+mkRBDVolumeSource :: [Text] -> Text -> Text -> Text -> Text -> LocalObjectReference -> RBDVolumeSource
+mkRBDVolumeSource xmonitorsx ximagex xpoolx xuserx xkeyringx xsecretRefx = RBDVolumeSource xmonitorsx ximagex Nothing xpoolx xuserx xkeyringx xsecretRefx Nothing
diff --git a/lib/Kubernetes/Model/V1/ReplicationController.hs b/lib/Kubernetes/Model/V1/ReplicationController.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ReplicationController.hs
@@ -0,0 +1,55 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ReplicationController
+    ( ReplicationController (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkReplicationController
+    ) where
+
+import           Control.Lens.TH                                 (makeLenses)
+import           Data.Aeson.TH                                   (defaultOptions,
+                                                                  deriveJSON, fieldLabelModifier)
+import           Data.Text                                       (Text)
+import           GHC.Generics                                    (Generic)
+import           Kubernetes.Model.V1.ObjectMeta                  (ObjectMeta)
+import           Kubernetes.Model.V1.ReplicationControllerSpec   (ReplicationControllerSpec)
+import           Kubernetes.Model.V1.ReplicationControllerStatus (ReplicationControllerStatus)
+import           Prelude                                         hiding (drop,
+                                                                  error, max,
+                                                                  min)
+import qualified Prelude                                         as P
+import           Test.QuickCheck                                 (Arbitrary,
+                                                                  arbitrary)
+import           Test.QuickCheck.Instances                       ()
+
+-- | ReplicationController represents the configuration of a replication controller.
+data ReplicationController = ReplicationController
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe ReplicationControllerSpec)
+    , _status     :: !(Maybe ReplicationControllerStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ReplicationController
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ReplicationController)
+
+instance Arbitrary ReplicationController where
+    arbitrary = ReplicationController <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ReplicationController
+mkReplicationController :: ReplicationController
+mkReplicationController = ReplicationController Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ReplicationControllerList.hs b/lib/Kubernetes/Model/V1/ReplicationControllerList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ReplicationControllerList.hs
@@ -0,0 +1,52 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ReplicationControllerList
+    ( ReplicationControllerList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkReplicationControllerList
+    ) where
+
+import           Control.Lens.TH                           (makeLenses)
+import           Data.Aeson.TH                             (defaultOptions,
+                                                            deriveJSON,
+                                                            fieldLabelModifier)
+import           Data.Text                                 (Text)
+import           GHC.Generics                              (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta     (ListMeta)
+import           Kubernetes.Model.V1.ReplicationController (ReplicationController)
+import           Prelude                                   hiding (drop, error,
+                                                            max, min)
+import qualified Prelude                                   as P
+import           Test.QuickCheck                           (Arbitrary,
+                                                            arbitrary)
+import           Test.QuickCheck.Instances                 ()
+
+-- | ReplicationControllerList is a collection of replication controllers.
+data ReplicationControllerList = ReplicationControllerList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([ReplicationController])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ReplicationControllerList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ReplicationControllerList)
+
+instance Arbitrary ReplicationControllerList where
+    arbitrary = ReplicationControllerList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ReplicationControllerList
+mkReplicationControllerList :: [ReplicationController] -> ReplicationControllerList
+mkReplicationControllerList xitemsx = ReplicationControllerList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/ReplicationControllerSpec.hs b/lib/Kubernetes/Model/V1/ReplicationControllerSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ReplicationControllerSpec.hs
@@ -0,0 +1,48 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ReplicationControllerSpec
+    ( ReplicationControllerSpec (..)
+    , replicas
+    , selector
+    , template
+    , mkReplicationControllerSpec
+    ) where
+
+import           Control.Lens.TH                     (makeLenses)
+import           Data.Aeson.TH                       (defaultOptions,
+                                                      deriveJSON,
+                                                      fieldLabelModifier)
+import           GHC.Generics                        (Generic)
+import           Kubernetes.Model.V1.Any             (Any)
+import           Kubernetes.Model.V1.PodTemplateSpec (PodTemplateSpec)
+import           Prelude                             hiding (drop, error, max,
+                                                      min)
+import qualified Prelude                             as P
+import           Test.QuickCheck                     (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances           ()
+
+-- | ReplicationControllerSpec is the specification of a replication controller.
+data ReplicationControllerSpec = ReplicationControllerSpec
+    { _replicas :: !(Maybe Integer)
+    , _selector :: !(Maybe Any)
+    , _template :: !(Maybe PodTemplateSpec)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ReplicationControllerSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ReplicationControllerSpec)
+
+instance Arbitrary ReplicationControllerSpec where
+    arbitrary = ReplicationControllerSpec <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ReplicationControllerSpec
+mkReplicationControllerSpec :: ReplicationControllerSpec
+mkReplicationControllerSpec = ReplicationControllerSpec Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ReplicationControllerStatus.hs b/lib/Kubernetes/Model/V1/ReplicationControllerStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ReplicationControllerStatus.hs
@@ -0,0 +1,42 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ReplicationControllerStatus
+    ( ReplicationControllerStatus (..)
+    , replicas
+    , observedGeneration
+    , mkReplicationControllerStatus
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ReplicationControllerStatus represents the current status of a replication controller.
+data ReplicationControllerStatus = ReplicationControllerStatus
+    { _replicas           :: !(Integer)
+    , _observedGeneration :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ReplicationControllerStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ReplicationControllerStatus)
+
+instance Arbitrary ReplicationControllerStatus where
+    arbitrary = ReplicationControllerStatus <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ReplicationControllerStatus
+mkReplicationControllerStatus :: Integer -> ReplicationControllerStatus
+mkReplicationControllerStatus xreplicasx = ReplicationControllerStatus xreplicasx Nothing
diff --git a/lib/Kubernetes/Model/V1/ResourceQuota.hs b/lib/Kubernetes/Model/V1/ResourceQuota.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ResourceQuota.hs
@@ -0,0 +1,54 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ResourceQuota
+    ( ResourceQuota (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkResourceQuota
+    ) where
+
+import           Control.Lens.TH                         (makeLenses)
+import           Data.Aeson.TH                           (defaultOptions,
+                                                          deriveJSON,
+                                                          fieldLabelModifier)
+import           Data.Text                               (Text)
+import           GHC.Generics                            (Generic)
+import           Kubernetes.Model.V1.ObjectMeta          (ObjectMeta)
+import           Kubernetes.Model.V1.ResourceQuotaSpec   (ResourceQuotaSpec)
+import           Kubernetes.Model.V1.ResourceQuotaStatus (ResourceQuotaStatus)
+import           Prelude                                 hiding (drop, error,
+                                                          max, min)
+import qualified Prelude                                 as P
+import           Test.QuickCheck                         (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances               ()
+
+-- | ResourceQuota sets aggregate quota restrictions enforced per namespace
+data ResourceQuota = ResourceQuota
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe ResourceQuotaSpec)
+    , _status     :: !(Maybe ResourceQuotaStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ResourceQuota
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ResourceQuota)
+
+instance Arbitrary ResourceQuota where
+    arbitrary = ResourceQuota <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ResourceQuota
+mkResourceQuota :: ResourceQuota
+mkResourceQuota = ResourceQuota Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ResourceQuotaList.hs b/lib/Kubernetes/Model/V1/ResourceQuotaList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ResourceQuotaList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ResourceQuotaList
+    ( ResourceQuotaList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkResourceQuotaList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.ResourceQuota     (ResourceQuota)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | ResourceQuotaList is a list of ResourceQuota items.
+data ResourceQuotaList = ResourceQuotaList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([ResourceQuota])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ResourceQuotaList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ResourceQuotaList)
+
+instance Arbitrary ResourceQuotaList where
+    arbitrary = ResourceQuotaList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ResourceQuotaList
+mkResourceQuotaList :: [ResourceQuota] -> ResourceQuotaList
+mkResourceQuotaList xitemsx = ResourceQuotaList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/ResourceQuotaSpec.hs b/lib/Kubernetes/Model/V1/ResourceQuotaSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ResourceQuotaSpec.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ResourceQuotaSpec
+    ( ResourceQuotaSpec (..)
+    , hard
+    , mkResourceQuotaSpec
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Model.V1.Any   (Any)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
+data ResourceQuotaSpec = ResourceQuotaSpec
+    { _hard :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ResourceQuotaSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ResourceQuotaSpec)
+
+instance Arbitrary ResourceQuotaSpec where
+    arbitrary = ResourceQuotaSpec <$> arbitrary
+
+-- | Use this method to build a ResourceQuotaSpec
+mkResourceQuotaSpec :: ResourceQuotaSpec
+mkResourceQuotaSpec = ResourceQuotaSpec Nothing
diff --git a/lib/Kubernetes/Model/V1/ResourceQuotaStatus.hs b/lib/Kubernetes/Model/V1/ResourceQuotaStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ResourceQuotaStatus.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ResourceQuotaStatus
+    ( ResourceQuotaStatus (..)
+    , hard
+    , used
+    , mkResourceQuotaStatus
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Model.V1.Any   (Any)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ResourceQuotaStatus defines the enforced hard limits and observed use.
+data ResourceQuotaStatus = ResourceQuotaStatus
+    { _hard :: !(Maybe Any)
+    , _used :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ResourceQuotaStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ResourceQuotaStatus)
+
+instance Arbitrary ResourceQuotaStatus where
+    arbitrary = ResourceQuotaStatus <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ResourceQuotaStatus
+mkResourceQuotaStatus :: ResourceQuotaStatus
+mkResourceQuotaStatus = ResourceQuotaStatus Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ResourceRequirements.hs b/lib/Kubernetes/Model/V1/ResourceRequirements.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ResourceRequirements.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ResourceRequirements
+    ( ResourceRequirements (..)
+    , limits
+    , requests
+    , mkResourceRequirements
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Model.V1.Any   (Any)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ResourceRequirements describes the compute resource requirements.
+data ResourceRequirements = ResourceRequirements
+    { _limits   :: !(Maybe Any)
+    , _requests :: !(Maybe Any)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ResourceRequirements
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ResourceRequirements)
+
+instance Arbitrary ResourceRequirements where
+    arbitrary = ResourceRequirements <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a ResourceRequirements
+mkResourceRequirements :: ResourceRequirements
+mkResourceRequirements = ResourceRequirements Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/SELinuxOptions.hs b/lib/Kubernetes/Model/V1/SELinuxOptions.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/SELinuxOptions.hs
@@ -0,0 +1,47 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.SELinuxOptions
+    ( SELinuxOptions (..)
+    , user
+    , role
+    , type_
+    , level
+    , mkSELinuxOptions
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | SELinuxOptions are the labels to be applied to the container
+data SELinuxOptions = SELinuxOptions
+    { _user  :: !(Maybe Text)
+    , _role  :: !(Maybe Text)
+    , _type_ :: !(Maybe Text)
+    , _level :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''SELinuxOptions
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''SELinuxOptions)
+
+instance Arbitrary SELinuxOptions where
+    arbitrary = SELinuxOptions <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a SELinuxOptions
+mkSELinuxOptions :: SELinuxOptions
+mkSELinuxOptions = SELinuxOptions Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Secret.hs b/lib/Kubernetes/Model/V1/Secret.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Secret.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Secret
+    ( Secret (..)
+    , kind
+    , apiVersion
+    , metadata
+    , data_
+    , type_
+    , mkSecret
+    ) where
+
+import           Control.Lens.TH                (makeLenses)
+import           Data.Aeson.TH                  (defaultOptions, deriveJSON,
+                                                 fieldLabelModifier)
+import           Data.Text                      (Text)
+import           GHC.Generics                   (Generic)
+import           Kubernetes.Model.V1.Any        (Any)
+import           Kubernetes.Model.V1.ObjectMeta (ObjectMeta)
+import           Prelude                        hiding (drop, error, max, min)
+import qualified Prelude                        as P
+import           Test.QuickCheck                (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances      ()
+
+-- | Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.
+data Secret = Secret
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _data_      :: !(Maybe Any)
+    , _type_      :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Secret
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Secret)
+
+instance Arbitrary Secret where
+    arbitrary = Secret <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Secret
+mkSecret :: Secret
+mkSecret = Secret Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/SecretKeySelector.hs b/lib/Kubernetes/Model/V1/SecretKeySelector.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/SecretKeySelector.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.SecretKeySelector
+    ( SecretKeySelector (..)
+    , name
+    , key
+    , mkSecretKeySelector
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | SecretKeySelector selects a key of a Secret.
+data SecretKeySelector = SecretKeySelector
+    { _name :: !(Maybe Text)
+    , _key  :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''SecretKeySelector
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''SecretKeySelector)
+
+instance Arbitrary SecretKeySelector where
+    arbitrary = SecretKeySelector <$> arbitrary <*> arbitrary
+
+-- | Use this method to build a SecretKeySelector
+mkSecretKeySelector :: Text -> SecretKeySelector
+mkSecretKeySelector xkeyx = SecretKeySelector Nothing xkeyx
diff --git a/lib/Kubernetes/Model/V1/SecretList.hs b/lib/Kubernetes/Model/V1/SecretList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/SecretList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.SecretList
+    ( SecretList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkSecretList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Secret            (Secret)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | SecretList is a list of Secret.
+data SecretList = SecretList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Secret])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''SecretList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''SecretList)
+
+instance Arbitrary SecretList where
+    arbitrary = SecretList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a SecretList
+mkSecretList :: [Secret] -> SecretList
+mkSecretList xitemsx = SecretList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/SecretVolumeSource.hs b/lib/Kubernetes/Model/V1/SecretVolumeSource.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/SecretVolumeSource.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.SecretVolumeSource
+    ( SecretVolumeSource (..)
+    , secretName
+    , mkSecretVolumeSource
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | Adapts a Secret into a volume.\n\nThe contents of the target Secret&#39;s Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.
+data SecretVolumeSource = SecretVolumeSource
+    { _secretName :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''SecretVolumeSource
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''SecretVolumeSource)
+
+instance Arbitrary SecretVolumeSource where
+    arbitrary = SecretVolumeSource <$> arbitrary
+
+-- | Use this method to build a SecretVolumeSource
+mkSecretVolumeSource :: SecretVolumeSource
+mkSecretVolumeSource = SecretVolumeSource Nothing
diff --git a/lib/Kubernetes/Model/V1/SecurityContext.hs b/lib/Kubernetes/Model/V1/SecurityContext.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/SecurityContext.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.SecurityContext
+    ( SecurityContext (..)
+    , capabilities
+    , privileged
+    , seLinuxOptions
+    , runAsUser
+    , runAsNonRoot
+    , mkSecurityContext
+    ) where
+
+import           Control.Lens.TH                    (makeLenses)
+import           Data.Aeson.TH                      (defaultOptions, deriveJSON,
+                                                     fieldLabelModifier)
+import           GHC.Generics                       (Generic)
+import           Kubernetes.Model.V1.Capabilities   (Capabilities)
+import           Kubernetes.Model.V1.SELinuxOptions (SELinuxOptions)
+import           Prelude                            hiding (drop, error, max,
+                                                     min)
+import qualified Prelude                            as P
+import           Test.QuickCheck                    (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances          ()
+
+-- | SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext.  When both are set, the values in SecurityContext take precedence.
+data SecurityContext = SecurityContext
+    { _capabilities   :: !(Maybe Capabilities)
+    , _privileged     :: !(Maybe Bool)
+    , _seLinuxOptions :: !(Maybe SELinuxOptions)
+    , _runAsUser      :: !(Maybe Integer)
+    , _runAsNonRoot   :: !(Maybe Bool)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''SecurityContext
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''SecurityContext)
+
+instance Arbitrary SecurityContext where
+    arbitrary = SecurityContext <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a SecurityContext
+mkSecurityContext :: SecurityContext
+mkSecurityContext = SecurityContext Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/Service.hs b/lib/Kubernetes/Model/V1/Service.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Service.hs
@@ -0,0 +1,53 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Service
+    ( Service (..)
+    , kind
+    , apiVersion
+    , metadata
+    , spec
+    , status
+    , mkService
+    ) where
+
+import           Control.Lens.TH                   (makeLenses)
+import           Data.Aeson.TH                     (defaultOptions, deriveJSON,
+                                                    fieldLabelModifier)
+import           Data.Text                         (Text)
+import           GHC.Generics                      (Generic)
+import           Kubernetes.Model.V1.ObjectMeta    (ObjectMeta)
+import           Kubernetes.Model.V1.ServiceSpec   (ServiceSpec)
+import           Kubernetes.Model.V1.ServiceStatus (ServiceStatus)
+import           Prelude                           hiding (drop, error, max,
+                                                    min)
+import qualified Prelude                           as P
+import           Test.QuickCheck                   (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances         ()
+
+-- | Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.
+data Service = Service
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ObjectMeta)
+    , _spec       :: !(Maybe ServiceSpec)
+    , _status     :: !(Maybe ServiceStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Service
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Service)
+
+instance Arbitrary Service where
+    arbitrary = Service <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Service
+mkService :: Service
+mkService = Service Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ServiceAccount.hs b/lib/Kubernetes/Model/V1/ServiceAccount.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServiceAccount.hs
@@ -0,0 +1,54 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServiceAccount
+    ( ServiceAccount (..)
+    , kind
+    , apiVersion
+    , metadata
+    , secrets
+    , imagePullSecrets
+    , mkServiceAccount
+    ) where
+
+import           Control.Lens.TH                          (makeLenses)
+import           Data.Aeson.TH                            (defaultOptions,
+                                                           deriveJSON,
+                                                           fieldLabelModifier)
+import           Data.Text                                (Text)
+import           GHC.Generics                             (Generic)
+import           Kubernetes.Model.V1.LocalObjectReference (LocalObjectReference)
+import           Kubernetes.Model.V1.ObjectMeta           (ObjectMeta)
+import           Kubernetes.Model.V1.ObjectReference      (ObjectReference)
+import           Prelude                                  hiding (drop, error,
+                                                           max, min)
+import qualified Prelude                                  as P
+import           Test.QuickCheck                          (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                ()
+
+-- | ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets
+data ServiceAccount = ServiceAccount
+    { _kind             :: !(Maybe Text)
+    , _apiVersion       :: !(Maybe Text)
+    , _metadata         :: !(Maybe ObjectMeta)
+    , _secrets          :: !(Maybe [ObjectReference])
+    , _imagePullSecrets :: !(Maybe [LocalObjectReference])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServiceAccount
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServiceAccount)
+
+instance Arbitrary ServiceAccount where
+    arbitrary = ServiceAccount <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ServiceAccount
+mkServiceAccount :: ServiceAccount
+mkServiceAccount = ServiceAccount Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ServiceAccountList.hs b/lib/Kubernetes/Model/V1/ServiceAccountList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServiceAccountList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServiceAccountList
+    ( ServiceAccountList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkServiceAccountList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.ServiceAccount    (ServiceAccount)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | ServiceAccountList is a list of ServiceAccount objects
+data ServiceAccountList = ServiceAccountList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([ServiceAccount])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServiceAccountList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServiceAccountList)
+
+instance Arbitrary ServiceAccountList where
+    arbitrary = ServiceAccountList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ServiceAccountList
+mkServiceAccountList :: [ServiceAccount] -> ServiceAccountList
+mkServiceAccountList xitemsx = ServiceAccountList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/ServiceList.hs b/lib/Kubernetes/Model/V1/ServiceList.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServiceList.hs
@@ -0,0 +1,51 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServiceList
+    ( ServiceList (..)
+    , kind
+    , apiVersion
+    , metadata
+    , items
+    , mkServiceList
+    ) where
+
+import           Control.Lens.TH                       (makeLenses)
+import           Data.Aeson.TH                         (defaultOptions,
+                                                        deriveJSON,
+                                                        fieldLabelModifier)
+import           Data.Text                             (Text)
+import           GHC.Generics                          (Generic)
+import           Kubernetes.Model.Unversioned.ListMeta (ListMeta)
+import           Kubernetes.Model.V1.Service           (Service)
+import           Prelude                               hiding (drop, error, max,
+                                                        min)
+import qualified Prelude                               as P
+import           Test.QuickCheck                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances             ()
+
+-- | ServiceList holds a list of services.
+data ServiceList = ServiceList
+    { _kind       :: !(Maybe Text)
+    , _apiVersion :: !(Maybe Text)
+    , _metadata   :: !(Maybe ListMeta)
+    , _items      :: !([Service])
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServiceList
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServiceList)
+
+instance Arbitrary ServiceList where
+    arbitrary = ServiceList <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ServiceList
+mkServiceList :: [Service] -> ServiceList
+mkServiceList xitemsx = ServiceList Nothing Nothing Nothing xitemsx
diff --git a/lib/Kubernetes/Model/V1/ServicePort.hs b/lib/Kubernetes/Model/V1/ServicePort.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServicePort.hs
@@ -0,0 +1,50 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServicePort
+    ( ServicePort (..)
+    , name
+    , protocol
+    , port
+    , targetPort
+    , nodePort
+    , mkServicePort
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Utils          (IntegerOrText)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | ServicePort conatins information on service&#39;s port.
+data ServicePort = ServicePort
+    { _name       :: !(Maybe Text)
+    , _protocol   :: !(Maybe Text)
+    , _port       :: !(Integer)
+    , _targetPort :: !(Maybe IntegerOrText)
+    , _nodePort   :: !(Maybe Integer)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServicePort
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServicePort)
+
+instance Arbitrary ServicePort where
+    arbitrary = ServicePort <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ServicePort
+mkServicePort :: Integer -> ServicePort
+mkServicePort xportx = ServicePort Nothing Nothing xportx Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ServiceSpec.hs b/lib/Kubernetes/Model/V1/ServiceSpec.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServiceSpec.hs
@@ -0,0 +1,57 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServiceSpec
+    ( ServiceSpec (..)
+    , ports
+    , selector
+    , clusterIP
+    , type_
+    , externalIPs
+    , deprecatedPublicIPs
+    , sessionAffinity
+    , loadBalancerIP
+    , mkServiceSpec
+    ) where
+
+import           Control.Lens.TH                 (makeLenses)
+import           Data.Aeson.TH                   (defaultOptions, deriveJSON,
+                                                  fieldLabelModifier)
+import           Data.Text                       (Text)
+import           GHC.Generics                    (Generic)
+import           Kubernetes.Model.V1.Any         (Any)
+import           Kubernetes.Model.V1.ServicePort (ServicePort)
+import           Prelude                         hiding (drop, error, max, min)
+import qualified Prelude                         as P
+import           Test.QuickCheck                 (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances       ()
+
+-- | ServiceSpec describes the attributes that a user creates on a service.
+data ServiceSpec = ServiceSpec
+    { _ports               :: !([ServicePort])
+    , _selector            :: !(Maybe Any)
+    , _clusterIP           :: !(Maybe Text)
+    , _type_               :: !(Maybe Text)
+    , _externalIPs         :: !(Maybe [Text])
+    , _deprecatedPublicIPs :: !(Maybe [Text])
+    , _sessionAffinity     :: !(Maybe Text)
+    , _loadBalancerIP      :: !(Maybe Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServiceSpec
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServiceSpec)
+
+instance Arbitrary ServiceSpec where
+    arbitrary = ServiceSpec <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a ServiceSpec
+mkServiceSpec :: [ServicePort] -> ServiceSpec
+mkServiceSpec xportsx = ServiceSpec xportsx Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/ServiceStatus.hs b/lib/Kubernetes/Model/V1/ServiceStatus.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/ServiceStatus.hs
@@ -0,0 +1,43 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.ServiceStatus
+    ( ServiceStatus (..)
+    , loadBalancer
+    , mkServiceStatus
+    ) where
+
+import           Control.Lens.TH                        (makeLenses)
+import           Data.Aeson.TH                          (defaultOptions,
+                                                         deriveJSON,
+                                                         fieldLabelModifier)
+import           GHC.Generics                           (Generic)
+import           Kubernetes.Model.V1.LoadBalancerStatus (LoadBalancerStatus)
+import           Prelude                                hiding (drop, error,
+                                                         max, min)
+import qualified Prelude                                as P
+import           Test.QuickCheck                        (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances              ()
+
+-- | ServiceStatus represents the current status of a service.
+data ServiceStatus = ServiceStatus
+    { _loadBalancer :: !(Maybe LoadBalancerStatus)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''ServiceStatus
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''ServiceStatus)
+
+instance Arbitrary ServiceStatus where
+    arbitrary = ServiceStatus <$> arbitrary
+
+-- | Use this method to build a ServiceStatus
+mkServiceStatus :: ServiceStatus
+mkServiceStatus = ServiceStatus Nothing
diff --git a/lib/Kubernetes/Model/V1/TCPSocketAction.hs b/lib/Kubernetes/Model/V1/TCPSocketAction.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/TCPSocketAction.hs
@@ -0,0 +1,41 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.TCPSocketAction
+    ( TCPSocketAction (..)
+    , port
+    , mkTCPSocketAction
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           GHC.Generics              (Generic)
+import           Kubernetes.Utils          (IntegerOrText)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | TCPSocketAction describes an action based on opening a socket
+data TCPSocketAction = TCPSocketAction
+    { _port :: !(IntegerOrText)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''TCPSocketAction
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''TCPSocketAction)
+
+instance Arbitrary TCPSocketAction where
+    arbitrary = TCPSocketAction <$> arbitrary
+
+-- | Use this method to build a TCPSocketAction
+mkTCPSocketAction :: IntegerOrText -> TCPSocketAction
+mkTCPSocketAction xportx = TCPSocketAction xportx
diff --git a/lib/Kubernetes/Model/V1/Volume.hs b/lib/Kubernetes/Model/V1/Volume.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/Volume.hs
@@ -0,0 +1,95 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.Volume
+    ( Volume (..)
+    , name
+    , hostPath
+    , emptyDir
+    , gcePersistentDisk
+    , awsElasticBlockStore
+    , gitRepo
+    , secret
+    , nfs
+    , iscsi
+    , glusterfs
+    , persistentVolumeClaim
+    , rbd
+    , flexVolume
+    , cinder
+    , cephfs
+    , flocker
+    , downwardAPI
+    , fc
+    , mkVolume
+    ) where
+
+import           Control.Lens.TH                                       (makeLenses)
+import           Data.Aeson.TH                                         (defaultOptions, deriveJSON, fieldLabelModifier)
+import           Data.Text                                             (Text)
+import           GHC.Generics                                          (Generic)
+import           Kubernetes.Model.V1.AWSElasticBlockStoreVolumeSource  (AWSElasticBlockStoreVolumeSource)
+import           Kubernetes.Model.V1.CephFSVolumeSource                (CephFSVolumeSource)
+import           Kubernetes.Model.V1.CinderVolumeSource                (CinderVolumeSource)
+import           Kubernetes.Model.V1.DownwardAPIVolumeSource           (DownwardAPIVolumeSource)
+import           Kubernetes.Model.V1.EmptyDirVolumeSource              (EmptyDirVolumeSource)
+import           Kubernetes.Model.V1.FCVolumeSource                    (FCVolumeSource)
+import           Kubernetes.Model.V1.FlexVolumeSource                  (FlexVolumeSource)
+import           Kubernetes.Model.V1.FlockerVolumeSource               (FlockerVolumeSource)
+import           Kubernetes.Model.V1.GCEPersistentDiskVolumeSource     (GCEPersistentDiskVolumeSource)
+import           Kubernetes.Model.V1.GitRepoVolumeSource               (GitRepoVolumeSource)
+import           Kubernetes.Model.V1.GlusterfsVolumeSource             (GlusterfsVolumeSource)
+import           Kubernetes.Model.V1.HostPathVolumeSource              (HostPathVolumeSource)
+import           Kubernetes.Model.V1.ISCSIVolumeSource                 (ISCSIVolumeSource)
+import           Kubernetes.Model.V1.NFSVolumeSource                   (NFSVolumeSource)
+import           Kubernetes.Model.V1.PersistentVolumeClaimVolumeSource (PersistentVolumeClaimVolumeSource)
+import           Kubernetes.Model.V1.RBDVolumeSource                   (RBDVolumeSource)
+import           Kubernetes.Model.V1.SecretVolumeSource                (SecretVolumeSource)
+import           Prelude                                               hiding
+                                                                        (drop,
+                                                                        error,
+                                                                        max,
+                                                                        min)
+import qualified Prelude                                               as P
+import           Test.QuickCheck                                       (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances                             ()
+
+-- | Volume represents a named volume in a pod that may be accessed by any container in the pod.
+data Volume = Volume
+    { _name                  :: !(Text)
+    , _hostPath              :: !(Maybe HostPathVolumeSource)
+    , _emptyDir              :: !(Maybe EmptyDirVolumeSource)
+    , _gcePersistentDisk     :: !(Maybe GCEPersistentDiskVolumeSource)
+    , _awsElasticBlockStore  :: !(Maybe AWSElasticBlockStoreVolumeSource)
+    , _gitRepo               :: !(Maybe GitRepoVolumeSource)
+    , _secret                :: !(Maybe SecretVolumeSource)
+    , _nfs                   :: !(Maybe NFSVolumeSource)
+    , _iscsi                 :: !(Maybe ISCSIVolumeSource)
+    , _glusterfs             :: !(Maybe GlusterfsVolumeSource)
+    , _persistentVolumeClaim :: !(Maybe PersistentVolumeClaimVolumeSource)
+    , _rbd                   :: !(Maybe RBDVolumeSource)
+    , _flexVolume            :: !(Maybe FlexVolumeSource)
+    , _cinder                :: !(Maybe CinderVolumeSource)
+    , _cephfs                :: !(Maybe CephFSVolumeSource)
+    , _flocker               :: !(Maybe FlockerVolumeSource)
+    , _downwardAPI           :: !(Maybe DownwardAPIVolumeSource)
+    , _fc                    :: !(Maybe FCVolumeSource)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''Volume
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''Volume)
+
+instance Arbitrary Volume where
+    arbitrary = Volume <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a Volume
+mkVolume :: Text -> Volume
+mkVolume xnamex = Volume xnamex Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
diff --git a/lib/Kubernetes/Model/V1/VolumeMount.hs b/lib/Kubernetes/Model/V1/VolumeMount.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Model/V1/VolumeMount.hs
@@ -0,0 +1,45 @@
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Kubernetes.Model.V1.VolumeMount
+    ( VolumeMount (..)
+    , name
+    , readOnly
+    , mountPath
+    , mkVolumeMount
+    ) where
+
+import           Control.Lens.TH           (makeLenses)
+import           Data.Aeson.TH             (defaultOptions, deriveJSON,
+                                            fieldLabelModifier)
+import           Data.Text                 (Text)
+import           GHC.Generics              (Generic)
+import           Prelude                   hiding (drop, error, max, min)
+import qualified Prelude                   as P
+import           Test.QuickCheck           (Arbitrary, arbitrary)
+import           Test.QuickCheck.Instances ()
+
+-- | VolumeMount describes a mounting of a Volume within a container.
+data VolumeMount = VolumeMount
+    { _name      :: !(Text)
+    , _readOnly  :: !(Maybe Bool)
+    , _mountPath :: !(Text)
+    } deriving (Show, Eq, Generic)
+
+makeLenses ''VolumeMount
+
+$(deriveJSON defaultOptions{fieldLabelModifier = (\n -> if n == "_type_" then "type" else P.drop 1 n)} ''VolumeMount)
+
+instance Arbitrary VolumeMount where
+    arbitrary = VolumeMount <$> arbitrary <*> arbitrary <*> arbitrary
+
+-- | Use this method to build a VolumeMount
+mkVolumeMount :: Text -> Text -> VolumeMount
+mkVolumeMount xnamex xmountPathx = VolumeMount xnamex Nothing xmountPathx
diff --git a/lib/Kubernetes/Utils.hs b/lib/Kubernetes/Utils.hs
new file mode 100644
--- /dev/null
+++ b/lib/Kubernetes/Utils.hs
@@ -0,0 +1,66 @@
+-- This source code is distributed under the terms of a MIT license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE DeriveGeneric     #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell   #-}
+{-# LANGUAGE TypeFamilies      #-}
+{-# LANGUAGE TypeOperators     #-}
+
+module Kubernetes.Utils where
+
+import           Control.Lens.TH (makeLenses)
+import           Control.Monad   (mzero)
+import           Data.Aeson      (FromJSON, ToJSON)
+import qualified Data.Aeson      as A
+import           Data.List       (intercalate)
+import           Data.List.Split (splitOn)
+import           Data.Scientific (coefficient, scientific)
+import qualified Data.Text       as T
+import           Data.Text.Read  (decimal)
+import           GHC.Generics
+import           Servant.API
+import           Test.QuickCheck
+import           Test.QuickCheck.Instances ()
+
+newtype IntegerOrText = IntegerOrText { unIntOrText :: Either Integer T.Text } deriving (Eq, Show, Generic)
+
+makeLenses ''IntegerOrText
+
+instance Arbitrary IntegerOrText where
+  arbitrary = IntegerOrText <$> oneof [ Left <$> arbitrary , Right <$> arbitrary ]
+
+instance FromJSON IntegerOrText where
+  parseJSON (A.Number i) = return . IntegerOrText . Left . coefficient $ i
+  parseJSON (A.String s) = return . IntegerOrText . Right $ s
+  parseJSON _            = mzero
+
+instance ToJSON IntegerOrText where
+  toJSON (IntegerOrText (Left i))  = A.Number (scientific i 0)
+  toJSON (IntegerOrText (Right s)) = A.String s
+
+instance FromText IntegerOrText where
+  fromText txt = case decimal txt of
+    Right (i, t) | T.null t -> Just (IntegerOrText (Left i))
+    _                       -> Just (IntegerOrText (Right txt))
+
+instance ToText IntegerOrText where
+  toText iot = case iot of
+    IntegerOrText (Left i) -> T.pack (show i)
+    IntegerOrText (Right t) -> t
+
+instance FromText [String] where
+    fromText = Just . splitOn "," . T.unpack
+
+instance ToText [String] where
+    toText = T.pack . intercalate ","
+
+lkp inputs l = case lookup l inputs of
+        Nothing -> Left $ "label " ++ T.unpack l ++ " not found"
+        Just v  -> Right $ read (T.unpack v)
diff --git a/server/Main.hs b/server/Main.hs
new file mode 100644
--- /dev/null
+++ b/server/Main.hs
@@ -0,0 +1,20 @@
+-- This source code is distributed under the terms of a MIT license,
+-- Copyright (c) 2016-present, SoundCloud Ltd.
+-- All rights reserved.
+--
+-- This source code is distributed under the terms of a MIT license,
+-- found in the LICENSE file.
+
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE TypeOperators #-}
+
+module Main where
+
+import Kubernetes.Apis
+import Servant
+import Servant.Mock
+import qualified Network.Wai.Handler.Warp as Warp
+
+main :: IO ()
+main = Warp.run 8080 $ serve api (mock api)
