config

package
v0.0.0-...-8d8ec1c Latest Latest
Warning

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

Go to latest
Published: Feb 18, 2022 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package config - Configuration for Cloud-Barista's REST API Gateway and provides the required process

Index

Constants

View Source
const (
	// ConfigVersion - 설정 구조에 대한 버전
	ConfigVersion = 1
)

Variables

View Source
var (

	// ErrNoHosts - Load Balancing 처리 대상 Host 가 지정되지 않은 경우 오류
	ErrNoHosts = errors.New("no available hosts")
)

Functions

func CheckErr

func CheckErr(err error, configFile string) error

CheckErr - 검증된 오류 정보 반환

Types

type AdminConfig

type AdminConfig struct {
	// Port - Admin Server 포트 (기본값: 8001)
	Port int `mapstructure:"port" default:"8001"`
	// Credentials - Admin Server (WEB)를 사용할 사용자 설정
	Credentials *CredentialsConfig `mapstructure:"credentials"`
	// TLS - Admin Server에서 사용할 TLS 설정
	TLS *TLSConfig `mapstructure:"tls"`
	// ProfilingEnabled - Admin Server Profile 처리 여부 (기본값: false)
	ProfilingEnabled bool `mapstructure:"profiling_enabled"`
	// ProfilingPublic - Admin Server Profile 정보 노출 여부 (기본값: false)
	ProfilingPublic bool `mapstructure:"profiling_public"`
}

AdminConfig - Admin API 운영에 필요한 설정 형식

func (*AdminConfig) InitializeDefaults

func (admin *AdminConfig) InitializeDefaults() error

InitializeDefaults - 기본 값 설정

func (*AdminConfig) Validate

func (admin *AdminConfig) Validate() error

Validate - 설정 검증

type BackendConfig

type BackendConfig struct {
	// Hosts - Backend API Server의 Host URI (기본값: 없으면 EndPointConfig 정보 사용)
	Hosts []*HostConfig `yaml:"hosts" json:"hosts"`
	// Timeout - Backend 처리 시간 (기본값: 없으면 EndPointConfig 정보 사용)
	Timeout time.Duration `yaml:"timeout" json:"timeout"`
	// Method - Backend 호출에 사용할 HTTP Method (기본값: 없으면 EndPointConfig 정보 사용)
	Method string `yaml:"method" json:"method"`
	// URLPattern - Backend 호출에 사용할 URL Patthern (기본값: "")
	URLPattern string `yaml:"url_pattern" json:"url_pattern"`
	// Encoding - 인코딩 포맷 (기본값: "json")
	Encoding string `yaml:"encoding" json:"encoding" default:"json"`
	// Group - Backend 결과를 묶을 Group 명 (기본값: "")
	Group string `yaml:"group" json:"group" default:""`
	// Blacklist - Backend 결과에서 생략할 필드명 리스트 (기본값: "[]", flatmap 적용 "." operation)
	Blacklist []string `yaml:"blacklist" json:"blacklist" default:"[]"`
	// Whitelist - Backend 결과에서 추출할 필드명 리스트 (기본값: "[]", flatmap 적용 "." operation)
	Whitelist []string `yaml:"whitelist" json:"whitelist" default:"[]"`
	// Mapping - Backend 결과에서 필드명을 변경할 리스트 맵 (기본값: "{}")
	Mapping map[string]string `yaml:"mapping" json:"mapping" default:"{}"`
	// IsCollection - Backend 결과가 컬랙션인지 여부 (기본값: false)
	IsCollection bool `yaml:"is_collection" json:"is_collection" default:"false"`
	// WrapCollectionToJSON - Backend 결과가 컬랙션인 경우에 core.CollectionTag ("collection") 으로 JSON 포맷을 할 것인지 여부
	// (True 면 core.CollectionTag ("collection") 으로 JSON 전환, false면 Array 상태로 반환) (기본값: false)
	WrapCollectionToJSON bool `yaml:"wrap_collection_to_json" json:"wrap_collection_to_json" default:"false"`
	// Target - Backend 결과 중에서 특정한 필드만 처리할 경우의 필드명 (기본값: "")
	Target string `yaml:"target" json:"target" default:""`
	// Middleware - Backend 에서 동작할 Middleware 설정
	Middleware MWConfig `yaml:"middleware" json:"middleware"`
	// HostSanitizationDisabled - host 정보의 정제작업 비활성화 여부 (기본값: false)
	HostSanitizationDisabled bool `yaml:"disable_host_sanitize" json:"disable_host_sanitize" default:"false"`
	// BalanceMode - Backend Loadbalacing 모드 (기본값: "", "rr" - "roundrobin", "wrr" - "weighted roundrobin", "" - random)
	BalanceMode string `yaml:"lb_mode" json:"lb_mode" default:""`

	// API 호출의 응답을 파싱하기 위한 디코더 (내부 사용)
	Decoder encoding.Decoder `yaml:"-" json:"-"`
	// URLPattern에서 파라미터 변환에 사용할 키 관리 (내부 사용)
	URLKeys []string `yaml:"-" json:"-"`
}

BackendConfig - Backend API Server 연결과 응답 처리를 위한 설정 구조

func (*BackendConfig) InitializeDefaults

func (bConf *BackendConfig) InitializeDefaults() error

InitializeDefaults - 설정 초기화

func (*BackendConfig) Validate

func (bConf *BackendConfig) Validate() error

Validate - 설정 검증

type BasicAuthConfig

type BasicAuthConfig struct {
	// Users - Admin 사용자 정보 (기본값: "admin:test@admin00")
	Users map[string]string `mapstructure:"users" default:"{\"admin\":\"test@admin00\"}"`
}

BasicAuthConfig - Admin 사용자 기본 인증 정보 형식

func (*BasicAuthConfig) InitializeDefaults

func (ba *BasicAuthConfig) InitializeDefaults() error

InitializeDefaults - 기본 값 설정

func (*BasicAuthConfig) Validate

func (ba *BasicAuthConfig) Validate() error

Validate - 설정 검증

type ClusterConfig

type ClusterConfig struct {
	// UpdateFrequency - Repository Polling 주기 (기본값: 10s, file repository가 아닌 경우)
	UpdateFrequency time.Duration `mapstructure:"update_frequency" default:"10s"`
}

ClusterConfig - Cluster 환경 정보 관리 형식

func (*ClusterConfig) InitializeDefaults

func (c *ClusterConfig) InitializeDefaults() error

InitializeDefaults - 기본 값 설정

func (*ClusterConfig) Validate

func (c *ClusterConfig) Validate() error

Validate - 설정 검증

type CredentialsConfig

type CredentialsConfig struct {
	// Algorithm - JWT 인증 알고리즘 (기본값: HS256)
	Algorithm string `mapstructure:"algorithm" default:"HS256"`
	// Secret - JWT 인증 비밀 키 (기본값: "testSecret")
	Secret string `mapstructure:"secret" default:"testSecret"`
	// TokenTimeout - JWT 인증 유효기간 (기본값: 3h)
	TokenTimeout time.Duration `mapstructure:"token_timeout" default:"3h"`
	// Basic - Admin 사용자 기본 인증 정보
	Basic *BasicAuthConfig `mapstructure:"basic"`
}

CredentialsConfig - Admin API 사용자 인증 정보 형식

func (*CredentialsConfig) InitializeDefaults

func (cc *CredentialsConfig) InitializeDefaults() error

InitializeDefaults - 기본값 설정

func (*CredentialsConfig) Validate

func (cc *CredentialsConfig) Validate() error

Validate - 설정 검증

type EndpointConfig

