internalstorage

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2024 License: Apache-2.0 Imports: 56 Imported by: 1

Documentation

Index

Constants

View Source
const (
	CollectionResourceAny           = "any"
	CollectionResourceWorkloads     = "workloads"
	CollectionResourceKubeResources = "kuberesources"
)
View Source
const (
	URLQueryGroups    = "groups"
	URLQueryResources = "resources"
)
View Source
const (
	// AllowRawSQLQuery is a feature gate for the apiserver to allow querying by the raw sql.
	//
	// owner: @cleverhu
	// alpha: v0.3.0
	AllowRawSQLQuery featuregate.Feature = "AllowRawSQLQuery"

	// AllowParameterizedSQLQuery is a feature gate for the apiserver to allow querying by the parameterized SQL
	// for better defense against SQL injection.
	//
	// Use either single whereSQLStatement field, a pair of whereSQLStatement with whereSQLParam, or
	// whereSQLStatement with whereSQLJSONParams to pass the SQL it self and parameters.
	//
	// owner: @nekomeowww
	// alpha: v0.8.0
	AllowParameterizedSQLQuery featuregate.Feature = "AllowParameterizedSQLQuery"
)
View Source
const (
	SearchLabelFuzzyName = "internalstorage.clusterpedia.io/fuzzy-name"

	// Raw query
	URLQueryWhereSQL = "whereSQL"
	// Parameterized query
	URLQueryFieldWhereSQLStatement  = "whereSQLStatement"
	URLQueryFieldWhereSQLParam      = "whereSQLParam"
	URLQueryFieldWhereSQLJSONParams = "whereSQLJSONParams"
)
View Source
const (
	StorageName = "internal"
)

Variables

This section is empty.

Functions

func InterpretDBError added in v0.4.0

func InterpretDBError(key string, err error) error

func InterpretMysqlError added in v0.4.0

func InterpretMysqlError(key string, err error) error

func InterpretPostgresError added in v0.4.0

func InterpretPostgresError(key string, err error) error

func InterpretResourceDBError added in v0.4.0

func InterpretResourceDBError(cluster, name string, err error) error

func NewCollectionResourceStorage added in v0.3.0

func NewCollectionResourceStorage(db *gorm.DB, cr *internal.CollectionResource) storage.CollectionResourceStorage

func NewStorageFactory

func NewStorageFactory(configPath string) (storage.StorageFactory, error)

Types

type Bytes added in v0.4.0

type Bytes datatypes.JSON

func (Bytes) ConvertTo added in v0.4.0

func (bytes Bytes) ConvertTo(codec runtime.Codec, object runtime.Object) (runtime.Object, error)

func (Bytes) ConvertToUnstructured added in v0.4.0

func (bytes Bytes) ConvertToUnstructured() (*unstructured.Unstructured, error)

func (Bytes) GetResourceType added in v0.4.0

func (bytes Bytes) GetResourceType() ResourceType

func (*Bytes) Scan added in v0.7.0

func (bytes *Bytes) Scan(data any) error

func (Bytes) Value added in v0.7.0

func (bytes Bytes) Value() (driver.Value, error)

type BytesList added in v0.4.0

type BytesList []Bytes

func (*BytesList) From added in v0.4.0

func (list *BytesList) From(db *gorm.DB) error

func (BytesList) Items added in v0.4.0

func (list BytesList) Items() []Object

type CollectionResourceStorage

type CollectionResourceStorage struct {
	// contains filtered or unexported fields
}

func (*CollectionResourceStorage) Get

type Config

type Config struct {
	Type string `env:"DB_TYPE" required:"true"`
	DSN  string `env:"DB_DSN"`

	Network string `env:"DB_NETWORK"` // Network type, either tcp or unix, Default is tcp
	Host    string `env:"DB_HOST"`    // TCP host:port or Unix socket depending on Network
	Port    string `env:"DB_PORT"`

	User     string `env:"DB_USER"`
	Password string `env:"DB_PASSWORD"`
	Database string `env:"DB_DATABASE"`

	SSLMode      string `yaml:"sslMode"`
	CertFile     string `yaml:"sslCertFile"`
	KeyFile      string `yaml:"sslKeyFile"`
	RootCertFile string `yaml:"sslRootCertFile"`

	ConnPool ConnPoolConfig `yaml:"connPool"`

	MySQL    *MySQLConfig    `yaml:"mysql"`
	Postgres *PostgresConfig `yaml:"postgres"`

	Params map[string]string `yaml:"params"`

	Log *LogConfig `yaml:"log"`
}

func (*Config) LoggerConfig

func (cfg *Config) LoggerConfig() (logger.Config, error)

type ConnPoolConfig added in v0.3.0

type ConnPoolConfig struct {
	MaxIdleConns    int           `yaml:"maxIdleConns"`
	MaxOpenConns    int           `yaml:"maxOpenConns"`
	ConnMaxLifetime time.Duration `yaml:"connMaxLifetime"`
}

type JSONQueryExpression

type JSONQueryExpression struct {
	// contains filtered or unexported fields
}

func JSONQuery

func JSONQuery(column string, keys ...string) *JSONQueryExpression

func (*JSONQueryExpression) Build

func (jsonQuery *JSONQueryExpression) Build(builder clause.Builder)

func (*JSONQueryExpression) Equal

func (jsonQuery *JSONQueryExpression) Equal(value string) *JSONQueryExpression

func (*JSONQueryExpression) Exist added in v0.1.0

func (jsonQuery *JSONQueryExpression) Exist() *JSONQueryExpression

func (*JSONQueryExpression) In

func (jsonQuery *JSONQueryExpression) In(values ...string) *JSONQueryExpression

func (*JSONQueryExpression) NotEqual

func (jsonQuery *JSONQueryExpression) NotEqual(value string) *JSONQueryExpression

func (*JSONQueryExpression) NotExist added in v0.1.0

func (jsonQuery *JSONQueryExpression) NotExist() *JSONQueryExpression

func (*JSONQueryExpression) NotIn

func (jsonQuery *JSONQueryExpression) NotIn(values ...string) *JSONQueryExpression

type LogConfig

type LogConfig struct {
	Stdout                    bool               `yaml:"stdout"`
	Level                     string             `yaml:"level"`
	Colorful                  bool               `yaml:"colorful"`
	SlowThreshold             time.Duration      `yaml:"slowThreshold" default:"200ms"`
	IgnoreRecordNotFoundError bool               `yaml:"ignoreRecordNotFoundError"`
	Logger                    *lumberjack.Logger `yaml:"logger"`
}

type MySQLConfig

type MySQLConfig struct {
	DialTimeout  *time.Duration `yaml:"dialTimeout"`
	ReadTimeout  *time.Duration `yaml:"readTimeout"`
	WriteTimeout *time.Duration `yaml:"writeTimeout"`

	ServerPubKey     *string `yaml:"serverPubKey"`
	Loc              *string `yaml:"loc"`
	MaxAllowedPacket *int    `yaml:"maxAllowedPacket"`

	AllowAllFiles           *bool `yaml:"allowAllFiles"`           // Allow all files to be used with LOAD DATA LOCAL INFILE
	AllowCleartextPasswords *bool `yaml:"allowCleartextPasswords"` // Allows the cleartext client side plugin
	AllowNativePasswords    *bool `yaml:"allowNativePasswords"`    // Allows the native password authentication method
	AllowOldPasswords       *bool `yaml:"allowOldPasswords"`       // Allows the old insecure password method
	CheckConnLiveness       *bool `yaml:"checkConnLiveness"`       // Check connections for liveness before using them
	ClientFoundRows         *bool `yaml:"clientFoundRows"`         // Return number of matching rows instead of rows changed
	ColumnsWithAlias        *bool `yaml:"columnsWithAlias"`        // Prepend table alias to column names
	InterpolateParams       *bool `yaml:"interpolateParams"`       // Interpolate placeholders into query string
	MultiStatements         *bool `yaml:"multiStatements"`         // Allow multiple statements in one query
	ParseTime               *bool `yaml:"parseTime"`               // Parse time values to time.Time
	RejectReadOnly          *bool `yaml:"rejectReadOnly"`          // Reject read-only connections

	RecoverableErrNumbers []int `yaml:"recoverableErrNumbers"`
}

type Object added in v0.3.0

type Object interface {
	GetResourceType() ResourceType
	ConvertToUnstructured() (*unstructured.Unstructured, error)
	ConvertTo(codec runtime.Codec, object runtime.Object) (runtime.Object, error)
}

type ObjectList added in v0.3.0

type ObjectList interface {
	From(db *gorm.DB) error
	Items() []Object
}

type PostgresConfig

type PostgresConfig struct {
	RecoverableErrCodes []string `yaml:"recoverableErrCodes"`
}

type Resource

type Resource struct {
	ID uint `gorm:"primaryKey"`

	Group    string `` /* 171-byte string literal not displayed */
	Version  string `` /* 171-byte string literal not displayed */
	Resource string `` /* 171-byte string literal not displayed */
	Kind     string `gorm:"size:63;not null"`

	Cluster         string    `gorm:"size:253;not null;uniqueIndex:uni_group_version_resource_cluster_namespace_name,length:100;index:idx_cluster"`
	Namespace       string    `` /* 144-byte string literal not displayed */
	Name            string    `` /* 183-byte string literal not displayed */
	OwnerUID        types.UID `gorm:"column:owner_uid;size:36;not null;default:''"`
	UID             types.UID `gorm:"size:36;not null"`
	ResourceVersion string    `gorm:"size:30;not null"`

	Object datatypes.JSON `gorm:"not null"`

	CreatedAt time.Time `gorm:"not null"`
	SyncedAt  time.Time `gorm:"not null;autoUpdateTime"`
	DeletedAt sql.NullTime
}

func (Resource) ConvertTo added in v0.4.0

func (res Resource) ConvertTo(codec runtime.Codec, object runtime.Object) (runtime.Object, error)

func (Resource) ConvertToUnstructured added in v0.3.0

func (res Resource) ConvertToUnstructured() (*unstructured.Unstructured, error)

func (Resource) GetResourceType added in v0.3.0

func (res Resource) GetResourceType() ResourceType

func (Resource) GroupVersionResource

func (res Resource) GroupVersionResource() schema.GroupVersionResource

type ResourceList added in v0.3.0

type ResourceList []Resource

func (*ResourceList) From added in v0.3.0

func (list *ResourceList) From(db *gorm.DB) error

func (ResourceList) Items added in v0.3.0

func (list ResourceList) Items() []Object

type ResourceMetadata added in v0.3.0

type ResourceMetadata struct {
	ResourceType `gorm:"embedded"`

	Metadata datatypes.JSON
}

func (ResourceMetadata) ConvertTo added in v0.4.0

func (data ResourceMetadata) ConvertTo(codec runtime.Codec, object runtime.Object) (runtime.Object, error)

func (ResourceMetadata) ConvertToUnstructured added in v0.3.0

func (data ResourceMetadata) ConvertToUnstructured() (*unstructured.Unstructured, error)

func (ResourceMetadata) GetResourceType added in v0.3.0

func (data ResourceMetadata) GetResourceType() ResourceType

type ResourceMetadataList added in v0.3.0

type ResourceMetadataList []ResourceMetadata

func (*ResourceMetadataList) From added in v0.3.0

func (list *ResourceMetadataList) From(db *gorm.DB) error

func (ResourceMetadataList) Items added in v0.3.0

func (list ResourceMetadataList) Items() []Object

type ResourceStorage

type ResourceStorage struct {
	// contains filtered or unexported fields
}

func (*ResourceStorage) ConvertDeletedObject added in v0.8.0

func (c *ResourceStorage) ConvertDeletedObject(obj interface{}) (runtime.Object, error)

func (*ResourceStorage) Create

func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtime.Object) error

func (*ResourceStorage) Delete

func (s *ResourceStorage) Delete(ctx context.Context, cluster string, obj runtime.Object) error

func (*ResourceStorage) Get

func (s *ResourceStorage) Get(ctx context.Context, cluster, namespace, name string, into runtime.Object) error

func (*ResourceStorage) GetStorageConfig

func (s *ResourceStorage) GetStorageConfig() *storage.ResourceStorageConfig

func (*ResourceStorage) List

func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, opts *internal.ListOptions) error

func (*ResourceStorage) Update

func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtime.Object) error

func (*ResourceStorage) Watch added in v0.6.0

type ResourceType added in v0.3.0

type ResourceType struct {
	Group    string
	Version  string
	Resource string
	Kind     string
}

func (ResourceType) Empty added in v0.4.0

func (rt ResourceType) Empty() bool

func (ResourceType) GroupVersionResource added in v0.3.0

func (rt ResourceType) GroupVersionResource() schema.GroupVersionResource

type StorageFactory

type StorageFactory struct {
	// contains filtered or unexported fields
}

func (*StorageFactory) CleanCluster

func (f *StorageFactory) CleanCluster(ctx context.Context, cluster string) error

func (*StorageFactory) CleanClusterResource

func (s *StorageFactory) CleanClusterResource(ctx context.Context, cluster string, gvr schema.GroupVersionResource) error

func (*StorageFactory) GetCollectionResources

func (s *StorageFactory) GetCollectionResources(ctx context.Context) ([]*internal.CollectionResource, error)

func (*StorageFactory) GetResourceVersions

func (f *StorageFactory) GetResourceVersions(ctx context.Context, cluster string) (map[schema.GroupVersionResource]map[string]interface{}, error)

func (*StorageFactory) GetSupportedRequestVerbs added in v0.6.0

func (s *StorageFactory) GetSupportedRequestVerbs() []string

func (*StorageFactory) NewCollectionResourceStorage

func (s *StorageFactory) NewCollectionResourceStorage(cr *internal.CollectionResource) (storage.CollectionResourceStorage, error)

func (*StorageFactory) NewResourceStorage

func (s *StorageFactory) NewResourceStorage(config *storage.ResourceStorageConfig) (storage.ResourceStorage, error)

func (*StorageFactory) PrepareCluster added in v0.6.0

func (s *StorageFactory) PrepareCluster(cluster string) error

type URLQueryWhereSQLParams added in v0.7.1

type URLQueryWhereSQLParams struct {
	// Raw query
	WhereSQL string
	// Parameterized query
	WhereSQLStatement  string
	WhereSQLParams     []string
	WhereSQLJSONParams []any
}

func NewURLQueryWhereSQLParamsFromURLValues added in v0.7.1

func NewURLQueryWhereSQLParamsFromURLValues(urlQuery url.Values) (URLQueryWhereSQLParams, error)

NewURLQueryWhereSQLParamsFromURLValues resolves parameters from passed in url.Values. A k8s.io/apimachinery/pkg/api/errors.StatusError will be returned if decoding or unmarshalling failed only when the value of "whereSQLJSONParams" is present.

It recognizes the following query fields for parameters:

"whereSQL"
"whereSQLStatement"
"whereSQLParam"
"whereSQLJSONParams"

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL