Skip to content

Commit

Permalink
Initial draft for SE retention time (#151)
Browse files Browse the repository at this point in the history
  • Loading branch information
jggoebel committed Jul 14, 2023
1 parent af2f9be commit ed48c86
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 3 deletions.
45 changes: 45 additions & 0 deletions pkg/controllers/scheduledevent/scheduledeventcontroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
hfClientset "github.com/hobbyfarm/gargantua/pkg/client/clientset/versioned"
hfInformers "github.com/hobbyfarm/gargantua/pkg/client/informers/externalversions"
"github.com/hobbyfarm/gargantua/pkg/util"
"github.com/hobbyfarm/gargantua/pkg/settingclient"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
Expand Down Expand Up @@ -188,6 +189,27 @@ func (s ScheduledEventController) completeScheduledEvent(se *hfv1.ScheduledEvent
return nil // break (return) here because we're done with this SE.
}

func (s ScheduledEventController) deleteScheduledEvent(se *hfv1.ScheduledEvent) error {
glog.V(6).Infof("ScheduledEvent %s is done and retention time is over, deleting SE finally", se.Name)

if !se.Status.Finished {
return fmt.Errorf("error attempting to delete SE that is not finished")
}

// Delete Progress
err := s.deleteProgressFromScheduledEvent(se)
if err != nil {
return err
}

err = s.hfClientSet.HobbyfarmV1().ScheduledEvents(util.GetReleaseNamespace()).Delete(s.ctx, se.Name, metav1.DeleteOptions{})

if err != nil {
return err
}
return nil // break (return) here because we're done with this SE.
}

func (s ScheduledEventController) deleteVMSetsFromScheduledEvent(se *hfv1.ScheduledEvent) error {
// for each vmset that belongs to this to-be-stopped scheduled event, delete that vmset
err := s.hfClientSet.HobbyfarmV1().VirtualMachineSets(util.GetReleaseNamespace()).DeleteCollection(s.ctx, metav1.DeleteOptions{}, metav1.ListOptions{
Expand All @@ -200,6 +222,18 @@ func (s ScheduledEventController) deleteVMSetsFromScheduledEvent(se *hfv1.Schedu
return nil
}

func (s ScheduledEventController) deleteProgressFromScheduledEvent(se *hfv1.ScheduledEvent) error {
// for each vmset that belongs to this to-be-stopped scheduled event, delete that vmset
err := s.hfClientSet.HobbyfarmV1().Progresses(util.GetReleaseNamespace()).DeleteCollection(s.ctx, metav1.DeleteOptions{}, metav1.ListOptions{
LabelSelector: fmt.Sprintf("%s=%s", util.ScheduledEventLabel, se.Name),
})
if err != nil {
return err
}

return nil
}


func (s ScheduledEventController) deleteAccessCode(se *hfv1.ScheduledEvent) error {
// delete the access code for the corresponding ScheduledEvent
Expand Down Expand Up @@ -586,6 +620,17 @@ func (s *ScheduledEventController) reconcileScheduledEvent(seName string) error

if endTime.Before(now) && se.Status.Finished {
// scheduled event is finished and nothing to do

if set := settingclient.GetSetting(settingclient.ScheduledEventRetentionTime); set == nil {
// Could not get retention time setting. Just keep the SE
return fmt.Errorf("Error retreiving retention Time setting")
} else {
retentionTime := endTime.Add(time.Hour * time.Duration(set.(int)))
if retentionTime.Before(now) {
// Really finish the ScheduledEvent
return s.deleteScheduledEvent(se)
}
}
}

// The ScheduledEvent is set to OnDemand but still has VMSets
Expand Down
29 changes: 26 additions & 3 deletions pkg/preinstall/settings/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
v1 "github.com/hobbyfarm/gargantua/pkg/apis/hobbyfarm.io/v1"
hfClientset "github.com/hobbyfarm/gargantua/pkg/client/clientset/versioned"
"github.com/hobbyfarm/gargantua/pkg/settingclient"
"github.com/hobbyfarm/gargantua/pkg/labels"
"github.com/hobbyfarm/gargantua/pkg/property"
"github.com/hobbyfarm/gargantua/pkg/util"
Expand Down Expand Up @@ -71,14 +72,21 @@ func scopes() []*v1.Scope {
},
DisplayName: "User UI",
},
{
ObjectMeta: v12.ObjectMeta{
Name: "gargantua",
Namespace: util.GetReleaseNamespace(),
},
DisplayName: "Gargantua",
},
}
}

func settings() []*v1.Setting {
return []*v1.Setting{
{
ObjectMeta: v12.ObjectMeta{
Name: "motd-admin-ui",
Name: string(settingclient.SettingAdminUIMOTD),
Namespace: util.GetReleaseNamespace(),
Labels: map[string]string{
labels.SettingScope: "admin-ui",
Expand All @@ -93,7 +101,7 @@ func settings() []*v1.Setting {
},
{
ObjectMeta: v12.ObjectMeta{
Name: "motd-ui",
Name: string(settingclient.SettingUIMOTD),
Namespace: util.GetReleaseNamespace(),
Labels: map[string]string{
labels.SettingScope: "public",
Expand All @@ -108,7 +116,7 @@ func settings() []*v1.Setting {
},
{
ObjectMeta: v12.ObjectMeta{
Name: "registration-disabled",
Name: string(settingclient.SettingRegistrationDisabled),
Namespace: util.GetReleaseNamespace(),
Labels: map[string]string{
labels.SettingScope: "public",
Expand All @@ -121,5 +129,20 @@ func settings() []*v1.Setting {
DisplayName: "Registration Disabled",
},
},
{
ObjectMeta: v12.ObjectMeta{
Name: string(settingclient.ScheduledEventRetentionTime),
Namespace: util.GetReleaseNamespace(),
Labels: map[string]string{
labels.SettingScope: "gargantua",
},
},
Value: "24",
Property: property.Property{
DataType: property.DataTypeInteger,
ValueType: property.ValueTypeScalar,
DisplayName: "ScheduledEvent retention time (h)",
},
},
}
}
1 change: 1 addition & 0 deletions pkg/settingclient/settingclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const (
SettingRegistrationDisabled SettingName = "registration-disabled"
SettingAdminUIMOTD SettingName = "motd-admin-ui"
SettingUIMOTD SettingName = "motd-ui"
ScheduledEventRetentionTime SettingName = "scheduledevent-retention-time"
)

type SettingName string
Expand Down

0 comments on commit ed48c86

Please sign in to comment.