VCL compiler changes

Poul-Henning Kamp phk at phk.freebsd.dk
Sat Mar 24 23:29:30 CET 2007


Those of you subscribed to the subversion commitlogs will have noticed
that I am working on the VCL compiler right now.

The two most recent changes is that multiple definitions of the
vcl methods are concatenated so that

	sub vcl_pipe {
		foo;
	}
	sub vcl_pipe {
		bar;
	}

is the same as

	sub vcl_pipe {
		foo;
		bar;
	}

Together with the other change, that adds

	include "somefile" ;

to the syntax, this should allow us to implement a sort of VCL
library which can easily be shared.

For instance, a vcl file implementing the squid purge functionality
could look like:

	sub vcl_recv {
		if (req.request == "PURGE") {
			lookup;
		}
	}

	sub vcl_hit {
		if (req.request == "PURGE") {
			set obj.ttl = 0s;
			error 200 "Purged.";
		}
	}

	sub vcl_miss {
		if (req.request == "PURGE") {
			error 404 "Not in cache.";
		}
	}

Wanting to apply an acl to the PURGE functionality, it could be
called from a VCL program as such:


	sub vcl_recv {
		if (req.request == "PURGE") {
			if (!client.ip ~ acl_purge) {
				error 405 "Not allowed.";
			}
		}
	}

	include "squid_purge.vcl";


If we come up with a set of such generally useful VCL snippets,
we could decide to add the "library" to the binary so tha tone
could just write:

	include "@squid_purge"

and have The Right Thing Happen.

As always: feedback and input most welcome!

Poul-Henning

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.



More information about the varnish-misc mailing list