{-# 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.EC2.Types.InstanceStatus
-- 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.EC2.Types.InstanceStatus where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.InstanceState
import Amazonka.EC2.Types.InstanceStatusEvent
import Amazonka.EC2.Types.InstanceStatusSummary
import qualified Amazonka.Prelude as Prelude

-- | Describes the status of an instance.
--
-- /See:/ 'newInstanceStatus' smart constructor.
data InstanceStatus = InstanceStatus'
  { -- | The Availability Zone of the instance.
    InstanceStatus -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | Any scheduled events associated with the instance.
    InstanceStatus -> Maybe [InstanceStatusEvent]
events :: Prelude.Maybe [InstanceStatusEvent],
    -- | The ID of the instance.
    InstanceStatus -> Maybe Text
instanceId :: Prelude.Maybe Prelude.Text,
    -- | The intended state of the instance. DescribeInstanceStatus requires that
    -- an instance be in the @running@ state.
    InstanceStatus -> Maybe InstanceState
instanceState :: Prelude.Maybe InstanceState,
    -- | Reports impaired functionality that stems from issues internal to the
    -- instance, such as impaired reachability.
    InstanceStatus -> Maybe InstanceStatusSummary
instanceStatus :: Prelude.Maybe InstanceStatusSummary,
    -- | The Amazon Resource Name (ARN) of the Outpost.
    InstanceStatus -> Maybe Text
outpostArn :: Prelude.Maybe Prelude.Text,
    -- | Reports impaired functionality that stems from issues related to the
    -- systems that support an instance, such as hardware failures and network
    -- connectivity problems.
    InstanceStatus -> Maybe InstanceStatusSummary
systemStatus :: Prelude.Maybe InstanceStatusSummary
  }
  deriving (InstanceStatus -> InstanceStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceStatus -> InstanceStatus -> Bool
$c/= :: InstanceStatus -> InstanceStatus -> Bool
== :: InstanceStatus -> InstanceStatus -> Bool
$c== :: InstanceStatus -> InstanceStatus -> Bool
Prelude.Eq, ReadPrec [InstanceStatus]
ReadPrec InstanceStatus
Int -> ReadS InstanceStatus
ReadS [InstanceStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceStatus]
$creadListPrec :: ReadPrec [InstanceStatus]
readPrec :: ReadPrec InstanceStatus
$creadPrec :: ReadPrec InstanceStatus
readList :: ReadS [InstanceStatus]
$creadList :: ReadS [InstanceStatus]
readsPrec :: Int -> ReadS InstanceStatus
$creadsPrec :: Int -> ReadS InstanceStatus
Prelude.Read, Int -> InstanceStatus -> ShowS
[InstanceStatus] -> ShowS
InstanceStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceStatus] -> ShowS
$cshowList :: [InstanceStatus] -> ShowS
show :: InstanceStatus -> String
$cshow :: InstanceStatus -> String
showsPrec :: Int -> InstanceStatus -> ShowS
$cshowsPrec :: Int -> InstanceStatus -> ShowS
Prelude.Show, forall x. Rep InstanceStatus x -> InstanceStatus
forall x. InstanceStatus -> Rep InstanceStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InstanceStatus x -> InstanceStatus
$cfrom :: forall x. InstanceStatus -> Rep InstanceStatus x
Prelude.Generic)

-- |
-- Create a value of 'InstanceStatus' 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:
--
-- 'availabilityZone', 'instanceStatus_availabilityZone' - The Availability Zone of the instance.
--
-- 'events', 'instanceStatus_events' - Any scheduled events associated with the instance.
--
-- 'instanceId', 'instanceStatus_instanceId' - The ID of the instance.
--
-- 'instanceState', 'instanceStatus_instanceState' - The intended state of the instance. DescribeInstanceStatus requires that
-- an instance be in the @running@ state.
--
-- 'instanceStatus', 'instanceStatus_instanceStatus' - Reports impaired functionality that stems from issues internal to the
-- instance, such as impaired reachability.
--
-- 'outpostArn', 'instanceStatus_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
--
-- 'systemStatus', 'instanceStatus_systemStatus' - Reports impaired functionality that stems from issues related to the
-- systems that support an instance, such as hardware failures and network
-- connectivity problems.
newInstanceStatus ::
  InstanceStatus
