Defined Type: postgresql::server::tablespace

Defined in:
manifests/server/tablespace.pp

Summary

This module creates tablespace.

Overview

Parameters:

  • location (String[1])

    Specifies the path to locate this tablespace.

  • manage_location (Boolean) (defaults to: true)

    Set to false if you have file{ $location: } already defined

  • owner (Optional[String[1]]) (defaults to: undef)

    Specifies the default owner of the tablespace.

  • spcname (String[1]) (defaults to: $title)

    Specifies the name of the tablespace.

  • connect_settings (Hash) (defaults to: $postgresql::server::default_connect_settings)

    Specifies a hash of environment variables used when connecting to a remote server.

  • port (Stdlib::Port) (defaults to: $postgresql::server::port)

    the port of the postgresql instance that sould be used.

  • user (String[1]) (defaults to: $postgresql::server::user)

    Sets the OS user to run psql

  • group (String[1]) (defaults to: $postgresql::server::group)

    Sets the OS group to run psql

  • psql_path (Stdlib::Absolutepath) (defaults to: $postgresql::server::psql_path)

    Sets path to psql command

  • module_workdir (String[1]) (defaults to: $postgresql::server::module_workdir)

    Specifies working directory under which the psql command should be executed. May need to specify if ‘/tmp’ is on volume mounted with noexec option.

  • instance (String[1]) (defaults to: 'main')

    The name of the Postgresql database instance.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'manifests/server/tablespace.pp', line 16

define postgresql::server::tablespace (
  String[1]            $location,
  Boolean              $manage_location = true,
  Optional[String[1]]  $owner   = undef,
  String[1]            $spcname = $title,
  Hash                 $connect_settings = $postgresql::server::default_connect_settings,
  Stdlib::Port         $port             = $postgresql::server::port,
  String[1]            $user             = $postgresql::server::user,
  String[1]            $group            = $postgresql::server::group,
  Stdlib::Absolutepath $psql_path        = $postgresql::server::psql_path,
  String[1]            $module_workdir   = $postgresql::server::module_workdir,
  String[1]            $instance         = 'main',
) {
  # If the connection settings do not contain a port, then use the local server port
  $port_override = pick($connect_settings['PGPORT'], $port)

  Postgresql_psql {
    psql_user        => $user,
    psql_group       => $group,
    psql_path        => $psql_path,
    port             => $port_override,
    connect_settings => $connect_settings,
    cwd              => $module_workdir,
    instance         => $instance,
  }

  if($manage_location) {
    file { $location:
      ensure  => directory,
      owner   => $user,
      group   => $group,
      mode    => '0700',
      seluser => 'system_u',
      selrole => 'object_r',
      seltype => 'postgresql_db_t',
      require => Class['postgresql::server'],
    }
  } else {
    File <| title == $location |> {
      ensure  => directory,
      owner   => $user,
      group   => $group,
      mode    => '0700',
      seluser => 'system_u',
      selrole => 'object_r',
      seltype => 'postgresql_db_t',
      require => Class['postgresql::server'],
    }
  }

  postgresql_psql { "CREATE TABLESPACE \"${spcname}\"":
    command => "CREATE TABLESPACE \"${spcname}\" LOCATION '${location}'",
    unless  => "SELECT 1 FROM pg_tablespace WHERE spcname = '${spcname}'",
    require => File[$location],
  }

  if $owner {
    postgresql_psql { "ALTER TABLESPACE \"${spcname}\" OWNER TO \"${owner}\"":
      unless  => "SELECT 1 FROM pg_tablespace JOIN pg_roles rol ON spcowner = rol.oid WHERE spcname = '${spcname}' AND rolname = '${owner}'", # lint:ignore:140chars
      require => Postgresql_psql["CREATE TABLESPACE \"${spcname}\""],
    }

    if defined(Postgresql::Server::Role[$owner]) {
      Postgresql::Server::Role[$owner] -> Postgresql_psql["ALTER TABLESPACE \"${spcname}\" OWNER TO \"${owner}\""]
    }
  }
}