Merge branch 'release/2.5' into develop

pull/4731/merge
yi-portainer 2021-05-28 10:16:38 +12:00
commit dde0467b89
3 changed files with 43 additions and 6 deletions

View File

@ -55,7 +55,7 @@
<button <button
type="button" type="button"
class="btn btn-primary btn-sm" class="btn btn-primary btn-sm"
ng-disabled="$ctrl.state.actionInProgress || !$ctrl.formValues.name || $ctrl.state.provider !== $ctrl.template.Type" ng-disabled="$ctrl.state.actionInProgress || !$ctrl.formValues.name || !$ctrl.state.deployable"
ng-click="$ctrl.createTemplate()" ng-click="$ctrl.createTemplate()"
button-spinner="$ctrl.state.actionInProgress" button-spinner="$ctrl.state.actionInProgress"
> >
@ -64,7 +64,7 @@
</button> </button>
<button type="button" class="btn btn-sm btn-default" ng-click="$ctrl.unselectTemplate($ctrl.template)">Hide</button> <button type="button" class="btn btn-sm btn-default" ng-click="$ctrl.unselectTemplate($ctrl.template)">Hide</button>
<div class="cols-sm-12 small text-danger" ng-if="$ctrl.state.formValidationError" style="margin-left: 5px; margin-top: 5px;">{{ $ctrl.state.formValidationError }}</div> <div class="cols-sm-12 small text-danger" ng-if="$ctrl.state.formValidationError" style="margin-left: 5px; margin-top: 5px;">{{ $ctrl.state.formValidationError }}</div>
<div class="cols-sm-12 small text-danger" ng-if="$ctrl.state.provider !== $ctrl.template.Type" style="margin-left: 5px; margin-top: 5px;" <div class="cols-sm-12 small text-danger" ng-if="!$ctrl.state.deployable" style="margin-left: 5px; margin-top: 5px;"
>This template type cannot be deployed on this endpoint.</div >This template type cannot be deployed on this endpoint.</div
> >
</div> </div>

View File

@ -34,13 +34,16 @@ class CustomTemplatesViewController {
this.StateManager = StateManager; this.StateManager = StateManager;
this.StackService = StackService; this.StackService = StackService;
this.DOCKER_STANDALONE = 'DOCKER_STANDALONE';
this.DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';
this.state = { this.state = {
selectedTemplate: null, selectedTemplate: null,
showAdvancedOptions: false, showAdvancedOptions: false,
formValidationError: '', formValidationError: '',
actionInProgress: false, actionInProgress: false,
isEditorVisible: false, isEditorVisible: false,
provider: 0, deployable: false,
}; };
this.currentUser = { this.currentUser = {
@ -182,7 +185,8 @@ class CustomTemplatesViewController {
this.formValues.name = template.Title ? template.Title : ''; this.formValues.name = template.Title ? template.Title : '';
this.state.selectedTemplate = template; this.state.selectedTemplate = template;
this.$anchorScroll('view-top'); this.$anchorScroll('view-top');
const applicationState = this.StateManager.getState();
this.state.deployable = this.isDeployable(applicationState.endpoint, template.Type);
const file = await this.CustomTemplateService.customTemplateFile(template.Id); const file = await this.CustomTemplateService.customTemplateFile(template.Id);
this.formValues.fileContent = file; this.formValues.fileContent = file;
} }
@ -224,6 +228,21 @@ class CustomTemplatesViewController {
this.formValues.fileContent = cm.getValue(); this.formValues.fileContent = cm.getValue();
} }
isDeployable(endpoint, templateType) {
let deployable = false;
switch (templateType) {
case 1:
deployable = endpoint.mode.provider === this.DOCKER_SWARM_MODE;
break;
case 2:
deployable = endpoint.mode.provider === this.DOCKER_STANDALONE;
break;
}
return deployable;
}
$onInit() { $onInit() {
const applicationState = this.StateManager.getState(); const applicationState = this.StateManager.getState();
@ -232,7 +251,6 @@ class CustomTemplatesViewController {
apiVersion, apiVersion,
} = applicationState; } = applicationState;
this.state.provider = endpointMode.provider === 'DOCKER_STANDALONE' ? 2 : 1;
this.getTemplates(endpointMode); this.getTemplates(endpointMode);
this.getNetworks(endpointMode.provider, apiVersion); this.getNetworks(endpointMode.provider, apiVersion);

View File

@ -36,6 +36,9 @@ angular.module('portainer.app').controller('TemplatesController', [
StackService, StackService,
endpoint endpoint
) { ) {
const DOCKER_STANDALONE = 'DOCKER_STANDALONE';
const DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';
$scope.state = { $scope.state = {
selectedTemplate: null, selectedTemplate: null,
showAdvancedOptions: false, showAdvancedOptions: false,
@ -240,9 +243,26 @@ angular.module('portainer.app').controller('TemplatesController', [
$scope.formValues.name = template.Name ? template.Name : ''; $scope.formValues.name = template.Name ? template.Name : '';
$scope.state.selectedTemplate = template; $scope.state.selectedTemplate = template;
$scope.state.deployable = isDeployable($scope.applicationState.endpoint, template.Type);
$anchorScroll('view-top'); $anchorScroll('view-top');
}; };
function isDeployable(endpoint, templateType) {
let deployable = false;
switch (templateType) {
case 1:
deployable = endpoint.mode.provider === DOCKER_SWARM_MODE || endpoint.mode.provider === DOCKER_STANDALONE;
break;
case 2:
deployable = endpoint.mode.provider === DOCKER_SWARM_MODE;
break;
case 3:
deployable = endpoint.mode.provider === DOCKER_STANDALONE;
break;
}
return deployable;
}
function createTemplateConfiguration(template) { function createTemplateConfiguration(template) {
var network = $scope.formValues.network; var network = $scope.formValues.network;
var name = $scope.formValues.name; var name = $scope.formValues.name;
@ -254,7 +274,6 @@ angular.module('portainer.app').controller('TemplatesController', [
var endpointMode = $scope.applicationState.endpoint.mode; var endpointMode = $scope.applicationState.endpoint.mode;
var apiVersion = $scope.applicationState.endpoint.apiVersion; var apiVersion = $scope.applicationState.endpoint.apiVersion;
$scope.state.provider = endpointMode.provider === 'DOCKER_STANDALONE' ? 2 : 1;
$q.all({ $q.all({
templates: TemplateService.templates(), templates: TemplateService.templates(),