// processResource processes a single resource func (c *Catalog) processResource(r resource.Resource) error { if err := r.Validate(); err != nil { return err } state, err := r.Evaluate() if err != nil { return err } if c.config.DryRun { return nil } // Current and wanted states for the resource want := utils.NewString(state.Want) current := utils.NewString(state.Current) // The list of present and absent states for the resource present := utils.NewList(r.GetPresentStates()...) absent := utils.NewList(r.GetAbsentStates()...) var action func() error switch { case want.IsInList(present) && current.IsInList(absent): action = r.Create case want.IsInList(absent) && current.IsInList(present): action = r.Delete case state.Outdated: action = r.Update } if action != nil { return action() } return nil }