#  Licensed under the Apache License, Version 2.0 (the "License"); you may
#  not use this file except in compliance with the License. You may obtain
#  a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#  License for the specific language governing permissions and limitations
#  under the License.

Namespaces:
  =: io.murano.resources
  std: io.murano
  sys: io.murano.system

Name: WindowsInstance

Extends: Instance

Methods:
  createDefaultInstanceSecurityGroupRules:
    Arguments:
      - groupName:
          Contract: $.string().notNull()
    Body:
      - $region: $.getRegion()
      - $rules:
        - ToPort: 3389
          IpProtocol: tcp
          FromPort: 3389
          External: true
      - $region.securityGroupManager.addGroupIngress(
          rules => $rules, groupName => $groupName)

  prepareUserData:
    Body:
      - $region: $.getRegion()
      - $rabbitMqParams: $region.getConfig().agentRabbitMq
      - $resources: new(sys:Resources)
      - $configFile: $resources.string('Agent-v1.template')
      - $initScript: $resources.string('windows-init.ps1')
      - $configReplacements:
          "%RABBITMQ_HOST%": $rabbitMqParams.host
          "%RABBITMQ_PORT%": $rabbitMqParams.port
          "%RABBITMQ_USER%": $rabbitMqParams.login
          "%RABBITMQ_PASSWORD%": $rabbitMqParams.password
          "%RABBITMQ_VHOST%": $rabbitMqParams.virtual_host
          "%RABBITMQ_SSL%": str($rabbitMqParams.ssl).toLower()
          "%RABBITMQ_INPUT_QUEUE%": $.agent.queueName()
          "%RESULT_QUEUE%": $region.agentListener.queueName()
          "%SIGNING_KEY%": $.agent.signingKey('')
      - $scriptReplacements:
          "%AGENT_CONFIG_BASE64%": base64encode($configFile.replace($configReplacements))
          "%INTERNAL_HOSTNAME%": $.name
          "%MURANO_SERVER_ADDRESS%": coalesce(config(file_server), $rabbitMqParams.host)
          "%CA_ROOT_CERT_BASE64%": ""
      - Return:
          data: $initScript.replace($scriptReplacements)
          format: HEAT_CFNTOOLS