type EndpointConfig struct {
	// Name - 설정 식별 명
	Name string `yaml:"name" json:"name"`
	// Active - 설정 활성화 여부 (기본값: true)
	Active bool `yaml:"active" json:"active" default:"true"`
	// Endpoint - 클라이언트에 노출될 URL 패턴
	Endpoint string `yaml:"endpoint" json:"endpoint"`
	// Hosts - 전역으로 사용할 기본 Host 리스트 (기본값: "[]")
	// Backend에 지정되지 않은 경우 사용
	Hosts []*HostConfig `yaml:"hosts" json:"hosts" default:"[]"`
	// Method - Endpoint에 대한 HTTP 메서드 (GET, POST, PUT, etc) (기본값: "GET"")
	Method string `yaml:"method" json:"method" default:"GET"`
	// Timeout - Endpoint 처리 시간 (기본값: "2s", 없으면 ServiceConfig.Timeout 사용)
	Timeout time.Duration `yaml:"timeout" json:"timeout" default:"2s"`
	// CacheTTL - GET 처리에 대한 캐시 TTL 기간 (기본값: "1h")
	CacheTTL time.Duration `yaml:"cache_ttl" json:"cache_ttl" default:"1h"`
	// OutputEncoding - 반환결과 처리에 사용할 인코딩 (기본값: "json")
	OutputEncoding string `yaml:"output_encoding" json:"output_encoding" default:"json"`
	// ExceptQueryStrings - Backend 에 전달되는 Query String에서 제외할 파라미터 Key 리스트
	ExceptQueryStrings []string `yaml:"except_querystrings" json:"except_querystrings" default:"[]"`
	// ExceptHeaders - Backend 에 전달되는 Header에서 제외할 파라미터 Key 리스트
	ExceptHeaders []string `yaml:"except_headers" json:"except_headers" default:"[]"`
	// Middleware - Endpoint 단위에서 적용할 Middleware 설정
	Middleware MWConfig `yaml:"middleware" json:"middleware"`
	// HealthCheck - Health Check 설정
	HealthCheck *HealthCheck `yaml:"health_check" json:"health_check" default:"{}"`
	// Backend - Endpoint에서 호출할 Backend API 서버 호출/응답 처리 설정 리스트
	Backend []*BackendConfig `yaml:"backend" json:"backend"`

	// Bypass 처리 여부 (내부 처리용)
	IsBypass bool `yaml:"-" json:"-"`
}

EndpointConfig - 서비스 라우팅에 사용할 설정 구조

func (*EndpointConfig) AdjustValues

func (eConf *EndpointConfig) AdjustValues(sConf *ServiceConfig) error

AdjustValues - 설정 정보를 사용가능한 정보로 재 구성

func (*EndpointConfig) InheriteFromService

func (eConf *EndpointConfig) InheriteFromService(sConf *ServiceConfig)

InheriteFromService - 서비스 설정에서 상속 받을 데이터 설정

func (*EndpointConfig) InitBackendDefaults

func (eConf *EndpointConfig) InitBackendDefaults(bIdx int) error

InitBackendDefaults - Backend에 미 설정된 항목들을 기본 값으로 초기화

func (*EndpointConfig) InitBackendURLMappings

func (eConf *EndpointConfig) InitBackendURLMappings(bIdx int, inputParams map[string]interface{}) error

InitBackendURLMappings - Backend에 지정된 파라미터 정보들을 이후에 사용할 수 있도록 초기화

func (*EndpointConfig) InitializeDefaults

func (eConf *EndpointConfig) InitializeDefaults() error

InitializeDefaults - Endpoint에 미 설정된 항목들을 기본 값으로 초기화

func (*EndpointConfig) Validate

func (eConf *EndpointConfig) Validate() error

Validate - Endpoint 별 세부 필수 항목 검증

type EndpointMatchError

type EndpointMatchError struct {
	Path   string
	Method string
	Err    error
}

EndpointMatchError - Endpoint 패턴에 문제가 있을 경우에 반환할 오류 구조

func (*EndpointMatchError) Error

func (e *EndpointMatchError) Error() string

Error - Endpoint 패턴 오류 문자열 반환

type EndpointPathError

type EndpointPathError struct {
	Path   string
	Method string
}

EndpointPathError - Endpoint 경로에 문제가 있을 경우에 반환할 오류 구조

func (*EndpointPathError) Error

func (e *EndpointPathError) Error() string

Error - Endpoint 경로 오류 문자열 반환

