1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-09 15:55:23 +02:00
This commit is contained in:
Prabhat Khera 2023-04-18 23:19:14 +12:00
parent 525efdc035
commit 8fd67d8320
33 changed files with 1119 additions and 1177 deletions

View file

@ -85,9 +85,9 @@ func backupDb(backupDirPath string, datastore dataservices.DataStore) error {
if err != nil {
return err
}
if err = datastore.BackupTo(backupWriter); err != nil {
return err
}
// if err = datastore.BackupTo(backupWriter); err != nil {
// return err
// }
return backupWriter.Close()
}

View file

@ -12,7 +12,6 @@ import (
"github.com/pkg/errors"
"github.com/portainer/portainer/api/archive"
"github.com/portainer/portainer/api/crypto"
"github.com/portainer/portainer/api/database/boltdb"
"github.com/portainer/portainer/api/dataservices"
"github.com/portainer/portainer/api/filesystem"
"github.com/portainer/portainer/api/http/offlinegate"
@ -98,16 +97,17 @@ func restoreFiles(srcDir string, destinationDir string) error {
// TODO: This is very boltdb module specific once again due to the filename. Move to bolt module? Refactor for another day
// Prevent the possibility of having both databases. Remove any default new instance
os.Remove(filepath.Join(destinationDir, boltdb.DatabaseFileName))
os.Remove(filepath.Join(destinationDir, boltdb.EncryptedDatabaseFileName))
// os.Remove(filepath.Join(destinationDir, boltdb.DatabaseFileName))
// os.Remove(filepath.Join(destinationDir, boltdb.EncryptedDatabaseFileName))
// Now copy the database. It'll be either portainer.db or portainer.edb
// // Now copy the database. It'll be either portainer.db or portainer.edb
// Note: CopyPath does not return an error if the source file doesn't exist
err := filesystem.CopyPath(filepath.Join(srcDir, boltdb.EncryptedDatabaseFileName), destinationDir)
if err != nil {
return err
}
// // Note: CopyPath does not return an error if the source file doesn't exist
// err := filesystem.CopyPath(filepath.Join(srcDir, boltdb.EncryptedDatabaseFileName), destinationDir)
// if err != nil {
// return err
// }
return filesystem.CopyPath(filepath.Join(srcDir, boltdb.DatabaseFileName), destinationDir)
// return filesystem.CopyPath(filepath.Join(srcDir, boltdb.DatabaseFileName), destinationDir)
return nil
}

View file

@ -18,7 +18,6 @@ import (
"github.com/portainer/portainer/api/cli"
"github.com/portainer/portainer/api/crypto"
"github.com/portainer/portainer/api/database"
"github.com/portainer/portainer/api/database/boltdb"
"github.com/portainer/portainer/api/database/models"
"github.com/portainer/portainer/api/dataservices"
"github.com/portainer/portainer/api/datastore"
@ -30,6 +29,7 @@ import (
"github.com/portainer/portainer/api/git"
"github.com/portainer/portainer/api/hostmanagement/openamt"
"github.com/portainer/portainer/api/http"
"github.com/portainer/portainer/api/http/client"
"github.com/portainer/portainer/api/http/proxy"
kubeproxy "github.com/portainer/portainer/api/http/proxy/factory/kubernetes"
"github.com/portainer/portainer/api/internal/authorization"
@ -83,14 +83,6 @@ func initDataStore(flags *portainer.CLIFlags, secretKey []byte, fileService port
log.Fatal().Err(err).Msg("failed creating database connection")
}
if bconn, ok := connection.(*boltdb.DbConnection); ok {
bconn.MaxBatchSize = *flags.MaxBatchSize
bconn.MaxBatchDelay = *flags.MaxBatchDelay
bconn.InitialMmapSize = *flags.InitialMmapSize
} else {
log.Fatal().Msg("failed creating database connection: expecting a boltdb database type but a different one was received")
}
store := datastore.NewStore(*flags.Data, fileService, connection)
isNew, err := store.Open()
if err != nil {
@ -132,10 +124,10 @@ func initDataStore(flags *portainer.CLIFlags, secretKey []byte, fileService port
log.Fatal().Err(err).Msg("failed updating settings from flags")
}
} else {
err = store.MigrateData()
if err != nil {
log.Fatal().Err(err).Msg("failed migration")
}
// err = store.MigrateData()
// if err != nil {
// log.Fatal().Err(err).Msg("failed migration")
// }
}
err = updateSettingsFromFlags(store, flags)
@ -347,6 +339,143 @@ func initKeyPair(fileService portainer.FileService, signatureService portainer.D
return generateAndStoreKeyPair(fileService, signatureService)
}
func createTLSSecuredEndpoint(flags *portainer.CLIFlags, dataStore dataservices.DataStore, snapshotService portainer.SnapshotService) error {
tlsConfiguration := portainer.TLSConfiguration{
TLS: *flags.TLS,
TLSSkipVerify: *flags.TLSSkipVerify,
}
if *flags.TLS {
tlsConfiguration.TLSCACertPath = *flags.TLSCacert
tlsConfiguration.TLSCertPath = *flags.TLSCert
tlsConfiguration.TLSKeyPath = *flags.TLSKey
} else if !*flags.TLS && *flags.TLSSkipVerify {
tlsConfiguration.TLS = true
}
endpoint := &portainer.Endpoint{
Name: "primary",
URL: *flags.EndpointURL,
GroupID: portainer.EndpointGroupID(1),
Type: portainer.DockerEnvironment,
TLSConfig: tlsConfiguration,
UserAccessPolicies: portainer.UserAccessPolicies{},
TeamAccessPolicies: portainer.TeamAccessPolicies{},
TagIDs: []portainer.TagID{},
Status: portainer.EndpointStatusUp,
Snapshots: []portainer.DockerSnapshot{},
Kubernetes: portainer.KubernetesDefault(),
SecuritySettings: portainer.EndpointSecuritySettings{
AllowVolumeBrowserForRegularUsers: false,
EnableHostManagementFeatures: false,
AllowSysctlSettingForRegularUsers: true,
AllowBindMountsForRegularUsers: true,
AllowPrivilegedModeForRegularUsers: true,
AllowHostNamespaceForRegularUsers: true,
AllowContainerCapabilitiesForRegularUsers: true,
AllowDeviceMappingForRegularUsers: true,
AllowStackManagementForRegularUsers: true,
},
}
if strings.HasPrefix(endpoint.URL, "tcp://") {
tlsConfig, err := crypto.CreateTLSConfigurationFromDisk(tlsConfiguration.TLSCACertPath, tlsConfiguration.TLSCertPath, tlsConfiguration.TLSKeyPath, tlsConfiguration.TLSSkipVerify)
if err != nil {
return err
}
agentOnDockerEnvironment, err := client.ExecutePingOperation(endpoint.URL, tlsConfig)
if err != nil {
return err
}
if agentOnDockerEnvironment {
endpoint.Type = portainer.AgentOnDockerEnvironment
}
}
err := snapshotService.SnapshotEndpoint(endpoint)
if err != nil {
log.Error().
Str("endpoint", endpoint.Name).
Str("URL", endpoint.URL).
Err(err).
Msg("environment snapshot error")
}
return dataStore.Endpoint().Create(endpoint)
}
func createUnsecuredEndpoint(endpointURL string, dataStore dataservices.DataStore, snapshotService portainer.SnapshotService) error {
if strings.HasPrefix(endpointURL, "tcp://") {
_, err := client.ExecutePingOperation(endpointURL, nil)
if err != nil {
return err
}
}
endpoint := &portainer.Endpoint{
Name: "primary",
URL: endpointURL,
GroupID: portainer.EndpointGroupID(1),
Type: portainer.DockerEnvironment,
TLSConfig: portainer.TLSConfiguration{},
UserAccessPolicies: portainer.UserAccessPolicies{},
TeamAccessPolicies: portainer.TeamAccessPolicies{},
TagIDs: []portainer.TagID{},
Status: portainer.EndpointStatusUp,
Snapshots: []portainer.DockerSnapshot{},
Kubernetes: portainer.KubernetesDefault(),
SecuritySettings: portainer.EndpointSecuritySettings{
AllowVolumeBrowserForRegularUsers: false,
EnableHostManagementFeatures: false,
AllowSysctlSettingForRegularUsers: true,
AllowBindMountsForRegularUsers: true,
AllowPrivilegedModeForRegularUsers: true,
AllowHostNamespaceForRegularUsers: true,
AllowContainerCapabilitiesForRegularUsers: true,
AllowDeviceMappingForRegularUsers: true,
AllowStackManagementForRegularUsers: true,
},
}
err := snapshotService.SnapshotEndpoint(endpoint)
if err != nil {
log.Error().
Str("endpoint", endpoint.Name).
Str("URL", endpoint.URL).Err(err).
Msg("environment snapshot error")
}
return dataStore.Endpoint().Create(endpoint)
}
func initEndpoint(flags *portainer.CLIFlags, dataStore dataservices.DataStore, snapshotService portainer.SnapshotService) error {
if *flags.EndpointURL == "" {
return nil
}
endpoints, err := dataStore.Endpoint().Endpoints()
if err != nil {
return err
}
if len(endpoints) > 0 {
log.Info().Msg("instance already has defined environments, skipping the environment defined via CLI")
return nil
}
if *flags.TLS || *flags.TLSSkipVerify {
return createTLSSecuredEndpoint(flags, dataStore, snapshotService)
}
return createUnsecuredEndpoint(*flags.EndpointURL, dataStore, snapshotService)
}
func loadEncryptionSecretKey(keyfilename string) []byte {
content, err := os.ReadFile(path.Join("/run/secrets", keyfilename))
if err != nil {

View file

@ -24,11 +24,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
s := &Service{
connection: connection,
idxEdgeID: make(map[string]portainer.EndpointID),

View file

@ -21,24 +21,24 @@ func (service ServiceTx) BucketName() string {
// Endpoint returns an environment(endpoint) by ID.
func (service ServiceTx) Endpoint(ID portainer.EndpointID) (*portainer.Endpoint, error) {
var endpoint portainer.Endpoint
identifier := service.service.connection.ConvertToKey(int(ID))
// identifier := service.service.connection.ConvertToKey(int(ID))
err := service.tx.GetObject(BucketName, identifier, &endpoint)
if err != nil {
return nil, err
}
// err := service.tx.GetObject(BucketName, identifier, &endpoint)
// if err != nil {
// return nil, err
// }
return &endpoint, nil
}
// UpdateEndpoint updates an environment(endpoint).
func (service ServiceTx) UpdateEndpoint(ID portainer.EndpointID, endpoint *portainer.Endpoint) error {
identifier := service.service.connection.ConvertToKey(int(ID))
// identifier := service.service.connection.ConvertToKey(int(ID))
err := service.tx.UpdateObject(BucketName, identifier, endpoint)
if err != nil {
return err
}
// err := service.tx.UpdateObject(BucketName, identifier, endpoint)
// if err != nil {
// return err
// }
service.service.mu.Lock()
if len(endpoint.EdgeID) > 0 {
@ -54,12 +54,12 @@ func (service ServiceTx) UpdateEndpoint(ID portainer.EndpointID, endpoint *porta
// DeleteEndpoint deletes an environment(endpoint).
func (service ServiceTx) DeleteEndpoint(ID portainer.EndpointID) error {
identifier := service.service.connection.ConvertToKey(int(ID))
// identifier := service.service.connection.ConvertToKey(int(ID))
err := service.tx.DeleteObject(BucketName, identifier)
if err != nil {
return err
}
// err := service.tx.DeleteObject(BucketName, identifier)
// if err != nil {
// return err
// }
service.service.mu.Lock()
for edgeID, endpointID := range service.service.idxEdgeID {

View file

@ -1,11 +1,7 @@
package endpointgroup
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,11 +20,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
}, nil
@ -44,57 +35,38 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
// EndpointGroup returns an environment(endpoint) group by ID.
func (service *Service) EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) {
var endpointGroup portainer.EndpointGroup
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &endpointGroup)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &endpointGroup)
// if err != nil {
// return nil, err
// }
return &endpointGroup, nil
}
// UpdateEndpointGroup updates an environment(endpoint) group.
func (service *Service) UpdateEndpointGroup(ID portainer.EndpointGroupID, endpointGroup *portainer.EndpointGroup) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, endpointGroup)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, endpointGroup)
return nil
}
// DeleteEndpointGroup deletes an environment(endpoint) group.
func (service *Service) DeleteEndpointGroup(ID portainer.EndpointGroupID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
// EndpointGroups return an array containing all the environment(endpoint) groups.
func (service *Service) EndpointGroups() ([]portainer.EndpointGroup, error) {
var endpointGroups = make([]portainer.EndpointGroup, 0)
err := service.connection.GetAll(
BucketName,
&portainer.EndpointGroup{},
func(obj interface{}) (interface{}, error) {
endpointGroup, ok := obj.(*portainer.EndpointGroup)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to EndpointGroup object")
return nil, fmt.Errorf("Failed to convert to EndpointGroup object: %s", obj)
}
endpointGroups = append(endpointGroups, *endpointGroup)
return &portainer.EndpointGroup{}, nil
})
return endpointGroups, err
return endpointGroups, nil
}
// CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it.
func (service *Service) Create(endpointGroup *portainer.EndpointGroup) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
endpointGroup.ID = portainer.EndpointGroupID(id)
return int(endpointGroup.ID), endpointGroup
},
)
return nil
}

View file

@ -1,11 +1,7 @@
package endpointgroup
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
type ServiceTx struct {
@ -20,57 +16,38 @@ func (service ServiceTx) BucketName() string {
// EndpointGroup returns an environment(endpoint) group by ID.
func (service ServiceTx) EndpointGroup(ID portainer.EndpointGroupID) (*portainer.EndpointGroup, error) {
var endpointGroup portainer.EndpointGroup
identifier := service.service.connection.ConvertToKey(int(ID))
// identifier := service.service.connection.ConvertToKey(int(ID))
err := service.tx.GetObject(BucketName, identifier, &endpointGroup)
if err != nil {
return nil, err
}
// err := service.tx.GetObject(BucketName, identifier, &endpointGroup)
// if err != nil {
// return nil, err
// }
return &endpointGroup, nil
}
// UpdateEndpointGroup updates an environment(endpoint) group.
func (service ServiceTx) UpdateEndpointGroup(ID portainer.EndpointGroupID, endpointGroup *portainer.EndpointGroup) error {
identifier := service.service.connection.ConvertToKey(int(ID))
return service.tx.UpdateObject(BucketName, identifier, endpointGroup)
// identifier := service.service.connection.ConvertToKey(int(ID))
// return service.tx.UpdateObject(BucketName, identifier, endpointGroup)
return nil
}
// DeleteEndpointGroup deletes an environment(endpoint) group.
func (service ServiceTx) DeleteEndpointGroup(ID portainer.EndpointGroupID) error {
identifier := service.service.connection.ConvertToKey(int(ID))
return service.tx.DeleteObject(BucketName, identifier)
// identifier := service.service.connection.ConvertToKey(int(ID))
// return service.tx.DeleteObject(BucketName, identifier)
return nil
}
// EndpointGroups return an array containing all the environment(endpoint) groups.
func (service ServiceTx) EndpointGroups() ([]portainer.EndpointGroup, error) {
var endpointGroups = make([]portainer.EndpointGroup, 0)
err := service.tx.GetAll(
BucketName,
&portainer.EndpointGroup{},
func(obj interface{}) (interface{}, error) {
endpointGroup, ok := obj.(*portainer.EndpointGroup)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to EndpointGroup object")
return nil, fmt.Errorf("failed to convert to EndpointGroup object: %s", obj)
}
endpointGroups = append(endpointGroups, *endpointGroup)
return &portainer.EndpointGroup{}, nil
})
return endpointGroups, err
return endpointGroups, nil
}
// CreateEndpointGroup assign an ID to a new environment(endpoint) group and saves it.
func (service ServiceTx) Create(endpointGroup *portainer.EndpointGroup) error {
return service.tx.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
endpointGroup.ID = portainer.EndpointGroupID(id)
return int(endpointGroup.ID), endpointGroup
},
)
return nil
}

View file

@ -1,8 +1,6 @@
package endpointrelation
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/internal/edge/cache"
@ -33,10 +31,6 @@ func (service *Service) RegisterUpdateStackFunction(
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
@ -54,55 +48,32 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
func (service *Service) EndpointRelations() ([]portainer.EndpointRelation, error) {
var all = make([]portainer.EndpointRelation, 0)
err := service.connection.GetAll(
BucketName,
&portainer.EndpointRelation{},
func(obj interface{}) (interface{}, error) {
r, ok := obj.(*portainer.EndpointRelation)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to EndpointRelation object")
return nil, fmt.Errorf("Failed to convert to EndpointRelation object: %s", obj)
}
all = append(all, *r)
return &portainer.EndpointRelation{}, nil
})
return all, err
return all, nil
}
// EndpointRelation returns a Environment(Endpoint) relation object by EndpointID
func (service *Service) EndpointRelation(endpointID portainer.EndpointID) (*portainer.EndpointRelation, error) {
var endpointRelation portainer.EndpointRelation
identifier := service.connection.ConvertToKey(int(endpointID))
err := service.connection.GetObject(BucketName, identifier, &endpointRelation)
if err != nil {
return nil, err
}
return &endpointRelation, nil
}
// CreateEndpointRelation saves endpointRelation
func (service *Service) Create(endpointRelation *portainer.EndpointRelation) error {
err := service.connection.CreateObjectWithId(BucketName, int(endpointRelation.EndpointID), endpointRelation)
cache.Del(endpointRelation.EndpointID)
return err
return nil
}
// UpdateEndpointRelation updates an Environment(Endpoint) relation object
func (service *Service) UpdateEndpointRelation(endpointID portainer.EndpointID, endpointRelation *portainer.EndpointRelation) error {
previousRelationState, _ := service.EndpointRelation(endpointID)
identifier := service.connection.ConvertToKey(int(endpointID))
err := service.connection.UpdateObject(BucketName, identifier, endpointRelation)
cache.Del(endpointID)
if err != nil {
return err
}
// identifier := service.connection.ConvertToKey(int(endpointID))
// err := service.connection.UpdateObject(BucketName, identifier, endpointRelation)
// cache.Del(endpointID)
// if err != nil {
// return err
// }
updatedRelationState, _ := service.EndpointRelation(endpointID)
@ -115,12 +86,12 @@ func (service *Service) UpdateEndpointRelation(endpointID portainer.EndpointID,
func (service *Service) DeleteEndpointRelation(endpointID portainer.EndpointID) error {
deletedRelation, _ := service.EndpointRelation(endpointID)
identifier := service.connection.ConvertToKey(int(endpointID))
err := service.connection.DeleteObject(BucketName, identifier)
cache.Del(endpointID)
if err != nil {
return err
}
// identifier := service.connection.ConvertToKey(int(endpointID))
// err := service.connection.DeleteObject(BucketName, identifier)
// cache.Del(endpointID)
// if err != nil {
// return err
// }
service.updateEdgeStacksAfterRelationChange(deletedRelation, nil)

View file

@ -43,12 +43,12 @@ func (service ServiceTx) EndpointRelations() ([]portainer.EndpointRelation, erro
// EndpointRelation returns an Environment(Endpoint) relation object by EndpointID
func (service ServiceTx) EndpointRelation(endpointID portainer.EndpointID) (*portainer.EndpointRelation, error) {
var endpointRelation portainer.EndpointRelation
identifier := service.service.connection.ConvertToKey(int(endpointID))
// identifier := service.service.connection.ConvertToKey(int(endpointID))
err := service.tx.GetObject(BucketName, identifier, &endpointRelation)
if err != nil {
return nil, err
}
// err := service.tx.GetObject(BucketName, identifier, &endpointRelation)
// if err != nil {
// return nil, err
// }
return &endpointRelation, nil
}
@ -65,12 +65,12 @@ func (service ServiceTx) Create(endpointRelation *portainer.EndpointRelation) er
func (service ServiceTx) UpdateEndpointRelation(endpointID portainer.EndpointID, endpointRelation *portainer.EndpointRelation) error {
previousRelationState, _ := service.EndpointRelation(endpointID)
identifier := service.service.connection.ConvertToKey(int(endpointID))
err := service.tx.UpdateObject(BucketName, identifier, endpointRelation)
cache.Del(endpointID)
if err != nil {
return err
}
// identifier := service.service.connection.ConvertToKey(int(endpointID))
// err := service.tx.UpdateObject(BucketName, identifier, endpointRelation)
// cache.Del(endpointID)
// if err != nil {
// return err
// }
updatedRelationState, _ := service.EndpointRelation(endpointID)
@ -83,12 +83,12 @@ func (service ServiceTx) UpdateEndpointRelation(endpointID portainer.EndpointID,
func (service ServiceTx) DeleteEndpointRelation(endpointID portainer.EndpointID) error {
deletedRelation, _ := service.EndpointRelation(endpointID)
identifier := service.service.connection.ConvertToKey(int(endpointID))
err := service.tx.DeleteObject(BucketName, identifier)
cache.Del(endpointID)
if err != nil {
return err
}
// identifier := service.service.connection.ConvertToKey(int(endpointID))
// err := service.tx.DeleteObject(BucketName, identifier)
// cache.Del(endpointID)
// if err != nil {
// return err
// }
service.updateEdgeStacksAfterRelationChange(deletedRelation, nil)

View file

@ -1,11 +1,7 @@
package extension
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -37,12 +33,12 @@ func NewService(connection portainer.Connection) (*Service, error) {
// Extension returns a extension by ID
func (service *Service) Extension(ID portainer.ExtensionID) (*portainer.Extension, error) {
var extension portainer.Extension
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &extension)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &extension)
// if err != nil {
// return nil, err
// }
return &extension, nil
}
@ -51,31 +47,33 @@ func (service *Service) Extension(ID portainer.ExtensionID) (*portainer.Extensio
func (service *Service) Extensions() ([]portainer.Extension, error) {
var extensions = make([]portainer.Extension, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Extension{},
func(obj interface{}) (interface{}, error) {
extension, ok := obj.(*portainer.Extension)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Extension object")
return nil, fmt.Errorf("Failed to convert to Extension object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Extension{},
// func(obj interface{}) (interface{}, error) {
// extension, ok := obj.(*portainer.Extension)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Extension object")
// return nil, fmt.Errorf("Failed to convert to Extension object: %s", obj)
// }
extensions = append(extensions, *extension)
// extensions = append(extensions, *extension)
return &portainer.Extension{}, nil
})
// return &portainer.Extension{}, nil
// })
return extensions, err
return extensions, nil
}
// Persist persists a extension inside the database.
func (service *Service) Persist(extension *portainer.Extension) error {
return service.connection.CreateObjectWithId(BucketName, int(extension.ID), extension)
// return service.connection.CreateObjectWithId(BucketName, int(extension.ID), extension)
return nil
}
// DeleteExtension deletes a Extension.
func (service *Service) DeleteExtension(ID portainer.ExtensionID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,11 +1,7 @@
package fdoprofile
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -38,58 +34,56 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) FDOProfiles() ([]portainer.FDOProfile, error) {
var fdoProfiles = make([]portainer.FDOProfile, 0)
err := service.connection.GetAll(
BucketName,
&portainer.FDOProfile{},
func(obj interface{}) (interface{}, error) {
fdoProfile, ok := obj.(*portainer.FDOProfile)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to FDOProfile object")
// err := service.connection.GetAll(
// BucketName,
// &portainer.FDOProfile{},
// func(obj interface{}) (interface{}, error) {
// fdoProfile, ok := obj.(*portainer.FDOProfile)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to FDOProfile object")
return nil, fmt.Errorf("Failed to convert to FDOProfile object: %s", obj)
}
fdoProfiles = append(fdoProfiles, *fdoProfile)
return &portainer.FDOProfile{}, nil
})
// return nil, fmt.Errorf("Failed to convert to FDOProfile object: %s", obj)
// }
// fdoProfiles = append(fdoProfiles, *fdoProfile)
// return &portainer.FDOProfile{}, nil
// })
return fdoProfiles, err
return fdoProfiles, nil
}
// FDOProfile returns an FDO Profile by ID.
func (service *Service) FDOProfile(ID portainer.FDOProfileID) (*portainer.FDOProfile, error) {
var FDOProfile portainer.FDOProfile
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &FDOProfile)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &FDOProfile)
// if err != nil {
// return nil, err
// }
return &FDOProfile, nil
}
// Create assign an ID to a new FDO Profile and saves it.
func (service *Service) Create(FDOProfile *portainer.FDOProfile) error {
return service.connection.CreateObjectWithId(
BucketName,
int(FDOProfile.ID),
FDOProfile,
)
// return service.connection.CreateObjectWithId(
// BucketName,
// int(FDOProfile.ID),
// FDOProfile,
// )
return nil
}
// Update updates an FDO Profile.
func (service *Service) Update(ID portainer.FDOProfileID, FDOProfile *portainer.FDOProfile) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, FDOProfile)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, FDOProfile)
return nil
}
// Delete deletes an FDO Profile.
func (service *Service) Delete(ID portainer.FDOProfileID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
}
// GetNextIdentifier returns the next identifier for a FDO Profile.
func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,11 +1,7 @@
package helmuserrepository
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -38,67 +34,70 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) HelmUserRepositories() ([]portainer.HelmUserRepository, error) {
var repos = make([]portainer.HelmUserRepository, 0)
err := service.connection.GetAll(
BucketName,
&portainer.HelmUserRepository{},
func(obj interface{}) (interface{}, error) {
r, ok := obj.(*portainer.HelmUserRepository)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to HelmUserRepository object")
return nil, fmt.Errorf("Failed to convert to HelmUserRepository object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.HelmUserRepository{},
// func(obj interface{}) (interface{}, error) {
// r, ok := obj.(*portainer.HelmUserRepository)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to HelmUserRepository object")
// return nil, fmt.Errorf("Failed to convert to HelmUserRepository object: %s", obj)
// }
repos = append(repos, *r)
// repos = append(repos, *r)
return &portainer.HelmUserRepository{}, nil
})
// return &portainer.HelmUserRepository{}, nil
// })
return repos, err
return repos, nil
}
// HelmUserRepositoryByUserID return an array containing all the HelmUserRepository objects where the specified userID is present.
func (service *Service) HelmUserRepositoryByUserID(userID portainer.UserID) ([]portainer.HelmUserRepository, error) {
var result = make([]portainer.HelmUserRepository, 0)
err := service.connection.GetAll(
BucketName,
&portainer.HelmUserRepository{},
func(obj interface{}) (interface{}, error) {
record, ok := obj.(*portainer.HelmUserRepository)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to HelmUserRepository object")
return nil, fmt.Errorf("Failed to convert to HelmUserRepository object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.HelmUserRepository{},
// func(obj interface{}) (interface{}, error) {
// record, ok := obj.(*portainer.HelmUserRepository)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to HelmUserRepository object")
// return nil, fmt.Errorf("Failed to convert to HelmUserRepository object: %s", obj)
// }
if record.UserID == userID {
result = append(result, *record)
}
// if record.UserID == userID {
// result = append(result, *record)
// }
return &portainer.HelmUserRepository{}, nil
})
// return &portainer.HelmUserRepository{}, nil
// })
return result, err
return result, nil
}
// CreateHelmUserRepository creates a new HelmUserRepository object.
func (service *Service) Create(record *portainer.HelmUserRepository) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
record.ID = portainer.HelmUserRepositoryID(id)
return int(record.ID), record
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// record.ID = portainer.HelmUserRepositoryID(id)
// return int(record.ID), record
// },
// )
return nil
}
// UpdateHelmUserRepostory updates an registry.
func (service *Service) UpdateHelmUserRepository(ID portainer.HelmUserRepositoryID, registry *portainer.HelmUserRepository) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, registry)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, registry)
return nil
}
// DeleteHelmUserRepository deletes an registry.
func (service *Service) DeleteHelmUserRepository(ID portainer.HelmUserRepositoryID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -2,7 +2,6 @@ package dataservices
import (
"errors"
"io"
"time"
portainer "github.com/portainer/portainer/api"
@ -44,12 +43,8 @@ type (
Open() (newStore bool, err error)
Init() error
Close() error
UpdateTx(func(DataStoreTx) error) error
ViewTx(func(DataStoreTx) error) error
MigrateData() error
Rollback(force bool) error
CheckCurrentEdition() error
BackupTo(w io.Writer) error
Export(filename string) (err error)
DataStoreTx
@ -57,7 +52,6 @@ type (
// CustomTemplateService represents a service to manage custom templates
CustomTemplateService interface {
GetNextIdentifier() int
CustomTemplates() ([]portainer.CustomTemplate, error)
CustomTemplate(ID portainer.CustomTemplateID) (*portainer.CustomTemplate, error)
Create(customTemplate *portainer.CustomTemplate) error
@ -85,7 +79,6 @@ type (
UpdateEdgeJob(ID portainer.EdgeJobID, edgeJob *portainer.EdgeJob) error
UpdateEdgeJobFunc(ID portainer.EdgeJobID, updateFunc func(edgeJob *portainer.EdgeJob)) error
DeleteEdgeJob(ID portainer.EdgeJobID) error
GetNextIdentifier() int
BucketName() string
}
@ -99,7 +92,6 @@ type (
UpdateEdgeStack(ID portainer.EdgeStackID, edgeStack *portainer.EdgeStack) error
UpdateEdgeStackFunc(ID portainer.EdgeStackID, updateFunc func(edgeStack *portainer.EdgeStack)) error
DeleteEdgeStack(ID portainer.EdgeStackID) error
GetNextIdentifier() int
BucketName() string
}
@ -113,7 +105,6 @@ type (
Create(endpoint *portainer.Endpoint) error
UpdateEndpoint(ID portainer.EndpointID, endpoint *portainer.Endpoint) error
DeleteEndpoint(ID portainer.EndpointID) error
GetNextIdentifier() int
BucketName() string
}
@ -144,7 +135,6 @@ type (
Create(FDOProfile *portainer.FDOProfile) error
Update(ID portainer.FDOProfileID, FDOProfile *portainer.FDOProfile) error
Delete(ID portainer.FDOProfileID) error
GetNextIdentifier() int
BucketName() string
}
@ -239,7 +229,6 @@ type (
Create(stack *portainer.Stack) error
UpdateStack(ID portainer.StackID, stack *portainer.Stack) error
DeleteStack(ID portainer.StackID) error
GetNextIdentifier() int
StackByWebhookID(ID string) (*portainer.Stack, error)
RefreshableStacks() ([]portainer.Stack, error)
BucketName() string

View file

@ -1,11 +1,7 @@
package registry
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
// BucketName represents the name of the bucket where this service stores data.
@ -22,10 +18,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -42,12 +38,12 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
// Registry returns a registry by ID.
func (service *Service) Registry(ID portainer.RegistryID) (*portainer.Registry, error) {
var registry portainer.Registry
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &registry)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &registry)
// if err != nil {
// return nil, err
// }
return &registry, nil
}
@ -56,43 +52,46 @@ func (service *Service) Registry(ID portainer.RegistryID) (*portainer.Registry,
func (service *Service) Registries() ([]portainer.Registry, error) {
var registries = make([]portainer.Registry, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Registry{},
func(obj interface{}) (interface{}, error) {
registry, ok := obj.(*portainer.Registry)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Registry object")
return nil, fmt.Errorf("Failed to convert to Registry object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Registry{},
// func(obj interface{}) (interface{}, error) {
// registry, ok := obj.(*portainer.Registry)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Registry object")
// return nil, fmt.Errorf("Failed to convert to Registry object: %s", obj)
// }
registries = append(registries, *registry)
// registries = append(registries, *registry)
return &portainer.Registry{}, nil
})
// return &portainer.Registry{}, nil
// })
return registries, err
return registries, nil
}
// Create creates a new registry.
func (service *Service) Create(registry *portainer.Registry) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
registry.ID = portainer.RegistryID(id)
return int(registry.ID), registry
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// registry.ID = portainer.RegistryID(id)
// return int(registry.ID), registry
// },
// )
return nil
}
// UpdateRegistry updates a registry.
func (service *Service) UpdateRegistry(ID portainer.RegistryID, registry *portainer.Registry) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, registry)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, registry)
return nil
}
// DeleteRegistry deletes a registry.
func (service *Service) DeleteRegistry(ID portainer.RegistryID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,12 +1,7 @@
package resourcecontrol
import (
"errors"
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
// BucketName represents the name of the bucket where this service stores data.
@ -23,10 +18,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -43,12 +38,12 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
// ResourceControl returns a ResourceControl object by ID
func (service *Service) ResourceControl(ID portainer.ResourceControlID) (*portainer.ResourceControl, error) {
var resourceControl portainer.ResourceControl
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &resourceControl)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &resourceControl)
// if err != nil {
// return nil, err
// }
return &resourceControl, nil
}
@ -57,80 +52,83 @@ func (service *Service) ResourceControl(ID portainer.ResourceControlID) (*portai
// to the main ResourceID or in SubResourceIDs. It also performs a check on the resource type. Return nil
// if no ResourceControl was found.
func (service *Service) ResourceControlByResourceIDAndType(resourceID string, resourceType portainer.ResourceControlType) (*portainer.ResourceControl, error) {
var resourceControl *portainer.ResourceControl
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.ResourceControl{},
func(obj interface{}) (interface{}, error) {
rc, ok := obj.(*portainer.ResourceControl)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object")
return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj)
}
// var resourceControl *portainer.ResourceControl
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.ResourceControl{},
// func(obj interface{}) (interface{}, error) {
// rc, ok := obj.(*portainer.ResourceControl)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object")
// return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj)
// }
if rc.ResourceID == resourceID && rc.Type == resourceType {
resourceControl = rc
return nil, stop
}
// if rc.ResourceID == resourceID && rc.Type == resourceType {
// resourceControl = rc
// return nil, stop
// }
for _, subResourceID := range rc.SubResourceIDs {
if subResourceID == resourceID {
resourceControl = rc
return nil, stop
}
}
// for _, subResourceID := range rc.SubResourceIDs {
// if subResourceID == resourceID {
// resourceControl = rc
// return nil, stop
// }
// }
return &portainer.ResourceControl{}, nil
})
if errors.Is(err, stop) {
return resourceControl, nil
}
// return &portainer.ResourceControl{}, nil
// })
// if errors.Is(err, stop) {
// return resourceControl, nil
// }
return nil, err
return nil, nil
}
// ResourceControls returns all the ResourceControl objects
func (service *Service) ResourceControls() ([]portainer.ResourceControl, error) {
var rcs = make([]portainer.ResourceControl, 0)
err := service.connection.GetAll(
BucketName,
&portainer.ResourceControl{},
func(obj interface{}) (interface{}, error) {
rc, ok := obj.(*portainer.ResourceControl)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object")
return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.ResourceControl{},
// func(obj interface{}) (interface{}, error) {
// rc, ok := obj.(*portainer.ResourceControl)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to ResourceControl object")
// return nil, fmt.Errorf("Failed to convert to ResourceControl object: %s", obj)
// }
rcs = append(rcs, *rc)
// rcs = append(rcs, *rc)
return &portainer.ResourceControl{}, nil
})
// return &portainer.ResourceControl{}, nil
// })
return rcs, err
return rcs, nil
}
// CreateResourceControl creates a new ResourceControl object
func (service *Service) Create(resourceControl *portainer.ResourceControl) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
resourceControl.ID = portainer.ResourceControlID(id)
return int(resourceControl.ID), resourceControl
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// resourceControl.ID = portainer.ResourceControlID(id)
// return int(resourceControl.ID), resourceControl
// },
// )
return nil
}
// UpdateResourceControl saves a ResourceControl object.
func (service *Service) UpdateResourceControl(ID portainer.ResourceControlID, resourceControl *portainer.ResourceControl) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, resourceControl)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, resourceControl)
return nil
}
// DeleteResourceControl deletes a ResourceControl object by ID
func (service *Service) DeleteResourceControl(ID portainer.ResourceControlID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,11 +1,7 @@
package role
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
// BucketName represents the name of the bucket where this service stores data.
@ -22,10 +18,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -42,12 +38,12 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
// Role returns a Role by ID
func (service *Service) Role(ID portainer.RoleID) (*portainer.Role, error) {
var set portainer.Role
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &set)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &set)
// if err != nil {
// return nil, err
// }
return &set, nil
}
@ -56,37 +52,39 @@ func (service *Service) Role(ID portainer.RoleID) (*portainer.Role, error) {
func (service *Service) Roles() ([]portainer.Role, error) {
var sets = make([]portainer.Role, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Role{},
func(obj interface{}) (interface{}, error) {
set, ok := obj.(*portainer.Role)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Role object")
return nil, fmt.Errorf("failed to convert to Role object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Role{},
// func(obj interface{}) (interface{}, error) {
// set, ok := obj.(*portainer.Role)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Role object")
// return nil, fmt.Errorf("failed to convert to Role object: %s", obj)
// }
sets = append(sets, *set)
// sets = append(sets, *set)
return &portainer.Role{}, nil
})
// return &portainer.Role{}, nil
// })
return sets, err
return sets, nil
}
// CreateRole creates a new Role.
func (service *Service) Create(role *portainer.Role) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
role.ID = portainer.RoleID(id)
return int(role.ID), role
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// role.ID = portainer.RoleID(id)
// return int(role.ID), role
// },
// )
return nil
}
// UpdateRole updates a role.
func (service *Service) UpdateRole(ID portainer.RoleID, role *portainer.Role) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, role)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, role)
return nil
}

View file

@ -1,11 +1,7 @@
package schedule
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -37,48 +33,50 @@ func NewService(connection portainer.Connection) (*Service, error) {
// Schedule returns a schedule by ID.
func (service *Service) Schedule(ID portainer.ScheduleID) (*portainer.Schedule, error) {
var schedule portainer.Schedule
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &schedule)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &schedule)
// if err != nil {
// return nil, err
// }
return &schedule, nil
}
// UpdateSchedule updates a schedule.
func (service *Service) UpdateSchedule(ID portainer.ScheduleID, schedule *portainer.Schedule) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, schedule)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, schedule)
return nil
}
// DeleteSchedule deletes a schedule.
func (service *Service) DeleteSchedule(ID portainer.ScheduleID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
// Schedules return a array containing all the schedules.
func (service *Service) Schedules() ([]portainer.Schedule, error) {
var schedules = make([]portainer.Schedule, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Schedule{},
func(obj interface{}) (interface{}, error) {
schedule, ok := obj.(*portainer.Schedule)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Schedule object")
return nil, fmt.Errorf("Failed to convert to Schedule object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Schedule{},
// func(obj interface{}) (interface{}, error) {
// schedule, ok := obj.(*portainer.Schedule)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Schedule object")
// return nil, fmt.Errorf("Failed to convert to Schedule object: %s", obj)
// }
schedules = append(schedules, *schedule)
// schedules = append(schedules, *schedule)
return &portainer.Schedule{}, nil
})
// return &portainer.Schedule{}, nil
// })
return schedules, err
return schedules, nil
}
// SchedulesByJobType return a array containing all the schedules
@ -86,32 +84,28 @@ func (service *Service) Schedules() ([]portainer.Schedule, error) {
func (service *Service) SchedulesByJobType(jobType portainer.JobType) ([]portainer.Schedule, error) {
var schedules = make([]portainer.Schedule, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Schedule{},
func(obj interface{}) (interface{}, error) {
schedule, ok := obj.(*portainer.Schedule)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Schedule object")
return nil, fmt.Errorf("Failed to convert to Schedule object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Schedule{},
// func(obj interface{}) (interface{}, error) {
// schedule, ok := obj.(*portainer.Schedule)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Schedule object")
// return nil, fmt.Errorf("Failed to convert to Schedule object: %s", obj)
// }
if schedule.JobType == jobType {
schedules = append(schedules, *schedule)
}
// if schedule.JobType == jobType {
// schedules = append(schedules, *schedule)
// }
return &portainer.Schedule{}, nil
})
// return &portainer.Schedule{}, nil
// })
return schedules, err
return schedules, nil
}
// Create assign an ID to a new schedule and saves it.
func (service *Service) CreateSchedule(schedule *portainer.Schedule) error {
return service.connection.CreateObjectWithId(BucketName, int(schedule.ID), schedule)
}
// GetNextIdentifier returns the next identifier for a schedule.
func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName)
// return service.connection.CreateObjectWithId(BucketName, int(schedule.ID), schedule)
return nil
}

View file

@ -21,11 +21,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
}, nil
@ -42,15 +37,16 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
func (service *Service) Settings() (*portainer.Settings, error) {
var settings portainer.Settings
err := service.connection.GetObject(BucketName, []byte(settingsKey), &settings)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, []byte(settingsKey), &settings)
// if err != nil {
// return nil, err
// }
return &settings, nil
}
// UpdateSettings persists a Settings object.
func (service *Service) UpdateSettings(settings *portainer.Settings) error {
return service.connection.UpdateObject(BucketName, []byte(settingsKey), settings)
// return service.connection.UpdateObject(BucketName, []byte(settingsKey), settings)
return nil
}

