Puppet Class: odoo

Defined in:
manifests/init.pp

Summary

Configure Odoo

Overview

Parameters:

  • version (Enum['10.0', '11.0', '12.0', '13.0', '14.0', '15.0', 'system']) (defaults to: undef)

    The version of odoo to install

  • wkhtmltopdf (Optional[Enum['wkhtmltox']]) (defaults to: undef)

    How to manage wkhtmltopdf

  • manage_package (Boolean) (defaults to: true)

    Manage the odoo package

  • package_name (String[1]) (defaults to: 'odoo')

    The name of the odoo package

  • package_ensure (String) (defaults to: 'present')

    Ensure value for the odoo package

  • package_mark (Optional[Enum['hold', 'none']]) (defaults to: undef)

    Mark value for the odoo package

  • admin_passwd (Optional[Sensitive]) (defaults to: undef)

    Password that allows database operations

  • csv_internal_sep (Optional[String]) (defaults to: undef)

    Legacy (now unused)

  • reportgz (Optional[String]) (defaults to: undef)

    Legacy (now unused)

  • without_demo (Optional[Variant[Array[String],Boolean]]) (defaults to: undef)

    Disable loading demo data for modules to be installed (comma-separated, use "all" for all modules).

  • import_partial (Optional[String]) (defaults to: undef)

    Use this for big data importation, if it crashes you will be able to continue at the current state. Provide a filename to store intermediate importation states.

  • pidfile (Optional[Stdlib::Absolutepath]) (defaults to: undef)

    File where the server pid will be stored

  • addons_path (Optional[Array[String]]) (defaults to: undef)

    Additional addons paths

  • upgrades_paths (Optional[Array[String]]) (defaults to: undef)

    Additional upgrades path

  • server_wide_modules (Optional[Array[String]]) (defaults to: undef)

    List of server-wide modules

  • data_dir (Optional[String]) (defaults to: undef)

    Directory where to store Odoo data

  • http_interface (Optional[String]) (defaults to: undef)

    Listen interface address for HTTP services

  • http_port (Optional[Integer]) (defaults to: undef)

    Listen port for the main HTTP service

  • longpolling_port (Optional[Integer]) (defaults to: undef)

    Listen port for the longpolling HTTP service

  • http_enable (Optional[Boolean]) (defaults to: undef)

    Disable the HTTP and Longpolling services entirely

  • proxy_mode (Optional[Boolean]) (defaults to: undef)

    Activate reverse proxy WSGI wrappers

  • dbfilter (Optional[String]) (defaults to: undef)

    Regular expressions for filtering available databases for Web UI

  • test_enable (Optional[Boolean]) (defaults to: undef)

    Enable unit tests

  • test_file (Optional[String]) (defaults to: undef)

    Launch a python test file

  • test_tags (Optional[Array[String]]) (defaults to: undef)

    List of spec to filter which tests to execute

  • screencasts (Optional[String]) (defaults to: undef)

    Screencasts will go in $screencasts/<db_name>/screencasts

  • screenshots (Optional[String]) (defaults to: undef)

    Screenshots will go in $screenshots/<db_name>/screenshots

  • logfile (Optional[Stdlib::Absolutepath]) (defaults to: undef)

    File where the server log will be stored

  • syslog (Optional[Boolean]) (defaults to: undef)

    Send the log to the syslog server

  • log_handler (Optional[String]) (defaults to: undef)

    Setup a handler of PREFIX:LEVEL

  • log_db (Optional[String]) (defaults to: undef)

    Logging database

  • log_db_level (Optional[String]) (defaults to: undef)

    Logging database level

  • log_level (Optional[Enum[ 'info', 'debug_rpc', 'warn', 'test', 'critical', 'debug_sql', 'error', 'debug', 'debug_rpc_answer', 'notset', ]]) (defaults to: undef)

    Level of the logging

  • email_from (Optional[String]) (defaults to: undef)

    SMTP email address for sending email

  • smtp_server (Optional[String]) (defaults to: undef)

    SMTP server for sending email

  • smtp_port (Optional[Integer]) (defaults to: undef)

    SMTP port

  • smtp_ssl (Optional[Boolean]) (defaults to: undef)

    Encrypt SMTP connections with StARTTLS

  • smtp_user (Optional[String]) (defaults to: undef)

    SMTP username for sending email

  • smtp_password (Optional[Sensitive]) (defaults to: undef)

    SMTP password for sending email

  • db_name (Optional[String]) (defaults to: undef)

    Database name

  • db_user (String[1]) (defaults to: 'odoo')

    Database user name

  • db_password (Variant[Boolean[false],Sensitive]) (defaults to: false)

    Database password

  • pg_path (Optional[String]) (defaults to: undef)

    PostgreSQL executable path

  • db_host (Variant[Boolean[false],String]) (defaults to: false)

    Database host

  • db_port (Variant[Boolean[false],Integer]) (defaults to: false)

    Database port

  • db_sslmode (Optional[Enum[ 'disable', 'allow', 'prefer', 'require', 'verify-ca', 'verify-full', ]]) (defaults to: undef)

    Database ssl connection mode

  • db_maxconn (Optional[Integer]) (defaults to: undef)

    Maximum number of physical connections to PostgreSQL

  • db_template (Optional[String]) (defaults to: undef)

    Custom database template to create a new database

  • language (Optional[String]) (defaults to: undef)

    Language of the translation file

  • translate_out (Optional[Boolean]) (defaults to: undef)

    Export all sentences to be translated to a CSV file, a PO file or a TGZ archive and exit

  • translate_in (Optional[Boolean]) (defaults to: undef)

    Import a CSV or a PO file with translations and exit

  • overwrite_existing_translations (Optional[Boolean]) (defaults to: undef)

    Overwrites existing translation terms on updating a module or importing a CSV or a PO file

  • translate_modules (Optional[Array[String]]) (defaults to: undef)

    Modules to export

  • list_db (Optional[Boolean]) (defaults to: undef)

    Disable the ability to obtain or view the list of databases

  • osv_memory_count_limit (Optional[Integer]) (defaults to: undef)

    Force a limit on the maximum number of records kept in the virtual osv_memory tables

  • osv_memory_age_limit (Optional[Float]) (defaults to: undef)

    Force a limit on the maximum age of records kept in the virtual osv_memory

  • max_cron_threads (Optional[Integer]) (defaults to: undef)

    Maximum number of threads processing concurrently cron jobs

  • unaccent (Optional[Boolean]) (defaults to: undef)

    Use the unaccent function provided by the database when available

  • geoip_database (Optional[Stdlib::Absolutepath]) (defaults to: undef)

    Absolute path to the GeoIP database file

  • workers (Optional[Integer]) (defaults to: undef)

    Number of workers

  • limit_memory_soft (Optional[Integer]) (defaults to: undef)

    Maximum allowed virtual memory per worker, when reached the worker be reset after the current request

  • limit_memory_hard (Optional[Integer]) (defaults to: undef)

    Maximum allowed virtual memory per worker, when reached, any memory allocation will fail

  • limit_time_cpu (Optional[Integer]) (defaults to: undef)

    Maximum allowed CPU time per request

  • limit_time_real (Optional[Integer]) (defaults to: undef)

    Maximum allowed Real time per request

  • limit_time_real_cron (Optional[Integer]) (defaults to: undef)

    Maximum allowed Real time per cron job

  • limit_request (Optional[Integer]) (defaults to: undef)

    Maximum number of request to be processed per worker



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# File 'manifests/init.pp', line 81

