Created
          November 13, 2024 04:15 
        
      - 
      
- 
        Save charandas/db3e382793553a96802de83fe7c457aa to your computer and use it in GitHub Desktop. 
    app.go generated by grafanaApp target
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | package app | |
| import ( | |
| "context" | |
| "errors" | |
| "fmt" | |
| "reflect" | |
| "github.com/grafana/grafana-app-sdk/app" | |
| "github.com/grafana/grafana-app-sdk/resource" | |
| "github.com/grafana/grafana-app-sdk/simple" | |
| "k8s.io/apimachinery/pkg/runtime/schema" | |
| "k8s.io/klog/v2" | |
| playlistv0alpha1 "github.com/grafana/grafana/apps/playlist/pkg/apis/playlist/v0alpha1" | |
| "github.com/grafana/grafana/apps/playlist/pkg/watchers" | |
| ) | |
| type PlaylistConfig struct { | |
| EnableWatchers bool | |
| } | |
| func New(cfg app.Config) (app.App, error) { | |
| playlistConfig, ok := cfg.SpecificConfig.(*PlaylistConfig) | |
| if !ok { | |
| return nil, errors.New("could not load project's specific config, type assertion failed: type of SpecificConfig=" + reflect.TypeOf(cfg.SpecificConfig).Name()) | |
| } | |
| managedKinds := make([]simple.AppManagedKind, 0) | |
| { | |
| managedKind := simple.AppManagedKind{ | |
| Kind: playlistv0alpha1.PlaylistKind(), | |
| Mutator: &simple.Mutator{ | |
| MutateFunc: func(ctx context.Context, req *app.AdmissionRequest) (*app.MutatingResponse, error) { | |
| // modify req.Object if needed | |
| return &app.MutatingResponse{ | |
| UpdatedObject: req.Object, | |
| }, nil | |
| }, | |
| }, | |
| Validator: &simple.Validator{ | |
| ValidateFunc: func(ctx context.Context, req *app.AdmissionRequest) error { | |
| // do something here if needed | |
| return nil | |
| }, | |
| }, | |
| } | |
| managedKinds = append(managedKinds, managedKind) | |
| if playlistConfig.EnableWatchers { | |
| playlistWatcher, err := watchers.NewPlaylistWatcher() | |
| if err != nil { | |
| return nil, fmt.Errorf("unable to create PlaylistWatcher: %w", err) | |
| } | |
| managedKind.Watcher = playlistWatcher | |
| } | |
| } | |
| config := simple.AppConfig{ | |
| Name: "playlist", | |
| KubeConfig: cfg.KubeConfig, | |
| InformerConfig: simple.AppInformerConfig{ | |
| ErrorHandler: func(ctx context.Context, err error) { | |
| // FIXME: add your own error handling here | |
| klog.ErrorS(err, "Informer processing error") | |
| }, | |
| }, | |
| ManagedKinds: managedKinds, | |
| } | |
| // Create the App | |
| a, err := simple.NewApp(config) | |
| if err != nil { | |
| return nil, err | |
| } | |
| // Validate the capabilities against the provided manifest to make sure there isn't a mismatch | |
| err = a.ValidateManifest(cfg.ManifestData) | |
| return a, err | |
| } | |
| func GetKinds() map[schema.GroupVersion]resource.Kind { | |
| gv := schema.GroupVersion{ | |
| Group: playlistv0alpha1.PlaylistKind().Group(), | |
| Version: playlistv0alpha1.PlaylistKind().Version(), | |
| } | |
| return map[schema.GroupVersion]resource.Kind{ | |
| gv: playlistv0alpha1.PlaylistKind(), | |
| } | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
            
The extra braces on L32 and L59 are just so variables for any number of kinds don't have to come up with unique names. Is there a better fix for this, or can we live with the extra braces?
I tend to think the only real fix could be that the kinds were iterated here in .go instead of in the template but there is a reason they are iterated over in the template: on this side, they are packages which are way harder to iterate over.
Could always spit more files to make individual
ManagedKindfor each of the groupversion and then simply import here though.