bundlewrap/bundles/mailserver/items.py
mwiegand cf2cbbde22 wip
2021-06-14 19:05:42 +02:00

47 lines
1.3 KiB
Python

assert node.has_bundle('postfix')
assert node.has_bundle('dovecot')
assert node.has_bundle('letsencrypt')
assert node.has_bundle('roundcube')
from shlex import quote
setup = '''
CREATE TABLE domains (
"id" BIGSERIAL PRIMARY KEY,
"name" varchar(255) UNIQUE NOT NULL
);
CREATE INDEX ON domains ("name");
CREATE TABLE users (
"id" BIGSERIAL PRIMARY KEY,
"name" varchar(255) NOT NULL,
"domain_id" BIGSERIAL NOT NULL,
CONSTRAINT "fk_domain"
FOREIGN KEY("domain_id")
REFERENCES domains("id"),
"password" varchar(255) NULL,
"redirect" varchar(255) DEFAULT NULL
);
CREATE UNIQUE INDEX ON users ("name", "domain_id") WHERE "redirect" IS NULL;
'''
actions['initialize_mailserver_db'] = {
'command': f'psql -d mailserver -c {quote(setup)}',
'unless': f'psql -At -d mailserver -c "SELECT to_regclass(\'public.users\')" | grep -q \'^users$\'',
'needs': [
'postgres_db:mailserver',
],
}
# TEST
'''
DROP TABLE users; DROP TABLE domains;
INSERT INTO domains (id, name)
VALUES (1, 'mails2.sublimity.de');
INSERT INTO users (id, name, domain_id, password)
VALUES (1, 'ckn', 1, MD5('test123'));
INSERT INTO users (id, name, domain_id, redirect)
VALUES (2, 'weg', 1, 'irgendweo@gmail.com');
'''