Skip to content

Commit

Permalink
Fixed issues
Browse files Browse the repository at this point in the history
Signed-off-by: Patryk Strusiewicz-Surmacki <patryk-pawel.strusiewicz-surmacki@external.telekom.de>
  • Loading branch information
p-strusiewiczsurmacki-mobica committed Apr 17, 2024
1 parent 391d2c0 commit 375ebba
Show file tree
Hide file tree
Showing 5 changed files with 194 additions and 63 deletions.
10 changes: 0 additions & 10 deletions api/v1alpha1/nodeconfig_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,16 +75,6 @@ func NewEmptyConfig(name string) *NodeConfig {
}
}

func (nc *NodeConfig) CopyFrom(src *NodeConfig) *NodeConfig {
nc.Spec.Layer2 = make([]Layer2NetworkConfigurationSpec, len(src.Spec.Layer2))
nc.Spec.Vrf = make([]VRFRouteConfigurationSpec, len(src.Spec.Vrf))
nc.Spec.RoutingTable = make([]RoutingTableSpec, len(src.Spec.RoutingTable))
copy(nc.Spec.Layer2, src.Spec.Layer2)
copy(nc.Spec.Vrf, src.Spec.Vrf)
copy(nc.Spec.RoutingTable, src.Spec.RoutingTable)
return nc
}

func init() {
SchemeBuilder.Register(&NodeConfig{}, &NodeConfigList{})
}
10 changes: 5 additions & 5 deletions cmd/configurator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,21 +161,21 @@ func setMangerOptions(configFile string) (*manager.Options, error) {
return &options, nil
}

type OnLeaderElectionEvent struct {
type onLeaderElectionEvent struct {
cr *reconciler.ConfigReconciler
}

func newOnLeaderElectionEvent(cr *reconciler.ConfigReconciler) *OnLeaderElectionEvent {
return &OnLeaderElectionEvent{
func newOnLeaderElectionEvent(cr *reconciler.ConfigReconciler) *onLeaderElectionEvent {
return &onLeaderElectionEvent{
cr: cr,
}
}

func (*OnLeaderElectionEvent) NeedLeaderElection() bool {
func (*onLeaderElectionEvent) NeedLeaderElection() bool {
return true
}

func (e *OnLeaderElectionEvent) Start(ctx context.Context) error {
func (e *onLeaderElectionEvent) Start(ctx context.Context) error {
// check if former leader did not fail amid configuration process
if err := e.cr.ValidateFormerLeader(ctx); err != nil {
return fmt.Errorf("error validating former leader work")
Expand Down
30 changes: 20 additions & 10 deletions pkg/reconciler/config_reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,16 @@ func (cr *ConfigReconciler) deployConfig(ctx context.Context, config *v1alpha1.N
return true, nil
}

func copyNodeConfig(src, dst *v1alpha1.NodeConfig, name string) {
dst.Spec.Layer2 = make([]v1alpha1.Layer2NetworkConfigurationSpec, len(src.Spec.Layer2))
dst.Spec.Vrf = make([]v1alpha1.VRFRouteConfigurationSpec, len(src.Spec.Vrf))
dst.Spec.RoutingTable = make([]v1alpha1.RoutingTableSpec, len(src.Spec.RoutingTable))
copy(dst.Spec.Layer2, src.Spec.Layer2)
copy(dst.Spec.Vrf, src.Spec.Vrf)
copy(dst.Spec.RoutingTable, src.Spec.RoutingTable)
dst.Name = name
}

func (cr *ConfigReconciler) createBackup(ctx context.Context, config *v1alpha1.NodeConfig) error {
backupName := config.Name + backupSuffix
backup := &v1alpha1.NodeConfig{}
Expand All @@ -588,18 +598,18 @@ func (cr *ConfigReconciler) createBackup(ctx context.Context, config *v1alpha1.N
}

if exisitingCfg, exists := cr.currentConfigs[config.Name]; exists {
backup = backup.CopyFrom(&exisitingCfg)
copyNodeConfig(&exisitingCfg, backup, backupName)
} else {
backup = backup.CopyFrom(v1alpha1.NewEmptyConfig(backupName))
copyNodeConfig(v1alpha1.NewEmptyConfig(backupName), backup, backupName)
}

if createNew {
if err := cr.client.Create(ctx, backup); err != nil {
return fmt.Errorf("error creating backup config: %w", err)
return fmt.Errorf("create call error for config %s: %w", backupName, err)
}
} else {
if err := cr.client.Update(ctx, backup); err != nil {
return fmt.Errorf("error updating backup config %s: %w", backupName, err)
return fmt.Errorf("update call error for config %s: %w", backupName, err)
}
}

Expand All @@ -614,13 +624,13 @@ func sendError(text string, err error, errCh chan error, cancel context.CancelFu
// Creates invalid config object named <nodename>-invalid.
func (cr *ConfigReconciler) createInvalidConfig(ctx context.Context, configToInvalidate *v1alpha1.NodeConfig) error {
invalidName := fmt.Sprintf("%s%s", configToInvalidate.Name, invalidSuffix)
invalidConfig := &v1alpha1.NodeConfig{}
invalidConfig := v1alpha1.NodeConfig{}

if err := cr.client.Get(ctx, types.NamespacedName{Name: invalidName, Namespace: configToInvalidate.Namespace}, invalidConfig); err != nil {
if err := cr.client.Get(ctx, types.NamespacedName{Name: invalidName, Namespace: configToInvalidate.Namespace}, &invalidConfig); err != nil {
if apierrors.IsNotFound(err) {
// invalid config for the node does not exist - create new
invalidConfig = invalidConfig.CopyFrom(configToInvalidate)
if err = cr.client.Create(ctx, invalidConfig); err != nil {
copyNodeConfig(configToInvalidate, &invalidConfig, invalidName)
if err = cr.client.Create(ctx, &invalidConfig); err != nil {
return fmt.Errorf("cannot store invalid config for node %s: %w", configToInvalidate.Name, err)
}
return nil
Expand All @@ -630,8 +640,8 @@ func (cr *ConfigReconciler) createInvalidConfig(ctx context.Context, configToInv
}

// invalid config for the node exist - update
invalidConfig = invalidConfig.CopyFrom(configToInvalidate)
if err := cr.client.Update(ctx, invalidConfig); err != nil {
copyNodeConfig(configToInvalidate, &invalidConfig, invalidName)
if err := cr.client.Update(ctx, &invalidConfig); err != nil {
return fmt.Errorf("error updating invalid config for node %s: %w", configToInvalidate.Name, err)
}

Expand Down
Loading

0 comments on commit 375ebba

Please sign in to comment.