github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/unstructured/type.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package unstructured 21 22 type ConfigObject interface { 23 // Update sets the value for the key in ConfigObject 24 Update(key string, value any) error 25 26 // RemoveKey configuration parameter 27 RemoveKey(key string) error 28 29 // Get returns an interface. 30 Get(key string) interface{} 31 32 // GetString returns the value associated with the key as a string 33 GetString(key string) (string, error) 34 35 // GetAllParameters returns all config params as a map[string]interface{} 36 GetAllParameters() map[string]interface{} 37 38 // SubConfig returns new Sub ConfigObject instance. 39 SubConfig(key string) ConfigObject 40 41 // Marshal outputs the ConfigObject to string 42 Marshal() (string, error) 43 44 // Unmarshal reads a string and returns the valid key/value pair of valid variables. 45 Unmarshal(str string) error 46 } 47 48 const ( 49 // DelimiterDot sets the delimiter used for determining key parts. 50 DelimiterDot = "." 51 52 // CfgDelimiterPlaceholder sets the delimiter used for determining key parts. 53 // 54 // In order to verify a configuration file, the configuration file is converted to a UnstructuredObject. 55 // When there is a special character '.' in the parameter will cause the parameter of the configuration file parsing to be messed up. 56 // e.g. pg parameters: auto_explain.log_analyze = 'True' 57 // To solve this problem, the CfgDelimiterPlaceholder variable is introduced to ensure that no such string exists in a configuration file. 58 CfgDelimiterPlaceholder = "@#@" 59 )