From 7c5c693f17e3408a7cfb326f4026c23427fa691f Mon Sep 17 00:00:00 2001 From: Anthony Lapenna Date: Wed, 24 Aug 2016 18:32:54 +1200 Subject: [PATCH] feat(templates): support select for env fields with type 'container' (#163) --- app/components/templates/templates.html | 19 +++++--- .../templates/templatesController.js | 45 +++++++++++++------ 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/app/components/templates/templates.html b/app/components/templates/templates.html index 37e0c5025..0a5e7334d 100644 --- a/app/components/templates/templates.html +++ b/app/components/templates/templates.html @@ -47,17 +47,22 @@
- +
-
- -
- +
+ +
+ + +
diff --git a/app/components/templates/templatesController.js b/app/components/templates/templatesController.js index 753cbc318..7543e4a10 100644 --- a/app/components/templates/templatesController.js +++ b/app/components/templates/templatesController.js @@ -1,6 +1,6 @@ angular.module('templates', []) -.controller('TemplatesController', ['$scope', '$q', '$state', 'Config', 'Container', 'Image', 'Volume', 'Network', 'Templates', 'Messages', 'errorMsgFilter', -function ($scope, $q, $state, Config, Container, Image, Volume, Network, Templates, Messages, errorMsgFilter) { +.controller('TemplatesController', ['$scope', '$q', '$state', '$filter', 'Config', 'Container', 'Image', 'Volume', 'Network', 'Templates', 'Messages', 'errorMsgFilter', +function ($scope, $q, $state, $filter, Config, Container, Image, Volume, Network, Templates, Messages, errorMsgFilter) { $scope.templates = []; $scope.selectedTemplate = null; $scope.formValues = { @@ -51,8 +51,8 @@ function pullImageAndCreateContainer(imageConfig, containerConfig) { }); } -function createConfigFromTemplate(template) { - var containerConfig = { +function getInitialConfiguration() { + return { Env: [], OpenStdin: false, Tty: false, @@ -63,17 +63,31 @@ function createConfigFromTemplate(template) { }, PortBindings: {}, Binds: [], - NetworkMode: $scope.formValues.network, + NetworkMode: $scope.formValues.network.Name, Privileged: false }, - Image: template.image, Volumes: {}, name: $scope.formValues.name }; +} + +function createConfigFromTemplate(template) { + var containerConfig = getInitialConfiguration(); + containerConfig.Image = template.image; if (template.env) { template.env.forEach(function (v) { if (v.value || v.default) { - var val = v.default ? v.default : v.value; + var val; + if (v.type && v.type === 'container') { + if ($scope.swarm && $scope.formValues.network.Scope === 'global') { + val = $filter('swarmcontainername')(v.value); + } else { + var container = v.value; + val = container.NetworkSettings.Networks[Object.keys(container.NetworkSettings.Networks)[0]].IPAddress; + } + } else { + val = v.default ? v.default : v.value; + } containerConfig.Env.push(v.name + "=" + val); } }); @@ -146,26 +160,31 @@ function initTemplates() { } Config.$promise.then(function (c) { - var swarm = c.swarm; + $scope.swarm = c.swarm; Network.query({}, function (d) { var networks = d; - if (swarm) { + if ($scope.swarm) { networks = d.filter(function (network) { if (network.Scope === 'global') { return network; } }); $scope.globalNetworkCount = networks.length; - networks.push({Name: "bridge"}); - networks.push({Name: "host"}); - networks.push({Name: "none"}); + networks.push({Scope: "local", Name: "bridge"}); + networks.push({Scope: "local", Name: "host"}); + networks.push({Scope: "local", Name: "none"}); } else { - $scope.formValues.network = "bridge"; + $scope.formValues.network = _.find(networks, function(o) { return o.Name === "bridge"; }); } $scope.availableNetworks = networks; }, function (e) { Messages.error("Unable to retrieve available networks", e.data); }); + Container.query({all: 0}, function (d) { + $scope.runningContainers = d; + }, function (e) { + Messages.error("Unable to retrieve running containers", e.data); + }); initTemplates(); }); }]);