# 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.apps.docker std: io.murano Name: DockerApplication Extends: std:Application Properties: host: Contract: $.class(DockerContainerHost).notNull() applicationEndpoints: Contract: - port: $.int().notNull().check($ > 0) address: $.string().notNull() scope: $.string().notNull().check($ in list(public, cloud, internal, host)) portScope: $.string().notNull().check($ in list(public, cloud, internal, host)) containerPort: $.int().notNull().check($ > 0) protocol: $.string().notNull().check($ in list(TCP, UDP)) Usage: Out Methods: initialize: Body: - $._environment: $.find(std:Environment).require() deploy: Body: - $.host.deploy() - $container: $.getContainer() - $repr: $._getContainerRepresentation($container) - If: $.getAttr(container, null) != $repr Then: - $.onInstallationStart() - Try: - $.applicationEndpoints: $.host.hostContainer($container) - $.setAttr(container, $repr) Catch: - As: e Do: - $formatString: 'Error: {0}' - $._environment.reporter.report_error($, $formatString.format($e.message)) - Rethrow: Else: - $.onInstallationFinish() destroy: Body: - If: $.getAttr(container, null) != null Then: - $container: $.getContainer() - $.host.deleteContainer($container.name) - $.setAttr(container, null) getConnectionTo: Arguments: - application: Contract: $.class(DockerApplication).notNull() - port: Contract: $.int().notNull().check($ > 0) - protocol: Contract: $.string().notNull().check($ in list(TCP, UDP)) Default: TCP Body: - $scopes: [cloud, public] - If: $.host = $application.host Then: - $scopes: list(host, internal) + $scopes Else: - If: $.host.getInternalScopeId() = $application.host.getInternalScopeId() Then: - $scopes: list(internal) + $scopes - For: s In: $scopes Do: - $endpoints: $application.applicationEndpoints.where(true).where( $.scope = $s and $.containerPort = $port and $.protocol = $protocol) - If: len($endpoints) > 0 Then: - $index: int(len($endpoints) * random()) - $endpoint: $endpoints[$index] - Return: host: $endpoint.address port: $endpoint.port _getContainerRepresentation: Arguments: - container: Contract: $.class(DockerContainer).notNull() Body: Return: $container.getRepresentation() getContainer: onInstallationStart: Body: onInstallationFinish: Body: