--- # Amazon Web Services Deployment Configurations
cloudProvider/:
  aws:
    defaults: 
      activeCname: ${current.application.name}-${current.environment.name}-active

    # AWS Elasticbeanstalk EB Tool Configurations
    platform/:
      awsElasticbeanstalkEb: 
        defaults: 
          inherit|: ${current.cloudProvider.defaults}
          create: 
            configFile$: ${args.launchFile}
            launch$: single-private-server
          disableLines: [.env]
          ebignoreContent: 
            - '*'
            - '!${args.buildPath}/**'
            - '!${args.packageFile}'
            - '!server.js'
          
          
        environment/:
          # STAGING ENVIRONMENT CONFIGURATIONS
          staging: 
            defaults: 
              inherit|: ${current.platform.defaults}
              tokenFile: ${args.secretsPath}/.staging_tokens.yaml
              envConfigFile: ${args.envPath}/env_config.yaml
              prompt: password
              create: 
                launch$: single-private-server

            group:
              all: [myApi1, myApi2]
            
            application/: 
              myApi1: 
                defaults: 
                  inherit|: ${current.environment.defaults}
                  env: 
                    appName$: ${current.application.name}
                    envName$: ${current.environment.name}.${appName$}
                    # envName$ results in 'environment.<environmentName>.application.myApi1'
                    # variable name ending with $ sign makes it temporary
                    
                    
                    # If you would like to start with a seperate env file, move this part and multi environment config part below, to application defaults for each app seperately.
                    # environmentFile$: ${args.envPath}/.env.myApi1.staging
                    # Start with reading specified env file
                    # readEnv|: ${environmentFile$}
                    
                    # Evaluate multi environment config file and get leaf with name specified by envName$
                    readYaml|: ${envConfigFile},${envName$},{tokenFile:\ ${tokenFile},appName:\ ${appName$}}
              
                    
                # App Configurations
                configuration/: 
                  
                  # Default Configuration
                  default:
                    inherit|: ${current.application.defaults}
                    create:
                      readYaml|: ${configFile$},${launch$}
                      # readYml function reads yml file as first argument and 
                      # returns value of key that is passed as second argument
                      envvars:
                        - API_PATH=${env.API_PATH}
                        - API_ENDPOINT=${env.API_ENDPOINT}

                        
                  # High Security Configuration
                  highSecurity:
                    inherit|: ${current.application.defaults}
                    create:
                      vpc:
                        securitygroups: [sg-#hash2]

              myApi2: 
                defaults: 
                  inherit|: ${current.environment.defaults}
                  env: 
                    appName$: ${current.application.name}
                    envName$: ${current.environment.name}.${appName$}
                    readYaml|: ${envConfigFile},${envName$},{tokenFile:\ ${tokenFile},appName:\ ${appName$}}
             
                
                # App Configurations
                configuration/: 
                  onOut|: ${checkVariables}
                  
                  # Default Configuration
                  default:
                    inherit|: ${current.application.defaults}
                    launch$: vpc-private-server
                    create:
                      readYaml|: ${configFile$},${launch$}

                  # High Security Configuration
                  highSecurity:
                    inherit|: ${current.application.defaults}
                    create:
                      vpc:
                        securitygroups: [sg-#hash2]

          # PRODUCTION ENVIRONMENT CONFIGURATIONS
          production: 
            defaults: 
              inherit|: ${current.platform.defaults}
              tokenFile: ${args.secretsPath}/.production_tokens.yaml
              envConfigFile: ${args.envPath}/env_config.yaml
              accessProfile: cirplus-production
              prompt: password
              create: 
                launch$: vpc-private-cluster
              buildRun: true
              buildDeploy: true
              
            group:
              all: [myApi1, myApi2]
            
            application/: 
              myApi1: 
                defaults: 
                  inherit|: ${current.environment.defaults}
                  env: 
                    appName$: ${current.application.name}
                    envName$: ${current.environment.name}.${appName$}
                    readYaml|: ${envConfigFile},${envName$},{tokenFile:\ ${tokenFile},appName:\ ${appName$}}
                  
                # App Configurations
                configuration/: 
                  # Default Configuration
                  default:
                    inherit|: ${current.application.defaults}
                    create:
                      readYaml|: ${configFile$},${launch$}
                      envvars:
                          - API_PATH=${env.API_PATH}
                          - API_ENDPOINT=${env.API_ENDPOINT}

                  # High Security Configuration
                  highSecurity:
                    inherit|: ${current.application.defaults}
                    create:
                      vpc:
                        securitygroups: [sg-#hash2]

              myApi2: 
                defaults: 
                  inherit|: ${current.environment.defaults}
                  env: 
                    appName$: ${current.application.name}
                    envName$: ${current.environment.name}.${appName$}
                    readYaml|: ${envConfigFile},${envName$},{tokenFile:\ ${tokenFile},appName:\ ${appName$}}
             
                
                # App Configurations
                configuration/: 
                  onOut|: ${checkVariables}
                  
                  # Default Configuration
                  default:
                    inherit|: ${current.application.defaults}
                    launch$: vpc-private-server
                    create:
                      readYaml|: ${configFile$},${launch$}

                  # High Security Configuration
                  highSecurity:
                    inherit|: ${current.application.defaults}
                    create:
                      vpc:
                        securitygroups: [sg-#hash2]             