{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SMS.Types.ReplicationJob
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SMS.Types.ReplicationJob where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SMS.Types.LicenseType
import Amazonka.SMS.Types.ReplicationJobState
import Amazonka.SMS.Types.ReplicationRun
import Amazonka.SMS.Types.ServerType
import Amazonka.SMS.Types.VmServer

-- | Represents a replication job.
--
-- /See:/ 'newReplicationJob' smart constructor.
data ReplicationJob = ReplicationJob'
  { -- | The description of the replication job.
    ReplicationJob -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Indicates whether the replication job should produce encrypted AMIs.
    ReplicationJob -> Maybe Bool
encrypted :: Prelude.Maybe Prelude.Bool,
    -- | The time between consecutive replication runs, in hours.
    ReplicationJob -> Maybe Int
frequency :: Prelude.Maybe Prelude.Int,
    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
    -- This value can be any of the following:
    --
    -- -   KMS key ID
    --
    -- -   KMS key alias
    --
    -- -   ARN referring to the KMS key ID
    --
    -- -   ARN referring to the KMS key alias
    --
    -- If encrypted is enabled but a KMS key ID is not specified, the
    -- customer\'s default KMS key for Amazon EBS is used.
    ReplicationJob -> Maybe Text
kmsKeyId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the latest Amazon Machine Image (AMI).
    ReplicationJob -> Maybe Text
latestAmiId :: Prelude.Maybe Prelude.Text,
    -- | The license type to be used for the AMI created by a successful
    -- replication run.
    ReplicationJob -> Maybe LicenseType
licenseType :: Prelude.Maybe LicenseType,
    -- | The start time of the next replication run.
    ReplicationJob -> Maybe POSIX
nextReplicationRunStartTime :: Prelude.Maybe Data.POSIX,
    -- | The number of recent AMIs to keep in the customer\'s account for a
    -- replication job. By default, the value is set to zero, meaning that all
    -- AMIs are kept.
    ReplicationJob -> Maybe Int
numberOfRecentAmisToKeep :: Prelude.Maybe Prelude.Int,
    -- | The ID of the replication job.
    ReplicationJob -> Maybe Text
replicationJobId :: Prelude.Maybe Prelude.Text,
    -- | Information about the replication runs.
    ReplicationJob -> Maybe [ReplicationRun]
replicationRunList :: Prelude.Maybe [ReplicationRun],
    -- | The name of the IAM role to be used by Server Migration Service.
    ReplicationJob -> Maybe Text
roleName :: Prelude.Maybe Prelude.Text,
    -- | Indicates whether to run the replication job one time.
    ReplicationJob -> Maybe Bool
runOnce :: Prelude.Maybe Prelude.Bool,
    -- | The seed replication time.
    ReplicationJob -> Maybe POSIX
seedReplicationTime :: Prelude.Maybe Data.POSIX,
    -- | The ID of the server.
    ReplicationJob -> Maybe Text
serverId :: Prelude.Maybe Prelude.Text,
    -- | The type of server.
    ReplicationJob -> Maybe ServerType
serverType :: Prelude.Maybe ServerType,
    -- | The state of the replication job.
    ReplicationJob -> Maybe ReplicationJobState
state :: Prelude.Maybe ReplicationJobState,
    -- | The description of the current status of the replication job.
    ReplicationJob -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | Information about the VM server.
    ReplicationJob -> Maybe VmServer
vmServer :: Prelude.Maybe VmServer
  }
  deriving (ReplicationJob -> ReplicationJob -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReplicationJob -> ReplicationJob -> Bool
$c/= :: ReplicationJob -> ReplicationJob -> Bool
== :: ReplicationJob -> ReplicationJob -> Bool
$c== :: ReplicationJob -> ReplicationJob -> Bool
Prelude.Eq, ReadPrec [ReplicationJob]
ReadPrec ReplicationJob
Int -> ReadS ReplicationJob
ReadS [ReplicationJob]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ReplicationJob]
$creadListPrec :: ReadPrec [ReplicationJob]
readPrec :: ReadPrec ReplicationJob
$creadPrec :: ReadPrec ReplicationJob
readList :: ReadS [ReplicationJob]
$creadList :: ReadS [ReplicationJob]
readsPrec :: Int -> ReadS ReplicationJob
$creadsPrec :: Int -> ReadS ReplicationJob
Prelude.Read, Int -> ReplicationJob -> ShowS
[ReplicationJob] -> ShowS
ReplicationJob -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReplicationJob] -> ShowS
$cshowList :: [ReplicationJob] -> ShowS
show :: ReplicationJob -> String
$cshow :: ReplicationJob -> String
showsPrec :: Int -> ReplicationJob -> ShowS
$cshowsPrec :: Int -> ReplicationJob -> ShowS
Prelude.Show, forall x. Rep ReplicationJob x -> ReplicationJob
forall x. ReplicationJob -> Rep ReplicationJob x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ReplicationJob x -> ReplicationJob
$cfrom :: forall x. ReplicationJob -> Rep ReplicationJob x
Prelude.Generic)