type HealthCheck

type HealthCheck struct {
	// URL - Health Checking URL (기본값: "")
	URL string `mapstructure:"url" yaml:"url" json:"url" bson:"url"` // `mapstructure:"url" yaml:"url" json:"url" bson:"url" valid:"url"`
	// Timeout - 검증 제한 시간 (기본값: 0, 제한없음)
	Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout" bson:"timeout" default:"0s"`
}

HealthCheck - Health Check 구조

func (*HealthCheck) InitializeDefaults

func (hc *HealthCheck) InitializeDefaults() error

InitializeDefaults - 기본값 설정

func (*HealthCheck) Validate

func (hc *HealthCheck) Validate() error

Validate - 설정 검증

type HostConfig

type HostConfig struct {
	// Host - Backend Service 호스트 정보 (기본값: "", 필수)
	Host string `mapstructure:"host"`
	// Weight - Weighted Roundrobin 선택 적용할 가중치 (기본값: 0)
	Weight int `mapstructure:"weight" default:"0"`
}

HostConfig - Backend Load balancing 처리를 위한 Host 구조

func (*HostConfig) InitializeDefaults

func (h *HostConfig) InitializeDefaults() error

InitializeDefaults - 기본값 설정

func (*HostConfig) Validate

func (h *HostConfig) Validate() error

Validate - 설정 검증

type IConfig

type IConfig interface {
	InitializeDefaults()
	Validate()
}

IConfig - 설정관리용 struct의 기본 메서드 제공 인터페이스

type LBModes

type LBModes int

LBModes - Load Balancing Mode 유형 형식

const (
	// Roundrobin - Roundrobin 방식의 Load Balancing
	Roundrobin LBModes = iota
	// Weight - Weight 방식의 Load Balancing
	Weight
)

type MWConfig

type MWConfig core.StringInterfaceMap

MWConfig - Middleware 설정을 저장하기 위한 맵 구조 (개별 Middlewares에서 설정 Parsing 적용)

type NoBackendsError

type NoBackendsError struct {
	Path   string
	Method string
}

NoBackendsError - Backend가 지정되지 않았을 경우에 반환할 오류 구조

func (*NoBackendsError) Error

func (n *NoBackendsError) Error() string

Error - Backend 미지정 오류 문자열 반환

type Parser

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

Parser - Viper lib를 활용하기 위한 Parser 정의 구조 형식

func MakeParser

func MakeParser() Parser

MakeParser - Viber lib를 활용하는 설정 Parser 생성

func (Parser) Parse

func (p Parser) Parse(configFile string) (*ServiceConfig, error)

Parse - Viper lib를 이용해서 지정된 configuration 정보 파싱

type RepositoryConfig

type RepositoryConfig struct {
	// DSN - Repository 연결 문자열 (기본값: "file://./conf", "cbstore://api/restapigw/conf" 설정 가능)
	DSN string `mapstructure:"dsn" default:"file://./conf"`
}

RepositoryConfig - Routing 정보 관리 형식

func (*RepositoryConfig) InitializeDefaults

func (r *RepositoryConfig) InitializeDefaults() error

InitializeDefaults - 기본 값 설정

func (*RepositoryConfig) Validate

func (r *RepositoryConfig) Validate() error

Validate - 설정 검증

type ServiceConfig

