Files
k8s-docker-suite-app-murano/DockerInterfacesLibrary/package/Classes/DockerApplication.yaml
Stan Lagun 0549313491 [Docker] Do not try to delete container on destroyed host
When Environment get deleted both Docker/k8s host and
Docker applications get deleted. So it is possible that host
will try to delete container from an Instance that was already
destroyed. Attempt to send commands to such instance
will hang until timeout because there is no more agent
exist on the other side.

Change-Id: Ia6e8064ae50c24ce595ed08e446ed45b96b4a330
Closes-Bug: #1504623
Depends-On: I298f3f079a153ef87ed7213b7f1432c9e5e4b4b6
2015-10-12 11:23:27 +00:00

120 lines
3.3 KiB
YAML

# 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: