mirror of https://github.com/portainer/portainer
feat(container-console): Adds custom commands based on container labels (#2159)
* feat(console): Adds custom commands based on container labels * feat(console): Update custom commands label prefixpull/2193/head
parent
102e63e1e5
commit
31c2a6d9e7
|
@ -15,4 +15,5 @@ angular.module('portainer')
|
||||||
.constant('API_ENDPOINT_TEMPLATES', 'api/templates')
|
.constant('API_ENDPOINT_TEMPLATES', 'api/templates')
|
||||||
.constant('DEFAULT_TEMPLATES_URL', 'https://raw.githubusercontent.com/portainer/templates/master/templates.json')
|
.constant('DEFAULT_TEMPLATES_URL', 'https://raw.githubusercontent.com/portainer/templates/master/templates.json')
|
||||||
.constant('PAGINATION_MAX_ITEMS', 10)
|
.constant('PAGINATION_MAX_ITEMS', 10)
|
||||||
.constant('APPLICATION_CACHE_VALIDITY', 3600);
|
.constant('APPLICATION_CACHE_VALIDITY', 3600)
|
||||||
|
.constant('CONSOLE_COMMANDS_LABEL_PREFIX', 'io.portainer.commands.');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
angular.module('portainer.docker')
|
angular.module('portainer.docker')
|
||||||
.controller('ContainerConsoleController', ['$scope', '$transition$', 'ContainerService', 'ImageService', 'EndpointProvider', 'Notifications', 'ContainerHelper', 'ExecService', 'HttpRequestHelper', 'LocalStorage',
|
.controller('ContainerConsoleController', ['$scope', '$transition$', 'ContainerService', 'ImageService', 'EndpointProvider', 'Notifications', 'ContainerHelper', 'ExecService', 'HttpRequestHelper', 'LocalStorage', 'CONSOLE_COMMANDS_LABEL_PREFIX',
|
||||||
function ($scope, $transition$, ContainerService, ImageService, EndpointProvider, Notifications, ContainerHelper, ExecService, HttpRequestHelper, LocalStorage) {
|
function ($scope, $transition$, ContainerService, ImageService, EndpointProvider, Notifications, ContainerHelper, ExecService, HttpRequestHelper, LocalStorage, CONSOLE_COMMANDS_LABEL_PREFIX) {
|
||||||
var socket, term;
|
var socket, term;
|
||||||
|
|
||||||
$scope.state = {
|
$scope.state = {
|
||||||
|
@ -9,6 +9,7 @@ function ($scope, $transition$, ContainerService, ImageService, EndpointProvider
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.formValues = {};
|
$scope.formValues = {};
|
||||||
|
$scope.containerCommands = [];
|
||||||
|
|
||||||
// Ensure the socket is closed before leaving the view
|
// Ensure the socket is closed before leaving the view
|
||||||
$scope.$on('$stateChangeStart', function (event, next, current) {
|
$scope.$on('$stateChangeStart', function (event, next, current) {
|
||||||
|
@ -106,8 +107,16 @@ function ($scope, $transition$, ContainerService, ImageService, EndpointProvider
|
||||||
})
|
})
|
||||||
.then(function success(data) {
|
.then(function success(data) {
|
||||||
var image = data;
|
var image = data;
|
||||||
|
var containerLabels = $scope.container.Config.Labels;
|
||||||
$scope.imageOS = image.Os;
|
$scope.imageOS = image.Os;
|
||||||
$scope.formValues.command = image.Os === 'windows' ? 'powershell' : 'bash';
|
$scope.formValues.command = image.Os === 'windows' ? 'powershell' : 'bash';
|
||||||
|
$scope.containerCommands = Object.keys(containerLabels)
|
||||||
|
.filter(function(label) {
|
||||||
|
return label.indexOf(CONSOLE_COMMANDS_LABEL_PREFIX) === 0;
|
||||||
|
})
|
||||||
|
.map(function(label) {
|
||||||
|
return {title: label.replace(CONSOLE_COMMANDS_LABEL_PREFIX, ''), command: containerLabels[label]};
|
||||||
|
});
|
||||||
$scope.state.loaded = true;
|
$scope.state.loaded = true;
|
||||||
})
|
})
|
||||||
.catch(function error(err) {
|
.catch(function error(err) {
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
<option value="sh" ng-if="imageOS == 'linux'">/bin/sh</option>
|
<option value="sh" ng-if="imageOS == 'linux'">/bin/sh</option>
|
||||||
<option value="powershell" ng-if="imageOS == 'windows'">powershell</option>
|
<option value="powershell" ng-if="imageOS == 'windows'">powershell</option>
|
||||||
<option value="cmd.exe" ng-if="imageOS == 'windows'">cmd.exe</option>
|
<option value="cmd.exe" ng-if="imageOS == 'windows'">cmd.exe</option>
|
||||||
|
<option ng-repeat="command in containerCommands" value="{{command.command}}">{{command.title}}: {{command.command}}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<input class="form-control" ng-if="formValues.isCustomCommand" type="text" name="custom-command" ng-model="formValues.customCommand" placeholder="e.g. ps aux">
|
<input class="form-control" ng-if="formValues.isCustomCommand" type="text" name="custom-command" ng-model="formValues.customCommand" placeholder="e.g. ps aux">
|
||||||
|
|
Loading…
Reference in New Issue