default.rb 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #
  2. # Cookbook Name:: dovecot
  3. # Recipe:: default
  4. #
  5. # Copyright 2013, Onddo Labs, Sl.
  6. #
  7. # Licensed under the Apache License, Version 2.0 (the "License");
  8. # you may not use this file except in compliance with the License.
  9. # You may obtain a copy of the License at
  10. #
  11. # http://www.apache.org/licenses/LICENSE-2.0
  12. #
  13. # Unless required by applicable law or agreed to in writing, software
  14. # distributed under the License is distributed on an "AS IS" BASIS,
  15. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. # See the License for the specific language governing permissions and
  17. # limitations under the License.
  18. #
  19. #
  20. # system users
  21. #
  22. user node['dovecot']['user'] do
  23. comment 'Dovecot mail server'
  24. home node['dovecot']['lib_path']
  25. shell '/bin/false'
  26. system true
  27. end
  28. group node['dovecot']['group'] do
  29. members [ node['dovecot']['user'] ]
  30. system true
  31. append true
  32. end
  33. #
  34. # required directories
  35. #
  36. directory node['dovecot']['lib_path'] do
  37. owner node['dovecot']['conf_files_user']
  38. group node['dovecot']['conf_files_group']
  39. mode '00755'
  40. end
  41. conf_files_dirs = []
  42. node['dovecot']['conf_files'].each do |conf_type, conf_files|
  43. conf_files_dirs += conf_files.map{ |f| ::File.dirname(f) }.uniq
  44. end
  45. conf_files_dirs.uniq!
  46. conf_files_dirs.each do |dir|
  47. directory dir do
  48. owner 'root'
  49. group node['dovecot']['group']
  50. mode '00755'
  51. only_if do dir != '.' end
  52. end
  53. end
  54. #
  55. # config files
  56. #
  57. node['dovecot']['conf_files'].each do |type, conf_files|
  58. conf_files.each do |conf_file|
  59. template conf_file do
  60. path "#{node['dovecot']['conf_path']}/#{conf_file}"
  61. source "#{conf_file}.erb"
  62. owner node['dovecot']['conf_files_user']
  63. group node['dovecot']['conf_files_group']
  64. mode node['dovecot']['conf_files_mode']
  65. variables(
  66. :auth => node['dovecot']['auth'],
  67. :protocols => node['dovecot']['protocols'],
  68. :services => node['dovecot']['services'],
  69. :plugins => node['dovecot']['plugins'],
  70. :namespaces => node['dovecot']['namespaces'],
  71. :conf => node['dovecot']['conf']
  72. )
  73. notifies :reload, 'service[dovecot]'
  74. action :nothing
  75. end
  76. end
  77. end
  78. #
  79. # packages
  80. #
  81. case node['platform']
  82. when 'redhat','centos','scientific','fedora','suse','amazon' then
  83. # core, imap, pop3, lmtp, ldap, sqlite
  84. package 'dovecot' do
  85. [ 'core', 'imap', 'pop3', 'lmtp', 'ldap' ].each do |conf_type|
  86. node['dovecot']['conf_files'][conf_type].each do |conf_file|
  87. notifies :create, "template[#{conf_file}]"
  88. end
  89. end
  90. end
  91. # sieve
  92. package 'dovecot-pigeonhole' do
  93. only_if do Dovecot::Plugins.required?('sieve', node['dovecot']) end
  94. node['dovecot']['conf_files']['sieve'].each do |conf_file|
  95. notifies :create, "template[#{conf_file}]"
  96. end
  97. end
  98. when 'debian', 'ubuntu' then
  99. # core
  100. package 'dovecot-core' do
  101. node['dovecot']['conf_files']['core'].each do |conf_file|
  102. notifies :create, "template[#{conf_file}]"
  103. end
  104. end
  105. package 'dovecot-gssapi'
  106. # imap
  107. package 'dovecot-imapd' do
  108. only_if do Dovecot::Protocols.enabled?('imap', node['dovecot']['protocols']) end
  109. node['dovecot']['conf_files']['imap'].each do |conf_file|
  110. notifies :create, "template[#{conf_file}]"
  111. end
  112. end
  113. # pop3
  114. package 'dovecot-pop3d' do
  115. only_if do Dovecot::Protocols.enabled?('pop3', node['dovecot']['protocols']) end
  116. node['dovecot']['conf_files']['pop3'].each do |conf_file|
  117. notifies :create, "template[#{conf_file}]"
  118. end
  119. end
  120. # lmtp
  121. package 'dovecot-lmtpd' do
  122. only_if do Dovecot::Protocols.enabled?('lmtp', node['dovecot']['protocols']) end
  123. node['dovecot']['conf_files']['lmtp'].each do |conf_file|
  124. notifies :create, "template[#{conf_file}]"
  125. end
  126. end
  127. # sieve
  128. package 'dovecot-sieve' do
  129. only_if do Dovecot::Plugins.required?('sieve', node['dovecot']) end
  130. node['dovecot']['conf_files']['sieve'].each do |conf_file|
  131. notifies :create, "template[#{conf_file}]"
  132. end
  133. end
  134. package 'dovecot-managesieved' do
  135. only_if do Dovecot::Plugins.required?('sieve', node['dovecot']) end
  136. end
  137. # ldap
  138. package 'dovecot-ldap' do
  139. only_if do node['dovecot']['auth']['ldap'].kind_of?(Array) and node['dovecot']['auth']['ldap'].length > 0 end
  140. node['dovecot']['conf_files']['ldap'].each do |conf_file|
  141. notifies :create, "template[#{conf_file}]"
  142. end
  143. end
  144. # sqlite
  145. package 'dovecot-sqlite' do
  146. only_if do node['dovecot']['conf']['sql']['driver'] == 'sqlite' end
  147. end
  148. else
  149. log('Unsupported platform, trying to guess dovecot packages') { level :warn }
  150. package 'dovecot'
  151. end
  152. package 'dovecot-mysql' do
  153. only_if do node['dovecot']['conf']['sql']['driver'] == 'mysql' end
  154. end
  155. package 'dovecot-pgsql' do
  156. only_if do node['dovecot']['conf']['sql']['driver'] == 'pgsql' end
  157. end
  158. #
  159. # services
  160. #
  161. service 'dovecot' do
  162. supports :restart => true, :reload => true, :status => true
  163. action [ :enable, :start ]
  164. end