3.3.3.6. 사용 예
다음은 HAProxy 템플릿 파일을 기반으로 하는 간단한 템플릿입니다.
코멘트로 시작하십시오.
{{/*
Here is a small example of how to work with templates
taken from the HAProxy template file.
*/}}
{{/*
Here is a small example of how to work with templates
taken from the HAProxy template file.
*/}}
템플릿에서 원하는 수의 출력 파일을 만들 수 있습니다. define 구문을 사용하여 출력 파일을 만듭니다. 파일 이름은 정의할 인수로 지정되며, 내부에 있는 블록은 일치하는 끝까지 모두 파일의 내용으로 작성됩니다.
{{ define "/var/lib/haproxy/conf/haproxy.config" }}
global
{{ end }}
{{ define "/var/lib/haproxy/conf/haproxy.config" }}
global
{{ end }}
위의 는 global 을 /var/lib/haproxy/conf/haproxy.config 파일에 복사한 다음 파일을 닫습니다.
환경 변수를 기반으로 로깅을 설정합니다.
{{ with (env "ROUTER_SYSLOG_ADDRESS" "") }}
log {{.}} {{env "ROUTER_LOG_FACILITY" "local1"}} {{env "ROUTER_LOG_LEVEL" "warning"}}
{{ end }}
{{ with (env "ROUTER_SYSLOG_ADDRESS" "") }}
log {{.}} {{env "ROUTER_LOG_FACILITY" "local1"}} {{env "ROUTER_LOG_LEVEL" "warning"}}
{{ end }}
env 함수는 환경 변수의 값을 추출합니다. 환경 변수가 정의되지 않았거나 nil 이 없으면 두 번째 인수가 반환됩니다.
with 구문을 사용하여 블록 내에서 "."( 점)의 값을 와 함께 에 인수로 제공됩니다. 를 사용하여 nil 에 대한 Dot를 테스트합니다. nil 이 아니면 절이 종료 까지 처리됩니다. 위의 경우 ROUTER_SYSLOG_ADDRESS 에 /var/log/msg, ROUTER_LOG_FACILITY 가 정의되지 않은 경우 ROUTER_LOG_LEVEL 에 info 가 포함되어 있다고 가정합니다. 다음은 출력 파일에 복사됩니다.
log /var/log/msg local1 info
log /var/log/msg local1 info
허용되는 각 경로는 구성 파일에서 행 생성을 종료합니다. 범위를 사용하여 허용된 경로를 통과합니다.
{{ range $cfgIdx, $cfg := .State }}
backend be_http_{{$cfgIdx}}
{{end}}
{{ range $cfgIdx, $cfg := .State }}
backend be_http_{{$cfgIdx}}
{{end}}
.state 는 ServiceAliasConfig 의 맵입니다. 키는 경로 이름입니다. 범위는 맵을 통과하며, 통과할 때마다 키로 $cfgIdx 를 설정하고 경로를 설명하는 ServiceAliasConfig 를 가리키도록 $cfg Idx를 설정합니다. myroute 라는 두 개의 경로와 hisroute 가 있는 경우 위의 경로는 다음을 출력 파일에 복사합니다.
backend be_http_myroute backend be_http_hisroute
backend be_http_myroute
backend be_http_hisroute
Route Annotations, $cfg.Annotations 는 주석 이름이 키이고 content 문자열이 값으로 있는 맵이기도 합니다. 경로에는 원하는 만큼 많은 주석이 있을 수 있으며, 이 사용은 템플릿 작성자가 정의합니다. 사용자는 주석을 경로에 코딩하고 템플릿 작성자는 주석을 처리하도록 HAProxy 템플릿을 사용자 지정합니다.
일반적인 사용은 주석을 인덱싱하여 값을 가져오는 것입니다.
{{$balanceAlgo := index $cfg.Annotations "haproxy.router.openshift.io/balance"}}
{{$balanceAlgo := index $cfg.Annotations "haproxy.router.openshift.io/balance"}}
인덱스는 지정된 주석에 대한 값을 추출합니다(있는 경우). 따라서 $balanceAlgo 에는 주석 또는 nil 과 연결된 문자열이 포함됩니다. 위와 같이nil 이 아닌 문자열을 테스트하고 구문을 사용하여 해당 문자열을 작동할 수 있습니다.
{{ with $balanceAlgo }}
balance $balanceAlgo
{{ end }}
{{ with $balanceAlgo }}
balance $balanceAlgo
{{ end }}
여기서 $balanceAlgo 가 nil 이 아닌 경우$balanceAlgo 가 출력 파일에 복사됩니다.
두 번째 예에서 주석에 설정된 시간 제한 값에 따라 서버 시간 초과를 설정합니다.
$value := index $cfg.Annotations "haproxy.router.openshift.io/timeout"
$value := index $cfg.Annotations "haproxy.router.openshift.io/timeout"
이제 $ 값을 평가하여 올바르게 구성된 문자열이 포함되어 있는지 확인할 수 있습니다. matchPattern 함수는 정규 표현식을 수락하고 인수가 표현식을 만족하는 경우 true 를 반환합니다.
matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value
matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value
이 경우 5000ms 가 허용되지만 7y 는 허용되지 않습니다. 결과는 테스트에서 사용할 수 있습니다.
{{if (matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value) }}
timeout server {{$value}}
{{ end }}
{{if (matchPattern "[1-9][0-9]*(us\|ms\|s\|m\|h\|d)?" $value) }}
timeout server {{$value}}
{{ end }}
토큰과 일치시키는 데 사용할 수도 있습니다.
matchPattern "roundrobin|leastconn|source" $balanceAlgo
matchPattern "roundrobin|leastconn|source" $balanceAlgo
또는 matchValues 를 사용하여 토큰과 일치시킬 수 있습니다.
matchValues $balanceAlgo "roundrobin" "leastconn" "source"
matchValues $balanceAlgo "roundrobin" "leastconn" "source"