{-# 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.FSx.CreateStorageVirtualMachine
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a storage virtual machine (SVM) for an Amazon FSx for ONTAP file
-- system.
module Amazonka.FSx.CreateStorageVirtualMachine
  ( -- * Creating a Request
    CreateStorageVirtualMachine (..),
    newCreateStorageVirtualMachine,

    -- * Request Lenses
    createStorageVirtualMachine_activeDirectoryConfiguration,
    createStorageVirtualMachine_clientRequestToken,
    createStorageVirtualMachine_rootVolumeSecurityStyle,
    createStorageVirtualMachine_svmAdminPassword,
    createStorageVirtualMachine_tags,
    createStorageVirtualMachine_fileSystemId,
    createStorageVirtualMachine_name,

    -- * Destructuring the Response
    CreateStorageVirtualMachineResponse (..),
    newCreateStorageVirtualMachineResponse,

    -- * Response Lenses
    createStorageVirtualMachineResponse_storageVirtualMachine,
    createStorageVirtualMachineResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateStorageVirtualMachine' smart constructor.
data CreateStorageVirtualMachine = CreateStorageVirtualMachine'
  { -- | Describes the self-managed Microsoft Active Directory to which you want
    -- to join the SVM. Joining an Active Directory provides user
    -- authentication and access control for SMB clients, including Microsoft
    -- Windows and macOS client accessing the file system.
    CreateStorageVirtualMachine
-> Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration :: Prelude.Maybe CreateSvmActiveDirectoryConfiguration,
    CreateStorageVirtualMachine -> Maybe Text
clientRequestToken :: Prelude.Maybe Prelude.Text,
    -- | The security style of the root volume of the SVM. Specify one of the
    -- following values:
    --
    -- -   @UNIX@ if the file system is managed by a UNIX administrator, the
    --     majority of users are NFS clients, and an application accessing the
    --     data uses a UNIX user as the service account.
    --
    -- -   @NTFS@ if the file system is managed by a Windows administrator, the
    --     majority of users are SMB clients, and an application accessing the
    --     data uses a Windows user as the service account.
    --
    -- -   @MIXED@ if the file system is managed by both UNIX and Windows
    --     administrators and users consist of both NFS and SMB clients.
    CreateStorageVirtualMachine
-> Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle :: Prelude.Maybe StorageVirtualMachineRootVolumeSecurityStyle,
    -- | The password to use when managing the SVM using the NetApp ONTAP CLI or
    -- REST API. If you do not specify a password, you can still use the file
    -- system\'s @fsxadmin@ user to manage the SVM.
    CreateStorageVirtualMachine -> Maybe (Sensitive Text)
svmAdminPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    CreateStorageVirtualMachine -> Maybe (NonEmpty Tag)
tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
    CreateStorageVirtualMachine -> Text
fileSystemId :: Prelude.Text,
    -- | The name of the SVM.
    CreateStorageVirtualMachine -> Text
name :: Prelude.Text
  }
  deriving (CreateStorageVirtualMachine -> CreateStorageVirtualMachine -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateStorageVirtualMachine -> CreateStorageVirtualMachine -> Bool
$c/= :: CreateStorageVirtualMachine -> CreateStorageVirtualMachine -> Bool
== :: CreateStorageVirtualMachine -> CreateStorageVirtualMachine -> Bool
$c== :: CreateStorageVirtualMachine -> CreateStorageVirtualMachine -> Bool
Prelude.Eq, Int -> CreateStorageVirtualMachine -> ShowS
[CreateStorageVirtualMachine] -> ShowS
CreateStorageVirtualMachine -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateStorageVirtualMachine] -> ShowS
$cshowList :: [CreateStorageVirtualMachine] -> ShowS
show :: CreateStorageVirtualMachine -> String
$cshow :: CreateStorageVirtualMachine -> String
showsPrec :: Int -> CreateStorageVirtualMachine -> ShowS
$cshowsPrec :: Int -> CreateStorageVirtualMachine -> ShowS
Prelude.Show, forall x.
Rep CreateStorageVirtualMachine x -> CreateStorageVirtualMachine
forall x.
CreateStorageVirtualMachine -> Rep CreateStorageVirtualMachine x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateStorageVirtualMachine x -> CreateStorageVirtualMachine
$cfrom :: forall x.
CreateStorageVirtualMachine -> Rep CreateStorageVirtualMachine x
Prelude.Generic)

-- |
-- Create a value of 'CreateStorageVirtualMachine' 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:
--
-- 'activeDirectoryConfiguration', 'createStorageVirtualMachine_activeDirectoryConfiguration' - Describes the self-managed Microsoft Active Directory to which you want
-- to join the SVM. Joining an Active Directory provides user
-- authentication and access control for SMB clients, including Microsoft
-- Windows and macOS client accessing the file system.
--
-- 'clientRequestToken', 'createStorageVirtualMachine_clientRequestToken' - Undocumented member.
--
-- 'rootVolumeSecurityStyle', 'createStorageVirtualMachine_rootVolumeSecurityStyle' - The security style of the root volume of the SVM. Specify one of the
-- following values:
--
-- -   @UNIX@ if the file system is managed by a UNIX administrator, the
--     majority of users are NFS clients, and an application accessing the
--     data uses a UNIX user as the service account.
--
-- -   @NTFS@ if the file system is managed by a Windows administrator, the
--     majority of users are SMB clients, and an application accessing the
--     data uses a Windows user as the service account.
--
-- -   @MIXED@ if the file system is managed by both UNIX and Windows
--     administrators and users consist of both NFS and SMB clients.
--
-- 'svmAdminPassword', 'createStorageVirtualMachine_svmAdminPassword' - The password to use when managing the SVM using the NetApp ONTAP CLI or
-- REST API. If you do not specify a password, you can still use the file
-- system\'s @fsxadmin@ user to manage the SVM.
--
-- 'tags', 'createStorageVirtualMachine_tags' - Undocumented member.
--
-- 'fileSystemId', 'createStorageVirtualMachine_fileSystemId' - Undocumented member.
--
-- 'name', 'createStorageVirtualMachine_name' - The name of the SVM.
newCreateStorageVirtualMachine ::
  -- | 'fileSystemId'
  Prelude.Text ->
  -- | 'name'
  Prelude.Text ->
  CreateStorageVirtualMachine
newCreateStorageVirtualMachine :: Text -> Text -> CreateStorageVirtualMachine
newCreateStorageVirtualMachine Text
pFileSystemId_ Text
pName_ =
  CreateStorageVirtualMachine'
    { $sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:clientRequestToken:CreateStorageVirtualMachine' :: Maybe Text
clientRequestToken = forall a. Maybe a
Prelude.Nothing,
      $sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle = forall a. Maybe a
Prelude.Nothing,
      $sel:svmAdminPassword:CreateStorageVirtualMachine' :: Maybe (Sensitive Text)
svmAdminPassword = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateStorageVirtualMachine' :: Maybe (NonEmpty Tag)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:fileSystemId:CreateStorageVirtualMachine' :: Text
fileSystemId = Text
pFileSystemId_,
      $sel:name:CreateStorageVirtualMachine' :: Text
name = Text
pName_
    }

-- | Describes the self-managed Microsoft Active Directory to which you want
-- to join the SVM. Joining an Active Directory provides user
-- authentication and access control for SMB clients, including Microsoft
-- Windows and macOS client accessing the file system.
createStorageVirtualMachine_activeDirectoryConfiguration :: Lens.Lens' CreateStorageVirtualMachine (Prelude.Maybe CreateSvmActiveDirectoryConfiguration)
createStorageVirtualMachine_activeDirectoryConfiguration :: Lens'
  CreateStorageVirtualMachine
  (Maybe CreateSvmActiveDirectoryConfiguration)
createStorageVirtualMachine_activeDirectoryConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration :: Maybe CreateSvmActiveDirectoryConfiguration
$sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration} -> Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Maybe CreateSvmActiveDirectoryConfiguration
a -> CreateStorageVirtualMachine
s {$sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration = Maybe CreateSvmActiveDirectoryConfiguration
a} :: CreateStorageVirtualMachine)

-- | Undocumented member.
createStorageVirtualMachine_clientRequestToken :: Lens.Lens' CreateStorageVirtualMachine (Prelude.Maybe Prelude.Text)
createStorageVirtualMachine_clientRequestToken :: Lens' CreateStorageVirtualMachine (Maybe Text)
createStorageVirtualMachine_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Maybe Text
clientRequestToken :: Maybe Text
$sel:clientRequestToken:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe Text
clientRequestToken} -> Maybe Text
clientRequestToken) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Maybe Text
a -> CreateStorageVirtualMachine
s {$sel:clientRequestToken:CreateStorageVirtualMachine' :: Maybe Text
clientRequestToken = Maybe Text
a} :: CreateStorageVirtualMachine)

-- | The security style of the root volume of the SVM. Specify one of the
-- following values:
--
-- -   @UNIX@ if the file system is managed by a UNIX administrator, the
--     majority of users are NFS clients, and an application accessing the
--     data uses a UNIX user as the service account.
--
-- -   @NTFS@ if the file system is managed by a Windows administrator, the
--     majority of users are SMB clients, and an application accessing the
--     data uses a Windows user as the service account.
--
-- -   @MIXED@ if the file system is managed by both UNIX and Windows
--     administrators and users consist of both NFS and SMB clients.
createStorageVirtualMachine_rootVolumeSecurityStyle :: Lens.Lens' CreateStorageVirtualMachine (Prelude.Maybe StorageVirtualMachineRootVolumeSecurityStyle)
createStorageVirtualMachine_rootVolumeSecurityStyle :: Lens'
  CreateStorageVirtualMachine
  (Maybe StorageVirtualMachineRootVolumeSecurityStyle)
createStorageVirtualMachine_rootVolumeSecurityStyle = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
$sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle} -> Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Maybe StorageVirtualMachineRootVolumeSecurityStyle
a -> CreateStorageVirtualMachine
s {$sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle = Maybe StorageVirtualMachineRootVolumeSecurityStyle
a} :: CreateStorageVirtualMachine)

-- | The password to use when managing the SVM using the NetApp ONTAP CLI or
-- REST API. If you do not specify a password, you can still use the file
-- system\'s @fsxadmin@ user to manage the SVM.
createStorageVirtualMachine_svmAdminPassword :: Lens.Lens' CreateStorageVirtualMachine (Prelude.Maybe Prelude.Text)
createStorageVirtualMachine_svmAdminPassword :: Lens' CreateStorageVirtualMachine (Maybe Text)
createStorageVirtualMachine_svmAdminPassword = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Maybe (Sensitive Text)
svmAdminPassword :: Maybe (Sensitive Text)
$sel:svmAdminPassword:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (Sensitive Text)
svmAdminPassword} -> Maybe (Sensitive Text)
svmAdminPassword) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Maybe (Sensitive Text)
a -> CreateStorageVirtualMachine
s {$sel:svmAdminPassword:CreateStorageVirtualMachine' :: Maybe (Sensitive Text)
svmAdminPassword = Maybe (Sensitive Text)
a} :: CreateStorageVirtualMachine) 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. Iso' (Sensitive a) a
Data._Sensitive

-- | Undocumented member.
createStorageVirtualMachine_tags :: Lens.Lens' CreateStorageVirtualMachine (Prelude.Maybe (Prelude.NonEmpty Tag))
createStorageVirtualMachine_tags :: Lens' CreateStorageVirtualMachine (Maybe (NonEmpty Tag))
createStorageVirtualMachine_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Maybe (NonEmpty Tag)
tags :: Maybe (NonEmpty Tag)
$sel:tags:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (NonEmpty Tag)
tags} -> Maybe (NonEmpty Tag)
tags) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Maybe (NonEmpty Tag)
a -> CreateStorageVirtualMachine
s {$sel:tags:CreateStorageVirtualMachine' :: Maybe (NonEmpty Tag)
tags = Maybe (NonEmpty Tag)
a} :: CreateStorageVirtualMachine) 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

