{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# 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.GetInstanceUefiData
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- A binary representation of the UEFI variable store. Only non-volatile
-- variables are stored. This is a base64 encoded and zlib compressed
-- binary value that must be properly encoded.
--
-- When you use
-- <https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html register-image>
-- to create an AMI, you can create an exact copy of your variable store by
-- passing the UEFI data in the @UefiData@ parameter. You can modify the
-- UEFI data by using the
-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
-- GitHub. You can use the tool to convert the UEFI data into a
-- human-readable format (JSON), which you can inspect and modify, and then
-- convert back into the binary format to use with register-image.
--
-- For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
-- in the /Amazon EC2 User Guide/.
module Amazonka.EC2.GetInstanceUefiData
  ( -- * Creating a Request
    GetInstanceUefiData (..),
    newGetInstanceUefiData,

    -- * Request Lenses
    getInstanceUefiData_dryRun,
    getInstanceUefiData_instanceId,

    -- * Destructuring the Response
    GetInstanceUefiDataResponse (..),
    newGetInstanceUefiDataResponse,

    -- * Response Lenses
    getInstanceUefiDataResponse_instanceId,
    getInstanceUefiDataResponse_uefiData,
    getInstanceUefiDataResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetInstanceUefiData' smart constructor.
data GetInstanceUefiData = GetInstanceUefiData'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    GetInstanceUefiData -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the instance from which to retrieve the UEFI data.
    GetInstanceUefiData -> Text
instanceId :: Prelude.Text
  }
  deriving (GetInstanceUefiData -> GetInstanceUefiData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceUefiData -> GetInstanceUefiData -> Bool
$c/= :: GetInstanceUefiData -> GetInstanceUefiData -> Bool
== :: GetInstanceUefiData -> GetInstanceUefiData -> Bool
$c== :: GetInstanceUefiData -> GetInstanceUefiData -> Bool
Prelude.Eq, ReadPrec [GetInstanceUefiData]
ReadPrec GetInstanceUefiData
Int -> ReadS GetInstanceUefiData
ReadS [GetInstanceUefiData]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceUefiData]
$creadListPrec :: ReadPrec [GetInstanceUefiData]
readPrec :: ReadPrec GetInstanceUefiData
$creadPrec :: ReadPrec GetInstanceUefiData
readList :: ReadS [GetInstanceUefiData]
$creadList :: ReadS [GetInstanceUefiData]
readsPrec :: Int -> ReadS GetInstanceUefiData
$creadsPrec :: Int -> ReadS GetInstanceUefiData
Prelude.Read, Int -> GetInstanceUefiData -> ShowS
[GetInstanceUefiData] -> ShowS
GetInstanceUefiData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceUefiData] -> ShowS
$cshowList :: [GetInstanceUefiData] -> ShowS
show :: GetInstanceUefiData -> String
$cshow :: GetInstanceUefiData -> String
showsPrec :: Int -> GetInstanceUefiData -> ShowS
$cshowsPrec :: Int -> GetInstanceUefiData -> ShowS
Prelude.Show, forall x. Rep GetInstanceUefiData x -> GetInstanceUefiData
forall x. GetInstanceUefiData -> Rep GetInstanceUefiData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetInstanceUefiData x -> GetInstanceUefiData
$cfrom :: forall x. GetInstanceUefiData -> Rep GetInstanceUefiData x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceUefiData' 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:
--
-- 'dryRun', 'getInstanceUefiData_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'instanceId', 'getInstanceUefiData_instanceId' - The ID of the instance from which to retrieve the UEFI data.
newGetInstanceUefiData ::
  -- | 'instanceId'
  Prelude.Text ->
  GetInstanceUefiData
newGetInstanceUefiData :: Text -> GetInstanceUefiData
newGetInstanceUefiData Text
pInstanceId_ =
  GetInstanceUefiData'
    { $sel:dryRun:GetInstanceUefiData' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceId:GetInstanceUefiData' :: Text
instanceId = Text
pInstanceId_
    }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
getInstanceUefiData_dryRun :: Lens.Lens' GetInstanceUefiData (Prelude.Maybe Prelude.Bool)
getInstanceUefiData_dryRun :: Lens' GetInstanceUefiData (Maybe Bool)
getInstanceUefiData_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceUefiData' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:GetInstanceUefiData' :: GetInstanceUefiData -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: GetInstanceUefiData
s@GetInstanceUefiData' {} Maybe Bool
a -> GetInstanceUefiData
s {$sel:dryRun:GetInstanceUefiData' :: Maybe Bool
dryRun = Maybe Bool
a} :: GetInstanceUefiData)

