|
1 | 1 | package config
|
2 | 2 |
|
| 3 | +import ( |
| 4 | + "github.com/stacklok/toolhive/pkg/container/runtime" |
| 5 | +) |
| 6 | + |
3 | 7 | // Provider defines the interface for configuration operations
|
4 | 8 | type Provider interface {
|
5 | 9 | GetConfig() *Config
|
@@ -28,12 +32,12 @@ func (*DefaultProvider) GetConfig() *Config {
|
28 | 32 |
|
29 | 33 | // UpdateConfig updates the config using the default path
|
30 | 34 | func (*DefaultProvider) UpdateConfig(updateFn func(*Config)) error {
|
31 |
| - return UpdateConfig(updateFn) |
| 35 | + return UpdateConfigAtPath("", updateFn) |
32 | 36 | }
|
33 | 37 |
|
34 | 38 | // LoadOrCreateConfig loads or creates config using the default path
|
35 | 39 | func (*DefaultProvider) LoadOrCreateConfig() (*Config, error) {
|
36 |
| - return LoadOrCreateConfig() |
| 40 | + return LoadOrCreateConfigWithDefaultPath() |
37 | 41 | }
|
38 | 42 |
|
39 | 43 | // SetRegistryURL validates and sets a registry URL
|
@@ -106,3 +110,57 @@ func (p *PathProvider) UnsetRegistry() error {
|
106 | 110 | func (p *PathProvider) GetRegistryConfig() (url, localPath string, allowPrivateIP bool, registryType string) {
|
107 | 111 | return getRegistryConfig(p)
|
108 | 112 | }
|
| 113 | + |
| 114 | +// KubernetesProvider is a no-op implementation of Provider for Kubernetes environments. |
| 115 | +// In Kubernetes, configuration is managed by the cluster, not by local files. |
| 116 | +type KubernetesProvider struct{} |
| 117 | + |
| 118 | +// NewKubernetesProvider creates a new no-op config provider for Kubernetes environments |
| 119 | +func NewKubernetesProvider() *KubernetesProvider { |
| 120 | + return &KubernetesProvider{} |
| 121 | +} |
| 122 | + |
| 123 | +// GetConfig returns a default config for Kubernetes environments |
| 124 | +func (*KubernetesProvider) GetConfig() *Config { |
| 125 | + config := createNewConfigWithDefaults() |
| 126 | + return &config |
| 127 | +} |
| 128 | + |
| 129 | +// UpdateConfig is a no-op for Kubernetes environments |
| 130 | +func (*KubernetesProvider) UpdateConfig(_ func(*Config)) error { |
| 131 | + return nil |
| 132 | +} |
| 133 | + |
| 134 | +// LoadOrCreateConfig returns a default config for Kubernetes environments |
| 135 | +func (*KubernetesProvider) LoadOrCreateConfig() (*Config, error) { |
| 136 | + config := createNewConfigWithDefaults() |
| 137 | + return &config, nil |
| 138 | +} |
| 139 | + |
| 140 | +// SetRegistryURL is a no-op for Kubernetes environments |
| 141 | +func (*KubernetesProvider) SetRegistryURL(_ string, _ bool) error { |
| 142 | + return nil |
| 143 | +} |
| 144 | + |
| 145 | +// SetRegistryFile is a no-op for Kubernetes environments |
| 146 | +func (*KubernetesProvider) SetRegistryFile(_ string) error { |
| 147 | + return nil |
| 148 | +} |
| 149 | + |
| 150 | +// UnsetRegistry is a no-op for Kubernetes environments |
| 151 | +func (*KubernetesProvider) UnsetRegistry() error { |
| 152 | + return nil |
| 153 | +} |
| 154 | + |
| 155 | +// GetRegistryConfig returns empty registry configuration for Kubernetes environments |
| 156 | +func (*KubernetesProvider) GetRegistryConfig() (url, localPath string, allowPrivateIP bool, registryType string) { |
| 157 | + return "", "", false, "" |
| 158 | +} |
| 159 | + |
| 160 | +// NewProvider creates the appropriate config provider based on the runtime environment |
| 161 | +func NewProvider() Provider { |
| 162 | + if runtime.IsKubernetesRuntime() { |
| 163 | + return NewKubernetesProvider() |
| 164 | + } |
| 165 | + return NewDefaultProvider() |
| 166 | +} |
0 commit comments