@ -170,16 +170,19 @@ state:
'''
try :
import psycopg2
HAS_PSYCOPG2 = True
from psycopg2 import __version__ as PSYCOPG2_VERSION
from psycopg2 . extras import DictCursor
from psycopg2 . extensions import ISOLATION_LEVEL_AUTOCOMMIT as AUTOCOMMIT
from psycopg2 . extensions import ISOLATION_LEVEL_READ_COMMITTED as READ_COMMITTED
except ImportError :
HAS_PSYCOPG2 = False
# psycopg2 is checked by connect_to_db()
# from ansible.module_utils.postgres
pass
from ansible . module_utils . basic import AnsibleModule , missing_required_lib
from ansible . module_utils . basic import AnsibleModule
from ansible . module_utils . database import SQLParseError , pg_quote_identifier
from ansible . module_utils . postgres import connect_to_db , postgres_common_argument_spec
from ansible . module_utils . postgres import connect_to_db , get_conn_params, postgres_common_argument_spec
from ansible . module_utils . _text import to_native
from ansible . module_utils . six import iteritems
class PgTablespace ( object ) :
@ -303,9 +306,7 @@ class PgTablespace(object):
res = self . cursor . fetchall ( )
return res
return True
except SQLParseError as e :
self . module . fail_json ( msg = to_native ( e ) )
except psycopg2 . ProgrammingError as e :
except Exception as e :
self . module . fail_json ( msg = " Cannot execute SQL ' %s ' : %s " % ( query , to_native ( e ) ) )
return False
@ -334,62 +335,27 @@ def main():
supports_check_mode = True ,
)
if not HAS_PSYCOPG2 :
module . fail_json ( msg = missing_required_lib ( ' psycopg2 ' ) )
tablespace = module . params [ " tablespace " ]
state = module . params [ " state " ]
location = module . params [ " location " ]
owner = module . params [ " owner " ]
rename_to = module . params [ " rename_to " ]
settings = module . params [ " set " ]
sslrootcert = module . params [ " ca_cert " ]
session_role = module . params [ " session_role " ]
if state == ' absent ' and ( location or owner or rename_to or settings ) :
module . fail_json ( msg = " state=absent is mutually exclusive location, "
" owner, rename_to, and set " )
# To use defaults values, keyword arguments must be absent, so
# check which values are empty and don't include in the **kw
# dictionary
params_map = {
" login_host " : " host " ,
" login_user " : " user " ,
" login_password " : " password " ,
" port " : " port " ,
" db " : " database " ,
" ssl_mode " : " sslmode " ,
" ca_cert " : " sslrootcert "
}
kw = dict ( ( params_map [ k ] , v ) for ( k , v ) in iteritems ( module . params )
if k in params_map and v != ' ' and v is not None )
# If a login_unix_socket is specified, incorporate it here.
is_localhost = " host " not in kw or kw [ " host " ] is None or kw [ " host " ] == " localhost "
if is_localhost and module . params [ " login_unix_socket " ] != " " :
kw [ " host " ] = module . params [ " login_unix_socket " ]
if psycopg2 . __version__ < ' 2.4.3 ' and sslrootcert :
module . fail_json ( msg = ' psycopg2 must be at least 2.4.3 '
' in order to user the ca_cert parameter ' )
db_connection = connect_to_db ( module , kw , autocommit = True )
cursor = db_connection . cursor ( cursor_factory = psycopg2 . extras . DictCursor )
# Switch role, if specified:
if session_role :
try :
cursor . execute ( ' SET ROLE %s ' % session_role )
except Exception as e :
module . fail_json ( msg = " Could not switch role: %s " % to_native ( e ) )
conn_params = get_conn_params ( module , module . params )
db_connection = connect_to_db ( module , conn_params , autocommit = True )
cursor = db_connection . cursor ( cursor_factory = DictCursor )
# Change autocommit to False if check_mode:
if module . check_mode :
if psycopg2. __version__ > = ' 2.4.2 ' :
if PSYCOPG2_VERSION > = ' 2.4.2 ' :
db_connection . set_session ( autocommit = False )
else :
db_connection . set_isolation_level ( psycopg2. extensions . ISOLATION_LEVEL_ READ_COMMITTED)
db_connection . set_isolation_level ( READ_COMMITTED )
# Set defaults:
autocommit = False
@ -414,10 +380,10 @@ def main():
# Because CREATE TABLESPACE can not be run inside the transaction block:
autocommit = True
if psycopg2. __version__ > = ' 2.4.2 ' :
if PSYCOPG2_VERSION > = ' 2.4.2 ' :
db_connection . set_session ( autocommit = True )
else :
db_connection . set_isolation_level ( psycopg2. extensions . ISOLATION_LEVEL_ AUTOCOMMIT)
db_connection . set_isolation_level ( AUTOCOMMIT)
changed = tblspace . create ( location )
@ -430,10 +396,10 @@ def main():
elif tblspace . exists and state == ' absent ' :
# Because DROP TABLESPACE can not be run inside the transaction block:
autocommit = True
if psycopg2. __version__ > = ' 2.4.2 ' :
if PSYCOPG2_VERSION > = ' 2.4.2 ' :
db_connection . set_session ( autocommit = True )
else :
db_connection . set_isolation_level ( psycopg2. extensions . ISOLATION_LEVEL_ AUTOCOMMIT)
db_connection . set_isolation_level ( AUTOCOMMIT)
changed = tblspace . drop ( )