# Allow a user to access the database for the service
#
# == Namevar
#  String with the form dbname_host. The host part of the string is the host
#  to allow
#
# == Parameters
#  [*user*]
#    username to allow
#
#  [*password_hash*]
#    user password hash
#
#  [*database*]
#    the database name
#
#  [*privileges*]
#    the privileges to grant to this user
#
#  [*plugin*]
#    Authentication plugin to use when connecting to the MySQL server;
#    Defaults to undef
#
#  [*create_user*]
#    Flag to allow for the skipping of the user as part of the database setup.
#    Set to false to skip the user creation.
#    Defaults to true.
#
#  [*create_grant*]
#    Flag to allow for the skipping of the user grants as part of the database
#    setup. Set to false to skip the user creation.
#    Defaults to true.
#
#  [*tls_options*]
#    The TLS options that the user will have
#    Defaults to ['NONE']
#
define openstacklib::db::mysql::host_access (
  $user,
  $password_hash,
  $database,
  $privileges,
  $plugin = undef,
  $create_user  = true,
  $create_grant = true,
  $tls_options = ['NONE'],
) {

  validate_legacy(Pattern[/_/], 'validate_re', $title,
    ['_', 'Title must be $dbname_$host'])

  $host = inline_template('<%= @title.split("_").last.downcase %>')

  if $create_user {
    mysql_user { "${user}@${host}":
      plugin        => $plugin,
      password_hash => $password_hash,
      tls_options   => $tls_options,
    }
    Mysql_database<| title == $database |>
      ~> Mysql_user<| title == "${user}@${host}" |>
  }

  if $create_grant {
    mysql_grant { "${user}@${host}/${database}.*":
      privileges => $privileges,
      table      => "${database}.*",
      user       => "${user}@${host}",
    }
    Mysql_user<| title == "${user}@${host}" |>
      ~> Mysql_grant<| title == "${user}@${host}/${database}.*" |>
  }
}
