Browse Source

dovecot-db.conf.ext.erb and dovecot-dict-sql.conf.ext.erb templates using variables

Xabier de Zuazo 11 years ago
parent
commit
a5695504c3

+ 28 - 0
attributes/conf-dict-sql.rb

@@ -0,0 +1,28 @@
+
+default['dovecot']['conf']['dict_sql']['connect'] = nil
+# default['dovecot']['conf']['dict_sql']['connect'] = 'host=localhost dbname=mails user=testuser password=pass'
+default['dovecot']['conf']['dict_sql']['maps'] = nil
+# default['dovecot']['conf']['dict_sql']['maps'] = [
+#   {
+#     'pattern' => 'priv/quota/storage',
+#     'table' => 'quota',
+#     'username_field' => 'username',
+#     'value_field' => 'bytes',
+#   },
+#   {
+#     'pattern' => 'priv/quota/messages',
+#     'table' => 'quota',
+#     'username_field' => 'username',
+#     'value_field' => 'messages',
+#   },
+#   {
+#     'pattern' => 'shared/expire/$user/$mailbox',
+#     'table' => 'expires',
+#     'value_field' => 'expire_stamp',
+#     'fields' => {
+#       'username' => '$user',
+#       'mailbox' => '$mailbox',
+#     },
+#   },
+# ]
+

+ 28 - 0
libraries/conf.rb

@@ -147,6 +147,34 @@ module Dovecot
       )
     end
 
+    def self.map(map)
+
+    template =
+'map {
+<%     @map.sort.each do |k, v|
+         if v.kind_of?(Hash)
+-%>
+  <%=      k %> {
+<%
+           v.sort.each do |k2, v2|
+-%>
+    <%=      k2 %> = <%= @Dovecot_Conf.value(v2) %>
+<%         end -%>
+  }
+<%       else -%>
+  <%=      k %> = <%= @Dovecot_Conf.value(v) %>
+<%       end
+       end
+-%>
+}'
+
+      eruby = Erubis::Eruby.new(template)
+      eruby.evaluate(
+        :map => map,
+        :Dovecot_Conf => Dovecot::Conf
+      )
+    end
+
   end
 end
 

+ 6 - 0
templates/default/dovecot-db.conf.ext.erb

@@ -2,6 +2,11 @@
 # to point to this file.
 # http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/db_config.html
 
+<% if @conf['db'].kind_of?(Hash) -%>
+<%   @conf['db'].sort.each do |k, v| -%>
+<%=    k %> <%= Dovecot::Conf.value(v) %>
+<%   end -%>
+<% else -%>
 # Maximum number of simultaneous transactions.
 set_tx_max 1000
 
@@ -9,3 +14,4 @@ set_tx_max 1000
 #set_lk_max_locks 1000
 #set_lk_max_lockers 1000
 #set_lk_max_objects 1000
+<% end -%>

+ 10 - 0
templates/default/dovecot-dict-sql.conf.ext.erb

@@ -1,4 +1,8 @@
+<% unless @conf['dict_sql']['connect'].nil? -%>
+connect = <%= Dovecot::Conf.value(@conf['dict_sql']['connect']) %>
+<% else -%>
 #connect = host=localhost dbname=mails user=testuser password=pass
+<% end -%>
 
 # CREATE TABLE quota (
 #   username varchar(100) not null,
@@ -7,6 +11,11 @@
 #   primary key (username)
 # );
 
+<% if @conf['dict_sql']['maps'].kind_of?(Array) -%>
+<%   @conf['dict_sql']['maps'].each do |map| -%>
+<%=    Dovecot::Conf.map(map) %>
+<%   end -%>
+<% else -%>
 map {
   pattern = priv/quota/storage
   table = quota
@@ -37,3 +46,4 @@ map {
     mailbox = $mailbox
   }
 }
+<% end -%>