Implemented docker postgres draft

This commit is contained in:
Kevin Veen-Birkenbach 2023-12-29 23:58:57 +01:00
parent 7f2d09d06a
commit 3181ce3def
3 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,28 @@
# Docker-Postgres Ansible Role
## Overview
This Ansible role is designed to deploy a PostgreSQL database using Docker. It includes tasks for setting up a Docker network, installing PostgreSQL in a Docker container, and initializing the database with a specified user and database.
## Role Variables
- `central_postgres_password`: The password for the PostgreSQL superuser (`postgres`).
- `database_databasename`: Name of the database to be created.
- `database_username`: Username for the database user.
- `database_password`: Password for the database user.
## Role Tasks
1. **Create Docker network for PostgreSQL**: Sets up a Docker network for PostgreSQL communication.
2. **Install PostgreSQL**: Deploys PostgreSQL in a Docker container, attaching it to the created network and setting the superuser password.
3. **Run the docker_postgres tasks once**: Ensures that the tasks are only run once to avoid redundancy.
## Handlers
- **Create database**: Creates a new database with the specified name.
- **Create database user**: Sets up a user with full privileges on the newly created database.
## Usage
1. Set the required variables in your playbook or inventory file.
2. Include this role in your playbook.
3. Run the playbook against the target host.
## Notes
- The PostgreSQL server is bound to `127.0.0.1:5432` on the host machine, making it accessible only from localhost.
- Ensure that the provided passwords are secure and stored securely, preferably using Ansible Vault or another encryption method.

View File

@ -0,0 +1,22 @@
- name: Create database
postgresql_db:
name: "{{ database_databasename }}"
state: present
login_user: postgres
login_password: "{{ central_postgres_password }}"
login_host: 127.0.0.1
login_port: 5432
listen: create database
- name: Create database user
postgresql_user:
name: "{{ database_username }}"
password: "{{ database_password }}"
db: "{{ database_databasename }}"
priv: ALL
state: present
login_user: postgres
login_password: "{{ central_postgres_password }}"
login_host: 127.0.0.1
login_port: 5432
listen: create database

View File

@ -0,0 +1,23 @@
- name: Create Docker network for PostgreSQL
docker_network:
name: postgres_network
state: present
when: run_once_docker_postgres is not defined
- name: Install PostgreSQL
docker_container:
name: postgres
image: postgres:latest
detach: yes
env:
POSTGRES_PASSWORD: "{{ central_postgres_password }}"
networks:
- name: postgres_network
published_ports:
- "127.0.0.1:5432:5432"
when: run_once_docker_postgres is not defined
- name: Run the docker_postgres tasks once
set_fact:
run_once_docker_postgres: true
when: run_once_docker_postgres is not defined