class odoo (
  Enum['10.0', '11.0', '12.0', '13.0', '14.0', '15.0', 'system'] $version = undef,
  Optional[Enum['wkhtmltox']]                            $wkhtmltopdf = undef,

  Boolean   $manage_package = true,
  String[1] $package_name   = 'odoo',

  String                         $package_ensure = 'present',
  Optional[Enum['hold', 'none']] $package_mark   = undef,

  Optional[Sensitive]                      $admin_passwd           = undef,
  Optional[String]                         $csv_internal_sep       = undef,
  Optional[String]                         $reportgz               = undef,

  # Common options
  Optional[Variant[Array[String],Boolean]] $without_demo           = undef,
  Optional[String]                         $import_partial         = undef,
  Optional[Stdlib::Absolutepath]           $pidfile                = undef,
  Optional[Array[String]]                  $addons_path            = undef,
  Optional[Array[String]]                  $upgrades_paths         = undef,
  Optional[Array[String]]                  $server_wide_modules    = undef,
  Optional[String]                         $data_dir               = undef,

  # HTTP Service Configuration
  Optional[String]                         $http_interface   = undef,
  Optional[Integer]                        $http_port        = undef,
  Optional[Integer]                        $longpolling_port = undef,
  Optional[Boolean]                        $http_enable      = undef,
  Optional[Boolean]                        $proxy_mode       = undef,

  # Web interface Configuration
  Optional[String]                         $dbfilter = undef,

  # Testing Configuration
  Optional[Boolean]                        $test_enable = undef,
  Optional[String]                         $test_file   = undef,
  Optional[Array[String]]                  $test_tags   = undef,
  Optional[String]                         $screencasts = undef,
  Optional[String]                         $screenshots = undef,

  # Logging Configuration
  Optional[Stdlib::Absolutepath]           $logfile      = undef,
  Optional[Boolean]                        $syslog       = undef,
  Optional[String]                         $log_handler  = undef,
  Optional[String]                         $log_db       = undef,
  Optional[String]                         $log_db_level = undef,
  Optional[Enum[
      'info',
      'debug_rpc',
      'warn',
      'test',
      'critical',
      'debug_sql',
      'error',
      'debug',
      'debug_rpc_answer',
      'notset',
  ]]                                       $log_level    = undef,

  # SMTP Configuration
  Optional[String]                         $email_from    = undef,
  Optional[String]                         $smtp_server   = undef,
  Optional[Integer]                        $smtp_port     = undef,
  Optional[Boolean]                        $smtp_ssl      = undef,
  Optional[String]                         $smtp_user     = undef,
  Optional[Sensitive]                      $smtp_password = undef,

  # Database related options
  Optional[String]                         $db_name     = undef,
  String[1]                                $db_user     = 'odoo',
  Variant[Boolean[false],Sensitive]        $db_password = false,
  Optional[String]                         $pg_path     = undef,
  Variant[Boolean[false],String]           $db_host     = false,
  Variant[Boolean[false],Integer]          $db_port     = false,
  Optional[Enum[
      'disable',
      'allow',
      'prefer',
      'require',
      'verify-ca',
      'verify-full',
  ]]                                       $db_sslmode  = undef,
  Optional[Integer]                        $db_maxconn  = undef,
  Optional[String]                         $db_template = undef,

  # Internationalisation options
  Optional[String]                         $language                        = undef,
  Optional[Boolean]                        $translate_out                   = undef,
  Optional[Boolean]                        $translate_in                    = undef,
  Optional[Boolean]                        $overwrite_existing_translations = undef,
  Optional[Array[String]]                  $translate_modules               = undef,

  # Security-related options
  Optional[Boolean]                        $list_db = undef,

  # Advanced options
  Optional[Integer]                        $osv_memory_count_limit = undef,
  Optional[Float]                          $osv_memory_age_limit   = undef,
  Optional[Integer]                        $max_cron_threads       = undef,
  Optional[Boolean]                        $unaccent               = undef,
  Optional[Stdlib::Absolutepath]           $geoip_database         = undef,

  # Multiprocessing options
  Optional[Integer]                        $workers              = undef,
  Optional[Integer]                        $limit_memory_soft    = undef,
  Optional[Integer]                        $limit_memory_hard    = undef,
  Optional[Integer]                        $limit_request        = undef,
  Optional[Integer]                        $limit_time_cpu       = undef,
  Optional[Integer]                        $limit_time_real      = undef,
  Optional[Integer]                        $limit_time_real_cron = undef,
) {
  $odoo_supported_versions = {
    'Debian' => {
      '9'  => ['11.0', '12.0'],
      '10' => ['11.0', '12.0', '13.0', '14.0', '15.0'],
      '11' => ['14.0', '15.0', 'system'],
    },
    'Ubuntu' => {
      '16.04' => ['10.0', '11.0', '12.0'],
      '18.04' => ['11.0', '12.0', '13.0'],
      '20.04' => ['11.0', '12.0', '13.0', '14.0', '15.0'],
    },
  }

  unless $odoo_supported_versions.dig($facts.get('os.name'), $facts.get('os.release.major')).member($version) {
    fail("Odoo ${version} cannot be installed on ${facts.get('os.name')} ${facts.get('os.release.major')}")
  }

  if $odoo::wkhtmltopdf == 'wkhtmltox' {
    contain odoo::wkhtmltox
  }

  if $version {
    if versioncmp($version, '11.0') >= 0 {
      $pip_provider = 'pip3'
      $pip_package  = 'python3-pip'

      $http_enable_setting    = 'http_enable'
      $http_interface_setting = 'http_interface'
      $http_port_setting      = 'http_port'
    } else {
      $pip_provider = 'pip'
      $pip_package  = 'python-pip'

      $http_enable_setting    = 'xmlrpc'
      $http_interface_setting = 'xmlrpc_interface'
      $http_port_setting      = 'xmlrpc_port'
    }
  }

  contain odoo::repo
  contain odoo::dependencies
  contain odoo::package
  contain odoo::config
  contain odoo::service

  Class['odoo::repo']
  -> Class['odoo::dependencies']
  -> Class['odoo::package']
  -> Class['odoo::config']
  ~> Class['odoo::service']
}