-- | Undocumented member.
createStorageVirtualMachine_fileSystemId :: Lens.Lens' CreateStorageVirtualMachine Prelude.Text
createStorageVirtualMachine_fileSystemId :: Lens' CreateStorageVirtualMachine Text
createStorageVirtualMachine_fileSystemId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Text
fileSystemId :: Text
$sel:fileSystemId:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
fileSystemId} -> Text
fileSystemId) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Text
a -> CreateStorageVirtualMachine
s {$sel:fileSystemId:CreateStorageVirtualMachine' :: Text
fileSystemId = Text
a} :: CreateStorageVirtualMachine)

-- | The name of the SVM.
createStorageVirtualMachine_name :: Lens.Lens' CreateStorageVirtualMachine Prelude.Text
createStorageVirtualMachine_name :: Lens' CreateStorageVirtualMachine Text
createStorageVirtualMachine_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachine' {Text
name :: Text
$sel:name:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
name} -> Text
name) (\s :: CreateStorageVirtualMachine
s@CreateStorageVirtualMachine' {} Text
a -> CreateStorageVirtualMachine
s {$sel:name:CreateStorageVirtualMachine' :: Text
name = Text
a} :: CreateStorageVirtualMachine)

instance Core.AWSRequest CreateStorageVirtualMachine where
  type
    AWSResponse CreateStorageVirtualMachine =
      CreateStorageVirtualMachineResponse
  request :: (Service -> Service)
-> CreateStorageVirtualMachine
-> Request CreateStorageVirtualMachine
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateStorageVirtualMachine
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateStorageVirtualMachine)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe StorageVirtualMachine
-> Int -> CreateStorageVirtualMachineResponse
CreateStorageVirtualMachineResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"StorageVirtualMachine")
            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 CreateStorageVirtualMachine where
  hashWithSalt :: Int -> CreateStorageVirtualMachine -> Int
hashWithSalt Int
_salt CreateStorageVirtualMachine' {Maybe (NonEmpty Tag)
Maybe Text
Maybe (Sensitive Text)
Maybe CreateSvmActiveDirectoryConfiguration
Maybe StorageVirtualMachineRootVolumeSecurityStyle
Text
name :: Text
fileSystemId :: Text
tags :: Maybe (NonEmpty Tag)
svmAdminPassword :: Maybe (Sensitive Text)
rootVolumeSecurityStyle :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
clientRequestToken :: Maybe Text
activeDirectoryConfiguration :: Maybe CreateSvmActiveDirectoryConfiguration
$sel:name:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:fileSystemId:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:tags:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (NonEmpty Tag)
$sel:svmAdminPassword:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (Sensitive Text)
$sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe StorageVirtualMachineRootVolumeSecurityStyle
$sel:clientRequestToken:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe Text
$sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe CreateSvmActiveDirectoryConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientRequestToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
svmAdminPassword
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Tag)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
fileSystemId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name

instance Prelude.NFData CreateStorageVirtualMachine where
  rnf :: CreateStorageVirtualMachine -> ()
rnf CreateStorageVirtualMachine' {Maybe (NonEmpty Tag)
Maybe Text
Maybe (Sensitive Text)
Maybe CreateSvmActiveDirectoryConfiguration
Maybe StorageVirtualMachineRootVolumeSecurityStyle
Text
name :: Text
fileSystemId :: Text
tags :: Maybe (NonEmpty Tag)
svmAdminPassword :: Maybe (Sensitive Text)
rootVolumeSecurityStyle :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
clientRequestToken :: Maybe Text
activeDirectoryConfiguration :: Maybe CreateSvmActiveDirectoryConfiguration
$sel:name:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:fileSystemId:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:tags:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (NonEmpty Tag)
$sel:svmAdminPassword:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (Sensitive Text)
$sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe StorageVirtualMachineRootVolumeSecurityStyle
$sel:clientRequestToken:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe Text
$sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe CreateSvmActiveDirectoryConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientRequestToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
svmAdminPassword
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Tag)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
fileSystemId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name

instance Data.ToHeaders CreateStorageVirtualMachine where
  toHeaders :: CreateStorageVirtualMachine -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"AWSSimbaAPIService_v20180301.CreateStorageVirtualMachine" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateStorageVirtualMachine where
  toJSON :: CreateStorageVirtualMachine -> Value
toJSON CreateStorageVirtualMachine' {Maybe (NonEmpty Tag)
Maybe Text
Maybe (Sensitive Text)
Maybe CreateSvmActiveDirectoryConfiguration
Maybe StorageVirtualMachineRootVolumeSecurityStyle
Text
name :: Text
fileSystemId :: Text
tags :: Maybe (NonEmpty Tag)
svmAdminPassword :: Maybe (Sensitive Text)
rootVolumeSecurityStyle :: Maybe StorageVirtualMachineRootVolumeSecurityStyle
clientRequestToken :: Maybe Text
activeDirectoryConfiguration :: Maybe CreateSvmActiveDirectoryConfiguration
$sel:name:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:fileSystemId:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Text
$sel:tags:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (NonEmpty Tag)
$sel:svmAdminPassword:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe (Sensitive Text)
$sel:rootVolumeSecurityStyle:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe StorageVirtualMachineRootVolumeSecurityStyle
$sel:clientRequestToken:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine -> Maybe Text
$sel:activeDirectoryConfiguration:CreateStorageVirtualMachine' :: CreateStorageVirtualMachine
-> Maybe CreateSvmActiveDirectoryConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ActiveDirectoryConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe CreateSvmActiveDirectoryConfiguration
activeDirectoryConfiguration,
            (Key
"ClientRequestToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
clientRequestToken,
            (Key
"RootVolumeSecurityStyle" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe StorageVirtualMachineRootVolumeSecurityStyle
rootVolumeSecurityStyle,
            (Key
"SvmAdminPassword" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (Sensitive Text)
svmAdminPassword,
            (Key
"Tags" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty Tag)
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"FileSystemId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
fileSystemId),
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name)
          ]
      )

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

instance Data.ToQuery CreateStorageVirtualMachine where
  toQuery :: CreateStorageVirtualMachine -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newCreateStorageVirtualMachineResponse' smart constructor.
