diff --git a/internal/output/entities/hosts.go b/internal/output/entities/hosts.go index 448f44f..6a98586 100644 --- a/internal/output/entities/hosts.go +++ b/internal/output/entities/hosts.go @@ -12,6 +12,10 @@ var ( DedicatedServerType = reflect.TypeOf(serverscom.DedicatedServer{}) KubernetesBaremetalNodeType = reflect.TypeOf(serverscom.KubernetesBaremetalNode{}) SBMServerType = reflect.TypeOf(serverscom.SBMServer{}) + HostListDefaultFields = []string{"ID", "Type", "Title", "Status"} + CmdDefaultFields = map[string][]string{ + "list": HostListDefaultFields, + } ) func getConfigurationDetailsField() Field { @@ -57,7 +61,8 @@ func RegisterHostDefinition() { {ID: "Created", Name: "Created", Path: "Created", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, }, - eType: HostType, + cmdDefaultFields: CmdDefaultFields, + eType: HostType, } if err := Registry.Register(hostEntity); err != nil { log.Fatal(err) @@ -84,7 +89,8 @@ func RegisterDedicatedServerDefinition() { {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, getConfigurationDetailsField(), }, - eType: DedicatedServerType, + cmdDefaultFields: CmdDefaultFields, + eType: DedicatedServerType, } if err := Registry.Register(serverEntity); err != nil { log.Fatal(err) @@ -111,7 +117,8 @@ func RegisterKubernetesBaremetalNodeDefinition() { {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, getConfigurationDetailsField(), }, - eType: KubernetesBaremetalNodeType, + cmdDefaultFields: CmdDefaultFields, + eType: KubernetesBaremetalNodeType, } if err := Registry.Register(serverEntity); err != nil { log.Fatal(err) @@ -138,7 +145,8 @@ func RegisterSBMServerDefinition() { {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, getConfigurationDetailsField(), }, - eType: SBMServerType, + cmdDefaultFields: CmdDefaultFields, + eType: SBMServerType, } if err := Registry.Register(serverEntity); err != nil { log.Fatal(err) diff --git a/internal/output/entities/interface.go b/internal/output/entities/interface.go index a494400..86595e6 100644 --- a/internal/output/entities/interface.go +++ b/internal/output/entities/interface.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "reflect" + "slices" ) // RegistryInterface represents the interface for the EntityRegistry @@ -20,13 +21,15 @@ type EntityInterface interface { GetType() reflect.Type GetDefaultFields() []string GetFields() []Field - Validate([]string) error + Validate(fields []string) error + SetCmdDefaultFields(cmd string) error } // Entity represents the base entity structure type Entity struct { - fields []Field - eType reflect.Type + fields []Field + cmdDefaultFields map[string][]string + eType reflect.Type } // HandlerFunc represents a handler function for rendering fields @@ -131,6 +134,28 @@ func (e *Entity) Validate(fields []string) error { return nil } +// SetCmdDefaultFields sets the default fields for an entity based on cmd +func (e *Entity) SetCmdDefaultFields(cmd string) error { + if defaultFields, ok := e.cmdDefaultFields[cmd]; ok { + fieldSet := make(map[string]struct{}, len(e.fields)) + for i, f := range e.fields { + e.fields[i].Default = false + fieldSet[f.ID] = struct{}{} + } + + for _, df := range defaultFields { + if _, exists := fieldSet[df]; !exists { + return fmt.Errorf("can't find field %s in entity field set", df) + } + } + + for i := range e.fields { + e.fields[i].Default = slices.Contains(defaultFields, e.fields[i].ID) + } + } + return nil +} + // fieldInChildFields checks if a field is in the list of child fields func (e *Entity) fieldInChildFields(childFields []Field, fieldID string) bool { for _, child := range childFields { diff --git a/internal/output/entities/ssh_keys.go b/internal/output/entities/ssh_keys.go index b91ccfa..58a50d0 100644 --- a/internal/output/entities/ssh_keys.go +++ b/internal/output/entities/ssh_keys.go @@ -8,7 +8,8 @@ import ( ) var ( - SSHKeyType = reflect.TypeOf(serverscom.SSHKey{}) + SSHKeyType = reflect.TypeOf(serverscom.SSHKey{}) + SSHKeyListDefaultFields = []string{"Name", "Fingerprint"} ) func RegisterSSHKeyDefinition() { @@ -20,6 +21,9 @@ func RegisterSSHKeyDefinition() { {ID: "Created", Name: "Created", Path: "Created", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, }, + cmdDefaultFields: map[string][]string{ + "list": SSHKeyListDefaultFields, + }, eType: SSHKeyType, } if err := Registry.Register(sshEntity); err != nil {