-- |
-- Create a value of 'ReplicationJob' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'description', 'replicationJob_description' - The description of the replication job.
--
-- 'encrypted', 'replicationJob_encrypted' - Indicates whether the replication job should produce encrypted AMIs.
--
-- 'frequency', 'replicationJob_frequency' - The time between consecutive replication runs, in hours.
--
-- 'kmsKeyId', 'replicationJob_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
-- This value can be any of the following:
--
-- -   KMS key ID
--
-- -   KMS key alias
--
-- -   ARN referring to the KMS key ID
--
-- -   ARN referring to the KMS key alias
--
-- If encrypted is enabled but a KMS key ID is not specified, the
-- customer\'s default KMS key for Amazon EBS is used.
--
-- 'latestAmiId', 'replicationJob_latestAmiId' - The ID of the latest Amazon Machine Image (AMI).
--
-- 'licenseType', 'replicationJob_licenseType' - The license type to be used for the AMI created by a successful
-- replication run.
--
-- 'nextReplicationRunStartTime', 'replicationJob_nextReplicationRunStartTime' - The start time of the next replication run.
--
-- 'numberOfRecentAmisToKeep', 'replicationJob_numberOfRecentAmisToKeep' - The number of recent AMIs to keep in the customer\'s account for a
-- replication job. By default, the value is set to zero, meaning that all
-- AMIs are kept.
--
-- 'replicationJobId', 'replicationJob_replicationJobId' - The ID of the replication job.
--
-- 'replicationRunList', 'replicationJob_replicationRunList' - Information about the replication runs.
--
-- 'roleName', 'replicationJob_roleName' - The name of the IAM role to be used by Server Migration Service.
--
-- 'runOnce', 'replicationJob_runOnce' - Indicates whether to run the replication job one time.
--
-- 'seedReplicationTime', 'replicationJob_seedReplicationTime' - The seed replication time.
--
-- 'serverId', 'replicationJob_serverId' - The ID of the server.
--
-- 'serverType', 'replicationJob_serverType' - The type of server.
--
-- 'state', 'replicationJob_state' - The state of the replication job.
--
-- 'statusMessage', 'replicationJob_statusMessage' - The description of the current status of the replication job.
--
-- 'vmServer', 'replicationJob_vmServer' - Information about the VM server.
newReplicationJob ::
  ReplicationJob
newReplicationJob :: ReplicationJob
newReplicationJob =
  ReplicationJob'
    { $sel:description:ReplicationJob' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:encrypted:ReplicationJob' :: Maybe Bool
encrypted = forall a. Maybe a
Prelude.Nothing,
      $sel:frequency:ReplicationJob' :: Maybe Int
frequency = forall a. Maybe a
Prelude.Nothing,
      $sel:kmsKeyId:ReplicationJob' :: Maybe Text
kmsKeyId = forall a. Maybe a
Prelude.Nothing,
      $sel:latestAmiId:ReplicationJob' :: Maybe Text
latestAmiId = forall a. Maybe a
Prelude.Nothing,
      $sel:licenseType:ReplicationJob' :: Maybe LicenseType
licenseType = forall a. Maybe a
Prelude.Nothing,
      $sel:nextReplicationRunStartTime:ReplicationJob' :: Maybe POSIX
nextReplicationRunStartTime = forall a. Maybe a
Prelude.Nothing,
      $sel:numberOfRecentAmisToKeep:ReplicationJob' :: Maybe Int
numberOfRecentAmisToKeep = forall a. Maybe a
Prelude.Nothing,
      $sel:replicationJobId:ReplicationJob' :: Maybe Text
replicationJobId = forall a. Maybe a
Prelude.Nothing,
      $sel:replicationRunList:ReplicationJob' :: Maybe [ReplicationRun]
replicationRunList = forall a. Maybe a
Prelude.Nothing,
      $sel:roleName:ReplicationJob' :: Maybe Text
roleName = forall a. Maybe a
Prelude.Nothing,
      $sel:runOnce:ReplicationJob' :: Maybe Bool
runOnce = forall a. Maybe a
Prelude.Nothing,
      $sel:seedReplicationTime:ReplicationJob' :: Maybe POSIX
seedReplicationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:serverId:ReplicationJob' :: Maybe Text
serverId = forall a. Maybe a
Prelude.Nothing,
      $sel:serverType:ReplicationJob' :: Maybe ServerType
serverType = forall a. Maybe a
Prelude.Nothing,
      $sel:state:ReplicationJob' :: Maybe ReplicationJobState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ReplicationJob' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:vmServer:ReplicationJob' :: Maybe VmServer
vmServer = forall a. Maybe a
Prelude.Nothing
    }