type ServiceConfig struct {
	// 서비스 식별 명 (기본값: ”)
	Name string `mapstructure:"name"`
	// 기본 처리 시간 (기본값: 2s)
	// API의 Endpoint / Backend에 별도의 Timeout 미 지정시 사용
	Timeout time.Duration `mapstructure:"timeout" default:"2s"`
	// OutputEncoding - 반환결과 처리에 사용할 인코딩 (기본값: "json")
	OutputEncoding string `yaml:"output_encoding" json:"output_encoding" default:"json"`
	// 종료시 잔여 요청을 처리하기 위한 대기 시간 (기본 값: 0s)
	GraceTimeout time.Duration `mapstructure:"grace_timeout"`
	// 디버그모드 여부 (기본값: false)
	Debug bool `mapstructure:"debug"`
	// GET 처리에 대한 캐시 TTL 기간 (기본값: 1h)
	CacheTTL time.Duration `mapstructure:"cache_ttl" default:"1h"`
	// 서비스에서 사용할 포트 (기본값: 8000)
	Port int `mapstructure:"port" default:"8000"`
	// 설정 파일 버전 (기본값: 1)
	Version int `mapstructure:"version" default:"1"`
	// 전체 요청을 읽기 위한 최대 허용 시간 (기본값: 0, 0이면 제한없음)
	ReadTimeout time.Duration `mapstructure:"read_timeout"`
	// 전체 응답을 출력하기 위한 최대 허용 시간 (기본값: 0, , 0이면 제한없음)
	WriteTimeout time.Duration `mapstructure:"write_timeout"`
	// Keep-alive 활성 상태에서 다음 요청까지의 최대 대기 시간 (기본값: 0, 0이면 제한없음)
	IdleTimeout time.Duration `mapstructure:"idle_timeout"`
	// 요청헤더를 읽기 위한 최대 허용 시간 (기본값: 0, 0이면 제한없음)
	ReadHeaderTimeout time.Duration `mapstructure:"read_header_timeout"`
	// 유휴연결(Keep-alive)들의 최대 유지 수 (기본값: 0, 0이면 제한없음)
	MaxIdleConnections int `mapstructure:"max_idle_connections"`
	// 호스트당 유휴연결(Keep-alive)들의 최대 유지 수 (기본값: 250, 0이면 250 사용)
	MaxIdleConnectionsPerHost int `mapstructure:"max_idle_connections_per_host" default:"250"`
	// 유휴연결(Keep-alive)의 최대 유효시간 (기본값: , 0이면 ReadTimeout 사용, 이것도 0이면 ReadHeaderTimeout 사용)
	IdleConnectionTimeout time.Duration `mapstructure:"idle_connection_timeout"`
	// 서비스 단위에서 적용할 Middleware 설정
	Middleware MWConfig `mapstructure:"middleware"`
	// 서비스에서 사용할 TLS 설정
	TLS *TLSConfig `mapstructure:"tls"`
	// TCP 연결에 사용할 대기시간 (기본값:0, 0이면 no timeout)
	DialerTimeout time.Duration `mapstructure:"dialer_timeout"`
	// 활성연결의 유지 시간 (기본값:없음, 0 지정시는 Keep-alive 비활성화)
	DialerKeepAlive time.Duration `mapstructure:"dialer_keep_alive"`
	// DualStack 활성화 시에 실패한 연결을 재 처리하는데 필요한 대기 시간 (기본값: 0, 0이면 no delay)
	DialerFallbackDelay time.Duration `mapstructure:"dialer_fallback_delay"`
	// 압축 비활성 여부 (기본값: false)
	DisableCompression bool `mapstructure:"disable_compression"`
	// 다른 요청에 TCP 연결을 재 사용하는 것의 비활성 여부 (기본값: false)
	DisableKeepAlives bool `mapstructure:"disable_keep_alives"`
	// Request 처리 후에 서버의 Response Header 정보를 기다리는 시간 (기본값: 0, 0이면 no timeout)
	ResponseHeaderTimeout time.Duration `mapstructure:"response_header_timeout"`
	// 서버의 첫번째 Response Header 정보를 기다리는 시간 (기본값: 0, 0이면 no timeout)
	ExpectContinueTimeout time.Duration `mapstructure:"expect_continue_timeout"`
	// DisableStrictREST - REST 강제 규칙 비활성화 여부 (기본값: false)
	DisableStrictREST bool `mapstructure:"disable_strict_rest"`
	// RouterEngine - Route 처리에 사용할 Engine 지정 (기본값: gin)
	RouterEngine string `mapstructure:"router_engine" default:"gin"`

	// Admin API 설정
	Admin *AdminConfig `mapstructure:"admin"`
	// Repository 설정
	Repository *RepositoryConfig `mapstructure:"repository"`
	// Cluster 설정
	Cluster *ClusterConfig `mapstructure:"cluster"`
}

