mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-14 15:34:35 +00:00
b8bd1ee893
set var <name> <expression> Allows to set or overwrite the process-wide variable 'name' with the result of expression <expression>. Only process-wide variables may be used, so the name must begin with 'proc.' otherwise no variable will be set. The <expression> may only involve "internal" sample fetch keywords and converters even though the most likely useful ones will be str('something') or int(). Note that the command line parser doesn't know about quotes, so any space in the expression must be preceeded by a backslash. This command requires levels "operator" or "admin". This command is only supported on a CLI connection running in experimental mode (see "experimental-mode on"). Just like for "set-var" in the global section, the command uses a temporary dummy proxy to create a temporary "set-var(name)" rule to assign the value. The reg test was updated to verify that an updated global variable is properly reflected in subsequent HTTP responses.
79 lines
2.5 KiB
Plaintext
79 lines
2.5 KiB
Plaintext
varnishtest "Test a few set-var() in global, tcp and http rule sets, at different scopes"
|
|
#REQUIRE_VERSION=2.4
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
haproxy h1 -conf {
|
|
global
|
|
set-var proc.int12 int(12)
|
|
set-var proc.int5 str(60),div(proc.int12)
|
|
set-var proc.str str("this is")
|
|
set-var proc.str str(""),concat("",proc.str," a string")
|
|
set-var proc.uuid uuid()
|
|
|
|
defaults
|
|
mode http
|
|
timeout connect 1s
|
|
timeout client 1s
|
|
timeout server 1s
|
|
|
|
frontend fe1
|
|
bind "fd@${fe1}"
|
|
tcp-request session set-var(sess.int5) var(proc.int5)
|
|
tcp-request session set-var(proc.int5) var(proc.int5),add(sess.int5) ## proc. becomes 10
|
|
http-request set-var(req.int5) var(sess.int5)
|
|
http-request set-var(sess.int5) var(sess.int5),add(req.int5) ## sess. becomes 10 first time, then 15...
|
|
http-request return status 200 hdr x-var "proc=%[var(proc.int5)] sess=%[var(sess.int5)] req=%[var(req.int5)] str=%[var(proc.str)] uuid=%[var(proc.uuid)]"
|
|
} -start
|
|
|
|
haproxy h1 -cli {
|
|
send "get var proc.int5"
|
|
expect ~ "^proc.int5: type=sint value=<5>$"
|
|
}
|
|
|
|
client c1 -connect ${h1_fe1_sock} {
|
|
txreq -req GET -url /req1_1
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-var ~ "proc=10 sess=10 req=5 str=this is a string uuid=[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*"
|
|
|
|
txreq -req GET -url /req1_2
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-var ~ "proc=10 sess=20 req=10 str=this is a string uuid=[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*"
|
|
} -run
|
|
|
|
haproxy h1 -cli {
|
|
send "get var proc.int5"
|
|
expect ~ "^proc.int5: type=sint value=<10>$"
|
|
}
|
|
|
|
client c2 -connect ${h1_fe1_sock} {
|
|
txreq -req GET -url /req2_1
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-var ~ "proc=20 sess=20 req=10 str=this is a string uuid=[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*"
|
|
|
|
txreq -req GET -url /req2_2
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-var ~ "proc=20 sess=40 req=20 str=this is a string uuid=[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*"
|
|
} -run
|
|
|
|
haproxy h1 -cli {
|
|
send "get var proc.int5"
|
|
expect ~ "^proc.int5: type=sint value=<20>$"
|
|
}
|
|
|
|
haproxy h1 -cli {
|
|
send "experimental-mode on; set var proc.str str(updated)"
|
|
expect ~ .*
|
|
}
|
|
|
|
client c3 -connect ${h1_fe1_sock} {
|
|
txreq -req GET -url /req3_1
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-var ~ "proc=40 sess=40 req=20 str=updated uuid=[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*"
|
|
} -run
|