{{#layout}}

  {{parameter "name_tag" logicalId="NameTag"}}

  {{set "mysql/params_multi_az"}}
  {{set "mysql/params_network"}}
  {{set "mysql/vpc_security_group" securityGroupVpcId=(ref "VpcId") securityGroupDescription="RDS MySQL"}}

  {{
    resource "db_subnet_group"
    logicalId="DBSubnetGroup"
    groupDescription=(ref "NameTag")
    subnetIds=(ref "SubnetIds")
  }}

  {{
    resource "db_instance"
    logicalId="DBInstance"
    deletionPolicy="Snapshot"
    allocatedStorage=(ref "AllocatedStorage")
    dbInstanceClass=(ref "DBInstanceClass")
    dbSnapshotIdentifier=(
      partial "m:core" "fn_if"
      conditionId="DBSnapshotIdentifierIsEmpty"
      trueValue=(ref "AWS::NoValue")
      falseValue=(ref "DBSnapshotIdentifier")
    )
    dbSubnetGroupName=(ref "DBSubnetGroup")
    dbName=(
      partial "m:core" "fn_if"
      conditionId="DBSnapshotIdentifierIsEmpty"
      trueValue=(ref "DBName")
      falseValue=(ref "AWS::NoValue")
    )
    engine="MySQL"
    masterUserPassword=(ref "MasterUserPassword")
    masterUsername=(ref "MasterUsername")
    multiAZ=(
      partial "m:core" "fn_if"
      conditionId="MultiAZIsTrueCondition"
      trueValue=true
      falseValue=false
    )
    storageEncrypted=(
      partial "m:core" "fn_if"
      conditionId="StorageEncryptedIsTrueCondition"
      trueValue=true
      falseValue=false
    )
    storageType="gp2"
    vpcSecurityGroups=(
      partial "m:core" "fn_if"
      conditionId="VpcSecurityGroupIdIsEmpty"
      trueValue=(concat '[' (ref "VpcSecurityGroup") ']')
      falseValue=(concat '[' (ref "VpcSecurityGroupId") ']')
    )
  }}

  {{set "db_instance/output_all" dbInstanceLogicalId="DBInstance"}}

{{/layout}}