-- | The description of the replication job.
replicationJob_description :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_description :: Lens' ReplicationJob (Maybe Text)
replicationJob_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
description :: Maybe Text
$sel:description:ReplicationJob' :: ReplicationJob -> Maybe Text
description} -> Maybe Text
description) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:description:ReplicationJob' :: Maybe Text
description = Maybe Text
a} :: ReplicationJob)

-- | Indicates whether the replication job should produce encrypted AMIs.
replicationJob_encrypted :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Bool)
replicationJob_encrypted :: Lens' ReplicationJob (Maybe Bool)
replicationJob_encrypted = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Bool
encrypted :: Maybe Bool
$sel:encrypted:ReplicationJob' :: ReplicationJob -> Maybe Bool
encrypted} -> Maybe Bool
encrypted) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Bool
a -> ReplicationJob
s {$sel:encrypted:ReplicationJob' :: Maybe Bool
encrypted = Maybe Bool
a} :: ReplicationJob)

-- | The time between consecutive replication runs, in hours.
replicationJob_frequency :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Int)
replicationJob_frequency :: Lens' ReplicationJob (Maybe Int)
replicationJob_frequency = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Int
frequency :: Maybe Int
$sel:frequency:ReplicationJob' :: ReplicationJob -> Maybe Int
frequency} -> Maybe Int
frequency) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Int
a -> ReplicationJob
s {$sel:frequency:ReplicationJob' :: Maybe Int
frequency = Maybe Int
a} :: ReplicationJob)

-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
-- This value can be any of the following:
--
-- -   KMS key ID
--
-- -   KMS key alias
--
-- -   ARN referring to the KMS key ID
--
-- -   ARN referring to the KMS key alias
--
-- If encrypted is enabled but a KMS key ID is not specified, the
-- customer\'s default KMS key for Amazon EBS is used.
replicationJob_kmsKeyId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_kmsKeyId :: Lens' ReplicationJob (Maybe Text)
replicationJob_kmsKeyId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
kmsKeyId :: Maybe Text
$sel:kmsKeyId:ReplicationJob' :: ReplicationJob -> Maybe Text
kmsKeyId} -> Maybe Text
kmsKeyId) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:kmsKeyId:ReplicationJob' :: Maybe Text
kmsKeyId = Maybe Text
a} :: ReplicationJob)

-- | The ID of the latest Amazon Machine Image (AMI).
replicationJob_latestAmiId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_latestAmiId :: Lens' ReplicationJob (Maybe Text)
replicationJob_latestAmiId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
latestAmiId :: Maybe Text
$sel:latestAmiId:ReplicationJob' :: ReplicationJob -> Maybe Text
latestAmiId} -> Maybe Text
latestAmiId) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:latestAmiId:ReplicationJob' :: Maybe Text
latestAmiId = Maybe Text
a} :: ReplicationJob)

-- | The license type to be used for the AMI created by a successful
-- replication run.
replicationJob_licenseType :: Lens.Lens' ReplicationJob (Prelude.Maybe LicenseType)
replicationJob_licenseType :: Lens' ReplicationJob (Maybe LicenseType)
replicationJob_licenseType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe LicenseType
licenseType :: Maybe LicenseType
$sel:licenseType:ReplicationJob' :: ReplicationJob -> Maybe LicenseType
licenseType} -> Maybe LicenseType
licenseType) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe LicenseType
a -> ReplicationJob
s {$sel:licenseType:ReplicationJob' :: Maybe LicenseType
licenseType = Maybe LicenseType
a} :: ReplicationJob)