ServiceConfig - REST API Gateway 운영에 필요한 서비스 설정 형식

func (*ServiceConfig) Init

func (sConf *ServiceConfig) Init() error

Init - 설정에 대한 검사 및 초기화

func (*ServiceConfig) InitializeDefaults

func (sConf *ServiceConfig) InitializeDefaults() error

InitializeDefaults - 서비스 설정 초기화

func (*ServiceConfig) Validate

func (sConf *ServiceConfig) Validate() error

Validate - 설정 검증

type TLSConfig

type TLSConfig struct {
	// Port - 기본 포트 (기본값: 8443)
	Port int `mapstructure:"port"`
	// Redirect - TLS 리다이렉션 (기본값: true)
	Redirect bool `mapstructure:"redirect" default:"true"`
	// IsDiabled - TLS 비활성화 여부 (기본값: false)
	IsDisabled bool `mapstructure:"disabled"`
	// PublicKey - 공개 키 경로 (기본값: "")
	PublicKey string `mapstructure:"public_key"`
	// PrivateKey - 비밀 키 경로 (기본값: "")
	PrivateKey string `mapstructure:"private_key"`
	// MinVersion - TLS 최소 버전 (기본값: VersionTLS12)
	MinVersion string `mapstructure:"min_version"`
	// MaxVersion - TLS 최대 버전 (기본값: VersionTLS12)
	MaxVersion string `mapstructure:"max_version"`
	// Curve 설정들의 리스트 (use 23 for CurveP256, 24 for CurveP384 or 25 for CurveP521, 기본값: 모두 사용)
	CurvePreferences []uint16 `mapstructure:"curve_preferences"`
	// PreferServerCipherSuites - 서버에서 사용을 강제하는 Cipher Suite 리스트 (기본값: false)
	PreferServerCipherSuites bool `mapstructure:"prefer_server_cipher_suites"`
	// CipherSuites - Chiper Suite 리스트 (기본값: defaultCipherSuites 리스트 사용)
	CipherSuites []uint16 `mapstructure:"cipher_suites"`
}

TLSConfig - 서비스에서 사용할 TLS 설정 구조

func (*TLSConfig) InitializeDefaults

func (t *TLSConfig) InitializeDefaults() error

InitializeDefaults - 기본 값 설정

func (*TLSConfig) IsHTTPS

func (t *TLSConfig) IsHTTPS() bool

IsHTTPS - HTTPS 활성화 여부 검증

func (*TLSConfig) Validate

func (t *TLSConfig) Validate() error

Validate - 설정 검증

type UndefinedOutputParamError

type UndefinedOutputParamError struct {
	Endpoint     string
	Method       string
	Backend      int
	InputParams  []string
	OutputParams []string
	Param        string
}

UndefinedOutputParamError - IN 파라미터에 대한 OUT 파라미터가 지정되지 않았을 경우에 반환할 오류 구조

func (*UndefinedOutputParamError) Error

func (u *UndefinedOutputParamError) Error() string

Error - Output 파라미터 미지정 오류 문자열 반환

type UnsupportedVersionError

type UnsupportedVersionError struct {
	Have int
	Want int
}

UnsupportedVersionError - 설정 초기화 과정에서 버전 검증을 통해 반환할 오류 구조

func (*UnsupportedVersionError) Error

func (u *UnsupportedVersionError) Error() string

Error - 비 호환 버전에 대한 오류 문자열 반환

type WrongNumberOfParamsError

type WrongNumberOfParamsError struct {
	Endpoint     string
	Method       string
	Backend      int
	InputParams  []string
	OutputParams []string
}

WrongNumberOfParamsError - 파라미터의 IN/OUT 갯수가 다를 경우에 반환할 오류 구조

func (*WrongNumberOfParamsError) Error

func (w *WrongNumberOfParamsError) Error() string

Error - IN/OUT 파라미터 갯수 문제 오류 문자열 반환

Jump to

Keyboard shortcuts

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