From e5396091a731520479fe9ad5e077d58cdfa6390e Mon Sep 17 00:00:00 2001 From: Anthony Lapenna Date: Wed, 26 Oct 2016 16:29:29 +1300 Subject: [PATCH] feat(console): automatically determine command presets based on container image OS (#284) --- .../containerConsole/containerConsole.html | 35 ++++++++++++------- .../containerConsoleController.js | 33 ++++++++++++----- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/app/components/containerConsole/containerConsole.html b/app/components/containerConsole/containerConsole.html index 751bf738e..2ddf233fd 100644 --- a/app/components/containerConsole/containerConsole.html +++ b/app/components/containerConsole/containerConsole.html @@ -2,12 +2,12 @@ - + Containers > {{ container.Name|trimcontainername }} > Console -
+
@@ -16,18 +16,27 @@
-
- -
-
- + +
+ +
+
+ + + + + +
-
- - + +
+ +
diff --git a/app/components/containerConsole/containerConsoleController.js b/app/components/containerConsole/containerConsoleController.js index c02a0a84c..1804ef1ca 100644 --- a/app/components/containerConsole/containerConsoleController.js +++ b/app/components/containerConsole/containerConsoleController.js @@ -1,9 +1,9 @@ angular.module('containerConsole', []) -.controller('ContainerConsoleController', ['$scope', '$stateParams', 'Settings', 'Container', 'Exec', '$timeout', 'Messages', -function ($scope, $stateParams, Settings, Container, Exec, $timeout, Messages) { +.controller('ContainerConsoleController', ['$scope', '$stateParams', 'Settings', 'Container', 'Image', 'Exec', '$timeout', 'Messages', +function ($scope, $stateParams, Settings, Container, Image, Exec, $timeout, Messages) { $scope.state = {}; - $scope.state.command = "bash"; - $scope.connected = false; + $scope.state.loaded = false; + $scope.state.connected = false; var socket, term; @@ -16,6 +16,22 @@ function ($scope, $stateParams, Settings, Container, Exec, $timeout, Messages) { Container.get({id: $stateParams.id}, function(d) { $scope.container = d; + if (d.message) { + Messages.error("Error", d, 'Unable to retrieve container details'); + $('#loadingViewSpinner').hide(); + } else { + Image.get({id: d.Image}, function(imgData) { + $scope.imageOS = imgData.Os; + $scope.state.command = imgData.Os === 'windows' ? 'powershell' : 'bash'; + $scope.state.loaded = true; + $('#loadingViewSpinner').hide(); + }, function (e) { + Messages.error("Failure", e, 'Unable to retrieve image details'); + $('#loadingViewSpinner').hide(); + }); + } + }, function (e) { + Messages.error("Failure", e, 'Unable to retrieve container details'); $('#loadingViewSpinner').hide(); }); @@ -54,7 +70,7 @@ function ($scope, $stateParams, Settings, Container, Exec, $timeout, Messages) { }; $scope.disconnect = function() { - $scope.connected = false; + $scope.state.connected = false; if (socket !== null) { socket.close(); } @@ -79,7 +95,7 @@ function ($scope, $stateParams, Settings, Container, Exec, $timeout, Messages) { function initTerm(url, height, width) { socket = new WebSocket(url); - $scope.connected = true; + $scope.state.connected = true; socket.onopen = function(evt) { $('#loadConsoleSpinner').hide(); term = new Terminal(); @@ -95,11 +111,10 @@ function ($scope, $stateParams, Settings, Container, Exec, $timeout, Messages) { term.write(e.data); }; socket.onerror = function (error) { - $scope.connected = false; - + $scope.state.connected = false; }; socket.onclose = function(evt) { - $scope.connected = false; + $scope.state.connected = false; }; }; }