-- | The start time of the next replication run.
replicationJob_nextReplicationRunStartTime :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.UTCTime)
replicationJob_nextReplicationRunStartTime :: Lens' ReplicationJob (Maybe UTCTime)
replicationJob_nextReplicationRunStartTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe POSIX
nextReplicationRunStartTime :: Maybe POSIX
$sel:nextReplicationRunStartTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
nextReplicationRunStartTime} -> Maybe POSIX
nextReplicationRunStartTime) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe POSIX
a -> ReplicationJob
s {$sel:nextReplicationRunStartTime:ReplicationJob' :: Maybe POSIX
nextReplicationRunStartTime = Maybe POSIX
a} :: ReplicationJob) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The number of recent AMIs to keep in the customer\'s account for a
-- replication job. By default, the value is set to zero, meaning that all
-- AMIs are kept.
replicationJob_numberOfRecentAmisToKeep :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Int)
replicationJob_numberOfRecentAmisToKeep :: Lens' ReplicationJob (Maybe Int)
replicationJob_numberOfRecentAmisToKeep = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Int
numberOfRecentAmisToKeep :: Maybe Int
$sel:numberOfRecentAmisToKeep:ReplicationJob' :: ReplicationJob -> Maybe Int
numberOfRecentAmisToKeep} -> Maybe Int
numberOfRecentAmisToKeep) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Int
a -> ReplicationJob
s {$sel:numberOfRecentAmisToKeep:ReplicationJob' :: Maybe Int
numberOfRecentAmisToKeep = Maybe Int
a} :: ReplicationJob)

-- | The ID of the replication job.
replicationJob_replicationJobId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_replicationJobId :: Lens' ReplicationJob (Maybe Text)
replicationJob_replicationJobId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
replicationJobId :: Maybe Text
$sel:replicationJobId:ReplicationJob' :: ReplicationJob -> Maybe Text
replicationJobId} -> Maybe Text
replicationJobId) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:replicationJobId:ReplicationJob' :: Maybe Text
replicationJobId = Maybe Text
a} :: ReplicationJob)

-- | Information about the replication runs.
replicationJob_replicationRunList :: Lens.Lens' ReplicationJob (Prelude.Maybe [ReplicationRun])
replicationJob_replicationRunList :: Lens' ReplicationJob (Maybe [ReplicationRun])
replicationJob_replicationRunList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe [ReplicationRun]
replicationRunList :: Maybe [ReplicationRun]
$sel:replicationRunList:ReplicationJob' :: ReplicationJob -> Maybe [ReplicationRun]
replicationRunList} -> Maybe [ReplicationRun]
replicationRunList) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe [ReplicationRun]
a -> ReplicationJob
s {$sel:replicationRunList:ReplicationJob' :: Maybe [ReplicationRun]
replicationRunList = Maybe [ReplicationRun]
a} :: ReplicationJob) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name of the IAM role to be used by Server Migration Service.
replicationJob_roleName :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_roleName :: Lens' ReplicationJob (Maybe Text)
replicationJob_roleName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
roleName :: Maybe Text
$sel:roleName:ReplicationJob' :: ReplicationJob -> Maybe Text
roleName} -> Maybe Text
roleName) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:roleName:ReplicationJob' :: Maybe Text
roleName = Maybe Text
a} :: ReplicationJob)

-- | Indicates whether to run the replication job one time.
replicationJob_runOnce :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Bool)
replicationJob_runOnce :: Lens' ReplicationJob (Maybe Bool)
replicationJob_runOnce = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Bool
runOnce :: Maybe Bool
$sel:runOnce:ReplicationJob' :: ReplicationJob -> Maybe Bool
runOnce} -> Maybe Bool
runOnce) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Bool
a -> ReplicationJob
s {$sel:runOnce:ReplicationJob' :: Maybe Bool
runOnce = Maybe Bool
a} :: ReplicationJob)

-- | The seed replication time.
replicationJob_seedReplicationTime :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.UTCTime)
replicationJob_seedReplicationTime :: Lens' ReplicationJob (Maybe UTCTime)
replicationJob_seedReplicationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe POSIX
seedReplicationTime :: Maybe POSIX
$sel:seedReplicationTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
seedReplicationTime} -> Maybe POSIX
seedReplicationTime) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe POSIX
a -> ReplicationJob
s {$sel:seedReplicationTime:ReplicationJob' :: Maybe POSIX
seedReplicationTime = Maybe POSIX
a} :: ReplicationJob) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The ID of the server.
replicationJob_serverId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_serverId :: Lens' ReplicationJob (Maybe Text)
replicationJob_serverId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
serverId :: Maybe Text
$sel:serverId:ReplicationJob' :: ReplicationJob -> Maybe Text
serverId} -> Maybe Text
serverId) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:serverId:ReplicationJob' :: Maybe Text
serverId = Maybe Text
a} :: ReplicationJob)

