packages feed

amazonka-ec2-2.0: gen/Amazonka/EC2/ModifyNetworkInterfaceAttribute.hs

{-# 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.ModifyNetworkInterfaceAttribute
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies the specified network interface attribute. You can specify only
-- one attribute at a time. You can use this action to attach and detach
-- security groups from an existing EC2 instance.
module Amazonka.EC2.ModifyNetworkInterfaceAttribute
  ( -- * Creating a Request
    ModifyNetworkInterfaceAttribute (..),
    newModifyNetworkInterfaceAttribute,

    -- * Request Lenses
    modifyNetworkInterfaceAttribute_attachment,
    modifyNetworkInterfaceAttribute_description,
    modifyNetworkInterfaceAttribute_dryRun,
    modifyNetworkInterfaceAttribute_enaSrdSpecification,
    modifyNetworkInterfaceAttribute_groups,
    modifyNetworkInterfaceAttribute_sourceDestCheck,
    modifyNetworkInterfaceAttribute_networkInterfaceId,

    -- * Destructuring the Response
    ModifyNetworkInterfaceAttributeResponse (..),
    newModifyNetworkInterfaceAttributeResponse,
  )
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

-- | Contains the parameters for ModifyNetworkInterfaceAttribute.
--
-- /See:/ 'newModifyNetworkInterfaceAttribute' smart constructor.
data ModifyNetworkInterfaceAttribute = ModifyNetworkInterfaceAttribute'
  { -- | Information about the interface attachment. If modifying the
    -- @delete on termination@ attribute, you must specify the ID of the
    -- interface attachment.
    attachment :: Prelude.Maybe NetworkInterfaceAttachmentChanges,
    -- | A description for the network interface.
    description :: Prelude.Maybe AttributeValue,
    -- | 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@.
    dryRun :: Prelude.Maybe Prelude.Bool,
    -- | Updates the ENA Express configuration for the network interface that’s
    -- attached to the instance.
    enaSrdSpecification :: Prelude.Maybe EnaSrdSpecification,
    -- | Changes the security groups for the network interface. The new set of
    -- groups you specify replaces the current set. You must specify at least
    -- one group, even if it\'s just the default security group in the VPC. You
    -- must specify the ID of the security group, not the name.
    groups :: Prelude.Maybe [Prelude.Text],
    -- | Enable or disable source\/destination checks, which ensure that the
    -- instance is either the source or the destination of any traffic that it
    -- receives. If the value is @true@, source\/destination checks are
    -- enabled; otherwise, they are disabled. The default value is @true@. You
    -- must disable source\/destination checks if the instance runs services
    -- such as network address translation, routing, or firewalls.
    sourceDestCheck :: Prelude.Maybe AttributeBooleanValue,
    -- | The ID of the network interface.
    networkInterfaceId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ModifyNetworkInterfaceAttribute' 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:
--
-- 'attachment', 'modifyNetworkInterfaceAttribute_attachment' - Information about the interface attachment. If modifying the
-- @delete on termination@ attribute, you must specify the ID of the
-- interface attachment.
--
-- 'description', 'modifyNetworkInterfaceAttribute_description' - A description for the network interface.
--
-- 'dryRun', 'modifyNetworkInterfaceAttribute_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@.
--
-- 'enaSrdSpecification', 'modifyNetworkInterfaceAttribute_enaSrdSpecification' - Updates the ENA Express configuration for the network interface that’s
-- attached to the instance.
--
-- 'groups', 'modifyNetworkInterfaceAttribute_groups' - Changes the security groups for the network interface. The new set of
-- groups you specify replaces the current set. You must specify at least
-- one group, even if it\'s just the default security group in the VPC. You
-- must specify the ID of the security group, not the name.
--
-- 'sourceDestCheck', 'modifyNetworkInterfaceAttribute_sourceDestCheck' - Enable or disable source\/destination checks, which ensure that the
-- instance is either the source or the destination of any traffic that it
-- receives. If the value is @true@, source\/destination checks are
-- enabled; otherwise, they are disabled. The default value is @true@. You
-- must disable source\/destination checks if the instance runs services
-- such as network address translation, routing, or firewalls.
--
-- 'networkInterfaceId', 'modifyNetworkInterfaceAttribute_networkInterfaceId' - The ID of the network interface.
newModifyNetworkInterfaceAttribute ::
  -- | 'networkInterfaceId'
  Prelude.Text ->
  ModifyNetworkInterfaceAttribute
newModifyNetworkInterfaceAttribute
  pNetworkInterfaceId_ =
    ModifyNetworkInterfaceAttribute'
      { attachment =
          Prelude.Nothing,
        description = Prelude.Nothing,
        dryRun = Prelude.Nothing,
        enaSrdSpecification = Prelude.Nothing,
        groups = Prelude.Nothing,
        sourceDestCheck = Prelude.Nothing,
        networkInterfaceId = pNetworkInterfaceId_
      }

-- | Information about the interface attachment. If modifying the
-- @delete on termination@ attribute, you must specify the ID of the
-- interface attachment.
modifyNetworkInterfaceAttribute_attachment :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe NetworkInterfaceAttachmentChanges)
modifyNetworkInterfaceAttribute_attachment = Lens.lens (\ModifyNetworkInterfaceAttribute' {attachment} -> attachment) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {attachment = a} :: ModifyNetworkInterfaceAttribute)

-- | A description for the network interface.
modifyNetworkInterfaceAttribute_description :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe AttributeValue)
modifyNetworkInterfaceAttribute_description = Lens.lens (\ModifyNetworkInterfaceAttribute' {description} -> description) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {description = a} :: ModifyNetworkInterfaceAttribute)

-- | 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@.
modifyNetworkInterfaceAttribute_dryRun :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe Prelude.Bool)
modifyNetworkInterfaceAttribute_dryRun = Lens.lens (\ModifyNetworkInterfaceAttribute' {dryRun} -> dryRun) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {dryRun = a} :: ModifyNetworkInterfaceAttribute)

-- | Updates the ENA Express configuration for the network interface that’s
-- attached to the instance.
modifyNetworkInterfaceAttribute_enaSrdSpecification :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe EnaSrdSpecification)
modifyNetworkInterfaceAttribute_enaSrdSpecification = Lens.lens (\ModifyNetworkInterfaceAttribute' {enaSrdSpecification} -> enaSrdSpecification) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {enaSrdSpecification = a} :: ModifyNetworkInterfaceAttribute)

-- | Changes the security groups for the network interface. The new set of
-- groups you specify replaces the current set. You must specify at least
-- one group, even if it\'s just the default security group in the VPC. You
-- must specify the ID of the security group, not the name.
modifyNetworkInterfaceAttribute_groups :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe [Prelude.Text])
modifyNetworkInterfaceAttribute_groups = Lens.lens (\ModifyNetworkInterfaceAttribute' {groups} -> groups) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {groups = a} :: ModifyNetworkInterfaceAttribute) Prelude.. Lens.mapping Lens.coerced

-- | Enable or disable source\/destination checks, which ensure that the
-- instance is either the source or the destination of any traffic that it
-- receives. If the value is @true@, source\/destination checks are
-- enabled; otherwise, they are disabled. The default value is @true@. You
-- must disable source\/destination checks if the instance runs services
-- such as network address translation, routing, or firewalls.
modifyNetworkInterfaceAttribute_sourceDestCheck :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe AttributeBooleanValue)
modifyNetworkInterfaceAttribute_sourceDestCheck = Lens.lens (\ModifyNetworkInterfaceAttribute' {sourceDestCheck} -> sourceDestCheck) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {sourceDestCheck = a} :: ModifyNetworkInterfaceAttribute)

-- | The ID of the network interface.
modifyNetworkInterfaceAttribute_networkInterfaceId :: Lens.Lens' ModifyNetworkInterfaceAttribute Prelude.Text
modifyNetworkInterfaceAttribute_networkInterfaceId = Lens.lens (\ModifyNetworkInterfaceAttribute' {networkInterfaceId} -> networkInterfaceId) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {networkInterfaceId = a} :: ModifyNetworkInterfaceAttribute)

instance
  Core.AWSRequest
    ModifyNetworkInterfaceAttribute
  where
  type
    AWSResponse ModifyNetworkInterfaceAttribute =
      ModifyNetworkInterfaceAttributeResponse
  request overrides =
    Request.postQuery (overrides defaultService)
  response =
    Response.receiveNull
      ModifyNetworkInterfaceAttributeResponse'

instance
  Prelude.Hashable
    ModifyNetworkInterfaceAttribute
  where
  hashWithSalt
    _salt
    ModifyNetworkInterfaceAttribute' {..} =
      _salt
        `Prelude.hashWithSalt` attachment
        `Prelude.hashWithSalt` description
        `Prelude.hashWithSalt` dryRun
        `Prelude.hashWithSalt` enaSrdSpecification
        `Prelude.hashWithSalt` groups
        `Prelude.hashWithSalt` sourceDestCheck
        `Prelude.hashWithSalt` networkInterfaceId

instance
  Prelude.NFData
    ModifyNetworkInterfaceAttribute
  where
  rnf ModifyNetworkInterfaceAttribute' {..} =
    Prelude.rnf attachment
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf dryRun
      `Prelude.seq` Prelude.rnf enaSrdSpecification
      `Prelude.seq` Prelude.rnf groups
      `Prelude.seq` Prelude.rnf sourceDestCheck
      `Prelude.seq` Prelude.rnf networkInterfaceId

instance
  Data.ToHeaders
    ModifyNetworkInterfaceAttribute
  where
  toHeaders = Prelude.const Prelude.mempty

instance Data.ToPath ModifyNetworkInterfaceAttribute where
  toPath = Prelude.const "/"

instance Data.ToQuery ModifyNetworkInterfaceAttribute where
  toQuery ModifyNetworkInterfaceAttribute' {..} =
    Prelude.mconcat
      [ "Action"
          Data.=: ( "ModifyNetworkInterfaceAttribute" ::
                      Prelude.ByteString
                  ),
        "Version"
          Data.=: ("2016-11-15" :: Prelude.ByteString),
        "Attachment" Data.=: attachment,
        "Description" Data.=: description,
        "DryRun" Data.=: dryRun,
        "EnaSrdSpecification" Data.=: enaSrdSpecification,
        Data.toQuery
          ( Data.toQueryList "SecurityGroupId"
              Prelude.<$> groups
          ),
        "SourceDestCheck" Data.=: sourceDestCheck,
        "NetworkInterfaceId" Data.=: networkInterfaceId
      ]

-- | /See:/ 'newModifyNetworkInterfaceAttributeResponse' smart constructor.
data ModifyNetworkInterfaceAttributeResponse = ModifyNetworkInterfaceAttributeResponse'
  {
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ModifyNetworkInterfaceAttributeResponse' 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.
newModifyNetworkInterfaceAttributeResponse ::
  ModifyNetworkInterfaceAttributeResponse
newModifyNetworkInterfaceAttributeResponse =
  ModifyNetworkInterfaceAttributeResponse'

instance
  Prelude.NFData
    ModifyNetworkInterfaceAttributeResponse
  where
  rnf _ = ()