View file

@ -1,11 +1,7 @@
package snapshot
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -21,11 +17,6 @@ func (service *Service) BucketName() string {
}
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
}, nil
@ -40,12 +31,6 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
func (service *Service) Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) {
var snapshot portainer.Snapshot
identifier := service.connection.ConvertToKey(int(endpointID))
err := service.connection.GetObject(BucketName, identifier, &snapshot)
if err != nil {
return nil, err
}
return &snapshot, nil
}
@ -53,32 +38,22 @@ func (service *Service) Snapshot(endpointID portainer.EndpointID) (*portainer.Sn
func (service *Service) Snapshots() ([]portainer.Snapshot, error) {
var snapshots = make([]portainer.Snapshot, 0)
err := service.connection.GetAllWithJsoniter(
BucketName,
&portainer.Snapshot{},
func(obj interface{}) (interface{}, error) {
snapshot, ok := obj.(*portainer.Snapshot)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Snapshot object")
return nil, fmt.Errorf("failed to convert to Snapshot object: %s", obj)
}
snapshots = append(snapshots, *snapshot)
return &portainer.Snapshot{}, nil
})
return snapshots, err
return snapshots, nil
}
func (service *Service) UpdateSnapshot(snapshot *portainer.Snapshot) error {
identifier := service.connection.ConvertToKey(int(snapshot.EndpointID))
return service.connection.UpdateObject(BucketName, identifier, snapshot)
// identifier := service.connection.ConvertToKey(int(snapshot.EndpointID))
// return service.connection.UpdateObject(BucketName, identifier, snapshot)
return nil
}
func (service *Service) DeleteSnapshot(endpointID portainer.EndpointID) error {
identifier := service.connection.ConvertToKey(int(endpointID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(endpointID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
func (service *Service) Create(snapshot *portainer.Snapshot) error {
return service.connection.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot)
// return service.connection.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot)
return nil
}

View file

@ -1,11 +1,7 @@
package snapshot
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
type ServiceTx struct {
@ -19,12 +15,12 @@ func (service ServiceTx) BucketName() string {
func (service ServiceTx) Snapshot(endpointID portainer.EndpointID) (*portainer.Snapshot, error) {
var snapshot portainer.Snapshot
identifier := service.service.connection.ConvertToKey(int(endpointID))
// identifier := service.service.connection.ConvertToKey(int(endpointID))
err := service.tx.GetObject(BucketName, identifier, &snapshot)
if err != nil {
return nil, err
}
// err := service.tx.GetObject(BucketName, identifier, &snapshot)
// if err != nil {
// return nil, err
// }
return &snapshot, nil
}
@ -32,32 +28,35 @@ func (service ServiceTx) Snapshot(endpointID portainer.EndpointID) (*portainer.S
func (service ServiceTx) Snapshots() ([]portainer.Snapshot, error) {
var snapshots = make([]portainer.Snapshot, 0)
err := service.tx.GetAllWithJsoniter(
BucketName,
&portainer.Snapshot{},
func(obj interface{}) (interface{}, error) {
snapshot, ok := obj.(*portainer.Snapshot)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Snapshot object")
return nil, fmt.Errorf("failed to convert to Snapshot object: %s", obj)
}
snapshots = append(snapshots, *snapshot)
return &portainer.Snapshot{}, nil
})
// err := service.tx.GetAllWithJsoniter(
// BucketName,
// &portainer.Snapshot{},
// func(obj interface{}) (interface{}, error) {
// snapshot, ok := obj.(*portainer.Snapshot)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Snapshot object")
// return nil, fmt.Errorf("failed to convert to Snapshot object: %s", obj)
// }
// snapshots = append(snapshots, *snapshot)
// return &portainer.Snapshot{}, nil
// })
return snapshots, err
return snapshots, nil
}
func (service ServiceTx) UpdateSnapshot(snapshot *portainer.Snapshot) error {
identifier := service.service.connection.ConvertToKey(int(snapshot.EndpointID))
return service.tx.UpdateObject(BucketName, identifier, snapshot)
// identifier := service.service.connection.ConvertToKey(int(snapshot.EndpointID))
// return service.tx.UpdateObject(BucketName, identifier, snapshot)
return nil
}
func (service ServiceTx) DeleteSnapshot(endpointID portainer.EndpointID) error {
identifier := service.service.connection.ConvertToKey(int(endpointID))
return service.tx.DeleteObject(BucketName, identifier)
// identifier := service.service.connection.ConvertToKey(int(endpointID))
// return service.tx.DeleteObject(BucketName, identifier)
return nil
}
func (service ServiceTx) Create(snapshot *portainer.Snapshot) error {
return service.tx.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot)
// return service.tx.CreateObjectWithId(BucketName, int(snapshot.EndpointID), snapshot)
return nil
}

View file

@ -21,11 +21,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
}, nil
@ -35,15 +30,11 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) Settings() (*portainer.SSLSettings, error) {
var settings portainer.SSLSettings
err := service.connection.GetObject(BucketName, []byte(key), &settings)
if err != nil {
return nil, err
}
return &settings, nil
}
// UpdateSettings persists a SSLSettings object.
func (service *Service) UpdateSettings(settings *portainer.SSLSettings) error {
return service.connection.UpdateObject(BucketName, []byte(key), settings)
// return service.connection.UpdateObject(BucketName, []byte(key), settings)
return nil
}

View file

@ -1,14 +1,7 @@
package stack
import (
"errors"
"fmt"
"strings"
portainer "github.com/portainer/portainer/api"
dserrors "github.com/portainer/portainer/api/dataservices/errors"
"github.com/rs/zerolog/log"
)
const (
@ -27,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -40,171 +33,170 @@ func NewService(connection portainer.Connection) (*Service, error) {
// Stack returns a stack object by ID.
func (service *Service) Stack(ID portainer.StackID) (*portainer.Stack, error) {
var stack portainer.Stack
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &stack)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &stack)
// if err != nil {
// return nil, err
// }
return &stack, nil
}
// StackByName returns a stack object by name.
func (service *Service) StackByName(name string) (*portainer.Stack, error) {
var s *portainer.Stack
// var s *portainer.Stack
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.Stack{},
func(obj interface{}) (interface{}, error) {
stack, ok := obj.(*portainer.Stack)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
}
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.Stack{},
// func(obj interface{}) (interface{}, error) {
// stack, ok := obj.(*portainer.Stack)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
// return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
// }
if stack.Name == name {
s = stack
return nil, stop
}
// if stack.Name == name {
// s = stack
// return nil, stop
// }
return &portainer.Stack{}, nil
})
if errors.Is(err, stop) {
return s, nil
}
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// return &portainer.Stack{}, nil
// })
// if errors.Is(err, stop) {
// return s, nil
// }
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
return nil, nil
}
// Stacks returns an array containing all the stacks with same name
func (service *Service) StacksByName(name string) ([]portainer.Stack, error) {
var stacks = make([]portainer.Stack, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Stack{},
func(obj interface{}) (interface{}, error) {
stack, ok := obj.(portainer.Stack)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
return nil, fmt.Errorf("failed to convert to Stack object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Stack{},
// func(obj interface{}) (interface{}, error) {
// stack, ok := obj.(portainer.Stack)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
// return nil, fmt.Errorf("failed to convert to Stack object: %s", obj)
// }
if stack.Name == name {
stacks = append(stacks, stack)
}
// if stack.Name == name {
// stacks = append(stacks, stack)
// }
return &portainer.Stack{}, nil
})
// return &portainer.Stack{}, nil
// })
return stacks, err
return stacks, nil
}
// Stacks returns an array containing all the stacks.
func (service *Service) Stacks() ([]portainer.Stack, error) {
var stacks = make([]portainer.Stack, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Stack{},
func(obj interface{}) (interface{}, error) {
stack, ok := obj.(*portainer.Stack)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Stack{},
// func(obj interface{}) (interface{}, error) {
// stack, ok := obj.(*portainer.Stack)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
// return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
// }
stacks = append(stacks, *stack)
// stacks = append(stacks, *stack)
return &portainer.Stack{}, nil
})
// return &portainer.Stack{}, nil
// })
return stacks, err
}
// GetNextIdentifier returns the next identifier for a stack.
func (service *Service) GetNextIdentifier() int {
return service.connection.GetNextIdentifier(BucketName)
return stacks, nil
}
// CreateStack creates a new stack.
func (service *Service) Create(stack *portainer.Stack) error {
return service.connection.CreateObjectWithId(BucketName, int(stack.ID), stack)
// return service.connection.CreateObjectWithId(BucketName, int(stack.ID), stack)
return nil
}
// UpdateStack updates a stack.
func (service *Service) UpdateStack(ID portainer.StackID, stack *portainer.Stack) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, stack)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, stack)
return nil
}
// DeleteStack deletes a stack.
func (service *Service) DeleteStack(ID portainer.StackID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
// StackByWebhookID returns a pointer to a stack object by webhook ID.
// It returns nil, errors.ErrObjectNotFound if there's no stack associated with the webhook ID.
func (service *Service) StackByWebhookID(id string) (*portainer.Stack, error) {
var s *portainer.Stack
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.Stack{},
func(obj interface{}) (interface{}, error) {
var ok bool
s, ok = obj.(*portainer.Stack)
// var s *portainer.Stack
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.Stack{},
// func(obj interface{}) (interface{}, error) {
// var ok bool
// s, ok = obj.(*portainer.Stack)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
return &portainer.Stack{}, nil
}
// return &portainer.Stack{}, nil
// }
if s.AutoUpdate != nil && strings.EqualFold(s.AutoUpdate.Webhook, id) {
return nil, stop
}
// if s.AutoUpdate != nil && strings.EqualFold(s.AutoUpdate.Webhook, id) {
// return nil, stop
// }
return &portainer.Stack{}, nil
})
if errors.Is(err, stop) {
return s, nil
}
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// return &portainer.Stack{}, nil
// })
// if errors.Is(err, stop) {
// return s, nil
// }
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
// return nil, err
return nil, nil
}
// RefreshableStacks returns stacks that are configured for a periodic update
func (service *Service) RefreshableStacks() ([]portainer.Stack, error) {
stacks := make([]portainer.Stack, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Stack{},
func(obj interface{}) (interface{}, error) {
stack, ok := obj.(*portainer.Stack)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Stack{},
// func(obj interface{}) (interface{}, error) {
// stack, ok := obj.(*portainer.Stack)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Stack object")
// return nil, fmt.Errorf("Failed to convert to Stack object: %s", obj)
// }
if stack.AutoUpdate != nil && stack.AutoUpdate.Interval != "" {
stacks = append(stacks, *stack)
}
// if stack.AutoUpdate != nil && stack.AutoUpdate.Interval != "" {
// stacks = append(stacks, *stack)
// }
return &portainer.Stack{}, nil
})
// return &portainer.Stack{}, nil
// })
return stacks, err
return stacks, nil
}