-- | The ID of the instance from which to retrieve the UEFI data.
getInstanceUefiData_instanceId :: Lens.Lens' GetInstanceUefiData Prelude.Text
getInstanceUefiData_instanceId :: Lens' GetInstanceUefiData Text
getInstanceUefiData_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceUefiData' {Text
instanceId :: Text
$sel:instanceId:GetInstanceUefiData' :: GetInstanceUefiData -> Text
instanceId} -> Text
instanceId) (\s :: GetInstanceUefiData
s@GetInstanceUefiData' {} Text
a -> GetInstanceUefiData
s {$sel:instanceId:GetInstanceUefiData' :: Text
instanceId = Text
a} :: GetInstanceUefiData)

instance Core.AWSRequest GetInstanceUefiData where
  type
    AWSResponse GetInstanceUefiData =
      GetInstanceUefiDataResponse
  request :: (Service -> Service)
-> GetInstanceUefiData -> Request GetInstanceUefiData
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetInstanceUefiData
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetInstanceUefiData)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text -> Maybe Text -> Int -> GetInstanceUefiDataResponse
GetInstanceUefiDataResponse'
            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
"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
"uefiData")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable GetInstanceUefiData where
  hashWithSalt :: Int -> GetInstanceUefiData -> Int
hashWithSalt Int
_salt GetInstanceUefiData' {Maybe Bool
Text
instanceId :: Text
dryRun :: Maybe Bool
$sel:instanceId:GetInstanceUefiData' :: GetInstanceUefiData -> Text
$sel:dryRun:GetInstanceUefiData' :: GetInstanceUefiData -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceId

instance Prelude.NFData GetInstanceUefiData where
  rnf :: GetInstanceUefiData -> ()
rnf GetInstanceUefiData' {Maybe Bool
Text
instanceId :: Text
dryRun :: Maybe Bool
$sel:instanceId:GetInstanceUefiData' :: GetInstanceUefiData -> Text
$sel:dryRun:GetInstanceUefiData' :: GetInstanceUefiData -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
instanceId

instance Data.ToHeaders GetInstanceUefiData where
  toHeaders :: GetInstanceUefiData -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath GetInstanceUefiData where
  toPath :: GetInstanceUefiData -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery GetInstanceUefiData where
  toQuery :: GetInstanceUefiData -> QueryString
toQuery GetInstanceUefiData' {Maybe Bool
Text
instanceId :: Text
dryRun :: Maybe Bool
$sel:instanceId:GetInstanceUefiData' :: GetInstanceUefiData -> Text
$sel:dryRun:GetInstanceUefiData' :: GetInstanceUefiData -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"GetInstanceUefiData" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"InstanceId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
instanceId
      ]