data CreateStorageVirtualMachineResponse = CreateStorageVirtualMachineResponse'
  { -- | Returned after a successful @CreateStorageVirtualMachine@ operation;
    -- describes the SVM just created.
    CreateStorageVirtualMachineResponse -> Maybe StorageVirtualMachine
storageVirtualMachine :: Prelude.Maybe StorageVirtualMachine,
    -- | The response's http status code.
    CreateStorageVirtualMachineResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateStorageVirtualMachineResponse
-> CreateStorageVirtualMachineResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateStorageVirtualMachineResponse
-> CreateStorageVirtualMachineResponse -> Bool
$c/= :: CreateStorageVirtualMachineResponse
-> CreateStorageVirtualMachineResponse -> Bool
== :: CreateStorageVirtualMachineResponse
-> CreateStorageVirtualMachineResponse -> Bool
$c== :: CreateStorageVirtualMachineResponse
-> CreateStorageVirtualMachineResponse -> Bool
Prelude.Eq, ReadPrec [CreateStorageVirtualMachineResponse]
ReadPrec CreateStorageVirtualMachineResponse
Int -> ReadS CreateStorageVirtualMachineResponse
ReadS [CreateStorageVirtualMachineResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateStorageVirtualMachineResponse]
$creadListPrec :: ReadPrec [CreateStorageVirtualMachineResponse]
readPrec :: ReadPrec CreateStorageVirtualMachineResponse
$creadPrec :: ReadPrec CreateStorageVirtualMachineResponse
readList :: ReadS [CreateStorageVirtualMachineResponse]
$creadList :: ReadS [CreateStorageVirtualMachineResponse]
readsPrec :: Int -> ReadS CreateStorageVirtualMachineResponse
$creadsPrec :: Int -> ReadS CreateStorageVirtualMachineResponse
Prelude.Read, Int -> CreateStorageVirtualMachineResponse -> ShowS
[CreateStorageVirtualMachineResponse] -> ShowS
CreateStorageVirtualMachineResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateStorageVirtualMachineResponse] -> ShowS
$cshowList :: [CreateStorageVirtualMachineResponse] -> ShowS
show :: CreateStorageVirtualMachineResponse -> String
$cshow :: CreateStorageVirtualMachineResponse -> String
showsPrec :: Int -> CreateStorageVirtualMachineResponse -> ShowS
$cshowsPrec :: Int -> CreateStorageVirtualMachineResponse -> ShowS
Prelude.Show, forall x.
Rep CreateStorageVirtualMachineResponse x
-> CreateStorageVirtualMachineResponse
forall x.
CreateStorageVirtualMachineResponse
-> Rep CreateStorageVirtualMachineResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateStorageVirtualMachineResponse x
-> CreateStorageVirtualMachineResponse
$cfrom :: forall x.
CreateStorageVirtualMachineResponse
-> Rep CreateStorageVirtualMachineResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateStorageVirtualMachineResponse' 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:
--
-- 'storageVirtualMachine', 'createStorageVirtualMachineResponse_storageVirtualMachine' - Returned after a successful @CreateStorageVirtualMachine@ operation;
-- describes the SVM just created.
--
-- 'httpStatus', 'createStorageVirtualMachineResponse_httpStatus' - The response's http status code.
newCreateStorageVirtualMachineResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateStorageVirtualMachineResponse
newCreateStorageVirtualMachineResponse :: Int -> CreateStorageVirtualMachineResponse
newCreateStorageVirtualMachineResponse Int
pHttpStatus_ =
  CreateStorageVirtualMachineResponse'
    { $sel:storageVirtualMachine:CreateStorageVirtualMachineResponse' :: Maybe StorageVirtualMachine
storageVirtualMachine =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateStorageVirtualMachineResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Returned after a successful @CreateStorageVirtualMachine@ operation;
-- describes the SVM just created.
createStorageVirtualMachineResponse_storageVirtualMachine :: Lens.Lens' CreateStorageVirtualMachineResponse (Prelude.Maybe StorageVirtualMachine)
createStorageVirtualMachineResponse_storageVirtualMachine :: Lens'
  CreateStorageVirtualMachineResponse (Maybe StorageVirtualMachine)
createStorageVirtualMachineResponse_storageVirtualMachine = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateStorageVirtualMachineResponse' {Maybe StorageVirtualMachine
storageVirtualMachine :: Maybe StorageVirtualMachine
$sel:storageVirtualMachine:CreateStorageVirtualMachineResponse' :: CreateStorageVirtualMachineResponse -> Maybe StorageVirtualMachine
storageVirtualMachine} -> Maybe StorageVirtualMachine
storageVirtualMachine) (\s :: CreateStorageVirtualMachineResponse
s@CreateStorageVirtualMachineResponse' {} Maybe StorageVirtualMachine
a -> CreateStorageVirtualMachineResponse
s {$sel:storageVirtualMachine:CreateStorageVirtualMachineResponse' :: Maybe StorageVirtualMachine
storageVirtualMachine = Maybe StorageVirtualMachine
a} :: CreateStorageVirtualMachineResponse)

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

instance
  Prelude.NFData
    CreateStorageVirtualMachineResponse
  where
  rnf :: CreateStorageVirtualMachineResponse -> ()
rnf CreateStorageVirtualMachineResponse' {Int
Maybe StorageVirtualMachine
httpStatus :: Int
storageVirtualMachine :: Maybe StorageVirtualMachine
$sel:httpStatus:CreateStorageVirtualMachineResponse' :: CreateStorageVirtualMachineResponse -> Int
$sel:storageVirtualMachine:CreateStorageVirtualMachineResponse' :: CreateStorageVirtualMachineResponse -> Maybe StorageVirtualMachine
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe StorageVirtualMachine
storageVirtualMachine
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus