mirror of https://github.com/portainer/portainer
fix(api): fix an issue with unsupported cron format (#3240)
* fix(api): fix an issue with unsupported cron format * refactor(api): review migration methodpull/3249/head
parent
d717ad947b
commit
182f3734d0
|
@ -125,6 +125,7 @@ func (store *Store) MigrateData() error {
|
||||||
RegistryService: store.RegistryService,
|
RegistryService: store.RegistryService,
|
||||||
ResourceControlService: store.ResourceControlService,
|
ResourceControlService: store.ResourceControlService,
|
||||||
RoleService: store.RoleService,
|
RoleService: store.RoleService,
|
||||||
|
ScheduleService: store.ScheduleService,
|
||||||
SettingsService: store.SettingsService,
|
SettingsService: store.SettingsService,
|
||||||
StackService: store.StackService,
|
StackService: store.StackService,
|
||||||
TeamMembershipService: store.TeamMembershipService,
|
TeamMembershipService: store.TeamMembershipService,
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package migrator
|
package migrator
|
||||||
|
|
||||||
import portainer "github.com/portainer/portainer/api"
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
)
|
||||||
|
|
||||||
func (m *Migrator) updateUsersToDBVersion20() error {
|
func (m *Migrator) updateUsersToDBVersion20() error {
|
||||||
authorizationServiceParameters := &portainer.AuthorizationServiceParameters{
|
authorizationServiceParameters := &portainer.AuthorizationServiceParameters{
|
||||||
|
@ -26,3 +30,38 @@ func (m *Migrator) updateSettingsToDBVersion20() error {
|
||||||
|
|
||||||
return m.settingsService.UpdateSettings(legacySettings)
|
return m.settingsService.UpdateSettings(legacySettings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Migrator) updateSchedulesToDBVersion20() error {
|
||||||
|
legacySchedules, err := m.scheduleService.Schedules()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, schedule := range legacySchedules {
|
||||||
|
if schedule.JobType == portainer.ScriptExecutionJobType {
|
||||||
|
if schedule.CronExpression == "0 0 * * *" {
|
||||||
|
schedule.CronExpression = "0 * * * *"
|
||||||
|
} else if schedule.CronExpression == "0 0 0/2 * *" {
|
||||||
|
schedule.CronExpression = "0 */2 * * *"
|
||||||
|
} else if schedule.CronExpression == "0 0 0 * *" {
|
||||||
|
schedule.CronExpression = "0 0 * * *"
|
||||||
|
} else {
|
||||||
|
revisedCronExpression := strings.Split(schedule.CronExpression, " ")
|
||||||
|
if len(revisedCronExpression) == 5 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
revisedCronExpression = revisedCronExpression[1:]
|
||||||
|
schedule.CronExpression = strings.Join(revisedCronExpression, " ")
|
||||||
|
}
|
||||||
|
|
||||||
|
err := m.scheduleService.UpdateSchedule(schedule.ID, &schedule)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"github.com/portainer/portainer/api/bolt/registry"
|
"github.com/portainer/portainer/api/bolt/registry"
|
||||||
"github.com/portainer/portainer/api/bolt/resourcecontrol"
|
"github.com/portainer/portainer/api/bolt/resourcecontrol"
|
||||||
"github.com/portainer/portainer/api/bolt/role"
|
"github.com/portainer/portainer/api/bolt/role"
|
||||||
|
"github.com/portainer/portainer/api/bolt/schedule"
|
||||||
"github.com/portainer/portainer/api/bolt/settings"
|
"github.com/portainer/portainer/api/bolt/settings"
|
||||||
"github.com/portainer/portainer/api/bolt/stack"
|
"github.com/portainer/portainer/api/bolt/stack"
|
||||||
"github.com/portainer/portainer/api/bolt/teammembership"
|
"github.com/portainer/portainer/api/bolt/teammembership"
|
||||||
|
@ -28,6 +29,7 @@ type (
|
||||||
registryService *registry.Service
|
registryService *registry.Service
|
||||||
resourceControlService *resourcecontrol.Service
|
resourceControlService *resourcecontrol.Service
|
||||||
roleService *role.Service
|
roleService *role.Service
|
||||||
|
scheduleService *schedule.Service
|
||||||
settingsService *settings.Service
|
settingsService *settings.Service
|
||||||
stackService *stack.Service
|
stackService *stack.Service
|
||||||
teamMembershipService *teammembership.Service
|
teamMembershipService *teammembership.Service
|
||||||
|
@ -47,6 +49,7 @@ type (
|
||||||
RegistryService *registry.Service
|
RegistryService *registry.Service
|
||||||
ResourceControlService *resourcecontrol.Service
|
ResourceControlService *resourcecontrol.Service
|
||||||
RoleService *role.Service
|
RoleService *role.Service
|
||||||
|
ScheduleService *schedule.Service
|
||||||
SettingsService *settings.Service
|
SettingsService *settings.Service
|
||||||
StackService *stack.Service
|
StackService *stack.Service
|
||||||
TeamMembershipService *teammembership.Service
|
TeamMembershipService *teammembership.Service
|
||||||
|
@ -68,6 +71,7 @@ func NewMigrator(parameters *Parameters) *Migrator {
|
||||||
registryService: parameters.RegistryService,
|
registryService: parameters.RegistryService,
|
||||||
resourceControlService: parameters.ResourceControlService,
|
resourceControlService: parameters.ResourceControlService,
|
||||||
roleService: parameters.RoleService,
|
roleService: parameters.RoleService,
|
||||||
|
scheduleService: parameters.ScheduleService,
|
||||||
settingsService: parameters.SettingsService,
|
settingsService: parameters.SettingsService,
|
||||||
teamMembershipService: parameters.TeamMembershipService,
|
teamMembershipService: parameters.TeamMembershipService,
|
||||||
templateService: parameters.TemplateService,
|
templateService: parameters.TemplateService,
|
||||||
|
@ -276,6 +280,11 @@ func (m *Migrator) Migrate() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = m.updateSchedulesToDBVersion20()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.versionService.StoreDBVersion(portainer.DBVersion)
|
return m.versionService.StoreDBVersion(portainer.DBVersion)
|
||||||
|
|
|
@ -905,7 +905,7 @@ const (
|
||||||
// APIVersion is the version number of the Portainer API
|
// APIVersion is the version number of the Portainer API
|
||||||
APIVersion = "1.22.0"
|
APIVersion = "1.22.0"
|
||||||
// DBVersion is the version number of the Portainer database
|
// DBVersion is the version number of the Portainer database
|
||||||
DBVersion = 21
|
DBVersion = 20
|
||||||
// AssetsServerURL represents the URL of the Portainer asset server
|
// AssetsServerURL represents the URL of the Portainer asset server
|
||||||
AssetsServerURL = "https://portainer-io-assets.sfo2.digitaloceanspaces.com"
|
AssetsServerURL = "https://portainer-io-assets.sfo2.digitaloceanspaces.com"
|
||||||
// MessageOfTheDayURL represents the URL where Portainer MOTD message can be retrieved
|
// MessageOfTheDayURL represents the URL where Portainer MOTD message can be retrieved
|
||||||
|
|
|
@ -11,14 +11,14 @@ angular.module('portainer.app').component('scheduleForm', {
|
||||||
|
|
||||||
ctrl.scheduleValues = [{
|
ctrl.scheduleValues = [{
|
||||||
displayed: 'Every hour',
|
displayed: 'Every hour',
|
||||||
cron: '0 0 * * *'
|
cron: '0 * * * *'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
displayed: 'Every 2 hours',
|
displayed: 'Every 2 hours',
|
||||||
cron: '0 0 0/2 * *'
|
cron: '0 */2 * * *'
|
||||||
}, {
|
}, {
|
||||||
displayed: 'Every day',
|
displayed: 'Every day',
|
||||||
cron: '0 0 0 * *'
|
cron: '0 0 * * *'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue