puppetlabs / puppetlabs-mysql

MySQL Puppet Module / Manifests + Types & Providers
Apache License 2.0
380 stars 795 forks source link

Mysql::Db parameter 'tls_options' expects a value of type Undef or Array, got String #1539

Open alexbugl opened 1 year ago

alexbugl commented 1 year ago

Describe the Bug

After update of v13.1.0 to v13.2.0 of the puppetlabs-mysql module we get the following error:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Mysql::Db[icinga2]:
parameter 'tls_options' expects a value of type Undef or Array, got String (file: /etc/puppetlabs/code/environments/dev/modules/icinga/manifests/database.pp, line: 94) on node X

Expected Behavior

In version v13.2.0 you added the type Optional[Array[String[1]]] to the parameter tls_options, which breaks one of the modules we use (puppet-icinga) -- this tries to create a MySQL DB using this code:

    $_tls_options = if $tls {
      if $tls =~ String and $tls == 'cert' {
        'X509'
      } else {
        'SSL'
      }
    } else {
      'NONE'
    }

    mysql::db { $db_name:
      tls_options => $_tls_options,
      # shortened for readability
    }

So it writes a string into attribute tls_options of type mysql::db, which does not match the associated type. But your code in lib/puppet/type/mysql_user.rb seems to still be able to cope with strings, as it creates an array out of a single string:

  newproperty(:tls_options, array_matching: :all) do
    desc 'Options to that set the TLS-related REQUIRE attributes for the user.'
    validate do |value|
      value = [value] unless value.is_a?(Array)
      if value.include?('NONE') || value.include?('SSL') || value.include?('X509')

Environment

Suggested Solution

A possible solution could be to correct the type (untested at the moment):

-Optional[Array[String[1]]]                     $tls_options     = undef,
+Optional[Variant[String[1], Array[String[1]]]] $tls_options     = undef,
janit42 commented 1 year ago

To maybe speed a bugfix up a bit, I've created a pull request https://github.com/puppetlabs/puppetlabs-mysql/pull/1540 based on Alex suggestion.

alexbugl commented 1 year ago

I tested the fix, and it really solved the bug. :) Please apply ...

janit42 commented 1 year ago

I've updated the pull request to the current main. Would be really nice to get the bugfix in, unfortunately the fix didn't make it into v13.3.0.