-- | /See:/ 'newGetInstanceUefiDataResponse' smart constructor.
data GetInstanceUefiDataResponse = GetInstanceUefiDataResponse'
  { -- | The ID of the instance from which to retrieve the UEFI data.
    GetInstanceUefiDataResponse -> Maybe Text
instanceId :: Prelude.Maybe Prelude.Text,
    -- | Base64 representation of the non-volatile UEFI variable store.
    GetInstanceUefiDataResponse -> Maybe Text
uefiData :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetInstanceUefiDataResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetInstanceUefiDataResponse -> GetInstanceUefiDataResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceUefiDataResponse -> GetInstanceUefiDataResponse -> Bool
$c/= :: GetInstanceUefiDataResponse -> GetInstanceUefiDataResponse -> Bool
== :: GetInstanceUefiDataResponse -> GetInstanceUefiDataResponse -> Bool
$c== :: GetInstanceUefiDataResponse -> GetInstanceUefiDataResponse -> Bool
Prelude.Eq, ReadPrec [GetInstanceUefiDataResponse]
ReadPrec GetInstanceUefiDataResponse
Int -> ReadS GetInstanceUefiDataResponse
ReadS [GetInstanceUefiDataResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceUefiDataResponse]
$creadListPrec :: ReadPrec [GetInstanceUefiDataResponse]
readPrec :: ReadPrec GetInstanceUefiDataResponse
$creadPrec :: ReadPrec GetInstanceUefiDataResponse
readList :: ReadS [GetInstanceUefiDataResponse]
$creadList :: ReadS [GetInstanceUefiDataResponse]
readsPrec :: Int -> ReadS GetInstanceUefiDataResponse
$creadsPrec :: Int -> ReadS GetInstanceUefiDataResponse
Prelude.Read, Int -> GetInstanceUefiDataResponse -> ShowS
[GetInstanceUefiDataResponse] -> ShowS
GetInstanceUefiDataResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceUefiDataResponse] -> ShowS
$cshowList :: [GetInstanceUefiDataResponse] -> ShowS
show :: GetInstanceUefiDataResponse -> String
$cshow :: GetInstanceUefiDataResponse -> String
showsPrec :: Int -> GetInstanceUefiDataResponse -> ShowS
$cshowsPrec :: Int -> GetInstanceUefiDataResponse -> ShowS
Prelude.Show, forall x.
Rep GetInstanceUefiDataResponse x -> GetInstanceUefiDataResponse
forall x.
GetInstanceUefiDataResponse -> Rep GetInstanceUefiDataResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetInstanceUefiDataResponse x -> GetInstanceUefiDataResponse
$cfrom :: forall x.
GetInstanceUefiDataResponse -> Rep GetInstanceUefiDataResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceUefiDataResponse' 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:
--
-- 'instanceId', 'getInstanceUefiDataResponse_instanceId' - The ID of the instance from which to retrieve the UEFI data.
--
-- 'uefiData', 'getInstanceUefiDataResponse_uefiData' - Base64 representation of the non-volatile UEFI variable store.
--
-- 'httpStatus', 'getInstanceUefiDataResponse_httpStatus' - The response's http status code.
newGetInstanceUefiDataResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetInstanceUefiDataResponse
newGetInstanceUefiDataResponse :: Int -> GetInstanceUefiDataResponse
newGetInstanceUefiDataResponse Int
pHttpStatus_ =
  GetInstanceUefiDataResponse'
    { $sel:instanceId:GetInstanceUefiDataResponse' :: Maybe Text
instanceId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:uefiData:GetInstanceUefiDataResponse' :: Maybe Text
uefiData = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetInstanceUefiDataResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ID of the instance from which to retrieve the UEFI data.
getInstanceUefiDataResponse_instanceId :: Lens.Lens' GetInstanceUefiDataResponse (Prelude.Maybe Prelude.Text)
getInstanceUefiDataResponse_instanceId :: Lens' GetInstanceUefiDataResponse (Maybe Text)
getInstanceUefiDataResponse_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceUefiDataResponse' {Maybe Text
instanceId :: Maybe Text
$sel:instanceId:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Maybe Text
instanceId} -> Maybe Text
instanceId) (\s :: GetInstanceUefiDataResponse
s@GetInstanceUefiDataResponse' {} Maybe Text
a -> GetInstanceUefiDataResponse
s {$sel:instanceId:GetInstanceUefiDataResponse' :: Maybe Text
instanceId = Maybe Text
a} :: GetInstanceUefiDataResponse)

-- | Base64 representation of the non-volatile UEFI variable store.
getInstanceUefiDataResponse_uefiData :: Lens.Lens' GetInstanceUefiDataResponse (Prelude.Maybe Prelude.Text)
getInstanceUefiDataResponse_uefiData :: Lens' GetInstanceUefiDataResponse (Maybe Text)
getInstanceUefiDataResponse_uefiData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceUefiDataResponse' {Maybe Text
uefiData :: Maybe Text
$sel:uefiData:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Maybe Text
uefiData} -> Maybe Text
uefiData) (\s :: GetInstanceUefiDataResponse
s@GetInstanceUefiDataResponse' {} Maybe Text
a -> GetInstanceUefiDataResponse
s {$sel:uefiData:GetInstanceUefiDataResponse' :: Maybe Text
uefiData = Maybe Text
a} :: GetInstanceUefiDataResponse)

-- | The response's http status code.
getInstanceUefiDataResponse_httpStatus :: Lens.Lens' GetInstanceUefiDataResponse Prelude.Int
getInstanceUefiDataResponse_httpStatus :: Lens' GetInstanceUefiDataResponse Int
getInstanceUefiDataResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceUefiDataResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetInstanceUefiDataResponse
s@GetInstanceUefiDataResponse' {} Int
a -> GetInstanceUefiDataResponse
s {$sel:httpStatus:GetInstanceUefiDataResponse' :: Int
httpStatus = Int
a} :: GetInstanceUefiDataResponse)

instance Prelude.NFData GetInstanceUefiDataResponse where
  rnf :: GetInstanceUefiDataResponse -> ()
rnf GetInstanceUefiDataResponse' {Int
Maybe Text
httpStatus :: Int
uefiData :: Maybe Text
instanceId :: Maybe Text
$sel:httpStatus:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Int
$sel:uefiData:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Maybe Text
$sel:instanceId:GetInstanceUefiDataResponse' :: GetInstanceUefiDataResponse -> Maybe Text
..} =
    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 Text
uefiData
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus