config

package
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Dec 15, 2021 License: Apache-2.0 Imports: 22 Imported by: 5

Documentation

Index

Constants

View Source
const VersionKey = "configVersion"

Variables

View Source
var Schemas = map[string]string{
	"v1": `
definitions:
  nameSelector:
    type: object
    additionalProperties: false
    required:
    - matchNames
    properties:
      matchNames:
        type: array
        additionalItems: false
        items:
          type: string
  labelSelector:
    type: object
    additionalProperties: false
    minProperties: 1
    maxProperties: 2
    properties:
      matchLabels:
        type: object
        additionalProperties:
          type: string
      matchExpressions:
        type: array
        items:
          type: object
          additionalProperties: false
          required:
          - key
          - operator
          properties:
            key:
              type: string
            operator:
              type: string
              enum:
              - In
              - NotIn
              - Exists
              - DoesNotExist
            values:
              type: array
              items:
                type: string

type: object
additionalProperties: false
required:
- configVersion
minProperties: 2
properties:
  configVersion:
    type: string
    enum:
    - v1
  settings:
    type: object
    additionalProperties: false
    properties:
      executionMinInterval:
        type: string
      executionBurst:
        type: integer
  onStartup:
    title: onStartup binding
    description: |
      the value is the order to sort onStartup hooks
    type: integer
    example: 10
  schedule:
    title: schedule bindings
    description: |
      configuration of hooks that should run on schedule
    type: array
    additionalItems: false
    minItems: 1
    items:
      type: object
      additionalProperties: false
      required:
      - crontab
      properties:
        name:
          type: string
        crontab:
          type: string
        allowFailure:
          type: boolean
          default: false
        includeSnapshotsFrom:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: string
        queue:
          type: string
        group:
          type: string
  kubernetes:
    title: kubernetes event bindings
    type: array
    additionalItems: false
    minItems: 1
    items:
      type: object
      additionalProperties: false
      required:
      - kind
      patternProperties:
        "^(watchEvent|executeHookOnEvent)$":
          type: array
          additionalItems: false
          minItems: 0
          items:
            type: string
            enum:
            - Added
            - Modified
            - Deleted
      properties:
        name:
          type: string
        apiVersion:
          type: string
        kind:
          type: string
        includeSnapshotsFrom:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: string
        queue:
          type: string
        jqFilter:
          type: string
          example: ".metadata.labels"
        keepFullObjectsInMemory:
          type: boolean
        allowFailure:
          type: boolean
        executeHookOnSynchronization:
          type: boolean
        waitForSynchronization:
          type: boolean
        resynchronizationPeriod:
          type: string
        nameSelector:
          "$ref": "#/definitions/nameSelector"
        labelSelector:
          "$ref": "#/definitions/labelSelector"
        fieldSelector:
          type: object
          additionalProperties: false
          required:
          - matchExpressions
          properties:
            matchExpressions:
              type: array
              items:
                type: object
                additionalProperties: false
                minProperties: 3
                maxProperties: 3
                properties:
                  field:
                    type: string
                  operator:
                    type: string
                    enum: ["=", "==", "Equals", "!=", "NotEquals"]
                  value:
                    type: string
        group:
          type: string
        namespace:
          type: object
          additionalProperties: false
          minProperties: 1
          maxProperties: 2
          properties:
            nameSelector:
              "$ref": "#/definitions/nameSelector"
            labelSelector:
              "$ref": "#/definitions/labelSelector"
  kubernetesValidating:
    title: ValidatingWebhookConfiguration handlers
    type: array
    additionalItems: false
    minItems: 1
    items:
      type: object
      additionalProperties: false
      required:
      - name
      properties:
        name:
          type: string
        group:
          type: string
        includeSnapshotsFrom:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: string
        failurePolicy:
          type: string
          enum:
          - Ignore
          - Fail
        sideEffects:
          type: string
          enum:
          - None
          - NoneOnDryRun
        timeoutSeconds:
          type: integer
          example: 10
        labelSelector:
          "$ref": "#/definitions/labelSelector"
        namespace:
          type: object
          additionalProperties: false
          required:
          - labelSelector
          properties:
            labelSelector:
              "$ref": "#/definitions/labelSelector"
        rules:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: object
            additionalProperties: false
            required:
              - apiVersions
              - apiGroups
              - resources
              - operations
            properties:
              apiVersions:
                type: array
                minItems: 1
                items:
                  type: string
              apiGroups:
                type: array
                minItems: 1
                items:
                  type: string
              resources:
                type: array
                minItems: 1
                items:
                  type: string
              operations:
                type: array
                minItems: 1
                items:
                  type: string
                  enum:
                  - "CREATE"
                  - "UPDATE"
                  - "*"
              scope:
                type: string
                enum:
                - "Cluster"
                - "Namespaced"
                - "*"
  kubernetesCustomResourceConversion:
    title: Conversion handlers for CustomResourceDefinition versions
    type: array
    additionalItems: false
    minItems: 1
    items:
      type: object
      additionalProperties: false
      required:
      - name
      - crdName
      - conversions
      properties:
        name:
          type: string
        group:
          type: string
        includeSnapshotsFrom:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: string
        crdName:
          type: string
        conversions:
          type: array
          additionalItems: false
          minItems: 1
          items:
            type: object
            additionalProperties: false
            required:
            - fromVersion
            - toVersion
            properties:
              fromVersion:
                type: string
              toVersion:
                type: string
`,
	"v0": `
type: object
additionalProperties: false
minProperties: 1
properties:
  onStartup:
    title: onStartup binding
    description: |
      the value is the order to sort onStartup hooks
    type: integer
  schedule:
    type: array
    items:
      type: object
  onKubernetesEvent:
    type: array
    items:
      type: object
`,
}
View Source
var SchemasCache = map[string]*spec.Schema{}

Functions

func CheckIncludeSnapshots

func CheckIncludeSnapshots(kubeConfigs []OnKubernetesEventConfig, includes ...string) error

CheckIncludeSnapshots check if all includes has corresponding kubernetes binding. Rules:

- binding name should exists,

- binding name should not be repeated.

func ConvertFloatForBinding

func ConvertFloatForBinding(value interface{}, bindingName string) (*float64, error)

func GetSchema

func GetSchema(name string) *spec.Schema

GetSchema returns loaded schema.

func LoadSchema

func LoadSchema(name string) (*spec.Schema, error)

LoadSchema returns spec.Schema object loaded from yaml in Schemas map.

func MergeArrays

func MergeArrays(a1 []string, a2 []string) []string

MergeArrays returns merged array with unique elements. Preserve elements order.

func MonitorConfigID

func MonitorConfigID() string

TODO uuid is not a good choice here. Make it more readable.

func MonitorDebugName

func MonitorDebugName(configName string, configIndex int) string

func ScheduleID

func ScheduleID() string

TODO uuid is not a good choice here. Make it more readable.

Types

type HookConfig

type HookConfig struct {
	// effective version of config
	Version string

	// versioned raw config values
	V0 *HookConfigV0
	V1 *HookConfigV1

	// effective config values
	OnStartup            *OnStartupConfig
	Schedules            []ScheduleConfig
	OnKubernetesEvents   []OnKubernetesEventConfig
	KubernetesValidating []ValidatingConfig
	KubernetesConversion []ConversionConfig
	Settings             *Settings
}

HookConfig is a structure with versioned hook configuration

func (*HookConfig) Bindings

func (c *HookConfig) Bindings() []BindingType

Bindings returns a list of binding types in hook configuration.

func (*HookConfig) ConvertAndCheck

func (c *HookConfig) ConvertAndCheck(data []byte) error

ConvertAndCheck transforms a versioned configuration to latest internal structures.

func (*HookConfig) ConvertOnStartup

func (c *HookConfig) ConvertOnStartup(value interface{}) (*OnStartupConfig, error)

func (*HookConfig) HasBinding

func (c *HookConfig) HasBinding(binding BindingType) bool

HasBinding returns true if a hook configuration has binding type.

func (*HookConfig) LoadAndValidate

func (c *HookConfig) LoadAndValidate(data []byte) error

LoadAndValidate loads config from bytes and validate it. Returns multierror.

type HookConfigV0

type HookConfigV0 struct {
	OnStartup         interface{}                 `json:"onStartup"`
	Schedule          []ScheduleConfigV0          `json:"schedule"`
	OnKubernetesEvent []OnKubernetesEventConfigV0 `json:"onKubernetesEvent"`
}

func (*HookConfigV0) CheckOnKubernetesEvent

func (cv0 *HookConfigV0) CheckOnKubernetesEvent(kubeCfg OnKubernetesEventConfigV0, rootPath string) error

func (*HookConfigV0) CheckSchedule

func (cv0 *HookConfigV0) CheckSchedule(schV0 ScheduleConfigV0) error

func (*HookConfigV0) ConvertAndCheck

func (cv0 *HookConfigV0) ConvertAndCheck(c *HookConfig) (err error)

ConvertAndCheckV0 fills non-versioned structures and run inter-field checks not covered by OpenAPI schemas.

func (*HookConfigV0) ConvertSchedule

func (cv0 *HookConfigV0) ConvertSchedule(schV0 ScheduleConfigV0) (ScheduleConfig, error)

type HookConfigV1

type HookConfigV1 struct {
	ConfigVersion        string                         `json:"configVersion"`
	OnStartup            interface{}                    `json:"onStartup"`
	Schedule             []ScheduleConfigV1             `json:"schedule"`
	OnKubernetesEvent    []OnKubernetesEventConfigV1    `json:"kubernetes"`
	KubernetesValidating []KubernetesValidatingConfigV1 `json:"kubernetesValidating"`
	KubernetesConversion []KubernetesConversionConfigV1 `json:"kubernetesCustomResourceConversion"`
	Settings             *SettingsV1                    `json:"settings"`
}

func (*HookConfigV1) CheckAndConvertSettings

func (cv1 *HookConfigV1) CheckAndConvertSettings(settings *SettingsV1) (out *Settings, allErr error)

CheckAndConvertSettings validates a duration and returns a Settings struct.

func (*HookConfigV1) CheckConversion

func (cv1 *HookConfigV1) CheckConversion(kubeConfigs []OnKubernetesEventConfig, cfgV1 KubernetesConversionConfigV1) (allErr error)

func (*HookConfigV1) CheckOnKubernetesEvent

func (сv1 *HookConfigV1) CheckOnKubernetesEvent(kubeCfg OnKubernetesEventConfigV1, rootPath string) (allErr error)

func (*HookConfigV1) CheckSchedule

func (cv1 *HookConfigV1) CheckSchedule(kubeConfigs []OnKubernetesEventConfig, schV1 ScheduleConfigV1) (allErr error)

func (*HookConfigV1) CheckValidating

func (cv1 *HookConfigV1) CheckValidating(kubeConfigs []OnKubernetesEventConfig, cfgV1 KubernetesValidatingConfigV1) (allErr error)

func (*HookConfigV1) ConvertAndCheck

func (cv1 *HookConfigV1) ConvertAndCheck(c *HookConfig) (err error)

ConvertAndCheck fills non-versioned structures and run inter-field checks not covered by OpenAPI schemas.

func (*HookConfigV1) ConvertConversion

func (cv1 *HookConfigV1) ConvertConversion(cfgV1 KubernetesConversionConfigV1) (ConversionConfig, error)

func (*HookConfigV1) ConvertSchedule

func (cv1 *HookConfigV1) ConvertSchedule(schV1 ScheduleConfigV1) (ScheduleConfig, error)

func (*HookConfigV1) ConvertValidating

func (cv1 *HookConfigV1) ConvertValidating(cfgV1 KubernetesValidatingConfigV1) (ValidatingConfig, error)

type KubeFieldSelectorV1

type KubeFieldSelectorV1 FieldSelector

type KubeNameSelectorV1

type KubeNameSelectorV1 NameSelector

type KubeNamespaceSelectorV0

type KubeNamespaceSelectorV0 struct {
	MatchNames []string `json:"matchNames"`
	Any        bool     `json:"any"`
}

type KubeNamespaceSelectorV1

type KubeNamespaceSelectorV1 NamespaceSelector

type KubernetesConversionConfigV1

type KubernetesConversionConfigV1 struct {
	Name                 string            `json:"name,omitempty"`
	IncludeSnapshotsFrom []string          `json:"includeSnapshotsFrom,omitempty"`
	Group                string            `json:"group,omitempty"`
	CrdName              string            `json:"crdName,omitempty"`
	Conversions          []conversion.Rule `json:"conversions,omitempty"`
}

version 1 of kubernetes conversion configuration

type KubernetesValidatingConfigV1

type KubernetesValidatingConfigV1 struct {
	Name                 string                   `json:"name,omitempty"`
	IncludeSnapshotsFrom []string                 `json:"includeSnapshotsFrom,omitempty"`
	Group                string                   `json:"group,omitempty"`
	Rules                []v1.RuleWithOperations  `json:"rules,omitempty"`
	FailurePolicy        *v1.FailurePolicyType    `json:"failurePolicy"`
	LabelSelector        *metav1.LabelSelector    `json:"labelSelector,omitempty"`
	Namespace            *KubeNamespaceSelectorV1 `json:"namespace,omitempty"`
	SideEffects          *v1.SideEffectClass      `json:"sideEffects"`
	TimeoutSeconds       *int32                   `json:"timeoutSeconds,omitempty"`
}

version 1 of kubernetes event configuration

type OnKubernetesEventConfigV0

type OnKubernetesEventConfigV0 struct {
	Name              string                   `json:"name,omitempty"`
	EventTypes        []string                 `json:"event,omitempty"`
	Kind              string                   `json:"kind,omitempty"`
	Selector          *metav1.LabelSelector    `json:"selector,omitempty"`
	ObjectName        string                   `json:"objectName,omitempty"`
	NamespaceSelector *KubeNamespaceSelectorV0 `json:"namespaceSelector,omitempty"`
	JqFilter          string                   `json:"jqFilter,omitempty"`
	AllowFailure      bool                     `json:"allowFailure,omitempty"`
}

Legacy version of kubernetes event configuration

type OnKubernetesEventConfigV1

type OnKubernetesEventConfigV1 struct {
	Name                         string                   `json:"name,omitempty"`
	WatchEventTypes              []WatchEventType         `json:"watchEvent,omitempty"`
	ExecuteHookOnEvents          []WatchEventType         `json:"executeHookOnEvent,omitempty"`
	ExecuteHookOnSynchronization string                   `json:"executeHookOnSynchronization,omitempty"`
	WaitForSynchronization       string                   `json:"waitForSynchronization,omitempty"`
	KeepFullObjectsInMemory      string                   `json:"keepFullObjectsInMemory,omitempty"`
	Mode                         KubeEventMode            `json:"mode,omitempty"`
	ApiVersion                   string                   `json:"apiVersion,omitempty"`
	Kind                         string                   `json:"kind,omitempty"`
	NameSelector                 *KubeNameSelectorV1      `json:"nameSelector,omitempty"`
	LabelSelector                *metav1.LabelSelector    `json:"labelSelector,omitempty"`
	FieldSelector                *KubeFieldSelectorV1     `json:"fieldSelector,omitempty"`
	Namespace                    *KubeNamespaceSelectorV1 `json:"namespace,omitempty"`
	JqFilter                     string                   `json:"jqFilter,omitempty"`
	AllowFailure                 bool                     `json:"allowFailure,omitempty"`
	ResynchronizationPeriod      string                   `json:"resynchronizationPeriod,omitempty"`
	IncludeSnapshotsFrom         []string                 `json:"includeSnapshotsFrom,omitempty"`
	Queue                        string                   `json:"queue,omitempty"`
	Group                        string                   `json:"group,omitempty"`
}

version 1 of kubernetes event configuration

type ScheduleConfigV0

type ScheduleConfigV0 struct {
	Name         string `json:"name"`
	Crontab      string `json:"crontab"`
	AllowFailure bool   `json:"allowFailure"`
}

Schedule configuration

type ScheduleConfigV1

type ScheduleConfigV1 struct {
	Name                 string   `json:"name"`
	Crontab              string   `json:"crontab"`
	AllowFailure         bool     `json:"allowFailure"`
	IncludeSnapshotsFrom []string `json:"includeSnapshotsFrom"`
	Queue                string   `json:"queue"`
	Group                string   `json:"group,omitempty"`
}

Schedule configuration

type SettingsV1

type SettingsV1 struct {
	ExecutionMinInterval string `json:"executionMinInterval,omitempty"`
	ExecutionBurst       string `json:"executionBurst,omitempty"`
}

version 1 of hook settings

type VersionedUntyped

type VersionedUntyped struct {
	Obj     map[string]interface{}
	Version string

	VersionKey       string
	VersionValidator func(string, bool) (string, error)
}

func NewDefaultVersionedUntyped

func NewDefaultVersionedUntyped() *VersionedUntyped

NewDefaultVersionedUntyped is a VersionedUntyper object with default version key and version validator against Schemas map

func (*VersionedUntyped) GetString

func (u *VersionedUntyped) GetString(key string) (value string, found bool, err error)

GetString returns string value by key

func (*VersionedUntyped) Load

func (u *VersionedUntyped) Load(data []byte) error

func (*VersionedUntyped) LoadConfigVersion

func (u *VersionedUntyped) LoadConfigVersion() (string, error)

LoadConfigVersion

Jump to

Keyboard shortcuts

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