D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
opt
/
saltstack
/
salt
/
lib
/
python3.10
/
site-packages
/
salt
/
states
/
Filename :
postgres_extension.py
back
Copy
""" Management of PostgreSQL extensions =================================== A module used to install and manage PostgreSQL extensions. .. code-block:: yaml adminpack: postgres_extension.present .. versionadded:: 2014.7.0 """ import logging from salt.modules import postgres log = logging.getLogger(__name__) def __virtual__(): """ Only load if the postgres module is present """ if "postgres.create_extension" not in __salt__: return ( False, "Unable to load postgres module. Make sure `postgres.bins_dir` is set.", ) return True def present( name, if_not_exists=None, schema=None, ext_version=None, from_version=None, user=None, maintenance_db=None, db_user=None, db_password=None, db_host=None, db_port=None, ): """ Ensure that the named extension is present. .. note:: Before you can use the state to load an extension into a database, the extension's supporting files must be already installed. For more information about all of these options see ``CREATE EXTENSION`` SQL command reference in the PostgreSQL documentation. name The name of the extension to be installed if_not_exists Add an ``IF NOT EXISTS`` parameter to the DDL statement schema Schema to install the extension into ext_version Version to install from_version Old extension version if already installed user System user all operations should be performed on behalf of maintenance_db Database to act on db_user Database username if different from config or default db_password User password if any password for a specified user db_host Database host if different from config or default db_port Database port if different from config or default """ ret = { "name": name, "changes": {}, "result": True, "comment": "Extension {} is already present".format(name), } db_args = { "maintenance_db": maintenance_db, "runas": user, "user": db_user, "password": db_password, "host": db_host, "port": db_port, } # check if extension exists mode = "create" mtdata = __salt__["postgres.create_metadata"]( name, schema=schema, ext_version=ext_version, **db_args ) # The extension is not present, install it! toinstall = postgres._EXTENSION_NOT_INSTALLED in mtdata if toinstall: mode = "install" toupgrade = False if postgres._EXTENSION_INSTALLED in mtdata: for flag in [postgres._EXTENSION_TO_MOVE, postgres._EXTENSION_TO_UPGRADE]: if flag in mtdata: toupgrade = True mode = "upgrade" cret = None if toinstall or toupgrade: if __opts__["test"]: ret["result"] = None if mode: ret["comment"] = "Extension {} is set to be {}ed".format( name, mode ).replace("eed", "ed") return ret cret = __salt__["postgres.create_extension"]( name=name, if_not_exists=if_not_exists, schema=schema, ext_version=ext_version, from_version=from_version, **db_args ) if cret: if mode.endswith("e"): suffix = "d" else: suffix = "ed" ret["comment"] = "The extension {} has been {}{}".format(name, mode, suffix) ret["changes"][name] = "{}{}".format(mode.capitalize(), suffix) elif cret is not None: ret["comment"] = "Failed to {1} extension {0}".format(name, mode) ret["result"] = False return ret def absent( name, if_exists=None, restrict=None, cascade=None, user=None, maintenance_db=None, db_user=None, db_password=None, db_host=None, db_port=None, ): """ Ensure that the named extension is absent. name Extension name of the extension to remove if_exists Add if exist slug restrict Add restrict slug cascade Drop on cascade user System user all operations should be performed on behalf of maintenance_db Database to act on db_user Database username if different from config or default db_password User password if any password for a specified user db_host Database host if different from config or default db_port Database port if different from config or default """ ret = {"name": name, "changes": {}, "result": True, "comment": ""} db_args = { "maintenance_db": maintenance_db, "runas": user, "host": db_host, "user": db_user, "port": db_port, "password": db_password, } # check if extension exists and remove it exists = __salt__["postgres.is_installed_extension"](name, **db_args) if exists: if __opts__["test"]: ret["result"] = None ret["comment"] = "Extension {} is set to be removed".format(name) return ret if __salt__["postgres.drop_extension"]( name, if_exists=if_exists, restrict=restrict, cascade=cascade, **db_args ): ret["comment"] = "Extension {} has been removed".format(name) ret["changes"][name] = "Absent" return ret else: ret["result"] = False ret["comment"] = "Extension {} failed to be removed".format(name) return ret else: ret["comment"] = "Extension {} is not present, so it cannot be removed".format( name ) return ret