├── roles └── createdb │ ├── handlers │ └── main.yml │ └── tasks │ └── main.yml ├── vars └── main.yml ├── README.md └── ansible_playbook.yml /roles/createdb/handlers/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: restart postgresql 4 | service: name=postgresql state=restarted 5 | 6 | -------------------------------------------------------------------------------- /vars/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | db_user: dbusername 3 | db_name: dbname 4 | db_password: dbpassword 5 | 6 | update_apt_cache: true 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Sample playbook, to provision a server with PostgreSQL. 2 | 3 | [The detailed explanation can be found here](http://blog.apcelent.com/using-ansible-to-setup-postgresql.html) 4 | -------------------------------------------------------------------------------- /ansible_playbook.yml: -------------------------------------------------------------------------------- 1 | - name: Create a PostgreSQL DB server 2 | hosts: dbserver 3 | sudo: yes 4 | sudo_user: root 5 | remote_user: ubuntu 6 | vars_files: 7 | - vars/main.yml 8 | 9 | roles: 10 | - createdb 11 | 12 | -------------------------------------------------------------------------------- /roles/createdb/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Ensure bash, OpenSSl, and libssl are the latest versions 4 | apt: name={{ item }} update_cache={{ update_apt_cache }} state=latest 5 | with_items: 6 | - bash 7 | - openssl 8 | - libssl-dev 9 | - libssl-doc 10 | tags: packages 11 | 12 | - name: Install PostgreSQL 13 | apt: name={{ item }} update_cache={{ update_apt_cache }} state=installed 14 | with_items: 15 | - postgresql 16 | - postgresql-contrib 17 | - libpq-dev 18 | - python-psycopg2 19 | tags: packages 20 | 21 | - name: Ensure the PostgreSQL service is running 22 | service: name=postgresql state=started enabled=yes 23 | 24 | - name: Ensure database is created 25 | sudo_user: postgres 26 | postgresql_db: name={{ db_name }} 27 | encoding='UTF-8' 28 | lc_collate='en_US.UTF-8' 29 | lc_ctype='en_US.UTF-8' 30 | template='template0' 31 | state=present 32 | 33 | - name: Ensure user has access to the database 34 | sudo_user: postgres 35 | postgresql_user: db={{ db_name }} 36 | name={{ db_user }} 37 | password={{ db_password }} 38 | priv=ALL 39 | state=present 40 | 41 | - name: Ensure user does not have unnecessary privileges 42 | sudo_user: postgres 43 | postgresql_user: name={{ db_user }} 44 | role_attr_flags=NOSUPERUSER,NOCREATEDB 45 | state=present 46 | 47 | --------------------------------------------------------------------------------