It is now possible to write dummy filters in lua. Only the basis to declare such filters has been added for now. There is no way to declare callbacks to filter anything. Lua filters are for now empty nutshells. To do so, core.register_filter() must be called, with 3 arguments, the filter's name (as it appears in HAProxy config), the lua class that will be used to instantiate filters and a function to parse arguments passed on the filter line in HAProxy configuration file. The lua filter class must at least define the method new(), without any extra args, to create new instances when streams are created. If this method is not found, the filter will be ignored. Here is a template to declare a new Lua filter: // haproxy.conf global lua-load /path/to/my-filter.lua ... frontend fe ... filter lua.my-lua-filter arg1 arg2 arg3 filter lua.my-lua-filter arg4 arg5 // my-filter.lua MyFilter = {} MyFilter.id = "My Lua filter" -- the filter ID (optional) MyFilter.flags = filter.FLT_CFG_FL_HTX -- process HTX streams (optional) MyFilter.__index = MyFilter function MyFilter:new() flt = {} setmetatable(flt, MyFilter) -- Set any flt fields. self.args can be used flt.args = self.args return flt -- The new instance of Myfilter end core.register_filter("my-lua-filter", MyFilter, function(filter, args) -- process <args>, an array of strings. For instance: filter.args = args return filter end) In this example, 2 filters are declared using the same lua class. The parsing function is called for both, with its own copy of the lua class. So each filter will be unique. The global object "filter" exposes some constants and flags, and later some functions, to help writting filters in lua. Internally, when a lua filter is instantiated (so when new() method is called), 2 lua contexts are created, one for the request channel and another for the response channel. It is a prerequisite to let some callbacks yield on one side independently on the other one. There is no documentation for now.
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)
Description
Languages
Shell
100%