loadConfig loads the java_opts.yml configuration
()
| 243 | |
| 244 | // loadConfig loads the java_opts.yml configuration |
| 245 | func (j *JavaOptsFramework) loadConfig() (*JavaOptsConfig, error) { |
| 246 | config := &JavaOptsConfig{ |
| 247 | FromEnvironment: true, // Default to true (matches config file) |
| 248 | JavaOpts: []string{}, |
| 249 | } |
| 250 | yamlHandler := common.YamlHandler{} |
| 251 | |
| 252 | // Check for JBP_CONFIG_JAVA_OPTS override |
| 253 | configOverride := os.Getenv("JBP_CONFIG_JAVA_OPTS") |
| 254 | if configOverride != "" { |
| 255 | // First, parse the outer YAML string (handles single-quoted format like '{...}') |
| 256 | var yamlContent interface{} |
| 257 | if err := yamlHandler.Unmarshal([]byte(configOverride), &yamlContent); err != nil { |
| 258 | return nil, fmt.Errorf("failed to parse JBP_CONFIG_JAVA_OPTS: %w", err) |
| 259 | } |
| 260 | |
| 261 | // Handle different YAML formats for backward compatibility |
| 262 | var configData []byte |
| 263 | switch v := yamlContent.(type) { |
| 264 | case string: |
| 265 | // It's a YAML string literal - parse the content |
| 266 | configData = []byte(v) |
| 267 | case map[string]interface{}: |
| 268 | // It's already a parsed YAML structure - marshal it back to bytes |
| 269 | var err error |
| 270 | configData, err = yamlHandler.Marshal(v) |
| 271 | if err != nil { |
| 272 | return nil, fmt.Errorf("failed to marshal config map: %w", err) |
| 273 | } |
| 274 | case []interface{}: |
| 275 | // Handle legacy format: [from_environment: false, java_opts: ...] |
| 276 | // This parses as an array of maps, so we need to merge them |
| 277 | mergedMap := make(map[string]interface{}) |
| 278 | for _, item := range v { |
| 279 | if m, ok := item.(map[string]interface{}); ok { |
| 280 | for k, val := range m { |
| 281 | mergedMap[k] = val |
| 282 | } |
| 283 | } |
| 284 | } |
| 285 | var err error |
| 286 | configData, err = yamlHandler.Marshal(mergedMap) |
| 287 | if err != nil { |
| 288 | return nil, fmt.Errorf("failed to marshal merged config map: %w", err) |
| 289 | } |
| 290 | default: |
| 291 | return nil, fmt.Errorf("unexpected YAML type: %T", v) |
| 292 | } |
| 293 | |
| 294 | // Parse into a generic map first to handle both string and array formats for java_opts |
| 295 | var rawConfig map[string]interface{} |
| 296 | if err := yamlHandler.Unmarshal(configData, &rawConfig); err != nil { |
| 297 | return nil, fmt.Errorf("failed to parse JBP_CONFIG_JAVA_OPTS structure: %w", err) |
| 298 | } |
| 299 | |
| 300 | // Handle from_environment field |
| 301 | if fromEnv, ok := rawConfig["from_environment"].(bool); ok { |
| 302 | config.FromEnvironment = fromEnv |
no test coverage detected