diff --git a/DockerInterfacesLibrary/package/Classes/DockerApplication.yaml b/DockerInterfacesLibrary/package/Classes/DockerApplication.yaml index cfb3bb6..6103ea3 100644 --- a/DockerInterfacesLibrary/package/Classes/DockerApplication.yaml +++ b/DockerInterfacesLibrary/package/Classes/DockerApplication.yaml @@ -28,16 +28,23 @@ Methods: deploy: Body: - - $._environment.reporter.report($this, 'Waiting for the host to be ready') - $.host.deploy() - $container: $.getContainer() - $repr: $._getContainerRepresentation($container) - If: $.getAttr(container, null) != $repr Then: - - $.onInstallationStart() + - $.onInstallationStart() + - Try: - $.applicationEndpoints: $.host.hostContainer($container) - $.setAttr(container, $repr) - - $.onInstallationFinish() + Catch: + - As: e + Do: + - $formatString: 'Error: {0}' + - $._environment.reporter.report_error($, $formatString.format($e.message)) + - Rethrow: + Else: + - $.onInstallationFinish() getConnectionTo: diff --git a/Kubernetes/KubernetesCluster/package/Classes/KubernetesCluster.yaml b/Kubernetes/KubernetesCluster/package/Classes/KubernetesCluster.yaml index 43011e9..bb157b1 100644 --- a/Kubernetes/KubernetesCluster/package/Classes/KubernetesCluster.yaml +++ b/Kubernetes/KubernetesCluster/package/Classes/KubernetesCluster.yaml @@ -114,6 +114,7 @@ Methods: Body: Return: $.masterNode.getIp() + createPod: Arguments: - definition: @@ -159,6 +160,18 @@ Methods: - $.masterNode.instance.agent.call($template, $resources) + deletePods: + Arguments: + - labels: + Contract: + $.string().notNull(): $.string().notNull() + Body: + - $.deploy() + - $resources: new(sys:Resources) + - $template: $resources.yaml('DeletePods.template').bind(dict(labels => $labels)) + - $.masterNode.instance.agent.call($template, $resources) + + createServices: Arguments: - applicationName: @@ -339,6 +352,7 @@ Methods: - $serviceIp: $endpoint.address - Return: $serviceIp + _updateEndpoints: Body: - For: endpoint @@ -428,6 +442,7 @@ Methods: - $result.publicIPs: $.minionNodes.take($.nodeCount).select($.getIp()) - Return: $result + scaleNodesUp: Usage: Action Body: @@ -437,6 +452,7 @@ Methods: - $.nodeCount: $.nodeCount + 1 - $.deploy() + scaleNodesDown: Usage: Action Body: @@ -446,6 +462,7 @@ Methods: - $.nodeCount: $.nodeCount - 1 - $.deploy() + scaleGatewaysUp: Usage: Action Body: diff --git a/Kubernetes/KubernetesCluster/package/Resources/DeletePods.template b/Kubernetes/KubernetesCluster/package/Resources/DeletePods.template new file mode 100644 index 0000000..0876aee --- /dev/null +++ b/Kubernetes/KubernetesCluster/package/Resources/DeletePods.template @@ -0,0 +1,21 @@ +FormatVersion: 2.0.0 +Version: 1.0.0 +Name: Delete Pods + +Parameters: + labels: $labels + +Body: | + labels_str = ','.join(map(lambda t: '='.join(t), args.labels.items())) + deletePods(labels_str) + +Scripts: + deletePods: + Type: Application + Version: 1.0.0 + EntryPoint: deletePods.sh + Files: [] + Options: + captureStdout: true + captureStderr: true + diff --git a/Kubernetes/KubernetesCluster/package/Resources/scripts/deletePods.sh b/Kubernetes/KubernetesCluster/package/Resources/scripts/deletePods.sh new file mode 100644 index 0000000..59a138e --- /dev/null +++ b/Kubernetes/KubernetesCluster/package/Resources/scripts/deletePods.sh @@ -0,0 +1,3 @@ +#!/bin/bash +echo "Deleting Pods" >> /tmp/murano-kube.log +/opt/bin/kubectl delete pod -l $1 >> /tmp/murano-kube.log diff --git a/Kubernetes/KubernetesPod/package/Classes/KubernetesPod.yaml b/Kubernetes/KubernetesPod/package/Classes/KubernetesPod.yaml index 6a6d6e6..9865593 100644 --- a/Kubernetes/KubernetesPod/package/Classes/KubernetesPod.yaml +++ b/Kubernetes/KubernetesPod/package/Classes/KubernetesPod.yaml @@ -65,6 +65,17 @@ Methods: - container: Contract: $.class(docker:DockerContainer) Body: + - $podName: $._getPodName() + - For: port + In: $container.ports + Do: + - $endpoints: $.kubernetesCluster.serviceEndpoints.where( + $.containerPort = $port.port and $.protocol = $port.protocol and $.podId = $podName) + - If: len($endpoints) > 0 + Then: + - $msg: format('Port {0} is already used in the Pod {1}', $port.port, $.name) + - Throw: PortConflictException + Message: $msg - $._deleteContainer($container.name) - $containerDef: @@ -89,7 +100,7 @@ Methods: - $.kubernetesCluster.createServices( applicationName => $container.name, applicationPorts => $container.ports, - podId => $._getPodName()) + podId => $podName) - Return: $.getEndpoints($container.name) @@ -171,33 +182,39 @@ Methods: Body: Return: toLower($volume.name) + deploy: Body: - $prevPod: $.getAttr(lastPodDeployed, null) - $prevReplicas: $.getAttr(lastReplicas, 0) - $podDefinition: $._podDefinition - - If: $prevPod != $podDefinition + - $replicas: $.replicas + - If: len($podDefinition.desiredState.manifest.containers) = 0 Then: - - $._environment.reporter.report($, 'Deploying Pod {0}'.format($.name)) - - $.kubernetesCluster.createPod( - definition => $podDefinition, isNew => not $.getAttr(deployed, false)) - - $.setAttr(lastPodDeployed, $podDefinition) - - $.setAttr(deployed, true) - - - If: $.replicas != $prevReplicas or $prevPod != $podDefinition + - $replicas: 0 + - $.setAttr(lastReplicas, $replicas) + - If: $replicas != $prevReplicas or $prevPod != $podDefinition Then: - - If: $.replicas > 0 + - If: $replicas > 0 Then: - $._environment.reporter.report($, 'Deploying Replication Controller for Pod {0}'.format($.name)) - $rcDefinition: $._buildReplicationControllerDefinition($podDefinition) - $.kubernetesCluster.createReplicationController( definition => $rcDefinition, isNew => $prevReplicas = 0) - - If: $.replicas = 0 and $prevReplicas > 0 + - If: $replicas = 0 and $prevReplicas > 0 Then: - $.kubernetesCluster.deleteReplicationController($._getReplicationControllerId()) - - $.setAttr(lastReplicas, $.replicas) - - $._environment.reporter.report($, 'Pod {0} is ready'.format($.name)) + - If: $prevPod != $podDefinition + Then: + - $.kubernetesCluster.deletePods(dict(id => $._getPodName())) + - If: $.replicas = 0 and len($podDefinition.desiredState.manifest.containers) > 0 + Then: + - $.kubernetesCluster.createPod(definition => $podDefinition, isNew => true) + + - $._environment.reporter.report($, 'Pod {0} is ready'.format($.name)) + - $.setAttr(lastPodDeployed, $podDefinition) + _buildReplicationControllerDefinition: Arguments: @@ -216,10 +233,12 @@ Methods: desiredState: $podDefinition.desiredState labels: $podDefinition.labels + _getReplicationControllerId: Body: - Return: $._getPodName() + getInternalScopeId: Body: Return: $.kubernetesCluster.id()