implement pgsqltasks

This commit is contained in:
Jan Dittberner 2015-01-09 19:35:37 +01:00
parent 85253a2cda
commit 3fbf645665

View file

@ -5,6 +5,23 @@ This module defines Celery_ tasks to manage PostgreSQL users and databases.
from __future__ import absolute_import
from celery import shared_task
from celery.utils.log import get_task_logger
from gvapgsql import settings
from psycopg2 import connect
_LOGGER = get_task_logger(__name__)
def _get_connection():
return connect(
host=settings.GVAPGSQL_DBADMIN_HOST,
port=settings.GVAPGSQL_DBADMIN_PORT,
user=settings.GVAPGSQL_DBADMIN_USER,
password=settings.GVAPGSQL_DBADMIN_PASSWORD,
database='postgres',
)
@shared_task
@ -18,6 +35,15 @@ def create_pgsql_user(username, password):
:rtype: str
"""
with _get_connection() as conn:
with conn.cursor() as curs:
curs.execute(
"""
CREATE USER %(username)s WITH PASSWORD %(password)s
""",
{'username': username, 'password': password}
)
@shared_task
@ -31,6 +57,14 @@ def set_pgsql_userpassword(username, password):
:rtype: boolean
"""
with _get_connection() as conn:
with conn.cursor() as curs:
curs.execute(
"""
ALTER ROLE %(username)s WITH PASSWORD %(password)s
""",
{'username': username, 'password': password}
)
@shared_task
@ -43,6 +77,14 @@ def delete_pgsql_user(username):
:rtype: boolean
"""
with _get_connection() as conn:
with conn.cursor() as curs:
curs.execute(
"""
DROP ROLE %(username)s
""",
{'username': username}
)
@shared_task
@ -56,17 +98,31 @@ def create_pgsql_database(dbname, username):
:rtype: str
"""
with _get_connection() as conn:
with conn.cursor() as curs:
curs.execute(
"""
CREATE DATABASE %(dbname)s OWNER %(username)s
""",
{'dbname': dbname, 'username': username}
)
@shared_task
def delete_pgsql_database(dbname, username):
def delete_pgsql_database(dbname):
"""
This task deletes an existing PostgreSQL database and revokes privileges of
the given user on that database.
This task deletes an existing PostgreSQL database.
:param str dbname: database name
:param str username: the user name of an existing PostgreSQL user
:return: True if the database has been deleted, False otherwise
:rtype: boolean
"""
with _get_connection() as conn:
with conn.cursor() as curs:
curs.execute(
"""
DROP DATABASE %(dbname)s
""",
{'dbname': dbname}
)