mirror of https://github.com/portainer/portainer
Merge branch 'release/2.6' into develop
commit
d2404458ea
|
@ -236,7 +236,14 @@ func (handler *Handler) createCustomTemplateFromGitRepository(r *http.Request) (
|
||||||
projectPath := handler.FileService.GetCustomTemplateProjectPath(strconv.Itoa(customTemplateID))
|
projectPath := handler.FileService.GetCustomTemplateProjectPath(strconv.Itoa(customTemplateID))
|
||||||
customTemplate.ProjectPath = projectPath
|
customTemplate.ProjectPath = projectPath
|
||||||
|
|
||||||
err = handler.GitService.CloneRepository(projectPath, payload.RepositoryURL, payload.RepositoryReferenceName, payload.RepositoryUsername, payload.RepositoryPassword)
|
repositoryUsername := payload.RepositoryUsername
|
||||||
|
repositoryPassword := payload.RepositoryPassword
|
||||||
|
if !payload.RepositoryAuthentication {
|
||||||
|
repositoryUsername = ""
|
||||||
|
repositoryPassword = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
err = handler.GitService.CloneRepository(projectPath, payload.RepositoryURL, payload.RepositoryReferenceName, repositoryUsername, repositoryPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,7 +212,14 @@ func (handler *Handler) createSwarmStackFromGitRepository(r *http.Request) (*por
|
||||||
projectPath := handler.FileService.GetEdgeStackProjectPath(strconv.Itoa(int(stack.ID)))
|
projectPath := handler.FileService.GetEdgeStackProjectPath(strconv.Itoa(int(stack.ID)))
|
||||||
stack.ProjectPath = projectPath
|
stack.ProjectPath = projectPath
|
||||||
|
|
||||||
err = handler.GitService.CloneRepository(projectPath, payload.RepositoryURL, payload.RepositoryReferenceName, payload.RepositoryUsername, payload.RepositoryPassword)
|
repositoryUsername := payload.RepositoryUsername
|
||||||
|
repositoryPassword := payload.RepositoryPassword
|
||||||
|
if !payload.RepositoryAuthentication {
|
||||||
|
repositoryUsername = ""
|
||||||
|
repositoryPassword = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
err = handler.GitService.CloneRepository(projectPath, payload.RepositoryURL, payload.RepositoryReferenceName, repositoryUsername, repositoryPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,7 +172,14 @@ func (handler *Handler) deployKubernetesStack(endpoint *portainer.Endpoint, stac
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *Handler) cloneManifestContentFromGitRepo(gitInfo *kubernetesGitDeploymentPayload, projectPath string) (string, error) {
|
func (handler *Handler) cloneManifestContentFromGitRepo(gitInfo *kubernetesGitDeploymentPayload, projectPath string) (string, error) {
|
||||||
err := handler.GitService.CloneRepository(projectPath, gitInfo.RepositoryURL, gitInfo.RepositoryReferenceName, gitInfo.RepositoryUsername, gitInfo.RepositoryPassword)
|
repositoryUsername := gitInfo.RepositoryUsername
|
||||||
|
repositoryPassword := gitInfo.RepositoryPassword
|
||||||
|
if !gitInfo.RepositoryAuthentication {
|
||||||
|
repositoryUsername = ""
|
||||||
|
repositoryPassword = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
err := handler.GitService.CloneRepository(projectPath, gitInfo.RepositoryURL, gitInfo.RepositoryReferenceName, repositoryUsername, repositoryPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
portainer "github.com/portainer/portainer/api"
|
portainer "github.com/portainer/portainer/api"
|
||||||
bolterrors "github.com/portainer/portainer/api/bolt/errors"
|
bolterrors "github.com/portainer/portainer/api/bolt/errors"
|
||||||
gittypes "github.com/portainer/portainer/api/git/types"
|
gittypes "github.com/portainer/portainer/api/git/types"
|
||||||
httperrors "github.com/portainer/portainer/api/http/errors"
|
|
||||||
"github.com/portainer/portainer/api/http/security"
|
"github.com/portainer/portainer/api/http/security"
|
||||||
"github.com/portainer/portainer/api/internal/authorization"
|
"github.com/portainer/portainer/api/internal/authorization"
|
||||||
"github.com/portainer/portainer/api/internal/endpointutils"
|
"github.com/portainer/portainer/api/internal/endpointutils"
|
||||||
|
@ -113,10 +112,6 @@ func (handler *Handler) stackCreate(w http.ResponseWriter, r *http.Request) *htt
|
||||||
case portainer.DockerComposeStack:
|
case portainer.DockerComposeStack:
|
||||||
return handler.createComposeStack(w, r, method, endpoint, tokenData.ID)
|
return handler.createComposeStack(w, r, method, endpoint, tokenData.ID)
|
||||||
case portainer.KubernetesStack:
|
case portainer.KubernetesStack:
|
||||||
if tokenData.Role != portainer.AdministratorRole {
|
|
||||||
return &httperror.HandlerError{StatusCode: http.StatusForbidden, Message: "Access denied", Err: httperrors.ErrUnauthorized}
|
|
||||||
}
|
|
||||||
|
|
||||||
return handler.createKubernetesStack(w, r, method, endpoint)
|
return handler.createKubernetesStack(w, r, method, endpoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,6 +236,10 @@ func (handler *Handler) decorateStackResponse(w http.ResponseWriter, stack *port
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *Handler) cloneAndSaveConfig(stack *portainer.Stack, projectPath, repositoryURL, refName, configFilePath string, auth bool, username, password string) error {
|
func (handler *Handler) cloneAndSaveConfig(stack *portainer.Stack, projectPath, repositoryURL, refName, configFilePath string, auth bool, username, password string) error {
|
||||||
|
if !auth {
|
||||||
|
username = ""
|
||||||
|
password = ""
|
||||||
|
}
|
||||||
|
|
||||||
err := handler.GitService.CloneRepository(projectPath, repositoryURL, refName, username, password)
|
err := handler.GitService.CloneRepository(projectPath, repositoryURL, refName, username, password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -106,7 +106,14 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) *
|
||||||
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to move git repository directory", err}
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to move git repository directory", err}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = handler.GitService.CloneRepository(stack.ProjectPath, stack.GitConfig.URL, payload.RepositoryReferenceName, payload.RepositoryUsername, payload.RepositoryPassword)
|
repositoryUsername := payload.RepositoryUsername
|
||||||
|
repositoryPassword := payload.RepositoryPassword
|
||||||
|
if !payload.RepositoryAuthentication {
|
||||||
|
repositoryUsername = ""
|
||||||
|
repositoryPassword = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
err = handler.GitService.CloneRepository(stack.ProjectPath, stack.GitConfig.URL, payload.RepositoryReferenceName, repositoryUsername, repositoryPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
restoreError := filesystem.MoveDirectory(backupProjectPath, stack.ProjectPath)
|
restoreError := filesystem.MoveDirectory(backupProjectPath, stack.ProjectPath)
|
||||||
if restoreError != nil {
|
if restoreError != nil {
|
||||||
|
@ -116,6 +123,13 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) *
|
||||||
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to clone git repository", err}
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to clone git repository", err}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
err = handler.FileService.RemoveDirectory(backupProjectPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[WARN] [http,stacks,git] [error: %s] [message: unable to remove git repository directory]", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
httpErr := handler.deployStack(r, stack, endpoint)
|
httpErr := handler.deployStack(r, stack, endpoint)
|
||||||
if httpErr != nil {
|
if httpErr != nil {
|
||||||
return httpErr
|
return httpErr
|
||||||
|
@ -126,11 +140,6 @@ func (handler *Handler) stackUpdateGit(w http.ResponseWriter, r *http.Request) *
|
||||||
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to persist the stack changes inside the database", err}
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to persist the stack changes inside the database", err}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = handler.FileService.RemoveDirectory(backupProjectPath)
|
|
||||||
if err != nil {
|
|
||||||
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to remove git repository directory", err}
|
|
||||||
}
|
|
||||||
|
|
||||||
return response.JSON(w, stack)
|
return response.JSON(w, stack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1341,7 +1341,7 @@ type (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// APIVersion is the version number of the Portainer API
|
// APIVersion is the version number of the Portainer API
|
||||||
APIVersion = "2.5.1"
|
APIVersion = "2.6.0"
|
||||||
// DBVersion is the version number of the Portainer database
|
// DBVersion is the version number of the Portainer database
|
||||||
DBVersion = 30
|
DBVersion = 30
|
||||||
// ComposeSyntaxMaxVersion is a maximum supported version of the docker compose syntax
|
// ComposeSyntaxMaxVersion is a maximum supported version of the docker compose syntax
|
||||||
|
|
|
@ -8,7 +8,8 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro
|
||||||
'Notifications',
|
'Notifications',
|
||||||
'Authentication',
|
'Authentication',
|
||||||
'ResourceControlService',
|
'ResourceControlService',
|
||||||
function ($q, $scope, $state, AzureService, Notifications, Authentication, ResourceControlService) {
|
'FormValidator',
|
||||||
|
function ($q, $scope, $state, AzureService, Notifications, Authentication, ResourceControlService, FormValidator) {
|
||||||
var allResourceGroups = [];
|
var allResourceGroups = [];
|
||||||
var allProviders = [];
|
var allProviders = [];
|
||||||
|
|
||||||
|
@ -70,6 +71,11 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro
|
||||||
return 'At least one port binding is required';
|
return 'At least one port binding is required';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const error = FormValidator.validateAccessControl(model.AccessControlData, Authentication.isAdmin());
|
||||||
|
if (error !== '') {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"author": "Portainer.io",
|
"author": "Portainer.io",
|
||||||
"name": "portainer",
|
"name": "portainer",
|
||||||
"homepage": "http://portainer.io",
|
"homepage": "http://portainer.io",
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@github.com:portainer/portainer.git"
|
"url": "git@github.com:portainer/portainer.git"
|
||||||
|
|
Loading…
Reference in New Issue