When trying to create a a resource with DateTime field, kubernetes returns 400 with the following message:
[2019-09-29 14:27:11][Kubernetes.OpenAPI.Client][Info][manjaro-v01][PID 31826][ThreadId 11] REQ:POST 192.168.99.100/apis/coordination.k8s.io/v1/namespaces/default/leases
Left (MimeError {mimeError = "error statusCode: 400", mimeErrorResponse = Response {responseStatus = Status {statusCode = 400, statusMessage = "Bad Request"}, responseVersion = HTTP/1.1, responseHeaders = [("Content-Type","application/json"),("Date","Sun, 29 Sep 2019 14:27:11 GMT"),("Content-Length","562")], responseBody = "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Lease in version \\\"v1\\\" cannot be handled as a Lease: v1.Lease.Spec: v1.LeaseSpec.HolderIdentity: AcquireTime: unmarshalerDecoder: parsing time \\\"2019-09-29T14:27:11.738Z\\\" as \\\"2006-01-02T15:04:05.000000Z07:00\\\": cannot parse \\\".738Z\\\" as \\\".000000\\\", error found in #10 byte of ...|7:11.738Z\\\",\\\"holderId|..., bigger context ...|itions\\\":1,\\\"acquireTime\\\":\\\"2019-09-29T14:27:11.738Z\\\",\\\"holderIdentity\\\":\\\"test_identity\\\",\\\"renewTime\\\":\\\"201|...\",\"reason\":\"BadRequest\",\"code\":400}\n", responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose}})
[2019-09-29 14:27:11][Kubernetes.OpenAPI.Client][Info][manjaro-v01][PID 31826][ThreadId 11] RES:statusCode=400 (POST 192.168.99.100/apis/coordination.k8s.io/v1/namespaces/default/leases)
[2019-09-29 14:27:11][Kubernetes.OpenAPI.Client][Error][manjaro-v01][PID 31826][ThreadId 11] error statusCode: 400
{-# LANGUAGE OverloadedStrings #-}
-- module Main where
import Data.Function ((&))
import Kubernetes.Client
import Kubernetes.OpenAPI
import Kubernetes.OpenAPI.API.CoordinationV1
import qualified Kubernetes.OpenAPI.API.CoreV1 as CoreV1
import Network.TLS (credentialLoadX509)
import Kubernetes.OpenAPI.Model as M
import Data.Time.Clock (getCurrentTime)
import Control.Monad (forever)
import Control.Concurrent (threadDelay)
import System.Environment (getArgs, getEnv)
import Data.Text (pack)
main :: IO ()
main = do
kcfg0 <-
newConfig
& fmap (setMasterURI "https://192.168.99.100:8443")
& fmap disableValidateAuthMethods
logContext <- stdoutLoggingContext $ configLogContext kcfg0
let kcfg = kcfg0 { configLogContext = logContext}
home <- getEnv "HOME"
myCAStore <- loadPEMCerts $ home ++ "/.minikube/ca.crt"
myCert <-
credentialLoadX509 (home ++ "/.minikube/client.crt") (home ++ "/.minikube/client.key")
>>= either error return
tlsParams <-
defaultTLSClientParams
& fmap disableServerNameValidation
& fmap disableServerCertValidation
& fmap (setCAStore myCAStore)
& fmap (setClientCert myCert)
manager <- newManager tlsParams
-- Create new lease
acquireTime <- getCurrentTime
result <- dispatchMime' manager kcfg $ createNamespacedLease (ContentType MimeJSON) (Accept MimeJSON) (newLease acquireTime) (Namespace "default")
print result
where
newLease acquireTime =
mkV1Lease
{ v1LeaseMetadata = Just $ mkV1ObjectMeta
{ v1ObjectMetaName = Just $ "testing"
, v1ObjectMetaNamespace = Just $ "default"
}
, v1LeaseSpec = Just $ mkV1LeaseSpec
{ v1LeaseSpecAcquireTime = Just $ DateTime acquireTime
, v1LeaseSpecHolderIdentity = Just $ "test_identity"
, v1LeaseSpecLeaseDurationSeconds = Just $ 10
, v1LeaseSpecRenewTime = Just $ DateTime acquireTime
, v1LeaseSpecLeaseTransitions = Just 1
}
}