- Everything is gated on `on-disk-steve-cache` feature flag
- There's a backend in progress item to resolve a `revision` issue, until then disable watching a resource given it
- Global Settings - Performance
- Added new setting to enable server side pagination
- this is incompatible with two other performance settings
- Setup pagination headers for the node type
- Define a pattern for fetching custom list secondary resources
- Major improvements to the way pagination settings are defined and created
- Lots of docs improvements
- Handle calling fetch again once fetch is in progress (nuxt caches running request)
- Validate filter fields (not all are supported by the vai cache
- General pagination fixes
* eks initial
* k8s options
* eks node group component
* add config and networking components
* fix default region on initial load
* use .sync modifier in network tab
* launch templates
* node group styling
* spot instances/launch template instance type
* fix selectcredential footer when not showing the rest of the form
* cluster name description and options
* iam listRoles
* subnets
* k8s version dropdown custom
* logging tab
* agent deployment customization, labels and annotations
* working default values
* fix edit eks/aks
* instance types dropdown improvements and spot instance type filtering
* validation;
localization
* todos
* tests
* move diffUpstreamSpec
* clean up
* improve launch template loading appearance
* fix kms key fetch
* fix custom role radio
* fix failing nodegroup test
* fix lint
* fix typescript errors in crueks
* nodegroup ts
* cache ec2 instance types
* cache instance types in vuex
* nodegroup ts
* ts errors in eks networking
* eks config ts errors
* tweak nodegroup input sizing
* reset nodegroup default values if the launch template is cleared
* add tooltips and userdata file upload button to node groups
* add networking tooltips; make credential dropdown half width when not showing credential form controls
* fix rancher managed launch template detection
* fix networking tooltip
* show when a node group has a rancher-managed launch template
* fix error filtering for ec2 iam roles
* add system labels and annotations for norman clusters
* lint
* lint
* fix labels and annotations getters in norman cluster model
* added tests for norman cluster system labels and annotations
* fix some eks typescript and hide cluster name when no credential
* fix userdata sublabel link
* fix networking info banner translation typo
* node group size labels and tags should be editable
* Correct file naming and small TS issues
Correct TS related issues
* Manual replacement of :is on standard HTML tags
* Add missing required in the code dependencies
* Correct SCSS import
* Correct test file naming
* Correct typo in markup
* Use alias for types import
- General changes following review comments
- Fix issue where in local cluster the systen classed namespace associated with a project would get muddled with selecting user resources in mathing project
- Part of this is a big refacture, most of the code to create pag filter params is now in a helper filer
- Added much improved typing
- Fixed issue where the dynamic namespaces (c-, p-, etc) weren't correctly hidden
- Move user to previous page if last entry on last page deleted (and there is a previous page)
- Fix confusing preference to hide dynamic namespaces (c-, p-, etc)
- examples metrics.k8s.io.podmetrics, metrics.k8s.io.nodemetrics, componentstatus
- change 1
- when these are watched the BE now sends an error... which we ignore and try to watch again
- so handle the error
- change 2
- avoid this scenario though by stopping watches that don't have the watch verb
- because of this change 1 can only be tested by changing code
* Removing everything related to scrollTrigger.
The latest vue router seems to behave exactly as it does with the modified scrollBehavior so it can all be removed.
* Removing unused $nuxt.{suffixes} that I found
- routeChanged (didn't find any watches of this event)
- nbFetching (The only place reading this was a computed property which wasn't used anywhere)
* Replace the use of Vue[installKey]
* Removing some ssr rehydration code since we're not doing ssr
* Remove the remaining $nuxt.$on,$off,$emit and replace with the use of our primary store which already had related code
* Replacing usages of the .$nuxt on vue instances with globalApp references
* Removing SSR dead code
* Fixing an issue where extensions could still be referencing window.$nuxt. This now provides a deprecation warning.
* Migrating another $nuxt over to the window.$globalApp
* Removed the usage of Vue.config.$nux
* Removed the usage of Vue.util.defineReactive
- Saw that the Nuxt component wasn't needed any longer so I removed it instead of trying to work around Vue.util.defineReactive
* Re-run missing check
---------
Co-authored-by: cnotv <giuseppe.leo@suse.com>
* resource edit AS yaml
* fix cruresource (yaml from form)
- lazy load the schemaDefinitions when needed, avoids sync all to createYaml before we have an async chance to fetch schemaDefinitions
* Fix questions
- there are only four places we use questions, none of which use schema, this is just to be safe
* cluster scan, plugins/fieldsForDriver, defaultFor, validationErrors
* pathExistsInSchema
- used to optionally show conditions tab/list in resource detail view
- logs of things in ingress list/edit
* createPopulated / defaultFor
defaultFor requires resourceFields, it's only used by createPopulated in one place to support machine configs without components
* wip
* WIP MONITORING.SPOOFED
- these aren't spoofed types, but secondary schemas
- testing fix blocked, primary schema's have resourceFields
* Move steve specific (resourceField) code to steve models
- create models for steve schemas and apply to cluster and management stores
- move resoureField based validationto steve model
- move pathExistsInSchema to steve store getter
- don't fetch schemaDefinitions on start up when saving prefs (not needed and blocking)
* comments / improvements
* (untested) refactoring
* Fix alertmanager definitions, add retry definition fetch
* Fix pathExistsInSchema for path length > 2
* Fix questions that accept schemas
- tested by adding Questions to random page and the node schema
* Fix to saving configmap part 1
- the save works but doesn't show data. the yaml is the same as before. debug info added
* Validation by resourceFields is a norman specific thing, so make it such
* small refactor
* Tidying up
* Remove rebase junk
* fix linting and unit tests
* fix unit tests
* fix linting from fix for test....
* Tidying up, fix alertmanagerconfig
* Remove unit test todos
* add unit tests for resource fields
* sdssdf
* Add unit tests for pathExistsInSchema
* JS --> TS
* Store schemas in local singleton cache to avoid hitting store
* fix minor changes from review
* cruresource changes following review
- improvement - remove spurious canDiff
- createResourceYaml - pass in resource to use instead of calc in code
* WIP changes to parseType
* Fix generic cloud credential and node driver forms
* handle missing reactivity given schema definitions not in store
* fix and add unit tests for `parseType`
* Fix create-yaml test
* Changes following review
- improved comments
- SchemaDefinitionCache is now per store (and is reset as such)
- typeRef now uses parseType
* Fix dep loop by moving route based helps in auth out to utils file
* fix unit tests
* Changes following review
- base resource model has cleanForX style functions which specific resources override with their own custom neads
- wire in the cleanForDownload into this pattern
- add cleanForDownload override for secrets
Adds a built-in AKS provisioning extension to replace the embedded ember pages, as well as modifications to the provisioning UI to support other non-rke2 provisioning extensions
Replace the usage of `Vue.extend` with `defineComponent` throughout multiple components located under `shell/components/`. `defineComponent` provides better type inference, improved TypeScript support, and will be the recommended way to define components when Dashboard migrates to Vue 3.
Signed-off-by: Phillip Rak <rak.phillip@gmail.com>
This prevents `dumpBlock()` from mutating parsed yaml when a header can't be located. More investigation might be warranted to discover why the regex used by `getBlockHeader()` isn't matching the keys when parsing the example yaml:
```
apiVersion: v1
data:
a: "a\nb\tc"
b: "a\nb\tc"
kind: ConfigMap
metadata:
name: yaml-tab-test
```
but the crux of the issue still comes down to the fact that `dumpBlock()` will indiscriminately mutate yaml output when a key can't be located; it's important that this behavior is corrected.
Signed-off-by: Phillip Rak <rak.phillip@gmail.com>
* remove ssrcontext arg from createapp function
* remove all mentions to beforeRenderFns and ssrContext + bonus to remove another function related to ssr
---------
Co-authored-by: Alexandre Alves <aalves@Alexandres-MacBook-Pro.local>
This unit test asserts that `dumpBlock()` can properly accept dump options for `jsyaml` and will output the expected string when long lines (over 80 characters) are present in a block.
Signed-off-by: Phillip Rak <rak.phillip@gmail.com>
Introduce the capability to customize `jsyaml.dump` options in the `dumpBlock` function, allowing developers to supply all of the dump options specified by `jsyaml.dump()`.
Signed-off-by: Phillip Rak <rak.phillip@gmail.com>
- Contributes to #9964
- Monitorign chart fetched all secrets, then all usages of it filtered down to a single namespace
- So we now only fetch
Related
- Fix scenario where fetching all then fetching namespaced would return all results
Improvement
Also improve spacingin a placeholder
- Add a new tab, next to events, in the cluster dashboard
- Tab shows a list of all secrets of cert type
- List allows users to see which certs are expiring soon, how long they've lived etc
- Tab also shows a notification if certs are expiring or have expired
- Related fixes
- plumb in option list paging params (so we can show X of Y Certificates in pagination controls)
- fix usages of from = from || now
- Count requests to kube steve as steve requests (alongside local steve requests)
* added more validations for server-url on Setup and Global Settings pages
* handling server-url 'use default value' case
* consistent error messages
---------
Co-authored-by: Mo Mesgin <mmesgin@Mos-M2-MacBook-Pro.local>
* only show cluster embedded grafana dashboards when user has permission to view the grafana endpoint
* Remove unsed var ENDPOINTS
---------
Co-authored-by: Neil MacDougall <nwmac@users.noreply.github.com>
- if entering the product, loading cluster, etc fails extensions can now throw a `RedirectToError` error
- this avoids the user being redirect to the dashboard home or fail-whale page
- example - epinio auth fails and we want to return user to the epinio cluster list
In theory we should be able to to instanceof with something that extends error and has a `name`,
unfortunately this does not work, so gone for something more manual.
Also bump shell so we can publish a new version
* Remove conditional chaining in template
* Prevent app to break if no setting available
* Prevent to break if no mgmt cluster
* Prevent sidebar to break if no kube cluster
* Prevent breaking if no product available
* Prevent sort utils to break if no value is provided
* Add markup comments
* Replace getter mapping
* Prevent error if missing label for the inspected cluster
* Add tests for sidebar
* Heavy code cleanup: move function to utils, config and types to their own file
* Add fallback and tests for version comparison not retrieving values
* Fix refactoring
* Add partial case of array filterBy
* Replace multiple functions handling the same case with single getter; add covering tests
* Add no parameter case to be correctly handled
* Add case with different chart values, e.g. Epinio issue case
* Prevent issues if retrieved version is undefined; Add unit tests for upgrade cases
* Filter out charts if lack parameters
* fix: some scenarios with the smallIdentifier()
* Minor refactor, add unit test
- Move bulk of smallIdentifier out to custom abbreviateClusterName
- Made `case 1` easier to read
- Added a bunch of unit tests
- need to discuss some results
---------
Co-authored-by: Richard Cox <richard.cox@suse.com>
* add growl message to display warning messages from response headers
* update growl styling based on feedback from Eden
* Many updates
- Move functionality into it's own file
- Add unit tests
- Fix issue where YAML PUTs weren't included in check (bug in master)
- Fix issue with separating warnings (bug in master)
- previously this was done via `,`, however that appears in the messages themselves
- add configuration which allows this to be customised
- Add configuration which would allow us to disable or expand how growls are shown
---------
Co-authored-by: Alexandre Alves <aalves@Alexandres-MBP.lan>
Co-authored-by: Richard Cox <richard.cox@suse.com>
- fixes issue in handleConflict that meant
- conflicts were not detected
- non-conflicting changes were not applied to users resource
- see #9597 issue description for more detail
* When execing into a container, try linux and windows commands when we can't determine if the node is windows
* Fix lint
* Lint: Remove trailing white space
* Use error message rather than last error
* extra failover, caching last working os against pod, errors, tests
* add __mocks__ folders to eslint ignore patterns
* standard user test fix
* removed unnecessary try/catch logic
* Revert "removed unnecessary try/catch logic"
This reverts commit c263131927.
---------
Co-authored-by: Sean <sean.mchugh@suse.com>
* Extension support for custom provisioning
* FIx lint issues
* Discovery / Tweaks
- fix issue where namespacesOverride was lost
- tidy up PROVIDER
- try to handle missing provider=type url param (could be missing extension-params)
- added a few comments to comments to come back to
* Names and typings
- change param --> customParam to make it clearer it's not url params
- add labels-annotations to shell types
* Wire in provider detailTabs
- as per original readme this should be made generic (extension point working directly with ResourceTabs)
* Update IClusterProvisioner & docs
* Improvements / Changes to support proving out DO extension
- cluster hooks optional
- buff up save hook (and pass in cluster when calling apply fn)
- move normalizeName into generic place
- bring back async create machine config
- hack for do extension (map example provider to do provider)
* updates, add optional saveCluster, add missing kube file
- saveCluster complements hooks, doesn't skip handling of addons, etc
- ensure register hooks take the `this` context in all worlds
* Adding docs
* Updates
- location config based changes
- change customParams to context
- add query param
- add new extention point to add tabs to cluster create cluster config section
- fixed some typing
- fixed issue where cluster was not passed to before / after hooks (only important if 'this' changes
* Changes following review, fix `t` in plugins
* Fix linting
* Docs updates, pass through more edit/view things
* Conditionally show the namespace grouping in the cluster list
- means users can differentiate between clusters with same name in different namespaces
- useful when clusters created via extension provisioner where ns can be selected
* docs tweaks, actually include the provisioning page in docs
---------
Co-authored-by: Richard Cox <richard.cox@suse.com>
* added unit tests for generateSupportLink
* added one more test case for generateSupportLink
* use it.each method to combine separate tests that are related
---------
Co-authored-by: Mo Mesgin <mmesgin@Mos-M2-MacBook-Pro.local>
This embeds the project monitoring Grafana metric dashboards if they are present and user has no access to cluster monitoring.
Fixes https://github.com/rancher/dashboard/issues/7286
Signed-off-by: Bastian Hofmann <mail@bastianhofmann.de>
- fix for isSingleProduct
- two link elements on page, we set the second one, browser showed first one
- not sure why this worked in normal mode
- two link elements on page, we set the second one, browser showed second one
- Moving the store setting to enable/disable filtering in the store to a function in a computed property caused havoc for churn
- Make this much neater by moving flag to the setup stage for both ns filter
- Given forced filtering is now not resource dependent have a high level utils function to determine if enabled
- This should have opened up the door to setting a nicer default then ALL_USER, however it's actually initially applied somewhere other than ns filter
- Fixed a bug where the all option [] was valid
> This uses a new endpoint that has yet to merge. See https://github.com/rancher/rancher/issues/40140
WIP
- Contains console.warns (via custom logger, can be disabled)
- Waiting for final BE endpoint changes to merge
- Contains TODOs to resolve on final enpoint changes delivered
Pertinent Points
- Incompatible with incremental loading / manual refresh
- Harder to get counts (need to sum up from different namespaces)
- Requires use of new steve pagination
- Enforced NS threshold has been removed
- The threshold only applies to the primary resource. This has issues when loading a low count primary (daemon sets) which depends on a very high count secondary (pods)
- Fixing this would involve knowing all secondary resources a list uses, which isn't currently possible (each resource is requested individually, need to know them all first)
- There is no way to subscribe to multiple namespaces (one or all)
- We mock this in subscribe by only persisting changes to resources from within target namespaces
- Everything should work with Advanced Worker enabled
* porting Neils poc work
* add all namespaces to pod affinity ui + add banners to for windows warning and no defaults for limits area + set namespaces as input as default for agent configuration + add node selector to agent configuration
* update banner copy in affinity section for windows + add visual separator between node and pod affinity
* added weight input for node affinity - preferred + made weight input for pod affinity appear only for preferred + changed MatchExpressions component to cover matchFields and matchExpressions in node affinityupdate banner copy in affinity section for windows + add visual separator between node and pod affinity
* fix lint errors
* working on e2e tests for agent configuration on rke2
* e2e tests work in progress
* working on e2e tests
* fix issue with Tolerations component where data wasnt being propagated because some inputs were missing a connection with the update method
* finish missing bits of e2e tests + fix height of inputs + revert back default affinity fetch
* disable no arbitrary waits in cypress
* fix broken e2e and unit tests
* fix e2e tests again
* fix lint issue
* set timeout for intercepting request to 10 seconds
* update path for default setting in agent configuration
* fix issue in dark mode in group panel + update strings to match rke1 interface + remove label from namespace input on pod affinity + clean up agent config data on save and restore it if it fails + change order of ui blocks in agent config interface
* address low hanging fruit PR comments
* remove console log
* move agent config po to components folder
* remove select.po in favour of labeledselect.po + fix data-testid in arrayList component and also its unit tests + make unit-input po leverage the use of LabeledInputPo + fix title assertion
* address final comments on e2e tests
* fix issues with PodAffinity component + update e2e test payload check
* final PR fixes
* addressing PR comments
* remove log
* reverting changes to ClusterManagerCreateRke2CustomPagePo as it was impacting other tests + add a method to go to custom cluster creation page
* e2e test updates
* updating banners copy
---------
Co-authored-by: Alexandre Alves <aalves@Alexandres-MacBook-Pro.local>
Co-authored-by: Alexandre Alves <aalves@Alexandres-MBP.lan>
* Auth Provider: Support Okta with LDAP search
* Minor fixes
* Update UX and add detail of LDAP configuration
* Fix issues when logging out
* Fix i18n key
- add the possibility to specify what Scalar Style to use in the yaml blocks ('|' or '>') and what Chomping style ('+' , '-' or empty)
see https://yaml-multiline.info
- set default to style to '|+' (keep all newlines)
- adapt CruResource to get in input the new yaml options
Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
- changes cover create, change and remove
- resource.stop events happen
- we unusb
- after socket errors (that rancher sends, like revision `too old`)
- after resource type permissions change
- there would be a gap between resource.stop (fetch latest revision, wait 5 seconds) and resource.start
- this could lead to missed resource changes and stale info on screen
Linking a couple of pertinent changes
- forceWatch partially implemented - 14862b2924 (diff-42632b5ed3c30e60abade8a67748b16d45e0778091713dd71a46d4bbe9211d2c)
- too old originally removed https://github.com/rancher/dashboard/pull/3743/files
- this was implemented before the backend fixed their spam
Note - resource.stop can be forced with CATTLE_WATCH_TIMEOUT_SECONDS=300 (on v1 will resource.stop every 5 mins)
Note - Too old can be forced by editing resource.stop with
// const revision = type === '' ? undefined : 1;
// dispatch('watch', { ...obj, revision });
* Change key for min password due inconsistency with the server value
* Allow to edit env var in settings model
* Allow to pass simple validators in the global settings editor
* Add validation for integer values on global settings password
* Add integer validation
* Add simple validators tests
* Allow integer validation to allow strings from inputs
* Simplify function and extend naming for settings rules
* Add further validations for the min password setting
* Replace logic with regular expression
* Add PSA resource model, edit, list, types, config, utils and navigation
* Remove controls sorting from config file in PSA form due unnecessary added logic
* Add missing type to exemptions
* Remove component specific grid alignment styling
* Add meaningful values on PSA form tests
* Add prefix for the namespace PSA form
* Correct PSA form test
* Revert RKE cluster erroneous changes
* Rename all the PSA form values to match specification and avoid issues
* Create function to convert array to dictionary
* Add types and replace function with utility in PSA form
* Trim exemptions values for PSA form
* Correct util test and function
* Enable YAML editor for PSA resource
* Moves sockets into the advanced worker
* worker can die peacefully now, making switching between cluster work.
* Make waitFor generic, wire in to waitForTestFn
* General Changes
- Fixes for switching cluster
- includes using common getPerformanceSetting
- avoid new code to unsub before socket disconnect
- handle `watch` `stop` requests
- lots of TODO's (questions, work, checks, test, etc)
- use common
* Switch socket fixes
- isAdvancedWorker should only be true for cluster store
- advancedWorker to be wired in
* Fix socket id for cluster workers
- sockets use an incremented local var for id
- when we nuke the socket file within the worker this resets, so they all ahve id of 1
- work around this by applying the unix time
* Fix handling of new partical counts response
- seen in dex cluster explorer dashboard
- count cards would be removed when partial counts response received
* Make resourceWatcher the sole location for watch state
- getters canWatch, watchStarted now are worked around (they look at state in the UI thread)
- we now don't call resource.stop or restart.start in subscription
- tidied up `forgetType`
- moved clearFromQueue from steve mutations into subscription mutations (better location)
- added and removed some TODOs
- fixed watch (stop handler should be higher up, include force watch handling)
* pushes the csrf value into worker and adds it to fetch request headers.
* refactors batchChanges to address ref concerns and be more performant
* Maintain schema reference whilst updating
- This change mutates input in a function, which is bad...
- but ensures the reference isn't broken, which is needed to maintain similar functionality as before
* Fix waitForTestFn
- Seen when creating or viewing clusters
* On unwatch ensure any pending watch requests are removed from the queue
- the probably would have been a problem if the worker wasn't nuked
- however as the codes there lets make it safe
Also added `trace` feature in advanced worker, will probably bring out to other places as well
* Fix navigation from cluster manager world to any cluster
- Ensure that we handle the case where the advanced worker was created but the resource watcher wasn't
- ... but fix case where this was happening (aka ensure that a blank cluster context is ignored)
* Tidy some TODOs
* Add perf settings page
- This will help test normal flow (when advanced worker is disabled)
- Note - setting is now in a bag. This may help us better support further settings (enable client side pagination, etc)
```
advancedWorker: { enabled: false },
```
* FIX - Nav from cluster dashboard --> specific event --> cluster dashboard and events not re-subbed
- Ensure we block default handling of resource.start (keep state in resource watcher)
* Tidying up some TODOs
* Adds in a cache and uses it to validate SCHEMA messages before batching.
* Forgot to actually save CSRF to the resourceWatcher when instantiated.
* an empty resource in a batchChange to signal remove
* Move addSchemaIndexFields to and created removeSchemaIndexFields in new file
- this avoids bringing class files into the worker
* Fix disconnect/reconnect
- Remove `syncWatch` (do the watch/unwatch straight away)
- Test/Fix re-sub on reconnect
- Test/Fix growls on disconnect
* Tidying up some TODO's
- including clean of workerQueue on resource.stop (this is SUPER defensive)
* batchChanges will now handle aliases
* Fix pods list - WIP
- ensure podsByNamespace is updated on batchChange
TODO
- the final update to the pod is ignored
- removing a namespace cleans the cache correctly
- disabling advanced worker still works
* Fix pods list - fixes
- ensure podsByNamespace is updated on batchChange
Tested / Fixed
- the final update to the pod is ignored
- removing a namespace cleans the cache correctly
- disabling advanced worker still works
* Tidying TODOs
* Remove default same-origin header
- https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials
* Fixed TODO description
* Refactor subscribe, make it clear which vuex feature relates to what
* Lots of Fixes
- batchChanges fixes
- fix index is 0 issues (!/!!index)
- only `set` if we have to
- ensure we set the correct index after pushing to list
- ensure map is updated after reducing list size with limit
- podsByNamespace fixes
- ensure when ew replace... we don't use the same referenced object
- general service resource fixes
- ensure service's pods list stays up to date with store
* Multiple improvements/fixes
- resourceCache - store the hash instead of the whole object. This means longer load time be reduces memory footprint
- resourceWatcher
- don't re-sub on socket reconnect if watcher is in error
- don't sub if watcher is in error
- don't unwatch for 'failed to find schema' and 'too old' errors
- this clears the error, we won't to keep it to ensure we don't watch
- Remove #5997 comments, follow on work #7917
* toggle debug, remap alias types, cleaned up comments and console
* Unit tests for batchChanges
Much more scope for some crazy content
* Logging tweaks
- disable logging by default
- initWorker comes in too late to affect initial trace, so just rely on the `debug` to toggle at runtime
Co-authored-by: Richard Cox <richard.cox@suse.com>
* Create models, config and utils for PSA
* Create PSA tab form view
* Create custom labels for Namespace
* Add icon option for Namespace detail view
* Add icon for Namespace list
* Add PSA tab for Namespace edit view
* Add i18n for all the PSA parts
* Separate PSA labels between mode and versions
* Filter DetailTop Namespace labels from PSA versions
* Correct unit test
* Correct Namespace tooltips for details, to be created after fetching the resources
* Remove unnecessary model
* Add todo for PSA implementation
* Add TODO for tests with checkbox and select
* Correct namespace list link with model method
* Add TODO
* Move i18n key for PSA
* Align Namespace detail view chips icon to the top
* Restore labels and annotation to the Namespace view
* Merge LabelsPSA features to existing Labels component
* Move all the PSA logic from the view to the model
* Tweaks following review
DetailTop
- Remove PSA specific code from generic component
ResourceDetail
- Remove PSA specific code from generic component
- Remove plumbing for descriptions and icons from parent component to DetailTop
Labels&Annotations component
- Default `show system labels` to off
- Ensure size of `Labels` and `Annotations` titles are the same
- Improve padding
- Remove PSA specific code from generic component
- Removed un-needed margin-bottom
Project/Namespace List
- Improve padlock icon alignment
- Improve spacing around PSA list in tooltip (this will pop up often)
PodSecurtyAdmission settings component
- Improved alignment on PSA checkbox
General Improvements
- Always show Labels&Annotations on Namespace config (view) page
* Changes following testing
- Fix display of show/hide system labels when there are no system labels
- Ensure PSA order shown in project/namespaces list PSA tooltip matches PSA controls in Namespace edit/config page
- Remove two usages of lodash
- pickBy --> new common pickBy
- values --> Object.values
* Fix unit tests
Co-authored-by: Richard Cox <richard.cox@suse.com>