-- | The type of server.
replicationJob_serverType :: Lens.Lens' ReplicationJob (Prelude.Maybe ServerType)
replicationJob_serverType :: Lens' ReplicationJob (Maybe ServerType)
replicationJob_serverType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe ServerType
serverType :: Maybe ServerType
$sel:serverType:ReplicationJob' :: ReplicationJob -> Maybe ServerType
serverType} -> Maybe ServerType
serverType) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe ServerType
a -> ReplicationJob
s {$sel:serverType:ReplicationJob' :: Maybe ServerType
serverType = Maybe ServerType
a} :: ReplicationJob)

-- | The state of the replication job.
replicationJob_state :: Lens.Lens' ReplicationJob (Prelude.Maybe ReplicationJobState)
replicationJob_state :: Lens' ReplicationJob (Maybe ReplicationJobState)
replicationJob_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe ReplicationJobState
state :: Maybe ReplicationJobState
$sel:state:ReplicationJob' :: ReplicationJob -> Maybe ReplicationJobState
state} -> Maybe ReplicationJobState
state) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe ReplicationJobState
a -> ReplicationJob
s {$sel:state:ReplicationJob' :: Maybe ReplicationJobState
state = Maybe ReplicationJobState
a} :: ReplicationJob)

-- | The description of the current status of the replication job.
replicationJob_statusMessage :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
replicationJob_statusMessage :: Lens' ReplicationJob (Maybe Text)
replicationJob_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ReplicationJob' :: ReplicationJob -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe Text
a -> ReplicationJob
s {$sel:statusMessage:ReplicationJob' :: Maybe Text
statusMessage = Maybe Text
a} :: ReplicationJob)

-- | Information about the VM server.
replicationJob_vmServer :: Lens.Lens' ReplicationJob (Prelude.Maybe VmServer)
replicationJob_vmServer :: Lens' ReplicationJob (Maybe VmServer)
replicationJob_vmServer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReplicationJob' {Maybe VmServer
vmServer :: Maybe VmServer
$sel:vmServer:ReplicationJob' :: ReplicationJob -> Maybe VmServer
vmServer} -> Maybe VmServer
vmServer) (\s :: ReplicationJob
s@ReplicationJob' {} Maybe VmServer
a -> ReplicationJob
s {$sel:vmServer:ReplicationJob' :: Maybe VmServer
vmServer = Maybe VmServer
a} :: ReplicationJob)

instance Data.FromJSON ReplicationJob where
  parseJSON :: Value -> Parser ReplicationJob
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ReplicationJob"
      ( \Object
x ->
          Maybe Text
-> Maybe Bool
-> Maybe Int
-> Maybe Text
-> Maybe Text
-> Maybe LicenseType
-> Maybe POSIX
-> Maybe Int
-> Maybe Text
-> Maybe [ReplicationRun]
-> Maybe Text
-> Maybe Bool
-> Maybe POSIX
-> Maybe Text
-> Maybe ServerType
-> Maybe ReplicationJobState
-> Maybe Text
-> Maybe VmServer
-> ReplicationJob
ReplicationJob'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"encrypted")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"frequency")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"kmsKeyId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"latestAmiId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"licenseType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"nextReplicationRunStartTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"numberOfRecentAmisToKeep")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"replicationJobId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"replicationRunList"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"roleName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"runOnce")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"seedReplicationTime")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"serverId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"serverType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"state")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"statusMessage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"vmServer")
      )

instance Prelude.Hashable ReplicationJob where
  hashWithSalt :: Int -> ReplicationJob -> Int