View file

@ -1,11 +1,7 @@
package tag
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
const (
@ -24,10 +20,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
@ -45,66 +37,70 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
func (service *Service) Tags() ([]portainer.Tag, error) {
var tags = make([]portainer.Tag, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Tag{},
func(obj interface{}) (interface{}, error) {
tag, ok := obj.(*portainer.Tag)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Tag object")
return nil, fmt.Errorf("Failed to convert to Tag object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Tag{},
// func(obj interface{}) (interface{}, error) {
// tag, ok := obj.(*portainer.Tag)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Tag object")
// return nil, fmt.Errorf("Failed to convert to Tag object: %s", obj)
// }
tags = append(tags, *tag)
// tags = append(tags, *tag)
return &portainer.Tag{}, nil
})
// return &portainer.Tag{}, nil
// })
return tags, err
return tags, nil
}
// Tag returns a tag by ID.
func (service *Service) Tag(ID portainer.TagID) (*portainer.Tag, error) {
var tag portainer.Tag
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &tag)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &tag)
// if err != nil {
// return nil, err
// }
return &tag, nil
}
// CreateTag creates a new tag.
func (service *Service) Create(tag *portainer.Tag) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
tag.ID = portainer.TagID(id)
return int(tag.ID), tag
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// tag.ID = portainer.TagID(id)
// return int(tag.ID), tag
// },
// )
return nil
}
// Deprecated: Use UpdateTagFunc instead.
func (service *Service) UpdateTag(ID portainer.TagID, tag *portainer.Tag) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, tag)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, tag)
return nil
}
// UpdateTagFunc updates a tag inside a transaction avoiding data races.
func (service *Service) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *portainer.Tag)) error {
id := service.connection.ConvertToKey(int(ID))
tag := &portainer.Tag{}
// id := service.connection.ConvertToKey(int(ID))
// tag := &portainer.Tag{}
return service.connection.UpdateObjectFunc(BucketName, id, tag, func() {
updateFunc(tag)
})
// return service.connection.UpdateObjectFunc(BucketName, id, tag, func() {
// updateFunc(tag)
// })
return nil
}
// DeleteTag deletes a tag.
func (service *Service) DeleteTag(ID portainer.TagID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -43,12 +43,12 @@ func (service ServiceTx) Tags() ([]portainer.Tag, error) {
// Tag returns a tag by ID.
func (service ServiceTx) Tag(ID portainer.TagID) (*portainer.Tag, error) {
var tag portainer.Tag
identifier := service.service.connection.ConvertToKey(int(ID))
// identifier := service.service.connection.ConvertToKey(int(ID))
err := service.tx.GetObject(BucketName, identifier, &tag)
if err != nil {
return nil, err
}
// err := service.tx.GetObject(BucketName, identifier, &tag)
// if err != nil {
// return nil, err
// }
return &tag, nil
}
@ -66,8 +66,9 @@ func (service ServiceTx) Create(tag *portainer.Tag) error {
// UpdateTag updates a tag
func (service ServiceTx) UpdateTag(ID portainer.TagID, tag *portainer.Tag) error {
identifier := service.service.connection.ConvertToKey(int(ID))
return service.tx.UpdateObject(BucketName, identifier, tag)
// identifier := service.service.connection.ConvertToKey(int(ID))
// return service.tx.UpdateObject(BucketName, identifier, tag)
return nil
}
// UpdateTagFunc is a no-op inside a transaction
@ -77,6 +78,7 @@ func (service ServiceTx) UpdateTagFunc(ID portainer.TagID, updateFunc func(tag *
// DeleteTag deletes a tag.
func (service ServiceTx) DeleteTag(ID portainer.TagID) error {
identifier := service.service.connection.ConvertToKey(int(ID))
return service.tx.DeleteObject(BucketName, identifier)
// identifier := service.service.connection.ConvertToKey(int(ID))
// return service.tx.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,14 +1,7 @@
package team
import (
"errors"
"fmt"
"strings"
portainer "github.com/portainer/portainer/api"
dserrors "github.com/portainer/portainer/api/dataservices/errors"
"github.com/rs/zerolog/log"
)
const (
@ -27,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -40,89 +33,92 @@ func NewService(connection portainer.Connection) (*Service, error) {
// Team returns a Team by ID
func (service *Service) Team(ID portainer.TeamID) (*portainer.Team, error) {
var team portainer.Team
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &team)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &team)
// if err != nil {
// return nil, err
// }
return &team, nil
}
// TeamByName returns a team by name.
func (service *Service) TeamByName(name string) (*portainer.Team, error) {
var t *portainer.Team
// var t *portainer.Team
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.Team{},
func(obj interface{}) (interface{}, error) {
team, ok := obj.(*portainer.Team)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Team object")
return nil, fmt.Errorf("Failed to convert to Team object: %s", obj)
}
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.Team{},
// func(obj interface{}) (interface{}, error) {
// team, ok := obj.(*portainer.Team)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Team object")
// return nil, fmt.Errorf("Failed to convert to Team object: %s", obj)
// }
if strings.EqualFold(team.Name, name) {
t = team
return nil, stop
}
// if strings.EqualFold(team.Name, name) {
// t = team
// return nil, stop
// }
return &portainer.Team{}, nil
})
if errors.Is(err, stop) {
return t, nil
}
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// return &portainer.Team{}, nil
// })
// if errors.Is(err, stop) {
// return t, nil
// }
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
return nil, nil
}
// Teams return an array containing all the teams.
func (service *Service) Teams() ([]portainer.Team, error) {
var teams = make([]portainer.Team, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Team{},
func(obj interface{}) (interface{}, error) {
team, ok := obj.(*portainer.Team)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Team object")
return nil, fmt.Errorf("Failed to convert to Team object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Team{},
// func(obj interface{}) (interface{}, error) {
// team, ok := obj.(*portainer.Team)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Team object")
// return nil, fmt.Errorf("Failed to convert to Team object: %s", obj)
// }
teams = append(teams, *team)
// teams = append(teams, *team)
return &portainer.Team{}, nil
})
// return &portainer.Team{}, nil
// })
return teams, err
return teams, nil
}
// UpdateTeam saves a Team.
func (service *Service) UpdateTeam(ID portainer.TeamID, team *portainer.Team) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, team)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, team)
return nil
}
// CreateTeam creates a new Team.
func (service *Service) Create(team *portainer.Team) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
team.ID = portainer.TeamID(id)
return int(team.ID), team
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// team.ID = portainer.TeamID(id)
// return int(team.ID), team
// },
// )
return nil
}
// DeleteTeam deletes a Team.
func (service *Service) DeleteTeam(ID portainer.TeamID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,11 +1,7 @@
package teammembership
import (
"fmt"
portainer "github.com/portainer/portainer/api"
"github.com/rs/zerolog/log"
)
// BucketName represents the name of the bucket where this service stores data.
@ -22,10 +18,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -42,12 +38,12 @@ func (service *Service) Tx(tx portainer.Transaction) ServiceTx {
// TeamMembership returns a TeamMembership object by ID
func (service *Service) TeamMembership(ID portainer.TeamMembershipID) (*portainer.TeamMembership, error) {
var membership portainer.TeamMembership
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &membership)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &membership)
// if err != nil {
// return nil, err
// }
return &membership, nil
}
@ -56,153 +52,159 @@ func (service *Service) TeamMembership(ID portainer.TeamMembershipID) (*portaine
func (service *Service) TeamMemberships() ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0)
err := service.connection.GetAll(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (interface{}, error) {
membership, ok := obj.(*portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (interface{}, error) {
// membership, ok := obj.(*portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// }
memberships = append(memberships, *membership)
// memberships = append(memberships, *membership)
return &portainer.TeamMembership{}, nil
})
// return &portainer.TeamMembership{}, nil
// })
return memberships, err
return memberships, nil
}
// TeamMembershipsByUserID return an array containing all the TeamMembership objects where the specified userID is present.
func (service *Service) TeamMembershipsByUserID(userID portainer.UserID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0)
err := service.connection.GetAll(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (interface{}, error) {
membership, ok := obj.(*portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (interface{}, error) {
// membership, ok := obj.(*portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// }
if membership.UserID == userID {
memberships = append(memberships, *membership)
}
// if membership.UserID == userID {
// memberships = append(memberships, *membership)
// }
return &portainer.TeamMembership{}, nil
})
// return &portainer.TeamMembership{}, nil
// })
return memberships, err
return memberships, nil
}
// TeamMembershipsByTeamID return an array containing all the TeamMembership objects where the specified teamID is present.
func (service *Service) TeamMembershipsByTeamID(teamID portainer.TeamID) ([]portainer.TeamMembership, error) {
var memberships = make([]portainer.TeamMembership, 0)
err := service.connection.GetAll(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (interface{}, error) {
membership, ok := obj.(*portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (interface{}, error) {
// membership, ok := obj.(*portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// return nil, fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// }
if membership.TeamID == teamID {
memberships = append(memberships, *membership)
}
// if membership.TeamID == teamID {
// memberships = append(memberships, *membership)
// }
return &portainer.TeamMembership{}, nil
})
// return &portainer.TeamMembership{}, nil
// })
return memberships, err
return memberships, nil
}
// UpdateTeamMembership saves a TeamMembership object.
func (service *Service) UpdateTeamMembership(ID portainer.TeamMembershipID, membership *portainer.TeamMembership) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, membership)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, membership)
return nil
}
// CreateTeamMembership creates a new TeamMembership object.
func (service *Service) Create(membership *portainer.TeamMembership) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
membership.ID = portainer.TeamMembershipID(id)
return int(membership.ID), membership
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// membership.ID = portainer.TeamMembershipID(id)
// return int(membership.ID), membership
// },
// )
return nil
}
// DeleteTeamMembership deletes a TeamMembership object.
func (service *Service) DeleteTeamMembership(ID portainer.TeamMembershipID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
// DeleteTeamMembershipByUserID deletes all the TeamMembership object associated to a UserID.
func (service *Service) DeleteTeamMembershipByUserID(userID portainer.UserID) error {
return service.connection.DeleteAllObjects(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) {
membership, ok := obj.(portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
//return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
return -1, false
}
// return service.connection.DeleteAllObjects(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (id int, ok bool) {
// membership, ok := obj.(portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// //return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// return -1, false
// }
if membership.UserID == userID {
return int(membership.ID), true
}
// if membership.UserID == userID {
// return int(membership.ID), true
// }
return -1, false
})
// return -1, false
// })
return nil
}
// DeleteTeamMembershipByTeamID deletes all the TeamMembership object associated to a TeamID.
func (service *Service) DeleteTeamMembershipByTeamID(teamID portainer.TeamID) error {
return service.connection.DeleteAllObjects(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) {
membership, ok := obj.(portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
//return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
return -1, false
}
// return service.connection.DeleteAllObjects(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (id int, ok bool) {
// membership, ok := obj.(portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// //return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// return -1, false
// }
if membership.TeamID == teamID {
return int(membership.ID), true
}
// if membership.TeamID == teamID {
// return int(membership.ID), true
// }
return -1, false
})
// return -1, false
// })
return nil
}
func (service *Service) DeleteTeamMembershipByTeamIDAndUserID(teamID portainer.TeamID, userID portainer.UserID) error {
return service.connection.DeleteAllObjects(
BucketName,
&portainer.TeamMembership{},
func(obj interface{}) (id int, ok bool) {
membership, ok := obj.(portainer.TeamMembership)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
//return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
return -1, false
}
// return service.connection.DeleteAllObjects(
// BucketName,
// &portainer.TeamMembership{},
// func(obj interface{}) (id int, ok bool) {
// membership, ok := obj.(portainer.TeamMembership)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to TeamMembership object")
// //return fmt.Errorf("Failed to convert to TeamMembership object: %s", obj)
// return -1, false
// }
if membership.TeamID == teamID && membership.UserID == userID {
return int(membership.ID), true
}
// if membership.TeamID == teamID && membership.UserID == userID {
// return int(membership.ID), true
// }
return -1, false
})
// return -1, false
// })
return nil
}

