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  )