hashWithSalt Int
_salt ReplicationJob' {Maybe Bool
Maybe Int
Maybe [ReplicationRun]
Maybe Text
Maybe POSIX
Maybe LicenseType
Maybe ReplicationJobState
Maybe ServerType
Maybe VmServer
vmServer :: Maybe VmServer
statusMessage :: Maybe Text
state :: Maybe ReplicationJobState
serverType :: Maybe ServerType
serverId :: Maybe Text
seedReplicationTime :: Maybe POSIX
runOnce :: Maybe Bool
roleName :: Maybe Text
replicationRunList :: Maybe [ReplicationRun]
replicationJobId :: Maybe Text
numberOfRecentAmisToKeep :: Maybe Int
nextReplicationRunStartTime :: Maybe POSIX
licenseType :: Maybe LicenseType
latestAmiId :: Maybe Text
kmsKeyId :: Maybe Text
frequency :: Maybe Int
encrypted :: Maybe Bool
description :: Maybe Text
$sel:vmServer:ReplicationJob' :: ReplicationJob -> Maybe VmServer
$sel:statusMessage:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:state:ReplicationJob' :: ReplicationJob -> Maybe ReplicationJobState
$sel:serverType:ReplicationJob' :: ReplicationJob -> Maybe ServerType
$sel:serverId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:seedReplicationTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
$sel:runOnce:ReplicationJob' :: ReplicationJob -> Maybe Bool
$sel:roleName:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:replicationRunList:ReplicationJob' :: ReplicationJob -> Maybe [ReplicationRun]
$sel:replicationJobId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:numberOfRecentAmisToKeep:ReplicationJob' :: ReplicationJob -> Maybe Int
$sel:nextReplicationRunStartTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
$sel:licenseType:ReplicationJob' :: ReplicationJob -> Maybe LicenseType
$sel:latestAmiId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:kmsKeyId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:frequency:ReplicationJob' :: ReplicationJob -> Maybe Int
$sel:encrypted:ReplicationJob' :: ReplicationJob -> Maybe Bool
$sel:description:ReplicationJob' :: ReplicationJob -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
encrypted
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
frequency
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
kmsKeyId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
latestAmiId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LicenseType
licenseType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
nextReplicationRunStartTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
numberOfRecentAmisToKeep
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
replicationJobId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ReplicationRun]
replicationRunList
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
roleName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
runOnce
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
seedReplicationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serverId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ServerType
serverType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ReplicationJobState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
statusMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VmServer
vmServer

instance Prelude.NFData ReplicationJob where
  rnf :: ReplicationJob -> ()
rnf ReplicationJob' {Maybe Bool
Maybe Int
Maybe [ReplicationRun]
Maybe Text
Maybe POSIX
Maybe LicenseType
Maybe ReplicationJobState
Maybe ServerType
Maybe VmServer
vmServer :: Maybe VmServer
statusMessage :: Maybe Text
state :: Maybe ReplicationJobState
serverType :: Maybe ServerType
serverId :: Maybe Text
seedReplicationTime :: Maybe POSIX
runOnce :: Maybe Bool
roleName :: Maybe Text
replicationRunList :: Maybe [ReplicationRun]
replicationJobId :: Maybe Text
numberOfRecentAmisToKeep :: Maybe Int
nextReplicationRunStartTime :: Maybe POSIX
licenseType :: Maybe LicenseType
latestAmiId :: Maybe Text
kmsKeyId :: Maybe Text
frequency :: Maybe Int
encrypted :: Maybe Bool
description :: Maybe Text
$sel:vmServer:ReplicationJob' :: ReplicationJob -> Maybe VmServer
$sel:statusMessage:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:state:ReplicationJob' :: ReplicationJob -> Maybe ReplicationJobState
$sel:serverType:ReplicationJob' :: ReplicationJob -> Maybe ServerType
$sel:serverId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:seedReplicationTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
$sel:runOnce:ReplicationJob' :: ReplicationJob -> Maybe Bool
$sel:roleName:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:replicationRunList:ReplicationJob' :: ReplicationJob -> Maybe [ReplicationRun]
$sel:replicationJobId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:numberOfRecentAmisToKeep:ReplicationJob' :: ReplicationJob -> Maybe Int
$sel:nextReplicationRunStartTime:ReplicationJob' :: ReplicationJob -> Maybe POSIX
$sel:licenseType:ReplicationJob' :: ReplicationJob -> Maybe LicenseType
$sel:latestAmiId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:kmsKeyId:ReplicationJob' :: ReplicationJob -> Maybe Text
$sel:frequency:ReplicationJob' :: ReplicationJob -> Maybe Int
$sel:encrypted:ReplicationJob' :: ReplicationJob -> Maybe Bool
$sel:description:ReplicationJob' :: ReplicationJob -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
encrypted
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
frequency
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
kmsKeyId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
latestAmiId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LicenseType
licenseType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
nextReplicationRunStartTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
numberOfRecentAmisToKeep
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
replicationJobId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ReplicationRun]
replicationRunList
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
roleName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
runOnce
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
seedReplicationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serverId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ServerType
serverType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ReplicationJobState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
statusMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VmServer
vmServer