Source code for nuka.tasks.postgresql

# -*- coding: utf-8 -*-
from nuka.task import Task


[docs]class psql(Task): """psql""" diff = False def __init__(self, sql=None, **kwargs): kwargs.setdefault('switch_user', 'postgres') super(psql, self).__init__(sql=sql, **kwargs) def do(self): return self.sh(['psql', '-tAc', self.args['sql']])
[docs]class create_db(Task): """create a database and grant user""" def __init__(self, name=None, user=None, password=None, **kwargs): kwargs.setdefault('switch_user', 'postgres') kwargs.setdefault('template', 'template1') kwargs.setdefault('locale', 'en_US.UTF-8') super(create_db, self).__init__(name=name, user=user, password=password, **kwargs) def user_exists(self): s = "SELECT 1 FROM pg_roles WHERE rolname='{user}'".format(**self.args) res = self.sh(['psql', '-tAc', s], check=False) return res['stdout'].strip() == "1" def db_exists(self): res = self.sh(['psql', self.args['name'], '-c', ''], check=False) return res['rc'] == 0 def do(self): if not self.db_exists(): if not self.user_exists(): s = "CREATE ROLE {user} WITH PASSWORD '{password}';" self.sh(['psql', '-tAc', s.format(**self.args)]) return self.sh([ 'createdb', '--owner', self.args['user'], '--template', self.args['template'], '--lc-ctype', self.args['locale'], '--lc-collate', self.args['locale'], self.args['name'], ]) else: return dict(rc=0, changed=False) def diff(self): diff = [] if not self.user_exists(): diff.append(self.texts_diff('', self.args['user'], tofile='role')) if not self.db_exists(): diff.append(self.texts_diff('', self.args['name'], tofile='database')) if diff: return dict(diff='\n'.join(diff)) return dict(rc=0, changed=False)