packages feed

amazonka-lightsail-2.0: gen/Amazonka/Lightsail/Types/InstanceEntry.hs

{-# 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.Lightsail.Types.InstanceEntry
-- 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.Lightsail.Types.InstanceEntry where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Lightsail.Types.PortInfoSourceType
import qualified Amazonka.Prelude as Prelude

-- | Describes the Amazon Elastic Compute Cloud instance and related
-- resources to be created using the @create cloud formation stack@
-- operation.
--
-- /See:/ 'newInstanceEntry' smart constructor.
data InstanceEntry = InstanceEntry'
  { -- | A launch script you can create that configures a server with additional
    -- user data. For example, you might want to run @apt-get -y update@.
    --
    -- Depending on the machine image you choose, the command to get software
    -- on your instance varies. Amazon Linux and CentOS use @yum@, Debian and
    -- Ubuntu use @apt-get@, and FreeBSD uses @pkg@.
    userData :: Prelude.Maybe Prelude.Text,
    -- | The name of the export snapshot record, which contains the exported
    -- Lightsail instance snapshot that will be used as the source of the new
    -- Amazon EC2 instance.
    --
    -- Use the @get export snapshot records@ operation to get a list of export
    -- snapshot records that you can use to create a CloudFormation stack.
    sourceName :: Prelude.Text,
    -- | The instance type (e.g., @t2.micro@) to use for the new Amazon EC2
    -- instance.
    instanceType :: Prelude.Text,
    -- | The port configuration to use for the new Amazon EC2 instance.
    --
    -- The following configuration options are available:
    --
    -- -   @DEFAULT@ - Use the default firewall settings from the Lightsail
    --     instance blueprint. If this is specified, then IPv4 and IPv6 will be
    --     configured for the new instance that is created in Amazon EC2.
    --
    -- -   @INSTANCE@ - Use the configured firewall settings from the source
    --     Lightsail instance. If this is specified, the new instance that is
    --     created in Amazon EC2 will be configured to match the configuration
    --     of the source Lightsail instance. For example, if the source
    --     instance is configured for dual-stack (IPv4 and IPv6), then IPv4 and
    --     IPv6 will be configured for the new instance that is created in
    --     Amazon EC2. If the source instance is configured for IPv4 only, then
    --     only IPv4 will be configured for the new instance that is created in
    --     Amazon EC2.
    --
    -- -   @NONE@ - Use the default Amazon EC2 security group. If this is
    --     specified, then only IPv4 will be configured for the new instance
    --     that is created in Amazon EC2.
    --
    -- -   @CLOSED@ - All ports closed. If this is specified, then only IPv4
    --     will be configured for the new instance that is created in Amazon
    --     EC2.
    --
    -- If you configured @lightsail-connect@ as a @cidrListAliases@ on your
    -- instance, or if you chose to allow the Lightsail browser-based SSH or
    -- RDP clients to connect to your instance, that configuration is not
    -- carried over to your new Amazon EC2 instance.
    portInfoSource :: PortInfoSourceType,
    -- | The Availability Zone for the new Amazon EC2 instance.
    availabilityZone :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'InstanceEntry' 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:
--
-- 'userData', 'instanceEntry_userData' - A launch script you can create that configures a server with additional
-- user data. For example, you might want to run @apt-get -y update@.
--
-- Depending on the machine image you choose, the command to get software
-- on your instance varies. Amazon Linux and CentOS use @yum@, Debian and
-- Ubuntu use @apt-get@, and FreeBSD uses @pkg@.
--
-- 'sourceName', 'instanceEntry_sourceName' - The name of the export snapshot record, which contains the exported
-- Lightsail instance snapshot that will be used as the source of the new
-- Amazon EC2 instance.
--
-- Use the @get export snapshot records@ operation to get a list of export
-- snapshot records that you can use to create a CloudFormation stack.
--
-- 'instanceType', 'instanceEntry_instanceType' - The instance type (e.g., @t2.micro@) to use for the new Amazon EC2
-- instance.
--
-- 'portInfoSource', 'instanceEntry_portInfoSource' - The port configuration to use for the new Amazon EC2 instance.
--
-- The following configuration options are available:
--
-- -   @DEFAULT@ - Use the default firewall settings from the Lightsail
--     instance blueprint. If this is specified, then IPv4 and IPv6 will be
--     configured for the new instance that is created in Amazon EC2.
--
-- -   @INSTANCE@ - Use the configured firewall settings from the source
--     Lightsail instance. If this is specified, the new instance that is
--     created in Amazon EC2 will be configured to match the configuration
--     of the source Lightsail instance. For example, if the source
--     instance is configured for dual-stack (IPv4 and IPv6), then IPv4 and
--     IPv6 will be configured for the new instance that is created in
--     Amazon EC2. If the source instance is configured for IPv4 only, then
--     only IPv4 will be configured for the new instance that is created in
--     Amazon EC2.
--
-- -   @NONE@ - Use the default Amazon EC2 security group. If this is
--     specified, then only IPv4 will be configured for the new instance
--     that is created in Amazon EC2.
--
-- -   @CLOSED@ - All ports closed. If this is specified, then only IPv4
--     will be configured for the new instance that is created in Amazon
--     EC2.
--
-- If you configured @lightsail-connect@ as a @cidrListAliases@ on your
-- instance, or if you chose to allow the Lightsail browser-based SSH or
-- RDP clients to connect to your instance, that configuration is not
-- carried over to your new Amazon EC2 instance.
--
-- 'availabilityZone', 'instanceEntry_availabilityZone' - The Availability Zone for the new Amazon EC2 instance.
newInstanceEntry ::
  -- | 'sourceName'
  Prelude.Text ->
  -- | 'instanceType'
  Prelude.Text ->
  -- | 'portInfoSource'
  PortInfoSourceType ->
  -- | 'availabilityZone'
  Prelude.Text ->
  InstanceEntry
newInstanceEntry
  pSourceName_
  pInstanceType_
  pPortInfoSource_
  pAvailabilityZone_ =
    InstanceEntry'
      { userData = Prelude.Nothing,
        sourceName = pSourceName_,
        instanceType = pInstanceType_,
        portInfoSource = pPortInfoSource_,
        availabilityZone = pAvailabilityZone_
      }

-- | A launch script you can create that configures a server with additional
-- user data. For example, you might want to run @apt-get -y update@.
--
-- Depending on the machine image you choose, the command to get software
-- on your instance varies. Amazon Linux and CentOS use @yum@, Debian and
-- Ubuntu use @apt-get@, and FreeBSD uses @pkg@.
instanceEntry_userData :: Lens.Lens' InstanceEntry (Prelude.Maybe Prelude.Text)
instanceEntry_userData = Lens.lens (\InstanceEntry' {userData} -> userData) (\s@InstanceEntry' {} a -> s {userData = a} :: InstanceEntry)

-- | The name of the export snapshot record, which contains the exported
-- Lightsail instance snapshot that will be used as the source of the new
-- Amazon EC2 instance.
--
-- Use the @get export snapshot records@ operation to get a list of export
-- snapshot records that you can use to create a CloudFormation stack.
instanceEntry_sourceName :: Lens.Lens' InstanceEntry Prelude.Text
instanceEntry_sourceName = Lens.lens (\InstanceEntry' {sourceName} -> sourceName) (\s@InstanceEntry' {} a -> s {sourceName = a} :: InstanceEntry)

-- | The instance type (e.g., @t2.micro@) to use for the new Amazon EC2
-- instance.
instanceEntry_instanceType :: Lens.Lens' InstanceEntry Prelude.Text
instanceEntry_instanceType = Lens.lens (\InstanceEntry' {instanceType} -> instanceType) (\s@InstanceEntry' {} a -> s {instanceType = a} :: InstanceEntry)

-- | The port configuration to use for the new Amazon EC2 instance.
--
-- The following configuration options are available:
--
-- -   @DEFAULT@ - Use the default firewall settings from the Lightsail
--     instance blueprint. If this is specified, then IPv4 and IPv6 will be
--     configured for the new instance that is created in Amazon EC2.
--
-- -   @INSTANCE@ - Use the configured firewall settings from the source
--     Lightsail instance. If this is specified, the new instance that is
--     created in Amazon EC2 will be configured to match the configuration
--     of the source Lightsail instance. For example, if the source
--     instance is configured for dual-stack (IPv4 and IPv6), then IPv4 and
--     IPv6 will be configured for the new instance that is created in
--     Amazon EC2. If the source instance is configured for IPv4 only, then
--     only IPv4 will be configured for the new instance that is created in
--     Amazon EC2.
--
-- -   @NONE@ - Use the default Amazon EC2 security group. If this is
--     specified, then only IPv4 will be configured for the new instance
--     that is created in Amazon EC2.
--
-- -   @CLOSED@ - All ports closed. If this is specified, then only IPv4
--     will be configured for the new instance that is created in Amazon
--     EC2.
--
-- If you configured @lightsail-connect@ as a @cidrListAliases@ on your
-- instance, or if you chose to allow the Lightsail browser-based SSH or
-- RDP clients to connect to your instance, that configuration is not
-- carried over to your new Amazon EC2 instance.
instanceEntry_portInfoSource :: Lens.Lens' InstanceEntry PortInfoSourceType
instanceEntry_portInfoSource = Lens.lens (\InstanceEntry' {portInfoSource} -> portInfoSource) (\s@InstanceEntry' {} a -> s {portInfoSource = a} :: InstanceEntry)

-- | The Availability Zone for the new Amazon EC2 instance.
instanceEntry_availabilityZone :: Lens.Lens' InstanceEntry Prelude.Text
instanceEntry_availabilityZone = Lens.lens (\InstanceEntry' {availabilityZone} -> availabilityZone) (\s@InstanceEntry' {} a -> s {availabilityZone = a} :: InstanceEntry)

instance Prelude.Hashable InstanceEntry where
  hashWithSalt _salt InstanceEntry' {..} =
    _salt
      `Prelude.hashWithSalt` userData
      `Prelude.hashWithSalt` sourceName
      `Prelude.hashWithSalt` instanceType
      `Prelude.hashWithSalt` portInfoSource
      `Prelude.hashWithSalt` availabilityZone

instance Prelude.NFData InstanceEntry where
  rnf InstanceEntry' {..} =
    Prelude.rnf userData
      `Prelude.seq` Prelude.rnf sourceName
      `Prelude.seq` Prelude.rnf instanceType
      `Prelude.seq` Prelude.rnf portInfoSource
      `Prelude.seq` Prelude.rnf availabilityZone

instance Data.ToJSON InstanceEntry where
  toJSON InstanceEntry' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("userData" Data..=) Prelude.<$> userData,
            Prelude.Just ("sourceName" Data..= sourceName),
            Prelude.Just ("instanceType" Data..= instanceType),
            Prelude.Just
              ("portInfoSource" Data..= portInfoSource),
            Prelude.Just
              ("availabilityZone" Data..= availabilityZone)
          ]
      )