newInstanceStatus :: InstanceStatus
newInstanceStatus =
  InstanceStatus'
    { $sel:availabilityZone:InstanceStatus' :: Maybe Text
availabilityZone = forall a. Maybe a
Prelude.Nothing,
      $sel:events:InstanceStatus' :: Maybe [InstanceStatusEvent]
events = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceId:InstanceStatus' :: Maybe Text
instanceId = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceState:InstanceStatus' :: Maybe InstanceState
instanceState = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceStatus:InstanceStatus' :: Maybe InstanceStatusSummary
instanceStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:outpostArn:InstanceStatus' :: Maybe Text
outpostArn = forall a. Maybe a
Prelude.Nothing,
      $sel:systemStatus:InstanceStatus' :: Maybe InstanceStatusSummary
systemStatus = forall a. Maybe a
Prelude.Nothing
    }

-- | The Availability Zone of the instance.
instanceStatus_availabilityZone :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
instanceStatus_availabilityZone :: Lens' InstanceStatus (Maybe Text)
instanceStatus_availabilityZone = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:InstanceStatus' :: InstanceStatus -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe Text
a -> InstanceStatus
s {$sel:availabilityZone:InstanceStatus' :: Maybe Text
availabilityZone = Maybe Text
a} :: InstanceStatus)

-- | Any scheduled events associated with the instance.
instanceStatus_events :: Lens.Lens' InstanceStatus (Prelude.Maybe [InstanceStatusEvent])
instanceStatus_events :: Lens' InstanceStatus (Maybe [InstanceStatusEvent])
instanceStatus_events = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe [InstanceStatusEvent]
events :: Maybe [InstanceStatusEvent]
$sel:events:InstanceStatus' :: InstanceStatus -> Maybe [InstanceStatusEvent]
events} -> Maybe [InstanceStatusEvent]
events) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe [InstanceStatusEvent]
a -> InstanceStatus
s {$sel:events:InstanceStatus' :: Maybe [InstanceStatusEvent]
events = Maybe [InstanceStatusEvent]
a} :: InstanceStatus) 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 ID of the instance.
instanceStatus_instanceId :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
instanceStatus_instanceId :: Lens' InstanceStatus (Maybe Text)
instanceStatus_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe Text
instanceId :: Maybe Text
$sel:instanceId:InstanceStatus' :: InstanceStatus -> Maybe Text
instanceId} -> Maybe Text
instanceId) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe Text
a -> InstanceStatus
s {$sel:instanceId:InstanceStatus' :: Maybe Text
instanceId = Maybe Text
a} :: InstanceStatus)

-- | The intended state of the instance. DescribeInstanceStatus requires that
-- an instance be in the @running@ state.
instanceStatus_instanceState :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceState)
instanceStatus_instanceState :: Lens' InstanceStatus (Maybe InstanceState)
instanceStatus_instanceState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe InstanceState
instanceState :: Maybe InstanceState
$sel:instanceState:InstanceStatus' :: InstanceStatus -> Maybe InstanceState
instanceState} -> Maybe InstanceState
instanceState) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe InstanceState
a -> InstanceStatus
s {$sel:instanceState:InstanceStatus' :: Maybe InstanceState
instanceState = Maybe InstanceState
a} :: InstanceStatus)

-- | Reports impaired functionality that stems from issues internal to the
-- instance, such as impaired reachability.
instanceStatus_instanceStatus :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceStatusSummary)
instanceStatus_instanceStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
instanceStatus_instanceStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe InstanceStatusSummary
instanceStatus :: Maybe InstanceStatusSummary
$sel:instanceStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
instanceStatus} -> Maybe InstanceStatusSummary
instanceStatus) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe InstanceStatusSummary
a -> InstanceStatus
s {$sel:instanceStatus:InstanceStatus' :: Maybe InstanceStatusSummary
instanceStatus = Maybe InstanceStatusSummary
a} :: InstanceStatus)

-- | The Amazon Resource Name (ARN) of the Outpost.
instanceStatus_outpostArn :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
instanceStatus_outpostArn :: Lens' InstanceStatus (Maybe Text)
instanceStatus_outpostArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe Text
outpostArn :: Maybe Text
$sel:outpostArn:InstanceStatus' :: InstanceStatus -> Maybe Text
outpostArn} -> Maybe Text
outpostArn) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe Text
a -> InstanceStatus
s {$sel:outpostArn:InstanceStatus' :: Maybe Text
outpostArn = Maybe Text
a} :: InstanceStatus)

-- | Reports impaired functionality that stems from issues related to the
-- systems that support an instance, such as hardware failures and network
-- connectivity problems.
instanceStatus_systemStatus :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceStatusSummary)
instanceStatus_systemStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
instanceStatus_systemStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStatus' {Maybe InstanceStatusSummary
systemStatus :: Maybe InstanceStatusSummary
$sel:systemStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
systemStatus} -> Maybe InstanceStatusSummary
systemStatus) (\s :: InstanceStatus
s@InstanceStatus' {} Maybe InstanceStatusSummary
a -> InstanceStatus
s {$sel:systemStatus:InstanceStatus' :: Maybe InstanceStatusSummary
systemStatus = Maybe InstanceStatusSummary
a} :: InstanceStatus)

instance Data.FromXML InstanceStatus where
  parseXML :: [Node] -> Either String InstanceStatus
parseXML [Node]
x =
    Maybe Text
-> Maybe [InstanceStatusEvent]
-> Maybe Text
-> Maybe InstanceState
-> Maybe InstanceStatusSummary
-> Maybe Text
-> Maybe InstanceStatusSummary
-> InstanceStatus
InstanceStatus'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"availabilityZone")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"eventsSet"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceState")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceStatus")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"outpostArn")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"systemStatus")

instance Prelude.Hashable InstanceStatus where
  hashWithSalt :: Int -> InstanceStatus -> Int
hashWithSalt Int
_salt InstanceStatus' {Maybe [InstanceStatusEvent]
Maybe Text
Maybe InstanceState
Maybe InstanceStatusSummary
systemStatus :: Maybe InstanceStatusSummary
outpostArn :: Maybe Text
instanceStatus :: Maybe InstanceStatusSummary
instanceState :: Maybe InstanceState
instanceId :: Maybe Text
events :: Maybe [InstanceStatusEvent]
availabilityZone :: Maybe Text
$sel:systemStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
$sel:outpostArn:InstanceStatus' :: InstanceStatus -> Maybe Text
$sel:instanceStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
$sel:instanceState:InstanceStatus' :: InstanceStatus -> Maybe InstanceState
$sel:instanceId:InstanceStatus' :: InstanceStatus -> Maybe Text
$sel:events:InstanceStatus' :: InstanceStatus -> Maybe [InstanceStatusEvent]
$sel:availabilityZone:InstanceStatus' :: InstanceStatus -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
availabilityZone
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [InstanceStatusEvent]
events
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
instanceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceState
instanceState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceStatusSummary
instanceStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
outpostArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceStatusSummary
systemStatus

instance Prelude.NFData InstanceStatus where
  rnf :: InstanceStatus -> ()
rnf InstanceStatus' {Maybe [InstanceStatusEvent]
Maybe Text
Maybe InstanceState
Maybe InstanceStatusSummary
systemStatus :: Maybe InstanceStatusSummary
outpostArn :: Maybe Text
instanceStatus :: Maybe InstanceStatusSummary
instanceState :: Maybe InstanceState
instanceId :: Maybe Text
events :: Maybe [InstanceStatusEvent]
availabilityZone :: Maybe Text
$sel:systemStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
$sel:outpostArn:InstanceStatus' :: InstanceStatus -> Maybe Text
$sel:instanceStatus:InstanceStatus' :: InstanceStatus -> Maybe InstanceStatusSummary
$sel:instanceState:InstanceStatus' :: InstanceStatus -> Maybe InstanceState
$sel:instanceId:InstanceStatus' :: InstanceStatus -> Maybe Text
$sel:events:InstanceStatus' :: InstanceStatus -> Maybe [InstanceStatusEvent]
$sel:availabilityZone:InstanceStatus' :: InstanceStatus -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
availabilityZone
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [InstanceStatusEvent]
events
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
instanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceState
instanceState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceStatusSummary
instanceStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
outpostArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceStatusSummary
systemStatus