3

I have repetitive code in my vcl and I want to create custom function without embedding inline C code. Is it possible?

halfer
  • 19,824
  • 17
  • 99
  • 186

1 Answers1

7

You can define a custom subroutine like this

sub my_subroutine {
  ... 
}

and call it like this:

call my_subroutine;

From: http://book.varnish-software.com/4.0/chapters/VCL_Basics.html

Subroutines in VCL take neither arguments nor return values. Each subroutine terminates by calling return (action), where action is a keyword that indicates the desired outcome. Subroutines may inspect and manipulate HTTP header fields and various other aspects of each request. Subroutines instruct how requests are handled.

Subroutine example:

sub pipe_if_local { if (client.ip ~ local) { return (pipe); } }

To call a subroutine, use the call keyword followed by the subroutine’s name:

call pipe_if_local;

Varnish has built-in subroutines that are hook into the Varnish workflow. These built-in subroutines are all named vcl_*. Your own subroutines cannot start their name with vcl_.

Ronald
  • 2,864
  • 3
  • 25
  • 36