mirror of https://github.com/portainer/portainer
104 lines
3.0 KiB
Go
104 lines
3.0 KiB
Go
package migrator
|
|
|
|
import (
|
|
"github.com/boltdb/bolt"
|
|
"github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/bolt/internal"
|
|
)
|
|
|
|
func (m *Migrator) updateResourceControlsToDBVersion2() error {
|
|
legacyResourceControls, err := m.retrieveLegacyResourceControls()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, resourceControl := range legacyResourceControls {
|
|
resourceControl.SubResourceIDs = []string{}
|
|
resourceControl.TeamAccesses = []portainer.TeamResourceAccess{}
|
|
|
|
owner, err := m.userService.User(resourceControl.OwnerID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if owner.Role == portainer.AdministratorRole {
|
|
resourceControl.AdministratorsOnly = true
|
|
resourceControl.UserAccesses = []portainer.UserResourceAccess{}
|
|
} else {
|
|
resourceControl.AdministratorsOnly = false
|
|
userAccess := portainer.UserResourceAccess{
|
|
UserID: resourceControl.OwnerID,
|
|
AccessLevel: portainer.ReadWriteAccessLevel,
|
|
}
|
|
resourceControl.UserAccesses = []portainer.UserResourceAccess{userAccess}
|
|
}
|
|
|
|
err = m.resourceControlService.CreateResourceControl(&resourceControl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m *Migrator) updateEndpointsToDBVersion2() error {
|
|
legacyEndpoints, err := m.endpointService.Endpoints()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, endpoint := range legacyEndpoints {
|
|
endpoint.AuthorizedTeams = []portainer.TeamID{}
|
|
err = m.endpointService.UpdateEndpoint(endpoint.ID, &endpoint)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m *Migrator) retrieveLegacyResourceControls() ([]portainer.ResourceControl, error) {
|
|
legacyResourceControls := make([]portainer.ResourceControl, 0)
|
|
err := m.db.View(func(tx *bolt.Tx) error {
|
|
bucket := tx.Bucket([]byte("containerResourceControl"))
|
|
cursor := bucket.Cursor()
|
|
for k, v := cursor.First(); k != nil; k, v = cursor.Next() {
|
|
var resourceControl portainer.ResourceControl
|
|
err := internal.UnmarshalObject(v, &resourceControl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resourceControl.Type = portainer.ContainerResourceControl
|
|
legacyResourceControls = append(legacyResourceControls, resourceControl)
|
|
}
|
|
|
|
bucket = tx.Bucket([]byte("serviceResourceControl"))
|
|
cursor = bucket.Cursor()
|
|
for k, v := cursor.First(); k != nil; k, v = cursor.Next() {
|
|
var resourceControl portainer.ResourceControl
|
|
err := internal.UnmarshalObject(v, &resourceControl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resourceControl.Type = portainer.ServiceResourceControl
|
|
legacyResourceControls = append(legacyResourceControls, resourceControl)
|
|
}
|
|
|
|
bucket = tx.Bucket([]byte("volumeResourceControl"))
|
|
cursor = bucket.Cursor()
|
|
for k, v := cursor.First(); k != nil; k, v = cursor.Next() {
|
|
var resourceControl portainer.ResourceControl
|
|
err := internal.UnmarshalObject(v, &resourceControl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resourceControl.Type = portainer.VolumeResourceControl
|
|
legacyResourceControls = append(legacyResourceControls, resourceControl)
|
|
}
|
|
return nil
|
|
})
|
|
return legacyResourceControls, err
|
|
}
|