diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/DataSync/Agent.hs b/gen/Stratosphere/DataSync/Agent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Agent.hs
@@ -0,0 +1,78 @@
+module Stratosphere.DataSync.Agent (
+        Agent(..), mkAgent
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Agent
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html>
+    Agent {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-activationkey>
+           activationKey :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-agentname>
+           agentName :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-securitygrouparns>
+           securityGroupArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-subnetarns>
+           subnetArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-tags>
+           tags :: (Prelude.Maybe [Tag]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-vpcendpointid>
+           vpcEndpointId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAgent :: Agent
+mkAgent
+  = Agent
+      {haddock_workaround_ = (), activationKey = Prelude.Nothing,
+       agentName = Prelude.Nothing, securityGroupArns = Prelude.Nothing,
+       subnetArns = Prelude.Nothing, tags = Prelude.Nothing,
+       vpcEndpointId = Prelude.Nothing}
+instance ToResourceProperties Agent where
+  toResourceProperties Agent {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Agent", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ActivationKey" Prelude.<$> activationKey,
+                            (JSON..=) "AgentName" Prelude.<$> agentName,
+                            (JSON..=) "SecurityGroupArns" Prelude.<$> securityGroupArns,
+                            (JSON..=) "SubnetArns" Prelude.<$> subnetArns,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "VpcEndpointId" Prelude.<$> vpcEndpointId])}
+instance JSON.ToJSON Agent where
+  toJSON Agent {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ActivationKey" Prelude.<$> activationKey,
+               (JSON..=) "AgentName" Prelude.<$> agentName,
+               (JSON..=) "SecurityGroupArns" Prelude.<$> securityGroupArns,
+               (JSON..=) "SubnetArns" Prelude.<$> subnetArns,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "VpcEndpointId" Prelude.<$> vpcEndpointId]))
+instance Property "ActivationKey" Agent where
+  type PropertyType "ActivationKey" Agent = Value Prelude.Text
+  set newValue Agent {..}
+    = Agent {activationKey = Prelude.pure newValue, ..}
+instance Property "AgentName" Agent where
+  type PropertyType "AgentName" Agent = Value Prelude.Text
+  set newValue Agent {..}
+    = Agent {agentName = Prelude.pure newValue, ..}
+instance Property "SecurityGroupArns" Agent where
+  type PropertyType "SecurityGroupArns" Agent = ValueList Prelude.Text
+  set newValue Agent {..}
+    = Agent {securityGroupArns = Prelude.pure newValue, ..}
+instance Property "SubnetArns" Agent where
+  type PropertyType "SubnetArns" Agent = ValueList Prelude.Text
+  set newValue Agent {..}
+    = Agent {subnetArns = Prelude.pure newValue, ..}
+instance Property "Tags" Agent where
+  type PropertyType "Tags" Agent = [Tag]
+  set newValue Agent {..} = Agent {tags = Prelude.pure newValue, ..}
+instance Property "VpcEndpointId" Agent where
+  type PropertyType "VpcEndpointId" Agent = Value Prelude.Text
+  set newValue Agent {..}
+    = Agent {vpcEndpointId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob.hs b/gen/Stratosphere/DataSync/LocationAzureBlob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob.hs
@@ -0,0 +1,128 @@
+module Stratosphere.DataSync.LocationAzureBlob (
+        module Exports, LocationAzureBlob(..), mkLocationAzureBlob
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationAzureBlob.AzureBlobSasConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationAzureBlob.CmkSecretConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationAzureBlob.CustomSecretConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationAzureBlob
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html>
+    LocationAzureBlob {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-agentarns>
+                       agentArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-azureaccesstier>
+                       azureAccessTier :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-azureblobauthenticationtype>
+                       azureBlobAuthenticationType :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-azureblobcontainerurl>
+                       azureBlobContainerUrl :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-azureblobsasconfiguration>
+                       azureBlobSasConfiguration :: (Prelude.Maybe AzureBlobSasConfigurationProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-azureblobtype>
+                       azureBlobType :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-cmksecretconfig>
+                       cmkSecretConfig :: (Prelude.Maybe CmkSecretConfigProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-customsecretconfig>
+                       customSecretConfig :: (Prelude.Maybe CustomSecretConfigProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-subdirectory>
+                       subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html#cfn-datasync-locationazureblob-tags>
+                       tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationAzureBlob :: Value Prelude.Text -> LocationAzureBlob
+mkLocationAzureBlob azureBlobAuthenticationType
+  = LocationAzureBlob
+      {haddock_workaround_ = (),
+       azureBlobAuthenticationType = azureBlobAuthenticationType,
+       agentArns = Prelude.Nothing, azureAccessTier = Prelude.Nothing,
+       azureBlobContainerUrl = Prelude.Nothing,
+       azureBlobSasConfiguration = Prelude.Nothing,
+       azureBlobType = Prelude.Nothing, cmkSecretConfig = Prelude.Nothing,
+       customSecretConfig = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationAzureBlob where
+  toResourceProperties LocationAzureBlob {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationAzureBlob",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AzureBlobAuthenticationType" JSON..= azureBlobAuthenticationType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AgentArns" Prelude.<$> agentArns,
+                               (JSON..=) "AzureAccessTier" Prelude.<$> azureAccessTier,
+                               (JSON..=) "AzureBlobContainerUrl"
+                                 Prelude.<$> azureBlobContainerUrl,
+                               (JSON..=) "AzureBlobSasConfiguration"
+                                 Prelude.<$> azureBlobSasConfiguration,
+                               (JSON..=) "AzureBlobType" Prelude.<$> azureBlobType,
+                               (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+                               (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationAzureBlob where
+  toJSON LocationAzureBlob {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AzureBlobAuthenticationType" JSON..= azureBlobAuthenticationType]
+              (Prelude.catMaybes
+                 [(JSON..=) "AgentArns" Prelude.<$> agentArns,
+                  (JSON..=) "AzureAccessTier" Prelude.<$> azureAccessTier,
+                  (JSON..=) "AzureBlobContainerUrl"
+                    Prelude.<$> azureBlobContainerUrl,
+                  (JSON..=) "AzureBlobSasConfiguration"
+                    Prelude.<$> azureBlobSasConfiguration,
+                  (JSON..=) "AzureBlobType" Prelude.<$> azureBlobType,
+                  (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+                  (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AgentArns" LocationAzureBlob where
+  type PropertyType "AgentArns" LocationAzureBlob = ValueList Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {agentArns = Prelude.pure newValue, ..}
+instance Property "AzureAccessTier" LocationAzureBlob where
+  type PropertyType "AzureAccessTier" LocationAzureBlob = Value Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {azureAccessTier = Prelude.pure newValue, ..}
+instance Property "AzureBlobAuthenticationType" LocationAzureBlob where
+  type PropertyType "AzureBlobAuthenticationType" LocationAzureBlob = Value Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {azureBlobAuthenticationType = newValue, ..}
+instance Property "AzureBlobContainerUrl" LocationAzureBlob where
+  type PropertyType "AzureBlobContainerUrl" LocationAzureBlob = Value Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob
+        {azureBlobContainerUrl = Prelude.pure newValue, ..}
+instance Property "AzureBlobSasConfiguration" LocationAzureBlob where
+  type PropertyType "AzureBlobSasConfiguration" LocationAzureBlob = AzureBlobSasConfigurationProperty
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob
+        {azureBlobSasConfiguration = Prelude.pure newValue, ..}
+instance Property "AzureBlobType" LocationAzureBlob where
+  type PropertyType "AzureBlobType" LocationAzureBlob = Value Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {azureBlobType = Prelude.pure newValue, ..}
+instance Property "CmkSecretConfig" LocationAzureBlob where
+  type PropertyType "CmkSecretConfig" LocationAzureBlob = CmkSecretConfigProperty
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {cmkSecretConfig = Prelude.pure newValue, ..}
+instance Property "CustomSecretConfig" LocationAzureBlob where
+  type PropertyType "CustomSecretConfig" LocationAzureBlob = CustomSecretConfigProperty
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob
+        {customSecretConfig = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationAzureBlob where
+  type PropertyType "Subdirectory" LocationAzureBlob = Value Prelude.Text
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationAzureBlob where
+  type PropertyType "Tags" LocationAzureBlob = [Tag]
+  set newValue LocationAzureBlob {..}
+    = LocationAzureBlob {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs b/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationAzureBlob.AzureBlobSasConfigurationProperty (
+        AzureBlobSasConfigurationProperty(..),
+        mkAzureBlobSasConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AzureBlobSasConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-azureblobsasconfiguration.html>
+    AzureBlobSasConfigurationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-azureblobsasconfiguration.html#cfn-datasync-locationazureblob-azureblobsasconfiguration-azureblobsastoken>
+                                       azureBlobSasToken :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAzureBlobSasConfigurationProperty ::
+  Value Prelude.Text -> AzureBlobSasConfigurationProperty
+mkAzureBlobSasConfigurationProperty azureBlobSasToken
+  = AzureBlobSasConfigurationProperty
+      {haddock_workaround_ = (), azureBlobSasToken = azureBlobSasToken}
+instance ToResourceProperties AzureBlobSasConfigurationProperty where
+  toResourceProperties AzureBlobSasConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationAzureBlob.AzureBlobSasConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["AzureBlobSasToken" JSON..= azureBlobSasToken]}
+instance JSON.ToJSON AzureBlobSasConfigurationProperty where
+  toJSON AzureBlobSasConfigurationProperty {..}
+    = JSON.object ["AzureBlobSasToken" JSON..= azureBlobSasToken]
+instance Property "AzureBlobSasToken" AzureBlobSasConfigurationProperty where
+  type PropertyType "AzureBlobSasToken" AzureBlobSasConfigurationProperty = Value Prelude.Text
+  set newValue AzureBlobSasConfigurationProperty {..}
+    = AzureBlobSasConfigurationProperty
+        {azureBlobSasToken = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs-boot b/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/AzureBlobSasConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationAzureBlob.AzureBlobSasConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AzureBlobSasConfigurationProperty :: Prelude.Type
+instance ToResourceProperties AzureBlobSasConfigurationProperty
+instance Prelude.Eq AzureBlobSasConfigurationProperty
+instance Prelude.Show AzureBlobSasConfigurationProperty
+instance JSON.ToJSON AzureBlobSasConfigurationProperty
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DataSync.LocationAzureBlob.CmkSecretConfigProperty (
+        CmkSecretConfigProperty(..), mkCmkSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CmkSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-cmksecretconfig.html>
+    CmkSecretConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-cmksecretconfig.html#cfn-datasync-locationazureblob-cmksecretconfig-kmskeyarn>
+                             kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-cmksecretconfig.html#cfn-datasync-locationazureblob-cmksecretconfig-secretarn>
+                             secretArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCmkSecretConfigProperty :: CmkSecretConfigProperty
+mkCmkSecretConfigProperty
+  = CmkSecretConfigProperty
+      {haddock_workaround_ = (), kmsKeyArn = Prelude.Nothing,
+       secretArn = Prelude.Nothing}
+instance ToResourceProperties CmkSecretConfigProperty where
+  toResourceProperties CmkSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationAzureBlob.CmkSecretConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+                            (JSON..=) "SecretArn" Prelude.<$> secretArn])}
+instance JSON.ToJSON CmkSecretConfigProperty where
+  toJSON CmkSecretConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+               (JSON..=) "SecretArn" Prelude.<$> secretArn]))
+instance Property "KmsKeyArn" CmkSecretConfigProperty where
+  type PropertyType "KmsKeyArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {kmsKeyArn = Prelude.pure newValue, ..}
+instance Property "SecretArn" CmkSecretConfigProperty where
+  type PropertyType "SecretArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {secretArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/CmkSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationAzureBlob.CmkSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CmkSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CmkSecretConfigProperty
+instance Prelude.Eq CmkSecretConfigProperty
+instance Prelude.Show CmkSecretConfigProperty
+instance JSON.ToJSON CmkSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DataSync.LocationAzureBlob.CustomSecretConfigProperty (
+        CustomSecretConfigProperty(..), mkCustomSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-customsecretconfig.html>
+    CustomSecretConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-customsecretconfig.html#cfn-datasync-locationazureblob-customsecretconfig-secretaccessrolearn>
+                                secretAccessRoleArn :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-customsecretconfig.html#cfn-datasync-locationazureblob-customsecretconfig-secretarn>
+                                secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomSecretConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> CustomSecretConfigProperty
+mkCustomSecretConfigProperty secretAccessRoleArn secretArn
+  = CustomSecretConfigProperty
+      {haddock_workaround_ = (),
+       secretAccessRoleArn = secretAccessRoleArn, secretArn = secretArn}
+instance ToResourceProperties CustomSecretConfigProperty where
+  toResourceProperties CustomSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationAzureBlob.CustomSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+                       "SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON CustomSecretConfigProperty where
+  toJSON CustomSecretConfigProperty {..}
+    = JSON.object
+        ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+         "SecretArn" JSON..= secretArn]
+instance Property "SecretAccessRoleArn" CustomSecretConfigProperty where
+  type PropertyType "SecretAccessRoleArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretAccessRoleArn = newValue, ..}
+instance Property "SecretArn" CustomSecretConfigProperty where
+  type PropertyType "SecretArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/CustomSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationAzureBlob.CustomSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CustomSecretConfigProperty
+instance Prelude.Eq CustomSecretConfigProperty
+instance Prelude.Show CustomSecretConfigProperty
+instance JSON.ToJSON CustomSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DataSync.LocationAzureBlob.ManagedSecretConfigProperty (
+        ManagedSecretConfigProperty(..), mkManagedSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-managedsecretconfig.html>
+    ManagedSecretConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationazureblob-managedsecretconfig.html#cfn-datasync-locationazureblob-managedsecretconfig-secretarn>
+                                 secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedSecretConfigProperty ::
+  Value Prelude.Text -> ManagedSecretConfigProperty
+mkManagedSecretConfigProperty secretArn
+  = ManagedSecretConfigProperty
+      {haddock_workaround_ = (), secretArn = secretArn}
+instance ToResourceProperties ManagedSecretConfigProperty where
+  toResourceProperties ManagedSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationAzureBlob.ManagedSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON ManagedSecretConfigProperty where
+  toJSON ManagedSecretConfigProperty {..}
+    = JSON.object ["SecretArn" JSON..= secretArn]
+instance Property "SecretArn" ManagedSecretConfigProperty where
+  type PropertyType "SecretArn" ManagedSecretConfigProperty = Value Prelude.Text
+  set newValue ManagedSecretConfigProperty {..}
+    = ManagedSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationAzureBlob/ManagedSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationAzureBlob.ManagedSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties ManagedSecretConfigProperty
+instance Prelude.Eq ManagedSecretConfigProperty
+instance Prelude.Show ManagedSecretConfigProperty
+instance JSON.ToJSON ManagedSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationEFS.hs b/gen/Stratosphere/DataSync/LocationEFS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationEFS.hs
@@ -0,0 +1,95 @@
+module Stratosphere.DataSync.LocationEFS (
+        module Exports, LocationEFS(..), mkLocationEFS
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationEFS.Ec2ConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationEFS
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html>
+    LocationEFS {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-accesspointarn>
+                 accessPointArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-ec2config>
+                 ec2Config :: Ec2ConfigProperty,
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-efsfilesystemarn>
+                 efsFilesystemArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-filesystemaccessrolearn>
+                 fileSystemAccessRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-intransitencryption>
+                 inTransitEncryption :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-subdirectory>
+                 subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html#cfn-datasync-locationefs-tags>
+                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationEFS :: Ec2ConfigProperty -> LocationEFS
+mkLocationEFS ec2Config
+  = LocationEFS
+      {haddock_workaround_ = (), ec2Config = ec2Config,
+       accessPointArn = Prelude.Nothing,
+       efsFilesystemArn = Prelude.Nothing,
+       fileSystemAccessRoleArn = Prelude.Nothing,
+       inTransitEncryption = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationEFS where
+  toResourceProperties LocationEFS {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationEFS",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Ec2Config" JSON..= ec2Config]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessPointArn" Prelude.<$> accessPointArn,
+                               (JSON..=) "EfsFilesystemArn" Prelude.<$> efsFilesystemArn,
+                               (JSON..=) "FileSystemAccessRoleArn"
+                                 Prelude.<$> fileSystemAccessRoleArn,
+                               (JSON..=) "InTransitEncryption" Prelude.<$> inTransitEncryption,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationEFS where
+  toJSON LocationEFS {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Ec2Config" JSON..= ec2Config]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessPointArn" Prelude.<$> accessPointArn,
+                  (JSON..=) "EfsFilesystemArn" Prelude.<$> efsFilesystemArn,
+                  (JSON..=) "FileSystemAccessRoleArn"
+                    Prelude.<$> fileSystemAccessRoleArn,
+                  (JSON..=) "InTransitEncryption" Prelude.<$> inTransitEncryption,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AccessPointArn" LocationEFS where
+  type PropertyType "AccessPointArn" LocationEFS = Value Prelude.Text
+  set newValue LocationEFS {..}
+    = LocationEFS {accessPointArn = Prelude.pure newValue, ..}
+instance Property "Ec2Config" LocationEFS where
+  type PropertyType "Ec2Config" LocationEFS = Ec2ConfigProperty
+  set newValue LocationEFS {..}
+    = LocationEFS {ec2Config = newValue, ..}
+instance Property "EfsFilesystemArn" LocationEFS where
+  type PropertyType "EfsFilesystemArn" LocationEFS = Value Prelude.Text
+  set newValue LocationEFS {..}
+    = LocationEFS {efsFilesystemArn = Prelude.pure newValue, ..}
+instance Property "FileSystemAccessRoleArn" LocationEFS where
+  type PropertyType "FileSystemAccessRoleArn" LocationEFS = Value Prelude.Text
+  set newValue LocationEFS {..}
+    = LocationEFS {fileSystemAccessRoleArn = Prelude.pure newValue, ..}
+instance Property "InTransitEncryption" LocationEFS where
+  type PropertyType "InTransitEncryption" LocationEFS = Value Prelude.Text
+  set newValue LocationEFS {..}
+    = LocationEFS {inTransitEncryption = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationEFS where
+  type PropertyType "Subdirectory" LocationEFS = Value Prelude.Text
+  set newValue LocationEFS {..}
+    = LocationEFS {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationEFS where
+  type PropertyType "Tags" LocationEFS = [Tag]
+  set newValue LocationEFS {..}
+    = LocationEFS {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs b/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.DataSync.LocationEFS.Ec2ConfigProperty (
+        Ec2ConfigProperty(..), mkEc2ConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ec2ConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html>
+    Ec2ConfigProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-securitygrouparns>
+                       securityGroupArns :: (ValueList Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-subnetarn>
+                       subnetArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEc2ConfigProperty ::
+  ValueList Prelude.Text -> Value Prelude.Text -> Ec2ConfigProperty
+mkEc2ConfigProperty securityGroupArns subnetArn
+  = Ec2ConfigProperty
+      {haddock_workaround_ = (), securityGroupArns = securityGroupArns,
+       subnetArn = subnetArn}
+instance ToResourceProperties Ec2ConfigProperty where
+  toResourceProperties Ec2ConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationEFS.Ec2Config",
+         supportsTags = Prelude.False,
+         properties = ["SecurityGroupArns" JSON..= securityGroupArns,
+                       "SubnetArn" JSON..= subnetArn]}
+instance JSON.ToJSON Ec2ConfigProperty where
+  toJSON Ec2ConfigProperty {..}
+    = JSON.object
+        ["SecurityGroupArns" JSON..= securityGroupArns,
+         "SubnetArn" JSON..= subnetArn]
+instance Property "SecurityGroupArns" Ec2ConfigProperty where
+  type PropertyType "SecurityGroupArns" Ec2ConfigProperty = ValueList Prelude.Text
+  set newValue Ec2ConfigProperty {..}
+    = Ec2ConfigProperty {securityGroupArns = newValue, ..}
+instance Property "SubnetArn" Ec2ConfigProperty where
+  type PropertyType "SubnetArn" Ec2ConfigProperty = Value Prelude.Text
+  set newValue Ec2ConfigProperty {..}
+    = Ec2ConfigProperty {subnetArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationEFS/Ec2ConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationEFS.Ec2ConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ec2ConfigProperty :: Prelude.Type
+instance ToResourceProperties Ec2ConfigProperty
+instance Prelude.Eq Ec2ConfigProperty
+instance Prelude.Show Ec2ConfigProperty
+instance JSON.ToJSON Ec2ConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxLustre.hs b/gen/Stratosphere/DataSync/LocationFSxLustre.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxLustre.hs
@@ -0,0 +1,65 @@
+module Stratosphere.DataSync.LocationFSxLustre (
+        LocationFSxLustre(..), mkLocationFSxLustre
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationFSxLustre
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html>
+    LocationFSxLustre {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html#cfn-datasync-locationfsxlustre-fsxfilesystemarn>
+                       fsxFilesystemArn :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html#cfn-datasync-locationfsxlustre-securitygrouparns>
+                       securityGroupArns :: (ValueList Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html#cfn-datasync-locationfsxlustre-subdirectory>
+                       subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html#cfn-datasync-locationfsxlustre-tags>
+                       tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationFSxLustre :: ValueList Prelude.Text -> LocationFSxLustre
+mkLocationFSxLustre securityGroupArns
+  = LocationFSxLustre
+      {haddock_workaround_ = (), securityGroupArns = securityGroupArns,
+       fsxFilesystemArn = Prelude.Nothing, subdirectory = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocationFSxLustre where
+  toResourceProperties LocationFSxLustre {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxLustre",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SecurityGroupArns" JSON..= securityGroupArns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationFSxLustre where
+  toJSON LocationFSxLustre {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SecurityGroupArns" JSON..= securityGroupArns]
+              (Prelude.catMaybes
+                 [(JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "FsxFilesystemArn" LocationFSxLustre where
+  type PropertyType "FsxFilesystemArn" LocationFSxLustre = Value Prelude.Text
+  set newValue LocationFSxLustre {..}
+    = LocationFSxLustre {fsxFilesystemArn = Prelude.pure newValue, ..}
+instance Property "SecurityGroupArns" LocationFSxLustre where
+  type PropertyType "SecurityGroupArns" LocationFSxLustre = ValueList Prelude.Text
+  set newValue LocationFSxLustre {..}
+    = LocationFSxLustre {securityGroupArns = newValue, ..}
+instance Property "Subdirectory" LocationFSxLustre where
+  type PropertyType "Subdirectory" LocationFSxLustre = Value Prelude.Text
+  set newValue LocationFSxLustre {..}
+    = LocationFSxLustre {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationFSxLustre where
+  type PropertyType "Tags" LocationFSxLustre = [Tag]
+  set newValue LocationFSxLustre {..}
+    = LocationFSxLustre {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP.hs
@@ -0,0 +1,76 @@
+module Stratosphere.DataSync.LocationFSxONTAP (
+        module Exports, LocationFSxONTAP(..), mkLocationFSxONTAP
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxONTAP.ProtocolProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationFSxONTAP
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html>
+    LocationFSxONTAP {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-protocol>
+                      protocol :: (Prelude.Maybe ProtocolProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-securitygrouparns>
+                      securityGroupArns :: (ValueList Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-storagevirtualmachinearn>
+                      storageVirtualMachineArn :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-subdirectory>
+                      subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationFSxONTAP ::
+  ValueList Prelude.Text -> Value Prelude.Text -> LocationFSxONTAP
+mkLocationFSxONTAP securityGroupArns storageVirtualMachineArn
+  = LocationFSxONTAP
+      {haddock_workaround_ = (), securityGroupArns = securityGroupArns,
+       storageVirtualMachineArn = storageVirtualMachineArn,
+       protocol = Prelude.Nothing, subdirectory = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocationFSxONTAP where
+  toResourceProperties LocationFSxONTAP {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SecurityGroupArns" JSON..= securityGroupArns,
+                            "StorageVirtualMachineArn" JSON..= storageVirtualMachineArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationFSxONTAP where
+  toJSON LocationFSxONTAP {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SecurityGroupArns" JSON..= securityGroupArns,
+               "StorageVirtualMachineArn" JSON..= storageVirtualMachineArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Protocol" LocationFSxONTAP where
+  type PropertyType "Protocol" LocationFSxONTAP = ProtocolProperty
+  set newValue LocationFSxONTAP {..}
+    = LocationFSxONTAP {protocol = Prelude.pure newValue, ..}
+instance Property "SecurityGroupArns" LocationFSxONTAP where
+  type PropertyType "SecurityGroupArns" LocationFSxONTAP = ValueList Prelude.Text
+  set newValue LocationFSxONTAP {..}
+    = LocationFSxONTAP {securityGroupArns = newValue, ..}
+instance Property "StorageVirtualMachineArn" LocationFSxONTAP where
+  type PropertyType "StorageVirtualMachineArn" LocationFSxONTAP = Value Prelude.Text
+  set newValue LocationFSxONTAP {..}
+    = LocationFSxONTAP {storageVirtualMachineArn = newValue, ..}
+instance Property "Subdirectory" LocationFSxONTAP where
+  type PropertyType "Subdirectory" LocationFSxONTAP = Value Prelude.Text
+  set newValue LocationFSxONTAP {..}
+    = LocationFSxONTAP {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationFSxONTAP where
+  type PropertyType "Tags" LocationFSxONTAP = [Tag]
+  set newValue LocationFSxONTAP {..}
+    = LocationFSxONTAP {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.DataSync.LocationFSxONTAP.NFSProperty (
+        module Exports, NFSProperty(..), mkNFSProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxONTAP.NfsMountOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+data NFSProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-nfs.html>
+    NFSProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-nfs.html#cfn-datasync-locationfsxontap-nfs-mountoptions>
+                 mountOptions :: NfsMountOptionsProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNFSProperty :: NfsMountOptionsProperty -> NFSProperty
+mkNFSProperty mountOptions
+  = NFSProperty
+      {haddock_workaround_ = (), mountOptions = mountOptions}
+instance ToResourceProperties NFSProperty where
+  toResourceProperties NFSProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP.NFS",
+         supportsTags = Prelude.False,
+         properties = ["MountOptions" JSON..= mountOptions]}
+instance JSON.ToJSON NFSProperty where
+  toJSON NFSProperty {..}
+    = JSON.object ["MountOptions" JSON..= mountOptions]
+instance Property "MountOptions" NFSProperty where
+  type PropertyType "MountOptions" NFSProperty = NfsMountOptionsProperty
+  set newValue NFSProperty {..}
+    = NFSProperty {mountOptions = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/NFSProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxONTAP.NFSProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NFSProperty :: Prelude.Type
+instance ToResourceProperties NFSProperty
+instance Prelude.Eq NFSProperty
+instance Prelude.Show NFSProperty
+instance JSON.ToJSON NFSProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationFSxONTAP.NfsMountOptionsProperty (
+        NfsMountOptionsProperty(..), mkNfsMountOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NfsMountOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-nfsmountoptions.html>
+    NfsMountOptionsProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-nfsmountoptions.html#cfn-datasync-locationfsxontap-nfsmountoptions-version>
+                             version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNfsMountOptionsProperty :: NfsMountOptionsProperty
+mkNfsMountOptionsProperty
+  = NfsMountOptionsProperty
+      {haddock_workaround_ = (), version = Prelude.Nothing}
+instance ToResourceProperties NfsMountOptionsProperty where
+  toResourceProperties NfsMountOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP.NfsMountOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON NfsMountOptionsProperty where
+  toJSON NfsMountOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version]))
+instance Property "Version" NfsMountOptionsProperty where
+  type PropertyType "Version" NfsMountOptionsProperty = Value Prelude.Text
+  set newValue NfsMountOptionsProperty {..}
+    = NfsMountOptionsProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/NfsMountOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxONTAP.NfsMountOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NfsMountOptionsProperty :: Prelude.Type
+instance ToResourceProperties NfsMountOptionsProperty
+instance Prelude.Eq NfsMountOptionsProperty
+instance Prelude.Show NfsMountOptionsProperty
+instance JSON.ToJSON NfsMountOptionsProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.DataSync.LocationFSxONTAP.ProtocolProperty (
+        module Exports, ProtocolProperty(..), mkProtocolProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxONTAP.NFSProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxONTAP.SMBProperty as Exports
+import Stratosphere.ResourceProperties
+data ProtocolProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-protocol.html>
+    ProtocolProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-protocol.html#cfn-datasync-locationfsxontap-protocol-nfs>
+                      nFS :: (Prelude.Maybe NFSProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-protocol.html#cfn-datasync-locationfsxontap-protocol-smb>
+                      sMB :: (Prelude.Maybe SMBProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProtocolProperty :: ProtocolProperty
+mkProtocolProperty
+  = ProtocolProperty
+      {haddock_workaround_ = (), nFS = Prelude.Nothing,
+       sMB = Prelude.Nothing}
+instance ToResourceProperties ProtocolProperty where
+  toResourceProperties ProtocolProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP.Protocol",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NFS" Prelude.<$> nFS,
+                            (JSON..=) "SMB" Prelude.<$> sMB])}
+instance JSON.ToJSON ProtocolProperty where
+  toJSON ProtocolProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NFS" Prelude.<$> nFS,
+               (JSON..=) "SMB" Prelude.<$> sMB]))
+instance Property "NFS" ProtocolProperty where
+  type PropertyType "NFS" ProtocolProperty = NFSProperty
+  set newValue ProtocolProperty {..}
+    = ProtocolProperty {nFS = Prelude.pure newValue, ..}
+instance Property "SMB" ProtocolProperty where
+  type PropertyType "SMB" ProtocolProperty = SMBProperty
+  set newValue ProtocolProperty {..}
+    = ProtocolProperty {sMB = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/ProtocolProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxONTAP.ProtocolProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProtocolProperty :: Prelude.Type
+instance ToResourceProperties ProtocolProperty
+instance Prelude.Eq ProtocolProperty
+instance Prelude.Show ProtocolProperty
+instance JSON.ToJSON ProtocolProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.DataSync.LocationFSxONTAP.SMBProperty (
+        module Exports, SMBProperty(..), mkSMBProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxONTAP.SmbMountOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SMBProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smb.html>
+    SMBProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smb.html#cfn-datasync-locationfsxontap-smb-domain>
+                 domain :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smb.html#cfn-datasync-locationfsxontap-smb-mountoptions>
+                 mountOptions :: SmbMountOptionsProperty,
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smb.html#cfn-datasync-locationfsxontap-smb-password>
+                 password :: (Value Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smb.html#cfn-datasync-locationfsxontap-smb-user>
+                 user :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSMBProperty ::
+  SmbMountOptionsProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> SMBProperty
+mkSMBProperty mountOptions password user
+  = SMBProperty
+      {haddock_workaround_ = (), mountOptions = mountOptions,
+       password = password, user = user, domain = Prelude.Nothing}
+instance ToResourceProperties SMBProperty where
+  toResourceProperties SMBProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP.SMB",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["MountOptions" JSON..= mountOptions, "Password" JSON..= password,
+                            "User" JSON..= user]
+                           (Prelude.catMaybes [(JSON..=) "Domain" Prelude.<$> domain]))}
+instance JSON.ToJSON SMBProperty where
+  toJSON SMBProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["MountOptions" JSON..= mountOptions, "Password" JSON..= password,
+               "User" JSON..= user]
+              (Prelude.catMaybes [(JSON..=) "Domain" Prelude.<$> domain])))
+instance Property "Domain" SMBProperty where
+  type PropertyType "Domain" SMBProperty = Value Prelude.Text
+  set newValue SMBProperty {..}
+    = SMBProperty {domain = Prelude.pure newValue, ..}
+instance Property "MountOptions" SMBProperty where
+  type PropertyType "MountOptions" SMBProperty = SmbMountOptionsProperty
+  set newValue SMBProperty {..}
+    = SMBProperty {mountOptions = newValue, ..}
+instance Property "Password" SMBProperty where
+  type PropertyType "Password" SMBProperty = Value Prelude.Text
+  set newValue SMBProperty {..}
+    = SMBProperty {password = newValue, ..}
+instance Property "User" SMBProperty where
+  type PropertyType "User" SMBProperty = Value Prelude.Text
+  set newValue SMBProperty {..} = SMBProperty {user = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/SMBProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxONTAP.SMBProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SMBProperty :: Prelude.Type
+instance ToResourceProperties SMBProperty
+instance Prelude.Eq SMBProperty
+instance Prelude.Show SMBProperty
+instance JSON.ToJSON SMBProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs b/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationFSxONTAP.SmbMountOptionsProperty (
+        SmbMountOptionsProperty(..), mkSmbMountOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SmbMountOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smbmountoptions.html>
+    SmbMountOptionsProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxontap-smbmountoptions.html#cfn-datasync-locationfsxontap-smbmountoptions-version>
+                             version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSmbMountOptionsProperty :: SmbMountOptionsProperty
+mkSmbMountOptionsProperty
+  = SmbMountOptionsProperty
+      {haddock_workaround_ = (), version = Prelude.Nothing}
+instance ToResourceProperties SmbMountOptionsProperty where
+  toResourceProperties SmbMountOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxONTAP.SmbMountOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON SmbMountOptionsProperty where
+  toJSON SmbMountOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version]))
+instance Property "Version" SmbMountOptionsProperty where
+  type PropertyType "Version" SmbMountOptionsProperty = Value Prelude.Text
+  set newValue SmbMountOptionsProperty {..}
+    = SmbMountOptionsProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxONTAP/SmbMountOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxONTAP.SmbMountOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SmbMountOptionsProperty :: Prelude.Type
+instance ToResourceProperties SmbMountOptionsProperty
+instance Prelude.Eq SmbMountOptionsProperty
+instance Prelude.Show SmbMountOptionsProperty
+instance JSON.ToJSON SmbMountOptionsProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS.hs b/gen/Stratosphere/DataSync/LocationFSxOpenZFS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS.hs
@@ -0,0 +1,76 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS (
+        module Exports, LocationFSxOpenZFS(..), mkLocationFSxOpenZFS
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxOpenZFS.ProtocolProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationFSxOpenZFS
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html>
+    LocationFSxOpenZFS {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-fsxfilesystemarn>
+                        fsxFilesystemArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-protocol>
+                        protocol :: ProtocolProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-securitygrouparns>
+                        securityGroupArns :: (ValueList Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-subdirectory>
+                        subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-tags>
+                        tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationFSxOpenZFS ::
+  ProtocolProperty -> ValueList Prelude.Text -> LocationFSxOpenZFS
+mkLocationFSxOpenZFS protocol securityGroupArns
+  = LocationFSxOpenZFS
+      {haddock_workaround_ = (), protocol = protocol,
+       securityGroupArns = securityGroupArns,
+       fsxFilesystemArn = Prelude.Nothing, subdirectory = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocationFSxOpenZFS where
+  toResourceProperties LocationFSxOpenZFS {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxOpenZFS",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Protocol" JSON..= protocol,
+                            "SecurityGroupArns" JSON..= securityGroupArns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationFSxOpenZFS where
+  toJSON LocationFSxOpenZFS {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Protocol" JSON..= protocol,
+               "SecurityGroupArns" JSON..= securityGroupArns]
+              (Prelude.catMaybes
+                 [(JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "FsxFilesystemArn" LocationFSxOpenZFS where
+  type PropertyType "FsxFilesystemArn" LocationFSxOpenZFS = Value Prelude.Text
+  set newValue LocationFSxOpenZFS {..}
+    = LocationFSxOpenZFS {fsxFilesystemArn = Prelude.pure newValue, ..}
+instance Property "Protocol" LocationFSxOpenZFS where
+  type PropertyType "Protocol" LocationFSxOpenZFS = ProtocolProperty
+  set newValue LocationFSxOpenZFS {..}
+    = LocationFSxOpenZFS {protocol = newValue, ..}
+instance Property "SecurityGroupArns" LocationFSxOpenZFS where
+  type PropertyType "SecurityGroupArns" LocationFSxOpenZFS = ValueList Prelude.Text
+  set newValue LocationFSxOpenZFS {..}
+    = LocationFSxOpenZFS {securityGroupArns = newValue, ..}
+instance Property "Subdirectory" LocationFSxOpenZFS where
+  type PropertyType "Subdirectory" LocationFSxOpenZFS = Value Prelude.Text
+  set newValue LocationFSxOpenZFS {..}
+    = LocationFSxOpenZFS {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationFSxOpenZFS where
+  type PropertyType "Tags" LocationFSxOpenZFS = [Tag]
+  set newValue LocationFSxOpenZFS {..}
+    = LocationFSxOpenZFS {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.MountOptionsProperty (
+        MountOptionsProperty(..), mkMountOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MountOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-mountoptions.html>
+    MountOptionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-mountoptions.html#cfn-datasync-locationfsxopenzfs-mountoptions-version>
+                          version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMountOptionsProperty :: MountOptionsProperty
+mkMountOptionsProperty
+  = MountOptionsProperty
+      {haddock_workaround_ = (), version = Prelude.Nothing}
+instance ToResourceProperties MountOptionsProperty where
+  toResourceProperties MountOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxOpenZFS.MountOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON MountOptionsProperty where
+  toJSON MountOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version]))
+instance Property "Version" MountOptionsProperty where
+  type PropertyType "Version" MountOptionsProperty = Value Prelude.Text
+  set newValue MountOptionsProperty {..}
+    = MountOptionsProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/MountOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.MountOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MountOptionsProperty :: Prelude.Type
+instance ToResourceProperties MountOptionsProperty
+instance Prelude.Eq MountOptionsProperty
+instance Prelude.Show MountOptionsProperty
+instance JSON.ToJSON MountOptionsProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.NFSProperty (
+        module Exports, NFSProperty(..), mkNFSProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxOpenZFS.MountOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+data NFSProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-nfs.html>
+    NFSProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-nfs.html#cfn-datasync-locationfsxopenzfs-nfs-mountoptions>
+                 mountOptions :: MountOptionsProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNFSProperty :: MountOptionsProperty -> NFSProperty
+mkNFSProperty mountOptions
+  = NFSProperty
+      {haddock_workaround_ = (), mountOptions = mountOptions}
+instance ToResourceProperties NFSProperty where
+  toResourceProperties NFSProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxOpenZFS.NFS",
+         supportsTags = Prelude.False,
+         properties = ["MountOptions" JSON..= mountOptions]}
+instance JSON.ToJSON NFSProperty where
+  toJSON NFSProperty {..}
+    = JSON.object ["MountOptions" JSON..= mountOptions]
+instance Property "MountOptions" NFSProperty where
+  type PropertyType "MountOptions" NFSProperty = MountOptionsProperty
+  set newValue NFSProperty {..}
+    = NFSProperty {mountOptions = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/NFSProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.NFSProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NFSProperty :: Prelude.Type
+instance ToResourceProperties NFSProperty
+instance Prelude.Eq NFSProperty
+instance Prelude.Show NFSProperty
+instance JSON.ToJSON NFSProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.ProtocolProperty (
+        module Exports, ProtocolProperty(..), mkProtocolProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationFSxOpenZFS.NFSProperty as Exports
+import Stratosphere.ResourceProperties
+data ProtocolProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-protocol.html>
+    ProtocolProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationfsxopenzfs-protocol.html#cfn-datasync-locationfsxopenzfs-protocol-nfs>
+                      nFS :: (Prelude.Maybe NFSProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProtocolProperty :: ProtocolProperty
+mkProtocolProperty
+  = ProtocolProperty
+      {haddock_workaround_ = (), nFS = Prelude.Nothing}
+instance ToResourceProperties ProtocolProperty where
+  toResourceProperties ProtocolProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxOpenZFS.Protocol",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "NFS" Prelude.<$> nFS])}
+instance JSON.ToJSON ProtocolProperty where
+  toJSON ProtocolProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "NFS" Prelude.<$> nFS]))
+instance Property "NFS" ProtocolProperty where
+  type PropertyType "NFS" ProtocolProperty = NFSProperty
+  set newValue ProtocolProperty {..}
+    = ProtocolProperty {nFS = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs-boot b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxOpenZFS/ProtocolProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationFSxOpenZFS.ProtocolProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProtocolProperty :: Prelude.Type
+instance ToResourceProperties ProtocolProperty
+instance Prelude.Eq ProtocolProperty
+instance Prelude.Show ProtocolProperty
+instance JSON.ToJSON ProtocolProperty
diff --git a/gen/Stratosphere/DataSync/LocationFSxWindows.hs b/gen/Stratosphere/DataSync/LocationFSxWindows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationFSxWindows.hs
@@ -0,0 +1,91 @@
+module Stratosphere.DataSync.LocationFSxWindows (
+        LocationFSxWindows(..), mkLocationFSxWindows
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationFSxWindows
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html>
+    LocationFSxWindows {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-domain>
+                        domain :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-fsxfilesystemarn>
+                        fsxFilesystemArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-password>
+                        password :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-securitygrouparns>
+                        securityGroupArns :: (ValueList Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-subdirectory>
+                        subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-tags>
+                        tags :: (Prelude.Maybe [Tag]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-user>
+                        user :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationFSxWindows ::
+  ValueList Prelude.Text -> Value Prelude.Text -> LocationFSxWindows
+mkLocationFSxWindows securityGroupArns user
+  = LocationFSxWindows
+      {haddock_workaround_ = (), securityGroupArns = securityGroupArns,
+       user = user, domain = Prelude.Nothing,
+       fsxFilesystemArn = Prelude.Nothing, password = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationFSxWindows where
+  toResourceProperties LocationFSxWindows {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationFSxWindows",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SecurityGroupArns" JSON..= securityGroupArns,
+                            "User" JSON..= user]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Domain" Prelude.<$> domain,
+                               (JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                               (JSON..=) "Password" Prelude.<$> password,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationFSxWindows where
+  toJSON LocationFSxWindows {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SecurityGroupArns" JSON..= securityGroupArns,
+               "User" JSON..= user]
+              (Prelude.catMaybes
+                 [(JSON..=) "Domain" Prelude.<$> domain,
+                  (JSON..=) "FsxFilesystemArn" Prelude.<$> fsxFilesystemArn,
+                  (JSON..=) "Password" Prelude.<$> password,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Domain" LocationFSxWindows where
+  type PropertyType "Domain" LocationFSxWindows = Value Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {domain = Prelude.pure newValue, ..}
+instance Property "FsxFilesystemArn" LocationFSxWindows where
+  type PropertyType "FsxFilesystemArn" LocationFSxWindows = Value Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {fsxFilesystemArn = Prelude.pure newValue, ..}
+instance Property "Password" LocationFSxWindows where
+  type PropertyType "Password" LocationFSxWindows = Value Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {password = Prelude.pure newValue, ..}
+instance Property "SecurityGroupArns" LocationFSxWindows where
+  type PropertyType "SecurityGroupArns" LocationFSxWindows = ValueList Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {securityGroupArns = newValue, ..}
+instance Property "Subdirectory" LocationFSxWindows where
+  type PropertyType "Subdirectory" LocationFSxWindows = Value Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationFSxWindows where
+  type PropertyType "Tags" LocationFSxWindows = [Tag]
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {tags = Prelude.pure newValue, ..}
+instance Property "User" LocationFSxWindows where
+  type PropertyType "User" LocationFSxWindows = Value Prelude.Text
+  set newValue LocationFSxWindows {..}
+    = LocationFSxWindows {user = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationHDFS.hs b/gen/Stratosphere/DataSync/LocationHDFS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationHDFS.hs
@@ -0,0 +1,147 @@
+module Stratosphere.DataSync.LocationHDFS (
+        module Exports, LocationHDFS(..), mkLocationHDFS
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationHDFS.NameNodeProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationHDFS.QopConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationHDFS
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html>
+    LocationHDFS {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-agentarns>
+                  agentArns :: (ValueList Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-authenticationtype>
+                  authenticationType :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-blocksize>
+                  blockSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-kerberoskeytab>
+                  kerberosKeytab :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-kerberoskrb5conf>
+                  kerberosKrb5Conf :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-kerberosprincipal>
+                  kerberosPrincipal :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-kmskeyprovideruri>
+                  kmsKeyProviderUri :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-namenodes>
+                  nameNodes :: [NameNodeProperty],
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-qopconfiguration>
+                  qopConfiguration :: (Prelude.Maybe QopConfigurationProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-replicationfactor>
+                  replicationFactor :: (Prelude.Maybe (Value Prelude.Integer)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-simpleuser>
+                  simpleUser :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-subdirectory>
+                  subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-tags>
+                  tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationHDFS ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> [NameNodeProperty] -> LocationHDFS
+mkLocationHDFS agentArns authenticationType nameNodes
+  = LocationHDFS
+      {haddock_workaround_ = (), agentArns = agentArns,
+       authenticationType = authenticationType, nameNodes = nameNodes,
+       blockSize = Prelude.Nothing, kerberosKeytab = Prelude.Nothing,
+       kerberosKrb5Conf = Prelude.Nothing,
+       kerberosPrincipal = Prelude.Nothing,
+       kmsKeyProviderUri = Prelude.Nothing,
+       qopConfiguration = Prelude.Nothing,
+       replicationFactor = Prelude.Nothing, simpleUser = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationHDFS where
+  toResourceProperties LocationHDFS {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationHDFS",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AgentArns" JSON..= agentArns,
+                            "AuthenticationType" JSON..= authenticationType,
+                            "NameNodes" JSON..= nameNodes]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BlockSize" Prelude.<$> blockSize,
+                               (JSON..=) "KerberosKeytab" Prelude.<$> kerberosKeytab,
+                               (JSON..=) "KerberosKrb5Conf" Prelude.<$> kerberosKrb5Conf,
+                               (JSON..=) "KerberosPrincipal" Prelude.<$> kerberosPrincipal,
+                               (JSON..=) "KmsKeyProviderUri" Prelude.<$> kmsKeyProviderUri,
+                               (JSON..=) "QopConfiguration" Prelude.<$> qopConfiguration,
+                               (JSON..=) "ReplicationFactor" Prelude.<$> replicationFactor,
+                               (JSON..=) "SimpleUser" Prelude.<$> simpleUser,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationHDFS where
+  toJSON LocationHDFS {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AgentArns" JSON..= agentArns,
+               "AuthenticationType" JSON..= authenticationType,
+               "NameNodes" JSON..= nameNodes]
+              (Prelude.catMaybes
+                 [(JSON..=) "BlockSize" Prelude.<$> blockSize,
+                  (JSON..=) "KerberosKeytab" Prelude.<$> kerberosKeytab,
+                  (JSON..=) "KerberosKrb5Conf" Prelude.<$> kerberosKrb5Conf,
+                  (JSON..=) "KerberosPrincipal" Prelude.<$> kerberosPrincipal,
+                  (JSON..=) "KmsKeyProviderUri" Prelude.<$> kmsKeyProviderUri,
+                  (JSON..=) "QopConfiguration" Prelude.<$> qopConfiguration,
+                  (JSON..=) "ReplicationFactor" Prelude.<$> replicationFactor,
+                  (JSON..=) "SimpleUser" Prelude.<$> simpleUser,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AgentArns" LocationHDFS where
+  type PropertyType "AgentArns" LocationHDFS = ValueList Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {agentArns = newValue, ..}
+instance Property "AuthenticationType" LocationHDFS where
+  type PropertyType "AuthenticationType" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {authenticationType = newValue, ..}
+instance Property "BlockSize" LocationHDFS where
+  type PropertyType "BlockSize" LocationHDFS = Value Prelude.Integer
+  set newValue LocationHDFS {..}
+    = LocationHDFS {blockSize = Prelude.pure newValue, ..}
+instance Property "KerberosKeytab" LocationHDFS where
+  type PropertyType "KerberosKeytab" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {kerberosKeytab = Prelude.pure newValue, ..}
+instance Property "KerberosKrb5Conf" LocationHDFS where
+  type PropertyType "KerberosKrb5Conf" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {kerberosKrb5Conf = Prelude.pure newValue, ..}
+instance Property "KerberosPrincipal" LocationHDFS where
+  type PropertyType "KerberosPrincipal" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {kerberosPrincipal = Prelude.pure newValue, ..}
+instance Property "KmsKeyProviderUri" LocationHDFS where
+  type PropertyType "KmsKeyProviderUri" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {kmsKeyProviderUri = Prelude.pure newValue, ..}
+instance Property "NameNodes" LocationHDFS where
+  type PropertyType "NameNodes" LocationHDFS = [NameNodeProperty]
+  set newValue LocationHDFS {..}
+    = LocationHDFS {nameNodes = newValue, ..}
+instance Property "QopConfiguration" LocationHDFS where
+  type PropertyType "QopConfiguration" LocationHDFS = QopConfigurationProperty
+  set newValue LocationHDFS {..}
+    = LocationHDFS {qopConfiguration = Prelude.pure newValue, ..}
+instance Property "ReplicationFactor" LocationHDFS where
+  type PropertyType "ReplicationFactor" LocationHDFS = Value Prelude.Integer
+  set newValue LocationHDFS {..}
+    = LocationHDFS {replicationFactor = Prelude.pure newValue, ..}
+instance Property "SimpleUser" LocationHDFS where
+  type PropertyType "SimpleUser" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {simpleUser = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationHDFS where
+  type PropertyType "Subdirectory" LocationHDFS = Value Prelude.Text
+  set newValue LocationHDFS {..}
+    = LocationHDFS {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationHDFS where
+  type PropertyType "Tags" LocationHDFS = [Tag]
+  set newValue LocationHDFS {..}
+    = LocationHDFS {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs b/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.DataSync.LocationHDFS.NameNodeProperty (
+        NameNodeProperty(..), mkNameNodeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NameNodeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-namenode.html>
+    NameNodeProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-namenode.html#cfn-datasync-locationhdfs-namenode-hostname>
+                      hostname :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-namenode.html#cfn-datasync-locationhdfs-namenode-port>
+                      port :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNameNodeProperty ::
+  Value Prelude.Text -> Value Prelude.Integer -> NameNodeProperty
+mkNameNodeProperty hostname port
+  = NameNodeProperty
+      {haddock_workaround_ = (), hostname = hostname, port = port}
+instance ToResourceProperties NameNodeProperty where
+  toResourceProperties NameNodeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationHDFS.NameNode",
+         supportsTags = Prelude.False,
+         properties = ["Hostname" JSON..= hostname, "Port" JSON..= port]}
+instance JSON.ToJSON NameNodeProperty where
+  toJSON NameNodeProperty {..}
+    = JSON.object ["Hostname" JSON..= hostname, "Port" JSON..= port]
+instance Property "Hostname" NameNodeProperty where
+  type PropertyType "Hostname" NameNodeProperty = Value Prelude.Text
+  set newValue NameNodeProperty {..}
+    = NameNodeProperty {hostname = newValue, ..}
+instance Property "Port" NameNodeProperty where
+  type PropertyType "Port" NameNodeProperty = Value Prelude.Integer
+  set newValue NameNodeProperty {..}
+    = NameNodeProperty {port = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs-boot b/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationHDFS/NameNodeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationHDFS.NameNodeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NameNodeProperty :: Prelude.Type
+instance ToResourceProperties NameNodeProperty
+instance Prelude.Eq NameNodeProperty
+instance Prelude.Show NameNodeProperty
+instance JSON.ToJSON NameNodeProperty
diff --git a/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs b/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.DataSync.LocationHDFS.QopConfigurationProperty (
+        QopConfigurationProperty(..), mkQopConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QopConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-qopconfiguration.html>
+    QopConfigurationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-qopconfiguration.html#cfn-datasync-locationhdfs-qopconfiguration-datatransferprotection>
+                              dataTransferProtection :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationhdfs-qopconfiguration.html#cfn-datasync-locationhdfs-qopconfiguration-rpcprotection>
+                              rpcProtection :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQopConfigurationProperty :: QopConfigurationProperty
+mkQopConfigurationProperty
+  = QopConfigurationProperty
+      {haddock_workaround_ = (),
+       dataTransferProtection = Prelude.Nothing,
+       rpcProtection = Prelude.Nothing}
+instance ToResourceProperties QopConfigurationProperty where
+  toResourceProperties QopConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationHDFS.QopConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DataTransferProtection"
+                              Prelude.<$> dataTransferProtection,
+                            (JSON..=) "RpcProtection" Prelude.<$> rpcProtection])}
+instance JSON.ToJSON QopConfigurationProperty where
+  toJSON QopConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DataTransferProtection"
+                 Prelude.<$> dataTransferProtection,
+               (JSON..=) "RpcProtection" Prelude.<$> rpcProtection]))
+instance Property "DataTransferProtection" QopConfigurationProperty where
+  type PropertyType "DataTransferProtection" QopConfigurationProperty = Value Prelude.Text
+  set newValue QopConfigurationProperty {..}
+    = QopConfigurationProperty
+        {dataTransferProtection = Prelude.pure newValue, ..}
+instance Property "RpcProtection" QopConfigurationProperty where
+  type PropertyType "RpcProtection" QopConfigurationProperty = Value Prelude.Text
+  set newValue QopConfigurationProperty {..}
+    = QopConfigurationProperty
+        {rpcProtection = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs-boot b/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationHDFS/QopConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationHDFS.QopConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QopConfigurationProperty :: Prelude.Type
+instance ToResourceProperties QopConfigurationProperty
+instance Prelude.Eq QopConfigurationProperty
+instance Prelude.Show QopConfigurationProperty
+instance JSON.ToJSON QopConfigurationProperty
diff --git a/gen/Stratosphere/DataSync/LocationNFS.hs b/gen/Stratosphere/DataSync/LocationNFS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationNFS.hs
@@ -0,0 +1,75 @@
+module Stratosphere.DataSync.LocationNFS (
+        module Exports, LocationNFS(..), mkLocationNFS
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationNFS.MountOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationNFS.OnPremConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationNFS
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html>
+    LocationNFS {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-mountoptions>
+                 mountOptions :: (Prelude.Maybe MountOptionsProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-onpremconfig>
+                 onPremConfig :: OnPremConfigProperty,
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-serverhostname>
+                 serverHostname :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-subdirectory>
+                 subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html#cfn-datasync-locationnfs-tags>
+                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationNFS :: OnPremConfigProperty -> LocationNFS
+mkLocationNFS onPremConfig
+  = LocationNFS
+      {haddock_workaround_ = (), onPremConfig = onPremConfig,
+       mountOptions = Prelude.Nothing, serverHostname = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationNFS where
+  toResourceProperties LocationNFS {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationNFS",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["OnPremConfig" JSON..= onPremConfig]
+                           (Prelude.catMaybes
+                              [(JSON..=) "MountOptions" Prelude.<$> mountOptions,
+                               (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationNFS where
+  toJSON LocationNFS {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["OnPremConfig" JSON..= onPremConfig]
+              (Prelude.catMaybes
+                 [(JSON..=) "MountOptions" Prelude.<$> mountOptions,
+                  (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "MountOptions" LocationNFS where
+  type PropertyType "MountOptions" LocationNFS = MountOptionsProperty
+  set newValue LocationNFS {..}
+    = LocationNFS {mountOptions = Prelude.pure newValue, ..}
+instance Property "OnPremConfig" LocationNFS where
+  type PropertyType "OnPremConfig" LocationNFS = OnPremConfigProperty
+  set newValue LocationNFS {..}
+    = LocationNFS {onPremConfig = newValue, ..}
+instance Property "ServerHostname" LocationNFS where
+  type PropertyType "ServerHostname" LocationNFS = Value Prelude.Text
+  set newValue LocationNFS {..}
+    = LocationNFS {serverHostname = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationNFS where
+  type PropertyType "Subdirectory" LocationNFS = Value Prelude.Text
+  set newValue LocationNFS {..}
+    = LocationNFS {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationNFS where
+  type PropertyType "Tags" LocationNFS = [Tag]
+  set newValue LocationNFS {..}
+    = LocationNFS {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs b/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationNFS.MountOptionsProperty (
+        MountOptionsProperty(..), mkMountOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MountOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html>
+    MountOptionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-mountoptions.html#cfn-datasync-locationnfs-mountoptions-version>
+                          version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMountOptionsProperty :: MountOptionsProperty
+mkMountOptionsProperty
+  = MountOptionsProperty
+      {haddock_workaround_ = (), version = Prelude.Nothing}
+instance ToResourceProperties MountOptionsProperty where
+  toResourceProperties MountOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationNFS.MountOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON MountOptionsProperty where
+  toJSON MountOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version]))
+instance Property "Version" MountOptionsProperty where
+  type PropertyType "Version" MountOptionsProperty = Value Prelude.Text
+  set newValue MountOptionsProperty {..}
+    = MountOptionsProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs-boot b/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationNFS/MountOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationNFS.MountOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MountOptionsProperty :: Prelude.Type
+instance ToResourceProperties MountOptionsProperty
+instance Prelude.Eq MountOptionsProperty
+instance Prelude.Show MountOptionsProperty
+instance JSON.ToJSON MountOptionsProperty
diff --git a/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs b/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DataSync.LocationNFS.OnPremConfigProperty (
+        OnPremConfigProperty(..), mkOnPremConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnPremConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html>
+    OnPremConfigProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html#cfn-datasync-locationnfs-onpremconfig-agentarns>
+                          agentArns :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnPremConfigProperty ::
+  ValueList Prelude.Text -> OnPremConfigProperty
+mkOnPremConfigProperty agentArns
+  = OnPremConfigProperty
+      {haddock_workaround_ = (), agentArns = agentArns}
+instance ToResourceProperties OnPremConfigProperty where
+  toResourceProperties OnPremConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationNFS.OnPremConfig",
+         supportsTags = Prelude.False,
+         properties = ["AgentArns" JSON..= agentArns]}
+instance JSON.ToJSON OnPremConfigProperty where
+  toJSON OnPremConfigProperty {..}
+    = JSON.object ["AgentArns" JSON..= agentArns]
+instance Property "AgentArns" OnPremConfigProperty where
+  type PropertyType "AgentArns" OnPremConfigProperty = ValueList Prelude.Text
+  set newValue OnPremConfigProperty {..}
+    = OnPremConfigProperty {agentArns = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationNFS/OnPremConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationNFS.OnPremConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnPremConfigProperty :: Prelude.Type
+instance ToResourceProperties OnPremConfigProperty
+instance Prelude.Eq OnPremConfigProperty
+instance Prelude.Show OnPremConfigProperty
+instance JSON.ToJSON OnPremConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage.hs b/gen/Stratosphere/DataSync/LocationObjectStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage.hs
@@ -0,0 +1,139 @@
+module Stratosphere.DataSync.LocationObjectStorage (
+        module Exports, LocationObjectStorage(..), mkLocationObjectStorage
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationObjectStorage.CmkSecretConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationObjectStorage.CustomSecretConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationObjectStorage
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html>
+    LocationObjectStorage {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-accesskey>
+                           accessKey :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-agentarns>
+                           agentArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-bucketname>
+                           bucketName :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-cmksecretconfig>
+                           cmkSecretConfig :: (Prelude.Maybe CmkSecretConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-customsecretconfig>
+                           customSecretConfig :: (Prelude.Maybe CustomSecretConfigProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-secretkey>
+                           secretKey :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-servercertificate>
+                           serverCertificate :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverhostname>
+                           serverHostname :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverport>
+                           serverPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-serverprotocol>
+                           serverProtocol :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-subdirectory>
+                           subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-tags>
+                           tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationObjectStorage :: LocationObjectStorage
+mkLocationObjectStorage
+  = LocationObjectStorage
+      {haddock_workaround_ = (), accessKey = Prelude.Nothing,
+       agentArns = Prelude.Nothing, bucketName = Prelude.Nothing,
+       cmkSecretConfig = Prelude.Nothing,
+       customSecretConfig = Prelude.Nothing, secretKey = Prelude.Nothing,
+       serverCertificate = Prelude.Nothing,
+       serverHostname = Prelude.Nothing, serverPort = Prelude.Nothing,
+       serverProtocol = Prelude.Nothing, subdirectory = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocationObjectStorage where
+  toResourceProperties LocationObjectStorage {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationObjectStorage",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AccessKey" Prelude.<$> accessKey,
+                            (JSON..=) "AgentArns" Prelude.<$> agentArns,
+                            (JSON..=) "BucketName" Prelude.<$> bucketName,
+                            (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+                            (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+                            (JSON..=) "SecretKey" Prelude.<$> secretKey,
+                            (JSON..=) "ServerCertificate" Prelude.<$> serverCertificate,
+                            (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+                            (JSON..=) "ServerPort" Prelude.<$> serverPort,
+                            (JSON..=) "ServerProtocol" Prelude.<$> serverProtocol,
+                            (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON LocationObjectStorage where
+  toJSON LocationObjectStorage {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AccessKey" Prelude.<$> accessKey,
+               (JSON..=) "AgentArns" Prelude.<$> agentArns,
+               (JSON..=) "BucketName" Prelude.<$> bucketName,
+               (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+               (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+               (JSON..=) "SecretKey" Prelude.<$> secretKey,
+               (JSON..=) "ServerCertificate" Prelude.<$> serverCertificate,
+               (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+               (JSON..=) "ServerPort" Prelude.<$> serverPort,
+               (JSON..=) "ServerProtocol" Prelude.<$> serverProtocol,
+               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "AccessKey" LocationObjectStorage where
+  type PropertyType "AccessKey" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {accessKey = Prelude.pure newValue, ..}
+instance Property "AgentArns" LocationObjectStorage where
+  type PropertyType "AgentArns" LocationObjectStorage = ValueList Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {agentArns = Prelude.pure newValue, ..}
+instance Property "BucketName" LocationObjectStorage where
+  type PropertyType "BucketName" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {bucketName = Prelude.pure newValue, ..}
+instance Property "CmkSecretConfig" LocationObjectStorage where
+  type PropertyType "CmkSecretConfig" LocationObjectStorage = CmkSecretConfigProperty
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage
+        {cmkSecretConfig = Prelude.pure newValue, ..}
+instance Property "CustomSecretConfig" LocationObjectStorage where
+  type PropertyType "CustomSecretConfig" LocationObjectStorage = CustomSecretConfigProperty
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage
+        {customSecretConfig = Prelude.pure newValue, ..}
+instance Property "SecretKey" LocationObjectStorage where
+  type PropertyType "SecretKey" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {secretKey = Prelude.pure newValue, ..}
+instance Property "ServerCertificate" LocationObjectStorage where
+  type PropertyType "ServerCertificate" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage
+        {serverCertificate = Prelude.pure newValue, ..}
+instance Property "ServerHostname" LocationObjectStorage where
+  type PropertyType "ServerHostname" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage
+        {serverHostname = Prelude.pure newValue, ..}
+instance Property "ServerPort" LocationObjectStorage where
+  type PropertyType "ServerPort" LocationObjectStorage = Value Prelude.Integer
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {serverPort = Prelude.pure newValue, ..}
+instance Property "ServerProtocol" LocationObjectStorage where
+  type PropertyType "ServerProtocol" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage
+        {serverProtocol = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationObjectStorage where
+  type PropertyType "Subdirectory" LocationObjectStorage = Value Prelude.Text
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationObjectStorage where
+  type PropertyType "Tags" LocationObjectStorage = [Tag]
+  set newValue LocationObjectStorage {..}
+    = LocationObjectStorage {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DataSync.LocationObjectStorage.CmkSecretConfigProperty (
+        CmkSecretConfigProperty(..), mkCmkSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CmkSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-cmksecretconfig.html>
+    CmkSecretConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-cmksecretconfig.html#cfn-datasync-locationobjectstorage-cmksecretconfig-kmskeyarn>
+                             kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-cmksecretconfig.html#cfn-datasync-locationobjectstorage-cmksecretconfig-secretarn>
+                             secretArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCmkSecretConfigProperty :: CmkSecretConfigProperty
+mkCmkSecretConfigProperty
+  = CmkSecretConfigProperty
+      {haddock_workaround_ = (), kmsKeyArn = Prelude.Nothing,
+       secretArn = Prelude.Nothing}
+instance ToResourceProperties CmkSecretConfigProperty where
+  toResourceProperties CmkSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationObjectStorage.CmkSecretConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+                            (JSON..=) "SecretArn" Prelude.<$> secretArn])}
+instance JSON.ToJSON CmkSecretConfigProperty where
+  toJSON CmkSecretConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+               (JSON..=) "SecretArn" Prelude.<$> secretArn]))
+instance Property "KmsKeyArn" CmkSecretConfigProperty where
+  type PropertyType "KmsKeyArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {kmsKeyArn = Prelude.pure newValue, ..}
+instance Property "SecretArn" CmkSecretConfigProperty where
+  type PropertyType "SecretArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {secretArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/CmkSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationObjectStorage.CmkSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CmkSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CmkSecretConfigProperty
+instance Prelude.Eq CmkSecretConfigProperty
+instance Prelude.Show CmkSecretConfigProperty
+instance JSON.ToJSON CmkSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DataSync.LocationObjectStorage.CustomSecretConfigProperty (
+        CustomSecretConfigProperty(..), mkCustomSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-customsecretconfig.html>
+    CustomSecretConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-customsecretconfig.html#cfn-datasync-locationobjectstorage-customsecretconfig-secretaccessrolearn>
+                                secretAccessRoleArn :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-customsecretconfig.html#cfn-datasync-locationobjectstorage-customsecretconfig-secretarn>
+                                secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomSecretConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> CustomSecretConfigProperty
+mkCustomSecretConfigProperty secretAccessRoleArn secretArn
+  = CustomSecretConfigProperty
+      {haddock_workaround_ = (),
+       secretAccessRoleArn = secretAccessRoleArn, secretArn = secretArn}
+instance ToResourceProperties CustomSecretConfigProperty where
+  toResourceProperties CustomSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationObjectStorage.CustomSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+                       "SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON CustomSecretConfigProperty where
+  toJSON CustomSecretConfigProperty {..}
+    = JSON.object
+        ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+         "SecretArn" JSON..= secretArn]
+instance Property "SecretAccessRoleArn" CustomSecretConfigProperty where
+  type PropertyType "SecretAccessRoleArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretAccessRoleArn = newValue, ..}
+instance Property "SecretArn" CustomSecretConfigProperty where
+  type PropertyType "SecretArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/CustomSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationObjectStorage.CustomSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CustomSecretConfigProperty
+instance Prelude.Eq CustomSecretConfigProperty
+instance Prelude.Show CustomSecretConfigProperty
+instance JSON.ToJSON CustomSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DataSync.LocationObjectStorage.ManagedSecretConfigProperty (
+        ManagedSecretConfigProperty(..), mkManagedSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-managedsecretconfig.html>
+    ManagedSecretConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationobjectstorage-managedsecretconfig.html#cfn-datasync-locationobjectstorage-managedsecretconfig-secretarn>
+                                 secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedSecretConfigProperty ::
+  Value Prelude.Text -> ManagedSecretConfigProperty
+mkManagedSecretConfigProperty secretArn
+  = ManagedSecretConfigProperty
+      {haddock_workaround_ = (), secretArn = secretArn}
+instance ToResourceProperties ManagedSecretConfigProperty where
+  toResourceProperties ManagedSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationObjectStorage.ManagedSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON ManagedSecretConfigProperty where
+  toJSON ManagedSecretConfigProperty {..}
+    = JSON.object ["SecretArn" JSON..= secretArn]
+instance Property "SecretArn" ManagedSecretConfigProperty where
+  type PropertyType "SecretArn" ManagedSecretConfigProperty = Value Prelude.Text
+  set newValue ManagedSecretConfigProperty {..}
+    = ManagedSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationObjectStorage/ManagedSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationObjectStorage.ManagedSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties ManagedSecretConfigProperty
+instance Prelude.Eq ManagedSecretConfigProperty
+instance Prelude.Show ManagedSecretConfigProperty
+instance JSON.ToJSON ManagedSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationS3.hs b/gen/Stratosphere/DataSync/LocationS3.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationS3.hs
@@ -0,0 +1,73 @@
+module Stratosphere.DataSync.LocationS3 (
+        module Exports, LocationS3(..), mkLocationS3
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationS3.S3ConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationS3
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html>
+    LocationS3 {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3bucketarn>
+                s3BucketArn :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3config>
+                s3Config :: S3ConfigProperty,
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-s3storageclass>
+                s3StorageClass :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-subdirectory>
+                subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html#cfn-datasync-locations3-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationS3 :: S3ConfigProperty -> LocationS3
+mkLocationS3 s3Config
+  = LocationS3
+      {haddock_workaround_ = (), s3Config = s3Config,
+       s3BucketArn = Prelude.Nothing, s3StorageClass = Prelude.Nothing,
+       subdirectory = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocationS3 where
+  toResourceProperties LocationS3 {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationS3",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["S3Config" JSON..= s3Config]
+                           (Prelude.catMaybes
+                              [(JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn,
+                               (JSON..=) "S3StorageClass" Prelude.<$> s3StorageClass,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocationS3 where
+  toJSON LocationS3 {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["S3Config" JSON..= s3Config]
+              (Prelude.catMaybes
+                 [(JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn,
+                  (JSON..=) "S3StorageClass" Prelude.<$> s3StorageClass,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "S3BucketArn" LocationS3 where
+  type PropertyType "S3BucketArn" LocationS3 = Value Prelude.Text
+  set newValue LocationS3 {..}
+    = LocationS3 {s3BucketArn = Prelude.pure newValue, ..}
+instance Property "S3Config" LocationS3 where
+  type PropertyType "S3Config" LocationS3 = S3ConfigProperty
+  set newValue LocationS3 {..} = LocationS3 {s3Config = newValue, ..}
+instance Property "S3StorageClass" LocationS3 where
+  type PropertyType "S3StorageClass" LocationS3 = Value Prelude.Text
+  set newValue LocationS3 {..}
+    = LocationS3 {s3StorageClass = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationS3 where
+  type PropertyType "Subdirectory" LocationS3 = Value Prelude.Text
+  set newValue LocationS3 {..}
+    = LocationS3 {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationS3 where
+  type PropertyType "Tags" LocationS3 = [Tag]
+  set newValue LocationS3 {..}
+    = LocationS3 {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs b/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DataSync.LocationS3.S3ConfigProperty (
+        S3ConfigProperty(..), mkS3ConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3ConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html>
+    S3ConfigProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locations3-s3config.html#cfn-datasync-locations3-s3config-bucketaccessrolearn>
+                      bucketAccessRoleArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3ConfigProperty :: Value Prelude.Text -> S3ConfigProperty
+mkS3ConfigProperty bucketAccessRoleArn
+  = S3ConfigProperty
+      {haddock_workaround_ = (),
+       bucketAccessRoleArn = bucketAccessRoleArn}
+instance ToResourceProperties S3ConfigProperty where
+  toResourceProperties S3ConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationS3.S3Config",
+         supportsTags = Prelude.False,
+         properties = ["BucketAccessRoleArn" JSON..= bucketAccessRoleArn]}
+instance JSON.ToJSON S3ConfigProperty where
+  toJSON S3ConfigProperty {..}
+    = JSON.object ["BucketAccessRoleArn" JSON..= bucketAccessRoleArn]
+instance Property "BucketAccessRoleArn" S3ConfigProperty where
+  type PropertyType "BucketAccessRoleArn" S3ConfigProperty = Value Prelude.Text
+  set newValue S3ConfigProperty {..}
+    = S3ConfigProperty {bucketAccessRoleArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationS3/S3ConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationS3.S3ConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3ConfigProperty :: Prelude.Type
+instance ToResourceProperties S3ConfigProperty
+instance Prelude.Eq S3ConfigProperty
+instance Prelude.Show S3ConfigProperty
+instance JSON.ToJSON S3ConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationSMB.hs b/gen/Stratosphere/DataSync/LocationSMB.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB.hs
@@ -0,0 +1,164 @@
+module Stratosphere.DataSync.LocationSMB (
+        module Exports, LocationSMB(..), mkLocationSMB
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.LocationSMB.CmkSecretConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationSMB.CustomSecretConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.LocationSMB.MountOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocationSMB
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html>
+    LocationSMB {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-agentarns>
+                 agentArns :: (ValueList Prelude.Text),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-authenticationtype>
+                 authenticationType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-cmksecretconfig>
+                 cmkSecretConfig :: (Prelude.Maybe CmkSecretConfigProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-customsecretconfig>
+                 customSecretConfig :: (Prelude.Maybe CustomSecretConfigProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-dnsipaddresses>
+                 dnsIpAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-domain>
+                 domain :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-kerberoskeytab>
+                 kerberosKeytab :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-kerberoskrb5conf>
+                 kerberosKrb5Conf :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-kerberosprincipal>
+                 kerberosPrincipal :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-mountoptions>
+                 mountOptions :: (Prelude.Maybe MountOptionsProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-password>
+                 password :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-serverhostname>
+                 serverHostname :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-subdirectory>
+                 subdirectory :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-tags>
+                 tags :: (Prelude.Maybe [Tag]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-user>
+                 user :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocationSMB :: ValueList Prelude.Text -> LocationSMB
+mkLocationSMB agentArns
+  = LocationSMB
+      {haddock_workaround_ = (), agentArns = agentArns,
+       authenticationType = Prelude.Nothing,
+       cmkSecretConfig = Prelude.Nothing,
+       customSecretConfig = Prelude.Nothing,
+       dnsIpAddresses = Prelude.Nothing, domain = Prelude.Nothing,
+       kerberosKeytab = Prelude.Nothing,
+       kerberosKrb5Conf = Prelude.Nothing,
+       kerberosPrincipal = Prelude.Nothing,
+       mountOptions = Prelude.Nothing, password = Prelude.Nothing,
+       serverHostname = Prelude.Nothing, subdirectory = Prelude.Nothing,
+       tags = Prelude.Nothing, user = Prelude.Nothing}
+instance ToResourceProperties LocationSMB where
+  toResourceProperties LocationSMB {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationSMB",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AgentArns" JSON..= agentArns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AuthenticationType" Prelude.<$> authenticationType,
+                               (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+                               (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+                               (JSON..=) "DnsIpAddresses" Prelude.<$> dnsIpAddresses,
+                               (JSON..=) "Domain" Prelude.<$> domain,
+                               (JSON..=) "KerberosKeytab" Prelude.<$> kerberosKeytab,
+                               (JSON..=) "KerberosKrb5Conf" Prelude.<$> kerberosKrb5Conf,
+                               (JSON..=) "KerberosPrincipal" Prelude.<$> kerberosPrincipal,
+                               (JSON..=) "MountOptions" Prelude.<$> mountOptions,
+                               (JSON..=) "Password" Prelude.<$> password,
+                               (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+                               (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "User" Prelude.<$> user]))}
+instance JSON.ToJSON LocationSMB where
+  toJSON LocationSMB {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AgentArns" JSON..= agentArns]
+              (Prelude.catMaybes
+                 [(JSON..=) "AuthenticationType" Prelude.<$> authenticationType,
+                  (JSON..=) "CmkSecretConfig" Prelude.<$> cmkSecretConfig,
+                  (JSON..=) "CustomSecretConfig" Prelude.<$> customSecretConfig,
+                  (JSON..=) "DnsIpAddresses" Prelude.<$> dnsIpAddresses,
+                  (JSON..=) "Domain" Prelude.<$> domain,
+                  (JSON..=) "KerberosKeytab" Prelude.<$> kerberosKeytab,
+                  (JSON..=) "KerberosKrb5Conf" Prelude.<$> kerberosKrb5Conf,
+                  (JSON..=) "KerberosPrincipal" Prelude.<$> kerberosPrincipal,
+                  (JSON..=) "MountOptions" Prelude.<$> mountOptions,
+                  (JSON..=) "Password" Prelude.<$> password,
+                  (JSON..=) "ServerHostname" Prelude.<$> serverHostname,
+                  (JSON..=) "Subdirectory" Prelude.<$> subdirectory,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "User" Prelude.<$> user])))
+instance Property "AgentArns" LocationSMB where
+  type PropertyType "AgentArns" LocationSMB = ValueList Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {agentArns = newValue, ..}
+instance Property "AuthenticationType" LocationSMB where
+  type PropertyType "AuthenticationType" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {authenticationType = Prelude.pure newValue, ..}
+instance Property "CmkSecretConfig" LocationSMB where
+  type PropertyType "CmkSecretConfig" LocationSMB = CmkSecretConfigProperty
+  set newValue LocationSMB {..}
+    = LocationSMB {cmkSecretConfig = Prelude.pure newValue, ..}
+instance Property "CustomSecretConfig" LocationSMB where
+  type PropertyType "CustomSecretConfig" LocationSMB = CustomSecretConfigProperty
+  set newValue LocationSMB {..}
+    = LocationSMB {customSecretConfig = Prelude.pure newValue, ..}
+instance Property "DnsIpAddresses" LocationSMB where
+  type PropertyType "DnsIpAddresses" LocationSMB = ValueList Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {dnsIpAddresses = Prelude.pure newValue, ..}
+instance Property "Domain" LocationSMB where
+  type PropertyType "Domain" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {domain = Prelude.pure newValue, ..}
+instance Property "KerberosKeytab" LocationSMB where
+  type PropertyType "KerberosKeytab" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {kerberosKeytab = Prelude.pure newValue, ..}
+instance Property "KerberosKrb5Conf" LocationSMB where
+  type PropertyType "KerberosKrb5Conf" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {kerberosKrb5Conf = Prelude.pure newValue, ..}
+instance Property "KerberosPrincipal" LocationSMB where
+  type PropertyType "KerberosPrincipal" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {kerberosPrincipal = Prelude.pure newValue, ..}
+instance Property "MountOptions" LocationSMB where
+  type PropertyType "MountOptions" LocationSMB = MountOptionsProperty
+  set newValue LocationSMB {..}
+    = LocationSMB {mountOptions = Prelude.pure newValue, ..}
+instance Property "Password" LocationSMB where
+  type PropertyType "Password" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {password = Prelude.pure newValue, ..}
+instance Property "ServerHostname" LocationSMB where
+  type PropertyType "ServerHostname" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {serverHostname = Prelude.pure newValue, ..}
+instance Property "Subdirectory" LocationSMB where
+  type PropertyType "Subdirectory" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {subdirectory = Prelude.pure newValue, ..}
+instance Property "Tags" LocationSMB where
+  type PropertyType "Tags" LocationSMB = [Tag]
+  set newValue LocationSMB {..}
+    = LocationSMB {tags = Prelude.pure newValue, ..}
+instance Property "User" LocationSMB where
+  type PropertyType "User" LocationSMB = Value Prelude.Text
+  set newValue LocationSMB {..}
+    = LocationSMB {user = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DataSync.LocationSMB.CmkSecretConfigProperty (
+        CmkSecretConfigProperty(..), mkCmkSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CmkSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-cmksecretconfig.html>
+    CmkSecretConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-cmksecretconfig.html#cfn-datasync-locationsmb-cmksecretconfig-kmskeyarn>
+                             kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-cmksecretconfig.html#cfn-datasync-locationsmb-cmksecretconfig-secretarn>
+                             secretArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCmkSecretConfigProperty :: CmkSecretConfigProperty
+mkCmkSecretConfigProperty
+  = CmkSecretConfigProperty
+      {haddock_workaround_ = (), kmsKeyArn = Prelude.Nothing,
+       secretArn = Prelude.Nothing}
+instance ToResourceProperties CmkSecretConfigProperty where
+  toResourceProperties CmkSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationSMB.CmkSecretConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+                            (JSON..=) "SecretArn" Prelude.<$> secretArn])}
+instance JSON.ToJSON CmkSecretConfigProperty where
+  toJSON CmkSecretConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+               (JSON..=) "SecretArn" Prelude.<$> secretArn]))
+instance Property "KmsKeyArn" CmkSecretConfigProperty where
+  type PropertyType "KmsKeyArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {kmsKeyArn = Prelude.pure newValue, ..}
+instance Property "SecretArn" CmkSecretConfigProperty where
+  type PropertyType "SecretArn" CmkSecretConfigProperty = Value Prelude.Text
+  set newValue CmkSecretConfigProperty {..}
+    = CmkSecretConfigProperty {secretArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/CmkSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationSMB.CmkSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CmkSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CmkSecretConfigProperty
+instance Prelude.Eq CmkSecretConfigProperty
+instance Prelude.Show CmkSecretConfigProperty
+instance JSON.ToJSON CmkSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DataSync.LocationSMB.CustomSecretConfigProperty (
+        CustomSecretConfigProperty(..), mkCustomSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CustomSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-customsecretconfig.html>
+    CustomSecretConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-customsecretconfig.html#cfn-datasync-locationsmb-customsecretconfig-secretaccessrolearn>
+                                secretAccessRoleArn :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-customsecretconfig.html#cfn-datasync-locationsmb-customsecretconfig-secretarn>
+                                secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomSecretConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> CustomSecretConfigProperty
+mkCustomSecretConfigProperty secretAccessRoleArn secretArn
+  = CustomSecretConfigProperty
+      {haddock_workaround_ = (),
+       secretAccessRoleArn = secretAccessRoleArn, secretArn = secretArn}
+instance ToResourceProperties CustomSecretConfigProperty where
+  toResourceProperties CustomSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationSMB.CustomSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+                       "SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON CustomSecretConfigProperty where
+  toJSON CustomSecretConfigProperty {..}
+    = JSON.object
+        ["SecretAccessRoleArn" JSON..= secretAccessRoleArn,
+         "SecretArn" JSON..= secretArn]
+instance Property "SecretAccessRoleArn" CustomSecretConfigProperty where
+  type PropertyType "SecretAccessRoleArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretAccessRoleArn = newValue, ..}
+instance Property "SecretArn" CustomSecretConfigProperty where
+  type PropertyType "SecretArn" CustomSecretConfigProperty = Value Prelude.Text
+  set newValue CustomSecretConfigProperty {..}
+    = CustomSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/CustomSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationSMB.CustomSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CustomSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties CustomSecretConfigProperty
+instance Prelude.Eq CustomSecretConfigProperty
+instance Prelude.Show CustomSecretConfigProperty
+instance JSON.ToJSON CustomSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs b/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DataSync.LocationSMB.ManagedSecretConfigProperty (
+        ManagedSecretConfigProperty(..), mkManagedSecretConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManagedSecretConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-managedsecretconfig.html>
+    ManagedSecretConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-managedsecretconfig.html#cfn-datasync-locationsmb-managedsecretconfig-secretarn>
+                                 secretArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManagedSecretConfigProperty ::
+  Value Prelude.Text -> ManagedSecretConfigProperty
+mkManagedSecretConfigProperty secretArn
+  = ManagedSecretConfigProperty
+      {haddock_workaround_ = (), secretArn = secretArn}
+instance ToResourceProperties ManagedSecretConfigProperty where
+  toResourceProperties ManagedSecretConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationSMB.ManagedSecretConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecretArn" JSON..= secretArn]}
+instance JSON.ToJSON ManagedSecretConfigProperty where
+  toJSON ManagedSecretConfigProperty {..}
+    = JSON.object ["SecretArn" JSON..= secretArn]
+instance Property "SecretArn" ManagedSecretConfigProperty where
+  type PropertyType "SecretArn" ManagedSecretConfigProperty = Value Prelude.Text
+  set newValue ManagedSecretConfigProperty {..}
+    = ManagedSecretConfigProperty {secretArn = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs-boot b/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/ManagedSecretConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationSMB.ManagedSecretConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManagedSecretConfigProperty :: Prelude.Type
+instance ToResourceProperties ManagedSecretConfigProperty
+instance Prelude.Eq ManagedSecretConfigProperty
+instance Prelude.Show ManagedSecretConfigProperty
+instance JSON.ToJSON ManagedSecretConfigProperty
diff --git a/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs b/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.LocationSMB.MountOptionsProperty (
+        MountOptionsProperty(..), mkMountOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MountOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html>
+    MountOptionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationsmb-mountoptions.html#cfn-datasync-locationsmb-mountoptions-version>
+                          version :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMountOptionsProperty :: MountOptionsProperty
+mkMountOptionsProperty
+  = MountOptionsProperty
+      {haddock_workaround_ = (), version = Prelude.Nothing}
+instance ToResourceProperties MountOptionsProperty where
+  toResourceProperties MountOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::LocationSMB.MountOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version])}
+instance JSON.ToJSON MountOptionsProperty where
+  toJSON MountOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Version" Prelude.<$> version]))
+instance Property "Version" MountOptionsProperty where
+  type PropertyType "Version" MountOptionsProperty = Value Prelude.Text
+  set newValue MountOptionsProperty {..}
+    = MountOptionsProperty {version = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs-boot b/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/LocationSMB/MountOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.LocationSMB.MountOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MountOptionsProperty :: Prelude.Type
+instance ToResourceProperties MountOptionsProperty
+instance Prelude.Eq MountOptionsProperty
+instance Prelude.Show MountOptionsProperty
+instance JSON.ToJSON MountOptionsProperty
diff --git a/gen/Stratosphere/DataSync/Task.hs b/gen/Stratosphere/DataSync/Task.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task.hs
@@ -0,0 +1,137 @@
+module Stratosphere.DataSync.Task (
+        module Exports, Task(..), mkTask
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.FilterRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.ManifestConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.OptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.TaskReportConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.TaskScheduleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Task
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html>
+    Task {haddock_workaround_ :: (),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-cloudwatchloggrouparn>
+          cloudWatchLogGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-destinationlocationarn>
+          destinationLocationArn :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-excludes>
+          excludes :: (Prelude.Maybe [FilterRuleProperty]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-includes>
+          includes :: (Prelude.Maybe [FilterRuleProperty]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-manifestconfig>
+          manifestConfig :: (Prelude.Maybe ManifestConfigProperty),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-name>
+          name :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-options>
+          options :: (Prelude.Maybe OptionsProperty),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-schedule>
+          schedule :: (Prelude.Maybe TaskScheduleProperty),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-sourcelocationarn>
+          sourceLocationArn :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-tags>
+          tags :: (Prelude.Maybe [Tag]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-taskmode>
+          taskMode :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-taskreportconfig>
+          taskReportConfig :: (Prelude.Maybe TaskReportConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTask :: Value Prelude.Text -> Value Prelude.Text -> Task
+mkTask destinationLocationArn sourceLocationArn
+  = Task
+      {haddock_workaround_ = (),
+       destinationLocationArn = destinationLocationArn,
+       sourceLocationArn = sourceLocationArn,
+       cloudWatchLogGroupArn = Prelude.Nothing,
+       excludes = Prelude.Nothing, includes = Prelude.Nothing,
+       manifestConfig = Prelude.Nothing, name = Prelude.Nothing,
+       options = Prelude.Nothing, schedule = Prelude.Nothing,
+       tags = Prelude.Nothing, taskMode = Prelude.Nothing,
+       taskReportConfig = Prelude.Nothing}
+instance ToResourceProperties Task where
+  toResourceProperties Task {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DestinationLocationArn" JSON..= destinationLocationArn,
+                            "SourceLocationArn" JSON..= sourceLocationArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CloudWatchLogGroupArn"
+                                 Prelude.<$> cloudWatchLogGroupArn,
+                               (JSON..=) "Excludes" Prelude.<$> excludes,
+                               (JSON..=) "Includes" Prelude.<$> includes,
+                               (JSON..=) "ManifestConfig" Prelude.<$> manifestConfig,
+                               (JSON..=) "Name" Prelude.<$> name,
+                               (JSON..=) "Options" Prelude.<$> options,
+                               (JSON..=) "Schedule" Prelude.<$> schedule,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TaskMode" Prelude.<$> taskMode,
+                               (JSON..=) "TaskReportConfig" Prelude.<$> taskReportConfig]))}
+instance JSON.ToJSON Task where
+  toJSON Task {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DestinationLocationArn" JSON..= destinationLocationArn,
+               "SourceLocationArn" JSON..= sourceLocationArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "CloudWatchLogGroupArn"
+                    Prelude.<$> cloudWatchLogGroupArn,
+                  (JSON..=) "Excludes" Prelude.<$> excludes,
+                  (JSON..=) "Includes" Prelude.<$> includes,
+                  (JSON..=) "ManifestConfig" Prelude.<$> manifestConfig,
+                  (JSON..=) "Name" Prelude.<$> name,
+                  (JSON..=) "Options" Prelude.<$> options,
+                  (JSON..=) "Schedule" Prelude.<$> schedule,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TaskMode" Prelude.<$> taskMode,
+                  (JSON..=) "TaskReportConfig" Prelude.<$> taskReportConfig])))
+instance Property "CloudWatchLogGroupArn" Task where
+  type PropertyType "CloudWatchLogGroupArn" Task = Value Prelude.Text
+  set newValue Task {..}
+    = Task {cloudWatchLogGroupArn = Prelude.pure newValue, ..}
+instance Property "DestinationLocationArn" Task where
+  type PropertyType "DestinationLocationArn" Task = Value Prelude.Text
+  set newValue Task {..}
+    = Task {destinationLocationArn = newValue, ..}
+instance Property "Excludes" Task where
+  type PropertyType "Excludes" Task = [FilterRuleProperty]
+  set newValue Task {..}
+    = Task {excludes = Prelude.pure newValue, ..}
+instance Property "Includes" Task where
+  type PropertyType "Includes" Task = [FilterRuleProperty]
+  set newValue Task {..}
+    = Task {includes = Prelude.pure newValue, ..}
+instance Property "ManifestConfig" Task where
+  type PropertyType "ManifestConfig" Task = ManifestConfigProperty
+  set newValue Task {..}
+    = Task {manifestConfig = Prelude.pure newValue, ..}
+instance Property "Name" Task where
+  type PropertyType "Name" Task = Value Prelude.Text
+  set newValue Task {..} = Task {name = Prelude.pure newValue, ..}
+instance Property "Options" Task where
+  type PropertyType "Options" Task = OptionsProperty
+  set newValue Task {..} = Task {options = Prelude.pure newValue, ..}
+instance Property "Schedule" Task where
+  type PropertyType "Schedule" Task = TaskScheduleProperty
+  set newValue Task {..}
+    = Task {schedule = Prelude.pure newValue, ..}
+instance Property "SourceLocationArn" Task where
+  type PropertyType "SourceLocationArn" Task = Value Prelude.Text
+  set newValue Task {..} = Task {sourceLocationArn = newValue, ..}
+instance Property "Tags" Task where
+  type PropertyType "Tags" Task = [Tag]
+  set newValue Task {..} = Task {tags = Prelude.pure newValue, ..}
+instance Property "TaskMode" Task where
+  type PropertyType "TaskMode" Task = Value Prelude.Text
+  set newValue Task {..}
+    = Task {taskMode = Prelude.pure newValue, ..}
+instance Property "TaskReportConfig" Task where
+  type PropertyType "TaskReportConfig" Task = TaskReportConfigProperty
+  set newValue Task {..}
+    = Task {taskReportConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/DeletedProperty.hs b/gen/Stratosphere/DataSync/Task/DeletedProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/DeletedProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.DataSync.Task.DeletedProperty (
+        DeletedProperty(..), mkDeletedProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeletedProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-deleted.html>
+    DeletedProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-deleted.html#cfn-datasync-task-deleted-reportlevel>
+                     reportLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeletedProperty :: DeletedProperty
+mkDeletedProperty
+  = DeletedProperty
+      {haddock_workaround_ = (), reportLevel = Prelude.Nothing}
+instance ToResourceProperties DeletedProperty where
+  toResourceProperties DeletedProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Deleted",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReportLevel" Prelude.<$> reportLevel])}
+instance JSON.ToJSON DeletedProperty where
+  toJSON DeletedProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReportLevel" Prelude.<$> reportLevel]))
+instance Property "ReportLevel" DeletedProperty where
+  type PropertyType "ReportLevel" DeletedProperty = Value Prelude.Text
+  set newValue DeletedProperty {..}
+    = DeletedProperty {reportLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/DeletedProperty.hs-boot b/gen/Stratosphere/DataSync/Task/DeletedProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/DeletedProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.DeletedProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeletedProperty :: Prelude.Type
+instance ToResourceProperties DeletedProperty
+instance Prelude.Eq DeletedProperty
+instance Prelude.Show DeletedProperty
+instance JSON.ToJSON DeletedProperty
diff --git a/gen/Stratosphere/DataSync/Task/DestinationProperty.hs b/gen/Stratosphere/DataSync/Task/DestinationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/DestinationProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DataSync.Task.DestinationProperty (
+        module Exports, DestinationProperty(..), mkDestinationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.TaskReportConfigDestinationS3Property as Exports
+import Stratosphere.ResourceProperties
+data DestinationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-destination.html>
+    DestinationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-destination.html#cfn-datasync-task-destination-s3>
+                         s3 :: (Prelude.Maybe TaskReportConfigDestinationS3Property)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDestinationProperty :: DestinationProperty
+mkDestinationProperty
+  = DestinationProperty
+      {haddock_workaround_ = (), s3 = Prelude.Nothing}
+instance ToResourceProperties DestinationProperty where
+  toResourceProperties DestinationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Destination",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "S3" Prelude.<$> s3])}
+instance JSON.ToJSON DestinationProperty where
+  toJSON DestinationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "S3" Prelude.<$> s3]))
+instance Property "S3" DestinationProperty where
+  type PropertyType "S3" DestinationProperty = TaskReportConfigDestinationS3Property
+  set newValue DestinationProperty {..}
+    = DestinationProperty {s3 = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/DestinationProperty.hs-boot b/gen/Stratosphere/DataSync/Task/DestinationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/DestinationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.DestinationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DestinationProperty :: Prelude.Type
+instance ToResourceProperties DestinationProperty
+instance Prelude.Eq DestinationProperty
+instance Prelude.Show DestinationProperty
+instance JSON.ToJSON DestinationProperty
diff --git a/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs b/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.DataSync.Task.FilterRuleProperty (
+        FilterRuleProperty(..), mkFilterRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FilterRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html>
+    FilterRuleProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-filtertype>
+                        filterType :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-filterrule.html#cfn-datasync-task-filterrule-value>
+                        value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFilterRuleProperty :: FilterRuleProperty
+mkFilterRuleProperty
+  = FilterRuleProperty
+      {haddock_workaround_ = (), filterType = Prelude.Nothing,
+       value = Prelude.Nothing}
+instance ToResourceProperties FilterRuleProperty where
+  toResourceProperties FilterRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.FilterRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FilterType" Prelude.<$> filterType,
+                            (JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON FilterRuleProperty where
+  toJSON FilterRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FilterType" Prelude.<$> filterType,
+               (JSON..=) "Value" Prelude.<$> value]))
+instance Property "FilterType" FilterRuleProperty where
+  type PropertyType "FilterType" FilterRuleProperty = Value Prelude.Text
+  set newValue FilterRuleProperty {..}
+    = FilterRuleProperty {filterType = Prelude.pure newValue, ..}
+instance Property "Value" FilterRuleProperty where
+  type PropertyType "Value" FilterRuleProperty = Value Prelude.Text
+  set newValue FilterRuleProperty {..}
+    = FilterRuleProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs-boot b/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/FilterRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.FilterRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FilterRuleProperty :: Prelude.Type
+instance ToResourceProperties FilterRuleProperty
+instance Prelude.Eq FilterRuleProperty
+instance Prelude.Show FilterRuleProperty
+instance JSON.ToJSON FilterRuleProperty
diff --git a/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs b/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.DataSync.Task.ManifestConfigProperty (
+        module Exports, ManifestConfigProperty(..),
+        mkManifestConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.SourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManifestConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfig.html>
+    ManifestConfigProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfig.html#cfn-datasync-task-manifestconfig-action>
+                            action :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfig.html#cfn-datasync-task-manifestconfig-format>
+                            format :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfig.html#cfn-datasync-task-manifestconfig-source>
+                            source :: SourceProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManifestConfigProperty ::
+  SourceProperty -> ManifestConfigProperty
+mkManifestConfigProperty source
+  = ManifestConfigProperty
+      {haddock_workaround_ = (), source = source,
+       action = Prelude.Nothing, format = Prelude.Nothing}
+instance ToResourceProperties ManifestConfigProperty where
+  toResourceProperties ManifestConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.ManifestConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Source" JSON..= source]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Action" Prelude.<$> action,
+                               (JSON..=) "Format" Prelude.<$> format]))}
+instance JSON.ToJSON ManifestConfigProperty where
+  toJSON ManifestConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Source" JSON..= source]
+              (Prelude.catMaybes
+                 [(JSON..=) "Action" Prelude.<$> action,
+                  (JSON..=) "Format" Prelude.<$> format])))
+instance Property "Action" ManifestConfigProperty where
+  type PropertyType "Action" ManifestConfigProperty = Value Prelude.Text
+  set newValue ManifestConfigProperty {..}
+    = ManifestConfigProperty {action = Prelude.pure newValue, ..}
+instance Property "Format" ManifestConfigProperty where
+  type PropertyType "Format" ManifestConfigProperty = Value Prelude.Text
+  set newValue ManifestConfigProperty {..}
+    = ManifestConfigProperty {format = Prelude.pure newValue, ..}
+instance Property "Source" ManifestConfigProperty where
+  type PropertyType "Source" ManifestConfigProperty = SourceProperty
+  set newValue ManifestConfigProperty {..}
+    = ManifestConfigProperty {source = newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs-boot b/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/ManifestConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.ManifestConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManifestConfigProperty :: Prelude.Type
+instance ToResourceProperties ManifestConfigProperty
+instance Prelude.Eq ManifestConfigProperty
+instance Prelude.Show ManifestConfigProperty
+instance JSON.ToJSON ManifestConfigProperty
diff --git a/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs b/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs
@@ -0,0 +1,70 @@
+module Stratosphere.DataSync.Task.ManifestConfigSourceS3Property (
+        ManifestConfigSourceS3Property(..),
+        mkManifestConfigSourceS3Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ManifestConfigSourceS3Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfigsources3.html>
+    ManifestConfigSourceS3Property {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfigsources3.html#cfn-datasync-task-manifestconfigsources3-bucketaccessrolearn>
+                                    bucketAccessRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfigsources3.html#cfn-datasync-task-manifestconfigsources3-manifestobjectpath>
+                                    manifestObjectPath :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfigsources3.html#cfn-datasync-task-manifestconfigsources3-manifestobjectversionid>
+                                    manifestObjectVersionId :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-manifestconfigsources3.html#cfn-datasync-task-manifestconfigsources3-s3bucketarn>
+                                    s3BucketArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkManifestConfigSourceS3Property :: ManifestConfigSourceS3Property
+mkManifestConfigSourceS3Property
+  = ManifestConfigSourceS3Property
+      {haddock_workaround_ = (), bucketAccessRoleArn = Prelude.Nothing,
+       manifestObjectPath = Prelude.Nothing,
+       manifestObjectVersionId = Prelude.Nothing,
+       s3BucketArn = Prelude.Nothing}
+instance ToResourceProperties ManifestConfigSourceS3Property where
+  toResourceProperties ManifestConfigSourceS3Property {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.ManifestConfigSourceS3",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BucketAccessRoleArn" Prelude.<$> bucketAccessRoleArn,
+                            (JSON..=) "ManifestObjectPath" Prelude.<$> manifestObjectPath,
+                            (JSON..=) "ManifestObjectVersionId"
+                              Prelude.<$> manifestObjectVersionId,
+                            (JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn])}
+instance JSON.ToJSON ManifestConfigSourceS3Property where
+  toJSON ManifestConfigSourceS3Property {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BucketAccessRoleArn" Prelude.<$> bucketAccessRoleArn,
+               (JSON..=) "ManifestObjectPath" Prelude.<$> manifestObjectPath,
+               (JSON..=) "ManifestObjectVersionId"
+                 Prelude.<$> manifestObjectVersionId,
+               (JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn]))
+instance Property "BucketAccessRoleArn" ManifestConfigSourceS3Property where
+  type PropertyType "BucketAccessRoleArn" ManifestConfigSourceS3Property = Value Prelude.Text
+  set newValue ManifestConfigSourceS3Property {..}
+    = ManifestConfigSourceS3Property
+        {bucketAccessRoleArn = Prelude.pure newValue, ..}
+instance Property "ManifestObjectPath" ManifestConfigSourceS3Property where
+  type PropertyType "ManifestObjectPath" ManifestConfigSourceS3Property = Value Prelude.Text
+  set newValue ManifestConfigSourceS3Property {..}
+    = ManifestConfigSourceS3Property
+        {manifestObjectPath = Prelude.pure newValue, ..}
+instance Property "ManifestObjectVersionId" ManifestConfigSourceS3Property where
+  type PropertyType "ManifestObjectVersionId" ManifestConfigSourceS3Property = Value Prelude.Text
+  set newValue ManifestConfigSourceS3Property {..}
+    = ManifestConfigSourceS3Property
+        {manifestObjectVersionId = Prelude.pure newValue, ..}
+instance Property "S3BucketArn" ManifestConfigSourceS3Property where
+  type PropertyType "S3BucketArn" ManifestConfigSourceS3Property = Value Prelude.Text
+  set newValue ManifestConfigSourceS3Property {..}
+    = ManifestConfigSourceS3Property
+        {s3BucketArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs-boot b/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/ManifestConfigSourceS3Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.ManifestConfigSourceS3Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ManifestConfigSourceS3Property :: Prelude.Type
+instance ToResourceProperties ManifestConfigSourceS3Property
+instance Prelude.Eq ManifestConfigSourceS3Property
+instance Prelude.Show ManifestConfigSourceS3Property
+instance JSON.ToJSON ManifestConfigSourceS3Property
diff --git a/gen/Stratosphere/DataSync/Task/OptionsProperty.hs b/gen/Stratosphere/DataSync/Task/OptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/OptionsProperty.hs
@@ -0,0 +1,161 @@
+module Stratosphere.DataSync.Task.OptionsProperty (
+        OptionsProperty(..), mkOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html>
+    OptionsProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-atime>
+                     atime :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-bytespersecond>
+                     bytesPerSecond :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-gid>
+                     gid :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-loglevel>
+                     logLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-mtime>
+                     mtime :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-objecttags>
+                     objectTags :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-overwritemode>
+                     overwriteMode :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-posixpermissions>
+                     posixPermissions :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedeletedfiles>
+                     preserveDeletedFiles :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-preservedevices>
+                     preserveDevices :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-securitydescriptorcopyflags>
+                     securityDescriptorCopyFlags :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-taskqueueing>
+                     taskQueueing :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-transfermode>
+                     transferMode :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-uid>
+                     uid :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-options.html#cfn-datasync-task-options-verifymode>
+                     verifyMode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOptionsProperty :: OptionsProperty
+mkOptionsProperty
+  = OptionsProperty
+      {haddock_workaround_ = (), atime = Prelude.Nothing,
+       bytesPerSecond = Prelude.Nothing, gid = Prelude.Nothing,
+       logLevel = Prelude.Nothing, mtime = Prelude.Nothing,
+       objectTags = Prelude.Nothing, overwriteMode = Prelude.Nothing,
+       posixPermissions = Prelude.Nothing,
+       preserveDeletedFiles = Prelude.Nothing,
+       preserveDevices = Prelude.Nothing,
+       securityDescriptorCopyFlags = Prelude.Nothing,
+       taskQueueing = Prelude.Nothing, transferMode = Prelude.Nothing,
+       uid = Prelude.Nothing, verifyMode = Prelude.Nothing}
+instance ToResourceProperties OptionsProperty where
+  toResourceProperties OptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Options",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Atime" Prelude.<$> atime,
+                            (JSON..=) "BytesPerSecond" Prelude.<$> bytesPerSecond,
+                            (JSON..=) "Gid" Prelude.<$> gid,
+                            (JSON..=) "LogLevel" Prelude.<$> logLevel,
+                            (JSON..=) "Mtime" Prelude.<$> mtime,
+                            (JSON..=) "ObjectTags" Prelude.<$> objectTags,
+                            (JSON..=) "OverwriteMode" Prelude.<$> overwriteMode,
+                            (JSON..=) "PosixPermissions" Prelude.<$> posixPermissions,
+                            (JSON..=) "PreserveDeletedFiles" Prelude.<$> preserveDeletedFiles,
+                            (JSON..=) "PreserveDevices" Prelude.<$> preserveDevices,
+                            (JSON..=) "SecurityDescriptorCopyFlags"
+                              Prelude.<$> securityDescriptorCopyFlags,
+                            (JSON..=) "TaskQueueing" Prelude.<$> taskQueueing,
+                            (JSON..=) "TransferMode" Prelude.<$> transferMode,
+                            (JSON..=) "Uid" Prelude.<$> uid,
+                            (JSON..=) "VerifyMode" Prelude.<$> verifyMode])}
+instance JSON.ToJSON OptionsProperty where
+  toJSON OptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Atime" Prelude.<$> atime,
+               (JSON..=) "BytesPerSecond" Prelude.<$> bytesPerSecond,
+               (JSON..=) "Gid" Prelude.<$> gid,
+               (JSON..=) "LogLevel" Prelude.<$> logLevel,
+               (JSON..=) "Mtime" Prelude.<$> mtime,
+               (JSON..=) "ObjectTags" Prelude.<$> objectTags,
+               (JSON..=) "OverwriteMode" Prelude.<$> overwriteMode,
+               (JSON..=) "PosixPermissions" Prelude.<$> posixPermissions,
+               (JSON..=) "PreserveDeletedFiles" Prelude.<$> preserveDeletedFiles,
+               (JSON..=) "PreserveDevices" Prelude.<$> preserveDevices,
+               (JSON..=) "SecurityDescriptorCopyFlags"
+                 Prelude.<$> securityDescriptorCopyFlags,
+               (JSON..=) "TaskQueueing" Prelude.<$> taskQueueing,
+               (JSON..=) "TransferMode" Prelude.<$> transferMode,
+               (JSON..=) "Uid" Prelude.<$> uid,
+               (JSON..=) "VerifyMode" Prelude.<$> verifyMode]))
+instance Property "Atime" OptionsProperty where
+  type PropertyType "Atime" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {atime = Prelude.pure newValue, ..}
+instance Property "BytesPerSecond" OptionsProperty where
+  type PropertyType "BytesPerSecond" OptionsProperty = Value Prelude.Integer
+  set newValue OptionsProperty {..}
+    = OptionsProperty {bytesPerSecond = Prelude.pure newValue, ..}
+instance Property "Gid" OptionsProperty where
+  type PropertyType "Gid" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {gid = Prelude.pure newValue, ..}
+instance Property "LogLevel" OptionsProperty where
+  type PropertyType "LogLevel" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {logLevel = Prelude.pure newValue, ..}
+instance Property "Mtime" OptionsProperty where
+  type PropertyType "Mtime" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {mtime = Prelude.pure newValue, ..}
+instance Property "ObjectTags" OptionsProperty where
+  type PropertyType "ObjectTags" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {objectTags = Prelude.pure newValue, ..}
+instance Property "OverwriteMode" OptionsProperty where
+  type PropertyType "OverwriteMode" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {overwriteMode = Prelude.pure newValue, ..}
+instance Property "PosixPermissions" OptionsProperty where
+  type PropertyType "PosixPermissions" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {posixPermissions = Prelude.pure newValue, ..}
+instance Property "PreserveDeletedFiles" OptionsProperty where
+  type PropertyType "PreserveDeletedFiles" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {preserveDeletedFiles = Prelude.pure newValue, ..}
+instance Property "PreserveDevices" OptionsProperty where
+  type PropertyType "PreserveDevices" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {preserveDevices = Prelude.pure newValue, ..}
+instance Property "SecurityDescriptorCopyFlags" OptionsProperty where
+  type PropertyType "SecurityDescriptorCopyFlags" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {securityDescriptorCopyFlags = Prelude.pure newValue, ..}
+instance Property "TaskQueueing" OptionsProperty where
+  type PropertyType "TaskQueueing" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {taskQueueing = Prelude.pure newValue, ..}
+instance Property "TransferMode" OptionsProperty where
+  type PropertyType "TransferMode" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {transferMode = Prelude.pure newValue, ..}
+instance Property "Uid" OptionsProperty where
+  type PropertyType "Uid" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {uid = Prelude.pure newValue, ..}
+instance Property "VerifyMode" OptionsProperty where
+  type PropertyType "VerifyMode" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {verifyMode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/OptionsProperty.hs-boot b/gen/Stratosphere/DataSync/Task/OptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/OptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.OptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OptionsProperty :: Prelude.Type
+instance ToResourceProperties OptionsProperty
+instance Prelude.Eq OptionsProperty
+instance Prelude.Show OptionsProperty
+instance JSON.ToJSON OptionsProperty
diff --git a/gen/Stratosphere/DataSync/Task/OverridesProperty.hs b/gen/Stratosphere/DataSync/Task/OverridesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/OverridesProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.DataSync.Task.OverridesProperty (
+        module Exports, OverridesProperty(..), mkOverridesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.DeletedProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.SkippedProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.TransferredProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.VerifiedProperty as Exports
+import Stratosphere.ResourceProperties
+data OverridesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-overrides.html>
+    OverridesProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-overrides.html#cfn-datasync-task-overrides-deleted>
+                       deleted :: (Prelude.Maybe DeletedProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-overrides.html#cfn-datasync-task-overrides-skipped>
+                       skipped :: (Prelude.Maybe SkippedProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-overrides.html#cfn-datasync-task-overrides-transferred>
+                       transferred :: (Prelude.Maybe TransferredProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-overrides.html#cfn-datasync-task-overrides-verified>
+                       verified :: (Prelude.Maybe VerifiedProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOverridesProperty :: OverridesProperty
+mkOverridesProperty
+  = OverridesProperty
+      {haddock_workaround_ = (), deleted = Prelude.Nothing,
+       skipped = Prelude.Nothing, transferred = Prelude.Nothing,
+       verified = Prelude.Nothing}
+instance ToResourceProperties OverridesProperty where
+  toResourceProperties OverridesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Overrides",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Deleted" Prelude.<$> deleted,
+                            (JSON..=) "Skipped" Prelude.<$> skipped,
+                            (JSON..=) "Transferred" Prelude.<$> transferred,
+                            (JSON..=) "Verified" Prelude.<$> verified])}
+instance JSON.ToJSON OverridesProperty where
+  toJSON OverridesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Deleted" Prelude.<$> deleted,
+               (JSON..=) "Skipped" Prelude.<$> skipped,
+               (JSON..=) "Transferred" Prelude.<$> transferred,
+               (JSON..=) "Verified" Prelude.<$> verified]))
+instance Property "Deleted" OverridesProperty where
+  type PropertyType "Deleted" OverridesProperty = DeletedProperty
+  set newValue OverridesProperty {..}
+    = OverridesProperty {deleted = Prelude.pure newValue, ..}
+instance Property "Skipped" OverridesProperty where
+  type PropertyType "Skipped" OverridesProperty = SkippedProperty
+  set newValue OverridesProperty {..}
+    = OverridesProperty {skipped = Prelude.pure newValue, ..}
+instance Property "Transferred" OverridesProperty where
+  type PropertyType "Transferred" OverridesProperty = TransferredProperty
+  set newValue OverridesProperty {..}
+    = OverridesProperty {transferred = Prelude.pure newValue, ..}
+instance Property "Verified" OverridesProperty where
+  type PropertyType "Verified" OverridesProperty = VerifiedProperty
+  set newValue OverridesProperty {..}
+    = OverridesProperty {verified = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/OverridesProperty.hs-boot b/gen/Stratosphere/DataSync/Task/OverridesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/OverridesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.OverridesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OverridesProperty :: Prelude.Type
+instance ToResourceProperties OverridesProperty
+instance Prelude.Eq OverridesProperty
+instance Prelude.Show OverridesProperty
+instance JSON.ToJSON OverridesProperty
diff --git a/gen/Stratosphere/DataSync/Task/SkippedProperty.hs b/gen/Stratosphere/DataSync/Task/SkippedProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/SkippedProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.DataSync.Task.SkippedProperty (
+        SkippedProperty(..), mkSkippedProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SkippedProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-skipped.html>
+    SkippedProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-skipped.html#cfn-datasync-task-skipped-reportlevel>
+                     reportLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSkippedProperty :: SkippedProperty
+mkSkippedProperty
+  = SkippedProperty
+      {haddock_workaround_ = (), reportLevel = Prelude.Nothing}
+instance ToResourceProperties SkippedProperty where
+  toResourceProperties SkippedProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Skipped",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReportLevel" Prelude.<$> reportLevel])}
+instance JSON.ToJSON SkippedProperty where
+  toJSON SkippedProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReportLevel" Prelude.<$> reportLevel]))
+instance Property "ReportLevel" SkippedProperty where
+  type PropertyType "ReportLevel" SkippedProperty = Value Prelude.Text
+  set newValue SkippedProperty {..}
+    = SkippedProperty {reportLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/SkippedProperty.hs-boot b/gen/Stratosphere/DataSync/Task/SkippedProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/SkippedProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.SkippedProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SkippedProperty :: Prelude.Type
+instance ToResourceProperties SkippedProperty
+instance Prelude.Eq SkippedProperty
+instance Prelude.Show SkippedProperty
+instance JSON.ToJSON SkippedProperty
diff --git a/gen/Stratosphere/DataSync/Task/SourceProperty.hs b/gen/Stratosphere/DataSync/Task/SourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/SourceProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.DataSync.Task.SourceProperty (
+        module Exports, SourceProperty(..), mkSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.ManifestConfigSourceS3Property as Exports
+import Stratosphere.ResourceProperties
+data SourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-source.html>
+    SourceProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-source.html#cfn-datasync-task-source-s3>
+                    s3 :: (Prelude.Maybe ManifestConfigSourceS3Property)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceProperty :: SourceProperty
+mkSourceProperty
+  = SourceProperty {haddock_workaround_ = (), s3 = Prelude.Nothing}
+instance ToResourceProperties SourceProperty where
+  toResourceProperties SourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Source",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "S3" Prelude.<$> s3])}
+instance JSON.ToJSON SourceProperty where
+  toJSON SourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "S3" Prelude.<$> s3]))
+instance Property "S3" SourceProperty where
+  type PropertyType "S3" SourceProperty = ManifestConfigSourceS3Property
+  set newValue SourceProperty {..}
+    = SourceProperty {s3 = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/SourceProperty.hs-boot b/gen/Stratosphere/DataSync/Task/SourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/SourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.SourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceProperty :: Prelude.Type
+instance ToResourceProperties SourceProperty
+instance Prelude.Eq SourceProperty
+instance Prelude.Show SourceProperty
+instance JSON.ToJSON SourceProperty
diff --git a/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs b/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs
@@ -0,0 +1,58 @@
+module Stratosphere.DataSync.Task.TaskReportConfigDestinationS3Property (
+        TaskReportConfigDestinationS3Property(..),
+        mkTaskReportConfigDestinationS3Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TaskReportConfigDestinationS3Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfigdestinations3.html>
+    TaskReportConfigDestinationS3Property {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfigdestinations3.html#cfn-datasync-task-taskreportconfigdestinations3-bucketaccessrolearn>
+                                           bucketAccessRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfigdestinations3.html#cfn-datasync-task-taskreportconfigdestinations3-s3bucketarn>
+                                           s3BucketArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfigdestinations3.html#cfn-datasync-task-taskreportconfigdestinations3-subdirectory>
+                                           subdirectory :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskReportConfigDestinationS3Property ::
+  TaskReportConfigDestinationS3Property
+mkTaskReportConfigDestinationS3Property
+  = TaskReportConfigDestinationS3Property
+      {haddock_workaround_ = (), bucketAccessRoleArn = Prelude.Nothing,
+       s3BucketArn = Prelude.Nothing, subdirectory = Prelude.Nothing}
+instance ToResourceProperties TaskReportConfigDestinationS3Property where
+  toResourceProperties TaskReportConfigDestinationS3Property {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.TaskReportConfigDestinationS3",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BucketAccessRoleArn" Prelude.<$> bucketAccessRoleArn,
+                            (JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn,
+                            (JSON..=) "Subdirectory" Prelude.<$> subdirectory])}
+instance JSON.ToJSON TaskReportConfigDestinationS3Property where
+  toJSON TaskReportConfigDestinationS3Property {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BucketAccessRoleArn" Prelude.<$> bucketAccessRoleArn,
+               (JSON..=) "S3BucketArn" Prelude.<$> s3BucketArn,
+               (JSON..=) "Subdirectory" Prelude.<$> subdirectory]))
+instance Property "BucketAccessRoleArn" TaskReportConfigDestinationS3Property where
+  type PropertyType "BucketAccessRoleArn" TaskReportConfigDestinationS3Property = Value Prelude.Text
+  set newValue TaskReportConfigDestinationS3Property {..}
+    = TaskReportConfigDestinationS3Property
+        {bucketAccessRoleArn = Prelude.pure newValue, ..}
+instance Property "S3BucketArn" TaskReportConfigDestinationS3Property where
+  type PropertyType "S3BucketArn" TaskReportConfigDestinationS3Property = Value Prelude.Text
+  set newValue TaskReportConfigDestinationS3Property {..}
+    = TaskReportConfigDestinationS3Property
+        {s3BucketArn = Prelude.pure newValue, ..}
+instance Property "Subdirectory" TaskReportConfigDestinationS3Property where
+  type PropertyType "Subdirectory" TaskReportConfigDestinationS3Property = Value Prelude.Text
+  set newValue TaskReportConfigDestinationS3Property {..}
+    = TaskReportConfigDestinationS3Property
+        {subdirectory = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs-boot b/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskReportConfigDestinationS3Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.TaskReportConfigDestinationS3Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TaskReportConfigDestinationS3Property :: Prelude.Type
+instance ToResourceProperties TaskReportConfigDestinationS3Property
+instance Prelude.Eq TaskReportConfigDestinationS3Property
+instance Prelude.Show TaskReportConfigDestinationS3Property
+instance JSON.ToJSON TaskReportConfigDestinationS3Property
diff --git a/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs b/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.DataSync.Task.TaskReportConfigProperty (
+        module Exports, TaskReportConfigProperty(..),
+        mkTaskReportConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DataSync.Task.DestinationProperty as Exports
+import {-# SOURCE #-} Stratosphere.DataSync.Task.OverridesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TaskReportConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html>
+    TaskReportConfigProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html#cfn-datasync-task-taskreportconfig-destination>
+                              destination :: DestinationProperty,
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html#cfn-datasync-task-taskreportconfig-objectversionids>
+                              objectVersionIds :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html#cfn-datasync-task-taskreportconfig-outputtype>
+                              outputType :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html#cfn-datasync-task-taskreportconfig-overrides>
+                              overrides :: (Prelude.Maybe OverridesProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskreportconfig.html#cfn-datasync-task-taskreportconfig-reportlevel>
+                              reportLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskReportConfigProperty ::
+  DestinationProperty
+  -> Value Prelude.Text -> TaskReportConfigProperty
+mkTaskReportConfigProperty destination outputType
+  = TaskReportConfigProperty
+      {haddock_workaround_ = (), destination = destination,
+       outputType = outputType, objectVersionIds = Prelude.Nothing,
+       overrides = Prelude.Nothing, reportLevel = Prelude.Nothing}
+instance ToResourceProperties TaskReportConfigProperty where
+  toResourceProperties TaskReportConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.TaskReportConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Destination" JSON..= destination,
+                            "OutputType" JSON..= outputType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ObjectVersionIds" Prelude.<$> objectVersionIds,
+                               (JSON..=) "Overrides" Prelude.<$> overrides,
+                               (JSON..=) "ReportLevel" Prelude.<$> reportLevel]))}
+instance JSON.ToJSON TaskReportConfigProperty where
+  toJSON TaskReportConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Destination" JSON..= destination,
+               "OutputType" JSON..= outputType]
+              (Prelude.catMaybes
+                 [(JSON..=) "ObjectVersionIds" Prelude.<$> objectVersionIds,
+                  (JSON..=) "Overrides" Prelude.<$> overrides,
+                  (JSON..=) "ReportLevel" Prelude.<$> reportLevel])))
+instance Property "Destination" TaskReportConfigProperty where
+  type PropertyType "Destination" TaskReportConfigProperty = DestinationProperty
+  set newValue TaskReportConfigProperty {..}
+    = TaskReportConfigProperty {destination = newValue, ..}
+instance Property "ObjectVersionIds" TaskReportConfigProperty where
+  type PropertyType "ObjectVersionIds" TaskReportConfigProperty = Value Prelude.Text
+  set newValue TaskReportConfigProperty {..}
+    = TaskReportConfigProperty
+        {objectVersionIds = Prelude.pure newValue, ..}
+instance Property "OutputType" TaskReportConfigProperty where
+  type PropertyType "OutputType" TaskReportConfigProperty = Value Prelude.Text
+  set newValue TaskReportConfigProperty {..}
+    = TaskReportConfigProperty {outputType = newValue, ..}
+instance Property "Overrides" TaskReportConfigProperty where
+  type PropertyType "Overrides" TaskReportConfigProperty = OverridesProperty
+  set newValue TaskReportConfigProperty {..}
+    = TaskReportConfigProperty {overrides = Prelude.pure newValue, ..}
+instance Property "ReportLevel" TaskReportConfigProperty where
+  type PropertyType "ReportLevel" TaskReportConfigProperty = Value Prelude.Text
+  set newValue TaskReportConfigProperty {..}
+    = TaskReportConfigProperty
+        {reportLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs-boot b/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskReportConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.TaskReportConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TaskReportConfigProperty :: Prelude.Type
+instance ToResourceProperties TaskReportConfigProperty
+instance Prelude.Eq TaskReportConfigProperty
+instance Prelude.Show TaskReportConfigProperty
+instance JSON.ToJSON TaskReportConfigProperty
diff --git a/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs b/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.DataSync.Task.TaskScheduleProperty (
+        TaskScheduleProperty(..), mkTaskScheduleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TaskScheduleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html>
+    TaskScheduleProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html#cfn-datasync-task-taskschedule-scheduleexpression>
+                          scheduleExpression :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-taskschedule.html#cfn-datasync-task-taskschedule-status>
+                          status :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskScheduleProperty :: TaskScheduleProperty
+mkTaskScheduleProperty
+  = TaskScheduleProperty
+      {haddock_workaround_ = (), scheduleExpression = Prelude.Nothing,
+       status = Prelude.Nothing}
+instance ToResourceProperties TaskScheduleProperty where
+  toResourceProperties TaskScheduleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.TaskSchedule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ScheduleExpression" Prelude.<$> scheduleExpression,
+                            (JSON..=) "Status" Prelude.<$> status])}
+instance JSON.ToJSON TaskScheduleProperty where
+  toJSON TaskScheduleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ScheduleExpression" Prelude.<$> scheduleExpression,
+               (JSON..=) "Status" Prelude.<$> status]))
+instance Property "ScheduleExpression" TaskScheduleProperty where
+  type PropertyType "ScheduleExpression" TaskScheduleProperty = Value Prelude.Text
+  set newValue TaskScheduleProperty {..}
+    = TaskScheduleProperty
+        {scheduleExpression = Prelude.pure newValue, ..}
+instance Property "Status" TaskScheduleProperty where
+  type PropertyType "Status" TaskScheduleProperty = Value Prelude.Text
+  set newValue TaskScheduleProperty {..}
+    = TaskScheduleProperty {status = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs-boot b/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TaskScheduleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.TaskScheduleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TaskScheduleProperty :: Prelude.Type
+instance ToResourceProperties TaskScheduleProperty
+instance Prelude.Eq TaskScheduleProperty
+instance Prelude.Show TaskScheduleProperty
+instance JSON.ToJSON TaskScheduleProperty
diff --git a/gen/Stratosphere/DataSync/Task/TransferredProperty.hs b/gen/Stratosphere/DataSync/Task/TransferredProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TransferredProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.DataSync.Task.TransferredProperty (
+        TransferredProperty(..), mkTransferredProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransferredProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-transferred.html>
+    TransferredProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-transferred.html#cfn-datasync-task-transferred-reportlevel>
+                         reportLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransferredProperty :: TransferredProperty
+mkTransferredProperty
+  = TransferredProperty
+      {haddock_workaround_ = (), reportLevel = Prelude.Nothing}
+instance ToResourceProperties TransferredProperty where
+  toResourceProperties TransferredProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Transferred",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReportLevel" Prelude.<$> reportLevel])}
+instance JSON.ToJSON TransferredProperty where
+  toJSON TransferredProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReportLevel" Prelude.<$> reportLevel]))
+instance Property "ReportLevel" TransferredProperty where
+  type PropertyType "ReportLevel" TransferredProperty = Value Prelude.Text
+  set newValue TransferredProperty {..}
+    = TransferredProperty {reportLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/TransferredProperty.hs-boot b/gen/Stratosphere/DataSync/Task/TransferredProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/TransferredProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.TransferredProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransferredProperty :: Prelude.Type
+instance ToResourceProperties TransferredProperty
+instance Prelude.Eq TransferredProperty
+instance Prelude.Show TransferredProperty
+instance JSON.ToJSON TransferredProperty
diff --git a/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs b/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.DataSync.Task.VerifiedProperty (
+        VerifiedProperty(..), mkVerifiedProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VerifiedProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-verified.html>
+    VerifiedProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-task-verified.html#cfn-datasync-task-verified-reportlevel>
+                      reportLevel :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedProperty :: VerifiedProperty
+mkVerifiedProperty
+  = VerifiedProperty
+      {haddock_workaround_ = (), reportLevel = Prelude.Nothing}
+instance ToResourceProperties VerifiedProperty where
+  toResourceProperties VerifiedProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DataSync::Task.Verified",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReportLevel" Prelude.<$> reportLevel])}
+instance JSON.ToJSON VerifiedProperty where
+  toJSON VerifiedProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReportLevel" Prelude.<$> reportLevel]))
+instance Property "ReportLevel" VerifiedProperty where
+  type PropertyType "ReportLevel" VerifiedProperty = Value Prelude.Text
+  set newValue VerifiedProperty {..}
+    = VerifiedProperty {reportLevel = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs-boot b/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DataSync/Task/VerifiedProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DataSync.Task.VerifiedProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VerifiedProperty :: Prelude.Type
+instance ToResourceProperties VerifiedProperty
+instance Prelude.Eq VerifiedProperty
+instance Prelude.Show VerifiedProperty
+instance JSON.ToJSON VerifiedProperty
diff --git a/stratosphere-datasync.cabal b/stratosphere-datasync.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-datasync.cabal
@@ -0,0 +1,124 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-datasync
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS DataSync.
+description:    Integration into stratosphere to generate resources and properties for AWS DataSync
+category:       AWS, Cloud, DataSync
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.DataSync.Agent
+      Stratosphere.DataSync.LocationAzureBlob
+      Stratosphere.DataSync.LocationAzureBlob.AzureBlobSasConfigurationProperty
+      Stratosphere.DataSync.LocationAzureBlob.CmkSecretConfigProperty
+      Stratosphere.DataSync.LocationAzureBlob.CustomSecretConfigProperty
+      Stratosphere.DataSync.LocationAzureBlob.ManagedSecretConfigProperty
+      Stratosphere.DataSync.LocationEFS
+      Stratosphere.DataSync.LocationEFS.Ec2ConfigProperty
+      Stratosphere.DataSync.LocationFSxLustre
+      Stratosphere.DataSync.LocationFSxONTAP
+      Stratosphere.DataSync.LocationFSxONTAP.NfsMountOptionsProperty
+      Stratosphere.DataSync.LocationFSxONTAP.NFSProperty
+      Stratosphere.DataSync.LocationFSxONTAP.ProtocolProperty
+      Stratosphere.DataSync.LocationFSxONTAP.SmbMountOptionsProperty
+      Stratosphere.DataSync.LocationFSxONTAP.SMBProperty
+      Stratosphere.DataSync.LocationFSxOpenZFS
+      Stratosphere.DataSync.LocationFSxOpenZFS.MountOptionsProperty
+      Stratosphere.DataSync.LocationFSxOpenZFS.NFSProperty
+      Stratosphere.DataSync.LocationFSxOpenZFS.ProtocolProperty
+      Stratosphere.DataSync.LocationFSxWindows
+      Stratosphere.DataSync.LocationHDFS
+      Stratosphere.DataSync.LocationHDFS.NameNodeProperty
+      Stratosphere.DataSync.LocationHDFS.QopConfigurationProperty
+      Stratosphere.DataSync.LocationNFS
+      Stratosphere.DataSync.LocationNFS.MountOptionsProperty
+      Stratosphere.DataSync.LocationNFS.OnPremConfigProperty
+      Stratosphere.DataSync.LocationObjectStorage
+      Stratosphere.DataSync.LocationObjectStorage.CmkSecretConfigProperty
+      Stratosphere.DataSync.LocationObjectStorage.CustomSecretConfigProperty
+      Stratosphere.DataSync.LocationObjectStorage.ManagedSecretConfigProperty
+      Stratosphere.DataSync.LocationS3
+      Stratosphere.DataSync.LocationS3.S3ConfigProperty
+      Stratosphere.DataSync.LocationSMB
+      Stratosphere.DataSync.LocationSMB.CmkSecretConfigProperty
+      Stratosphere.DataSync.LocationSMB.CustomSecretConfigProperty
+      Stratosphere.DataSync.LocationSMB.ManagedSecretConfigProperty
+      Stratosphere.DataSync.LocationSMB.MountOptionsProperty
+      Stratosphere.DataSync.Task
+      Stratosphere.DataSync.Task.DeletedProperty
+      Stratosphere.DataSync.Task.DestinationProperty
+      Stratosphere.DataSync.Task.FilterRuleProperty
+      Stratosphere.DataSync.Task.ManifestConfigProperty
+      Stratosphere.DataSync.Task.ManifestConfigSourceS3Property
+      Stratosphere.DataSync.Task.OptionsProperty
+      Stratosphere.DataSync.Task.OverridesProperty
+      Stratosphere.DataSync.Task.SkippedProperty
+      Stratosphere.DataSync.Task.SourceProperty
+      Stratosphere.DataSync.Task.TaskReportConfigDestinationS3Property
+      Stratosphere.DataSync.Task.TaskReportConfigProperty
+      Stratosphere.DataSync.Task.TaskScheduleProperty
+      Stratosphere.DataSync.Task.TransferredProperty
+      Stratosphere.DataSync.Task.VerifiedProperty
+  other-modules:
+      Paths_stratosphere_datasync
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