View file

@ -21,11 +21,6 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
return &Service{
connection: connection,
}, nil
@ -35,15 +30,16 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) Info() (*portainer.TunnelServerInfo, error) {
var info portainer.TunnelServerInfo
err := service.connection.GetObject(BucketName, []byte(infoKey), &info)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, []byte(infoKey), &info)
// if err != nil {
// return nil, err
// }
return &info, nil
}
// UpdateInfo persists a TunnelServerInfo object.
func (service *Service) UpdateInfo(settings *portainer.TunnelServerInfo) error {
return service.connection.UpdateObject(BucketName, []byte(infoKey), settings)
// return service.connection.UpdateObject(BucketName, []byte(infoKey), settings)
return nil
}

View file

@ -1,14 +1,7 @@
package user
import (
"errors"
"fmt"
"strings"
portainer "github.com/portainer/portainer/api"
dserrors "github.com/portainer/portainer/api/dataservices/errors"
"github.com/rs/zerolog/log"
)
const (
@ -27,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -40,120 +33,124 @@ func NewService(connection portainer.Connection) (*Service, error) {
// User returns a user by ID
func (service *Service) User(ID portainer.UserID) (*portainer.User, error) {
var user portainer.User
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &user)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &user)
// if err != nil {
// return nil, err
// }
return &user, nil
}
// UserByUsername returns a user by username.
func (service *Service) UserByUsername(username string) (*portainer.User, error) {
var u *portainer.User
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.User{},
func(obj interface{}) (interface{}, error) {
user, ok := obj.(*portainer.User)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
// var u *portainer.User
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.User{},
// func(obj interface{}) (interface{}, error) {
// user, ok := obj.(*portainer.User)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
}
// return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
// }
if strings.EqualFold(user.Username, username) {
u = user
return nil, stop
}
// if strings.EqualFold(user.Username, username) {
// u = user
// return nil, stop
// }
return &portainer.User{}, nil
})
// return &portainer.User{}, nil
// })
if errors.Is(err, stop) {
return u, nil
}
// if errors.Is(err, stop) {
// return u, nil
// }
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
return nil, nil
}
// Users return an array containing all the users.
func (service *Service) Users() ([]portainer.User, error) {
var users = make([]portainer.User, 0)
err := service.connection.GetAll(
BucketName,
&portainer.User{},
func(obj interface{}) (interface{}, error) {
user, ok := obj.(*portainer.User)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
// err := service.connection.GetAll(
// BucketName,
// &portainer.User{},
// func(obj interface{}) (interface{}, error) {
// user, ok := obj.(*portainer.User)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
}
// return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
// }
users = append(users, *user)
// users = append(users, *user)
return &portainer.User{}, nil
})
// return &portainer.User{}, nil
// })
return users, err
return users, nil
}
// UsersByRole return an array containing all the users with the specified role.
func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User, error) {
var users = make([]portainer.User, 0)
err := service.connection.GetAll(
BucketName,
&portainer.User{},
func(obj interface{}) (interface{}, error) {
user, ok := obj.(*portainer.User)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
// err := service.connection.GetAll(
// BucketName,
// &portainer.User{},
// func(obj interface{}) (interface{}, error) {
// user, ok := obj.(*portainer.User)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to User object")
return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
}
// return nil, fmt.Errorf("Failed to convert to User object: %s", obj)
// }
if user.Role == role {
users = append(users, *user)
}
// if user.Role == role {
// users = append(users, *user)
// }
return &portainer.User{}, nil
})
// return &portainer.User{}, nil
// })
return users, err
return users, nil
}
// UpdateUser saves a user.
func (service *Service) UpdateUser(ID portainer.UserID, user *portainer.User) error {
identifier := service.connection.ConvertToKey(int(ID))
user.Username = strings.ToLower(user.Username)
return service.connection.UpdateObject(BucketName, identifier, user)
// identifier := service.connection.ConvertToKey(int(ID))
// user.Username = strings.ToLower(user.Username)
// return service.connection.UpdateObject(BucketName, identifier, user)
return nil
}
// CreateUser creates a new user.
func (service *Service) Create(user *portainer.User) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
user.ID = portainer.UserID(id)
user.Username = strings.ToLower(user.Username)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// user.ID = portainer.UserID(id)
// user.Username = strings.ToLower(user.Username)
return int(user.ID), user
},
)
// return int(user.ID), user
// },
// )
return nil
}
// DeleteUser deletes a user.
func (service *Service) DeleteUser(ID portainer.UserID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}

