Üblicherweise wird in einem zc.recipe.macro-Abschnitt ein Macro mit den Parametern dieses Abschnitts aufgerufen. Dies läßt sich anschaulich an einer Apache-Konfiguration zeigen.
Apache-Konfiguration
[buildout] parts = … apache [apache] recipe = zc.recipe.macro macro = apache-macro result-recipe=collective.recipe.template targets = my-apache:mysite-parameters
Im folgenden werden dann die Abschnitte [apache-macro] und [mysite-parameters] definiert:
[apache-macro] domain=$${:domain} host=$${:host} port=$${:port} input = ${buildout:directory}/template/apache-vhost.in output = ${buildout:parts-directory}/$${:__name__} [mysite-parameters] domain=mysite.org host=83.223.91.163 port=8080
Die Datei templates/apache-vhost.in sieht z.B. so aus:
${host} ${port} ${domain}
Das Ergebnis ist dann:
[apache] recipe = zc.recipe.macro:empty result-sections = my-apache [my-apache] recipe = collective.recipe.template domain = mysite.org host = 83.223.91.163 input = /home/veit/myproject/template/apache-vhost.in output = /home/veit/myproject/parts/my-apache port = 8080
Das Rezept zc.recipe.macro ändert sich zu zc.recipe.macro:empty, hat jedoch keine Wirkung mehr. Dennoch muss der Abschnitt vorhanden sein, da er in [buildout] als Abschnitt angegeben wurde.
Und parts/my-apache sieht schließlich so aus:
83.223.91.163 8080 mysite.org
Jede weitere Site kann dann einfach folgendermaßen eingetragen werden:
[apache] … targets = … vs-apache:vs-parameters … [vs-parameters] domain=veit-schiele.de host=83.223.91.163 port=8090
awstats-Konfiguration
Analog kann mit tc.recipe.macro auch awstats konfiguriert werden:
[buildout] parts = … mysite-awstats [awstats] recipe = zc.recipe.macro macro = awstats-macro result-recipe=collective.recipe.template targets = mysite-awstats:mysite-parameters vs-awstats:vs-parameters [awstats-macro] domain=$${:domain} host=$${:host} port=$${:port} input = ${buildout:directory}/template/awstats-conf.in output = ${buildout:parts-directory}/$${:__name__}
Die Datei templates/awstats-conf.in sieht z.B. so aus:
${host} ${port} ${domain}
Das Ergebnis ist dann:
[buildout] parts = … awstats mysite-awstats vs-awstats … [awstats] recipe = zc.recipe.macro:empty result-sections = mysite-awstats vs-awstats [mysite-awstats] domain = mysite.org host = 83.223.91.163 input = /home/veit/myproject/template/awstats-conf.in output = /home/veit/myproject/parts/mysite-awstats port = 8080 recipe = collective.recipe.template [vs-awstats] domain = veit-schiele.de host = 83.223.91.163 input = /home/veit/myproject/template/awstats-conf.in output = /home/veit/myproject/parts/vs-awstats port = 8090 recipe = collective.recipe.template
Und parts/my-awstats sieht schließlich so aus:
83.223.91.163 8080 mysite.org