1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-02 20:35:25 +02:00

feat(templates): support env variables in Compose stacks

This commit is contained in:
Anthony Lapenna 2018-07-12 09:17:07 +02:00
parent c8c54cf991
commit e15da005a5
8 changed files with 58 additions and 19 deletions

View file

@ -223,8 +223,8 @@ function StackServiceFactory($q, Stack, ResourceControlService, FileUploadServic
return Stack.update({ endpointId: stack.EndpointId }, { id: stack.Id, StackFileContent: stackFile, Env: env, Prune: prune }).$promise;
};
service.createComposeStackFromFileUpload = function(name, stackFile, endpointId) {
return FileUploadService.createComposeStack(name, stackFile, endpointId);
service.createComposeStackFromFileUpload = function(name, stackFile, env, endpointId) {
return FileUploadService.createComposeStack(name, stackFile, env, endpointId);
};
service.createSwarmStackFromFileUpload = function(name, stackFile, env, endpointId) {
@ -245,10 +245,11 @@ function StackServiceFactory($q, Stack, ResourceControlService, FileUploadServic
return deferred.promise;
};
service.createComposeStackFromFileContent = function(name, stackFileContent, endpointId) {
service.createComposeStackFromFileContent = function(name, stackFileContent, env, endpointId) {
var payload = {
Name: name,
StackFileContent: stackFileContent
StackFileContent: stackFileContent,
Env: env
};
return Stack.create({ method: 'string', type: 2, endpointId: endpointId }, payload).$promise;
};
@ -277,14 +278,15 @@ function StackServiceFactory($q, Stack, ResourceControlService, FileUploadServic
return deferred.promise;
};
service.createComposeStackFromGitRepository = function(name, repositoryOptions, endpointId) {
service.createComposeStackFromGitRepository = function(name, repositoryOptions, env, endpointId) {
var payload = {
Name: name,
RepositoryURL: repositoryOptions.RepositoryURL,
ComposeFilePathInRepository: repositoryOptions.ComposeFilePathInRepository,
RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,
RepositoryUsername: repositoryOptions.RepositoryUsername,
RepositoryPassword: repositoryOptions.RepositoryPassword
RepositoryPassword: repositoryOptions.RepositoryPassword,
Env: env
};
return Stack.create({ method: 'repository', type: 2, endpointId: endpointId }, payload).$promise;
};

View file

@ -41,12 +41,13 @@ angular.module('portainer.app')
});
};
service.createComposeStack = function(stackName, file, endpointId) {
service.createComposeStack = function(stackName, file, env, endpointId) {
return Upload.upload({
url: 'api/stacks?method=file&type=2&endpointId=' + endpointId,
data: {
file: file,
Name: stackName
Name: stackName,
Env: Upload.json(env)
},
ignoreLoadingBar: true
});

View file

@ -65,14 +65,15 @@ function ($scope, $state, StackService, Authentication, Notifications, FormValid
}
function createComposeStack(name, method) {
var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);
var endpointId = EndpointProvider.endpointID();
if (method === 'editor') {
var stackFileContent = $scope.formValues.StackFileContent;
return StackService.createComposeStackFromFileContent(name, stackFileContent, endpointId);
return StackService.createComposeStackFromFileContent(name, stackFileContent, env, endpointId);
} else if (method === 'upload') {
var stackFile = $scope.formValues.StackFile;
return StackService.createComposeStackFromFileUpload(name, stackFile, endpointId);
return StackService.createComposeStackFromFileUpload(name, stackFile, env, endpointId);
} else if (method === 'repository') {
var repositoryOptions = {
RepositoryURL: $scope.formValues.RepositoryURL,
@ -81,7 +82,7 @@ function ($scope, $state, StackService, Authentication, Notifications, FormValid
RepositoryUsername: $scope.formValues.RepositoryUsername,
RepositoryPassword: $scope.formValues.RepositoryPassword
};
return StackService.createComposeStackFromGitRepository(name, repositoryOptions, endpointId);
return StackService.createComposeStackFromGitRepository(name, repositoryOptions, env, endpointId);
}
}

View file

@ -160,7 +160,7 @@
</div>
</div>
<!-- environment-variables -->
<div ng-if="state.StackType === 1">
<div>
<div class="col-sm-12 form-section-title">
Environment
</div>

View file

@ -94,13 +94,20 @@ function ($scope, $q, $state, $transition$, $anchorScroll, ContainerService, Ima
function createComposeStackFromTemplate(template, userId, accessControlData) {
var stackName = $scope.formValues.name;
for (var i = 0; i < template.Env.length; i++) {
var envvar = template.Env[i];
if (envvar.preset) {
envvar.value = envvar.default;
}
}
var repositoryOptions = {
RepositoryURL: template.Repository.url,
ComposeFilePathInRepository: template.Repository.stackfile
};
var endpointId = EndpointProvider.endpointID();
StackService.createComposeStackFromGitRepository(stackName, repositoryOptions, endpointId)
StackService.createComposeStackFromGitRepository(stackName, repositoryOptions, template.Env, endpointId)
.then(function success(data) {
return ResourceControlService.applyResourceControl('stack', stackName, userId, accessControlData, []);
})
@ -121,8 +128,8 @@ function ($scope, $q, $state, $transition$, $anchorScroll, ContainerService, Ima
for (var i = 0; i < template.Env.length; i++) {
var envvar = template.Env[i];
if (envvar.set) {
envvar.value = envvar.set;
if (envvar.preset) {
envvar.value = envvar.default;
}
}