View file

@ -1,12 +1,9 @@
package version
import (
"errors"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/database/models"
"github.com/portainer/portainer/api/dataservices"
dserrors "github.com/portainer/portainer/api/dataservices/errors"
)
const (
@ -23,10 +20,10 @@ type Service struct {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -64,16 +61,17 @@ func (service *Service) Edition() (portainer.SoftwareEdition, error) {
// IsUpdating retrieves the database updating status.
func (service *Service) IsUpdating() (bool, error) {
var isUpdating bool
err := service.connection.GetObject(BucketName, []byte(updatingKey), &isUpdating)
if err != nil && errors.Is(err, dserrors.ErrObjectNotFound) {
return false, nil
}
return isUpdating, err
// err := service.connection.GetObject(BucketName, []byte(updatingKey), &isUpdating)
// if err != nil && errors.Is(err, dserrors.ErrObjectNotFound) {
// return false, nil
// }
return isUpdating, nil
}
// StoreIsUpdating store the database updating status.
func (service *Service) StoreIsUpdating(isUpdating bool) error {
return service.connection.DeleteObject(BucketName, []byte(updatingKey))
// return service.connection.DeleteObject(BucketName, []byte(updatingKey))
return nil
}
// InstanceID retrieves the stored instance ID.
@ -105,15 +103,16 @@ func (service *Service) UpdateInstanceID(id string) error {
func (service *Service) Version() (*models.Version, error) {
var v models.Version
err := service.connection.GetObject(BucketName, []byte(versionKey), &v)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, []byte(versionKey), &v)
// if err != nil {
// return nil, err
// }
return &v, nil
}
// UpdateVersion persists a Version object.
func (service *Service) UpdateVersion(version *models.Version) error {
return service.connection.UpdateObject(BucketName, []byte(versionKey), version)
// return service.connection.UpdateObject(BucketName, []byte(versionKey), version)
return nil
}

View file

@ -1,13 +1,7 @@
package webhook
import (
"errors"
"fmt"
portainer "github.com/portainer/portainer/api"
dserrors "github.com/portainer/portainer/api/dataservices/errors"
"github.com/rs/zerolog/log"
)
const (
@ -26,10 +20,10 @@ func (service *Service) BucketName() string {
// NewService creates a new instance of a service.
func NewService(connection portainer.Connection) (*Service, error) {
err := connection.SetServiceName(BucketName)
if err != nil {
return nil, err
}
// err := connection.SetServiceName(BucketName)
// if err != nil {
// return nil, err
// }
return &Service{
connection: connection,
@ -40,124 +34,127 @@ func NewService(connection portainer.Connection) (*Service, error) {
func (service *Service) Webhooks() ([]portainer.Webhook, error) {
var webhooks = make([]portainer.Webhook, 0)
err := service.connection.GetAll(
BucketName,
&portainer.Webhook{},
func(obj interface{}) (interface{}, error) {
webhook, ok := obj.(*portainer.Webhook)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
}
// err := service.connection.GetAll(
// BucketName,
// &portainer.Webhook{},
// func(obj interface{}) (interface{}, error) {
// webhook, ok := obj.(*portainer.Webhook)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
// return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
// }
webhooks = append(webhooks, *webhook)
// webhooks = append(webhooks, *webhook)
return &portainer.Webhook{}, nil
})
// return &portainer.Webhook{}, nil
// })
return webhooks, err
return webhooks, nil
}
// Webhook returns a webhook by ID.
func (service *Service) Webhook(ID portainer.WebhookID) (*portainer.Webhook, error) {
var webhook portainer.Webhook
identifier := service.connection.ConvertToKey(int(ID))
// identifier := service.connection.ConvertToKey(int(ID))
err := service.connection.GetObject(BucketName, identifier, &webhook)
if err != nil {
return nil, err
}
// err := service.connection.GetObject(BucketName, identifier, &webhook)
// if err != nil {
// return nil, err
// }
return &webhook, nil
}
// WebhookByResourceID returns a webhook by the ResourceID it is associated with.
func (service *Service) WebhookByResourceID(ID string) (*portainer.Webhook, error) {
var w *portainer.Webhook
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.Webhook{},
func(obj interface{}) (interface{}, error) {
webhook, ok := obj.(*portainer.Webhook)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
// var w *portainer.Webhook
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.Webhook{},
// func(obj interface{}) (interface{}, error) {
// webhook, ok := obj.(*portainer.Webhook)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
}
// return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
// }
if webhook.ResourceID == ID {
w = webhook
return nil, stop
}
// if webhook.ResourceID == ID {
// w = webhook
// return nil, stop
// }
return &portainer.Webhook{}, nil
})
// return &portainer.Webhook{}, nil
// })
if errors.Is(err, stop) {
return w, nil
}
// if errors.Is(err, stop) {
// return w, nil
// }
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
return nil, nil
}
// WebhookByToken returns a webhook by the random token it is associated with.
func (service *Service) WebhookByToken(token string) (*portainer.Webhook, error) {
var w *portainer.Webhook
stop := fmt.Errorf("ok")
err := service.connection.GetAll(
BucketName,
&portainer.Webhook{},
func(obj interface{}) (interface{}, error) {
webhook, ok := obj.(*portainer.Webhook)
if !ok {
log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
// var w *portainer.Webhook
// stop := fmt.Errorf("ok")
// err := service.connection.GetAll(
// BucketName,
// &portainer.Webhook{},
// func(obj interface{}) (interface{}, error) {
// webhook, ok := obj.(*portainer.Webhook)
// if !ok {
// log.Debug().Str("obj", fmt.Sprintf("%#v", obj)).Msg("failed to convert to Webhook object")
return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
}
// return nil, fmt.Errorf("Failed to convert to Webhook object: %s", obj)
// }
if webhook.Token == token {
w = webhook
return nil, stop
}
// if webhook.Token == token {
// w = webhook
// return nil, stop
// }
return &portainer.Webhook{}, nil
})
// return &portainer.Webhook{}, nil
// })
if errors.Is(err, stop) {
return w, nil
}
// if errors.Is(err, stop) {
// return w, nil
// }
if err == nil {
return nil, dserrors.ErrObjectNotFound
}
// if err == nil {
// return nil, dserrors.ErrObjectNotFound
// }
return nil, err
return nil, nil
}
// DeleteWebhook deletes a webhook.
func (service *Service) DeleteWebhook(ID portainer.WebhookID) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.DeleteObject(BucketName, identifier)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.DeleteObject(BucketName, identifier)
return nil
}
// CreateWebhook assign an ID to a new webhook and saves it.
func (service *Service) Create(webhook *portainer.Webhook) error {
return service.connection.CreateObject(
BucketName,
func(id uint64) (int, interface{}) {
webhook.ID = portainer.WebhookID(id)
return int(webhook.ID), webhook
},
)
// return service.connection.CreateObject(
// BucketName,
// func(id uint64) (int, interface{}) {
// webhook.ID = portainer.WebhookID(id)
// return int(webhook.ID), webhook
// },
// )
return nil
}
// UpdateWebhook update a webhook.
func (service *Service) UpdateWebhook(ID portainer.WebhookID, webhook *portainer.Webhook) error {
identifier := service.connection.ConvertToKey(int(ID))
return service.connection.UpdateObject(BucketName, identifier, webhook)
// identifier := service.connection.ConvertToKey(int(ID))
// return service.connection.UpdateObject(BucketName, identifier, webhook)
return nil
}

View file

@ -38,9 +38,7 @@ func initDemoEndpoints(store dataservices.DataStore) ([]portainer.EndpointID, er
}
func initDemoLocalEndpoint(store dataservices.DataStore) (portainer.EndpointID, error) {
id := portainer.EndpointID(store.Endpoint().GetNextIdentifier())
localEndpoint := &portainer.Endpoint{
ID: id,
Name: "local",
URL: "unix:///var/run/docker.sock",
PublicURL: "demo.portainer.io",
@ -61,15 +59,15 @@ func initDemoLocalEndpoint(store dataservices.DataStore) (portainer.EndpointID,
err := store.Endpoint().Create(localEndpoint)
if err != nil {
return id, errors.WithMessage(err, "failed creating local endpoint")
return localEndpoint.ID, errors.WithMessage(err, "failed creating local endpoint")
}
err = store.Snapshot().Create(&portainer.Snapshot{EndpointID: id})
err = store.Snapshot().Create(&portainer.Snapshot{EndpointID: localEndpoint.ID})
if err != nil {
return id, errors.WithMessage(err, "failed creating snapshot")
return localEndpoint.ID, errors.WithMessage(err, "failed creating snapshot")
}
return id, errors.WithMessage(err, "failed creating local endpoint")
return localEndpoint.ID, errors.WithMessage(err, "failed creating local endpoint")
}
func initDemoSettings(

View file

@ -156,9 +156,7 @@ func (handler *Handler) createCustomTemplateFromFileContent(r *http.Request) (*p
return nil, err
}
customTemplateID := handler.DataStore.CustomTemplate().GetNextIdentifier()
customTemplate := &portainer.CustomTemplate{
ID: portainer.CustomTemplateID(customTemplateID),
Title: payload.Title,
EntryPoint: filesystem.ComposeFileDefaultName,
Description: payload.Description,
@ -169,7 +167,7 @@ func (handler *Handler) createCustomTemplateFromFileContent(r *http.Request) (*p
Variables: payload.Variables,
}
templateFolder := strconv.Itoa(customTemplateID)
templateFolder := strconv.Itoa(int(customTemplate.ID))
projectPath, err := handler.FileService.StoreCustomTemplateFileFromBytes(templateFolder, customTemplate.EntryPoint, []byte(payload.FileContent))
if err != nil {
return nil, err
@ -270,9 +268,7 @@ func (handler *Handler) createCustomTemplateFromGitRepository(r *http.Request) (
return nil, err
}
customTemplateID := handler.DataStore.CustomTemplate().GetNextIdentifier()
customTemplate := &portainer.CustomTemplate{
ID: portainer.CustomTemplateID(customTemplateID),
Title: payload.Title,
Description: payload.Description,
Note: payload.Note,
@ -284,7 +280,7 @@ func (handler *Handler) createCustomTemplateFromGitRepository(r *http.Request) (
}
getProjectPath := func() string {
return handler.FileService.GetCustomTemplateProjectPath(strconv.Itoa(customTemplateID))
return handler.FileService.GetCustomTemplateProjectPath(strconv.Itoa(int(customTemplate.ID)))
}
projectPath := getProjectPath()
customTemplate.ProjectPath = projectPath
@ -450,9 +446,7 @@ func (handler *Handler) createCustomTemplateFromFileUpload(r *http.Request) (*po
return nil, err
}
customTemplateID := handler.DataStore.CustomTemplate().GetNextIdentifier()
customTemplate := &portainer.CustomTemplate{
ID: portainer.CustomTemplateID(customTemplateID),
Title: payload.Title,
Description: payload.Description,
Note: payload.Note,
@ -463,7 +457,7 @@ func (handler *Handler) createCustomTemplateFromFileUpload(r *http.Request) (*po
Variables: payload.Variables,
}
templateFolder := strconv.Itoa(customTemplateID)
templateFolder := strconv.Itoa(int(customTemplate.ID))
projectPath, err := handler.FileService.StoreCustomTemplateFileFromBytes(templateFolder, customTemplate.EntryPoint, []byte(payload.FileContent))
if err != nil {
return nil, err

View file

@ -7,8 +7,6 @@ import (
httperror "github.com/portainer/libhttp/error"
"github.com/portainer/libhttp/request"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
"github.com/portainer/portainer/api/internal/endpointutils"
"github.com/asaskevich/govalidator"
)
@ -53,51 +51,52 @@ func (handler *Handler) edgeGroupCreate(w http.ResponseWriter, r *http.Request)
return httperror.BadRequest("Invalid request payload", err)
}
var edgeGroup *portainer.EdgeGroup
err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error {
edgeGroups, err := tx.EdgeGroup().EdgeGroups()
if err != nil {
return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err)
}
// var edgeGroup *portainer.EdgeGroup
// err = handler.DataStore.UpdateTx(func(tx dataservices.DataStoreTx) error {
// edgeGroups, err := tx.EdgeGroup().EdgeGroups()
// if err != nil {
// return httperror.InternalServerError("Unable to retrieve Edge groups from the database", err)
// }
for _, edgeGroup := range edgeGroups {
if edgeGroup.Name == payload.Name {
return httperror.BadRequest("Edge group name must be unique", errors.New("edge group name must be unique"))
}
}
// for _, edgeGroup := range edgeGroups {
// if edgeGroup.Name == payload.Name {
// return httperror.BadRequest("Edge group name must be unique", errors.New("edge group name must be unique"))
// }
// }
edgeGroup = &portainer.EdgeGroup{
Name: payload.Name,
Dynamic: payload.Dynamic,
TagIDs: []portainer.TagID{},
Endpoints: []portainer.EndpointID{},
PartialMatch: payload.PartialMatch,
}
// edgeGroup = &portainer.EdgeGroup{
// Name: payload.Name,
// Dynamic: payload.Dynamic,
// TagIDs: []portainer.TagID{},
// Endpoints: []portainer.EndpointID{},
// PartialMatch: payload.PartialMatch,
// }
if edgeGroup.Dynamic {
edgeGroup.TagIDs = payload.TagIDs
} else {
endpointIDs := []portainer.EndpointID{}
for _, endpointID := range payload.Endpoints {
endpoint, err := tx.Endpoint().Endpoint(endpointID)
if err != nil {
return httperror.InternalServerError("Unable to retrieve environment from the database", err)
}
// if edgeGroup.Dynamic {
// edgeGroup.TagIDs = payload.TagIDs
// } else {
// endpointIDs := []portainer.EndpointID{}
// for _, endpointID := range payload.Endpoints {
// endpoint, err := tx.Endpoint().Endpoint(endpointID)
// if err != nil {
// return httperror.InternalServerError("Unable to retrieve environment from the database", err)
// }
if endpointutils.IsEdgeEndpoint(endpoint) {
endpointIDs = append(endpointIDs, endpoint.ID)
}
}
edgeGroup.Endpoints = endpointIDs
}
// if endpointutils.IsEdgeEndpoint(endpoint) {
// endpointIDs = append(endpointIDs, endpoint.ID)
// }
// }
// edgeGroup.Endpoints = endpointIDs
// }
err = tx.EdgeGroup().Create(edgeGroup)
if err != nil {
return httperror.InternalServerError("Unable to persist the Edge group inside the database", err)
}
// err = tx.EdgeGroup().Create(edgeGroup)
// if err != nil {
// return httperror.InternalServerError("Unable to persist the Edge group inside the database", err)
// }
return nil
})
// return nil
// })
return txResponse(w, edgeGroup, err)
// return txResponse(w, edgeGroup, err)
return nil
}