- name: Install package python3-psycopg2 ansible.builtin.apt: name: python3-psycopg2 state: present - name: Database table domains community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: domains columns: - id BIGSERIAL PRIMARY KEY - name VARCHAR(128) NOT NULL UNIQUE - relay_transport TEXT NULL - name: Database table users community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: users columns: - id BIGSERIAL PRIMARY KEY - domain_id BIGINT references domains(id) on delete cascade - username VARCHAR(128) NOT NULL - realname VARCHAR(250) NOT NULL - password VARCHAR(128) NOT NULL - suspend_submission BOOL NOT NULL DEFAULT false - suspend_imap_reason TEXT NULL - quota_storage_bytes BIGINT NOT NULL DEFAULT {{ mailserver.dovecot.mailbox_max_bytes | default(100000000000) }} - quota_inbox_messages INT NOT NULL DEFAULT {{ mailserver.dovecot.mailbox_max_messages | default(500000) }} - unique(domain_id, username) - name: Database index users__domain_username community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: users columns: domain_id, username idxname: users__domain_username - name: Database table aliases community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: aliases columns: - id bigserial primary key - alias_domain_id bigint references domains(id) on delete cascade - alias varchar(250) not null - forwardings varchar(250)[] not null - t timestamp without time zone not null default now() - comment text null - unique(alias_domain_id, alias) - name: Database index aliases__alias community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: aliases columns: alias idxname: aliases__alias - name: Database table shared_folders community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: shared_folders columns: - id bigserial primary key - from_user varchar(128) not null - to_user varchar(128) not null - dummy char(1) DEFAULT '1' - name: Database index shared_folders__from_to community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: shared_folders columns: from_user, to_user idxname: shared_folders__from_to unique: true - name: Database table shared_folders_anyone community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: shared_folders_anyone columns: - id bigserial primary key - from_user varchar(128) not null - dummy char(1) DEFAULT '1' - name: Database index shared_folders_anyone__from community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: shared_folders_anyone columns: from_user idxname: shared_folders__from unique: true - name: Database table mail_from community.postgresql.postgresql_table: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable name: mail_from columns: - id bigserial primary key - t timestamp default now() - original varchar(250) not null - rewritten varchar(250) not null - srs_id bigint - name: Database index mail_from__rewritten community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: mail_from columns: rewritten idxname: mail_from__rewritten - name: Database index mail_from__srs_id community.postgresql.postgresql_idx: login_host: "{{ mailserver.postgresql.host }}" login_port: "{{ mailserver.postgresql.port }}" login_user: "{{ mailserver.postgresql.username }}" login_password: "{{ mailserver.postgresql.password }}" login_db: "{{ mailserver.postgresql.dbname }}" ssl_mode: disable table: mail_from columns: srs_id idxname: mail_from__srs_id