Postgresql 13 Install/Db&User Create on debian with Ansible

Bu makalede ansible kullanarak; debian üzerinde postgresql13’ü ve bazı paketleri kurmayı, versiyon bilgilerini öğrenmeyi, database yaratmayı, ilgili database’i erişebilir kılmayı, database için kullanıcı – şifre yaratmayı göreceğiz.

Merhaba,

Bu makalede bulunan tüm dosyalara github adresinden ulaşabilirsiniz; https://github.com/mertyakan/postgresql13-ansible.git

Her playbook’u tek tek açıklayacağım, öncesinde inventory dosyasını editliyorum;

Benim test ortamım aşağıdaki gibi;
master:
ip: 172.10.1.201
os: debian 10.10.0

#inventory file

[master]
172.10.1.201

[multi:children]
master

#variables for all the servers
[multi:vars]
ansible_ssh_user=on

Başlayabiliriz;

#01-playbook-installpackages.yaml
---
  #all server, apt update
  - hosts: all
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3
    tasks:
      - name: Add an postgresql signing key
        ansible.builtin.apt_key:
          url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
          state: present

      - name: Add postgresql repository into sources list
        ansible.builtin.apt_repository:
          repo: deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main
          state: present

      - name: Using apt update the packages
        apt:
          update_cache: yes
          force_apt_get: yes
          cache_valid_time: 3600

      # multiple item install apt
      - name: Install loop list packages
        apt:
          name: "{{ item }}"
          update_cache: yes
          state: present
        loop:
        - htop
        - tree
        - gnupg2
        - vim
        - python2
        - postgresql-13
        - net-tools
        - dstat
        - python3-psycopg2

01-playbook-installpackages.yaml; postgresql13 için repo ve gpg key import eder, apt update işlemi gerçekleşir, loopta belirtilen paketleri yükler,

01-playbook-installpackages.yaml
#02-playbookcheckpackages.yaml
---
  #all server, apt update
  - hosts: all
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Check postgresql-13 software is installed
        package_facts:
          manager: "apt"
      - name: Postgresql & Vim package status
        debug:
          msg: "{{ ansible_facts.packages[item] }} {{ 'installed' if item in ansible_facts.packages else 'not installed' }}"
      #just installed package list version
        loop:
        - vim
        - postgresql-13
        - net-tools
        - dstat

02-playbookcheckpackages.yaml; loopta belirtilen paketlerin versiyon bilgilerini getirir (Aslında bunun hatalı bir değer döndürdüğünü farkettim, (yüklü olmayan bir paket varsa ve bu paket ismi loopta geçiyorsa hata alıyorum. Incelenecek;))

02-playbookcheckpackages.yaml
#03-01intallmain.yaml
---
  - hosts: master
    become: yes
  - name : 03-02create db
    import_playbook: 03-02createdb.yaml
  - name : 03-03create user
    import_playbook: 03-03createuser.yaml
  - name : 03-04 access user in created db
    import_playbook: 03-04grantuser.yaml
  - name : 03-05service restart postgresql
    import_playbook: 03-05servicerestart.yaml
    vars:
      ansible_python_interpreter: /usr/bin/python3

03-01intallmain.yaml; sırası ile diğer playbookları çağırıyor;

03-02,03,04,05 playbooklarını inceleyelim;

#03-02createdb.yaml
---
  #create postgresql db for master
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Create new DB
        become_user: postgres
        postgresql_db:
          name: mertdb
          owner: postgres

#03-03createuser.yaml
---
  #create postgresql db for master
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Create user for new DB
        become_user: postgres
        postgresql_user:
          db: mertdb
          name: dbuser
          password: dbpasswd
          priv: ALL
          state: present
          role_attr_flags: NOSUPERUSER,NOCREATEDB
#03-04grantuser.yaml
---
  #create postgresql db for master
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Grant users user and access to databases db from ipv6 localhost ::1/128 using peer authentication.
        postgresql_pg_hba:
          dest: /etc/postgresql/13/main/pg_hba.conf
          contype: host
          databases: mertdb
          users: dbuser
          source: 0.0.0.0/0
          method: md5
          create: true
#03-05servicerestart.yaml
---
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Postgresql Service restart
        become: yes
        ansible.builtin.service:
          name: postgresql
          state: restarted
  • 03-02 playbook’u; mertdb isminde bir db oluşturacak,
  • 03-03 playbook’u; mertdb database için kullanıcı, şifre ve rol ataması gerçekleştirecek,
  • 03-04 playbook’u; yaratılan db ve detayları için pg_hba conf dosyasını dışarıdan erişilebilir hale getirecek (0.0.0.0/0 veya nereden erişmek istiyorsanız)
  • 03-05 playbook’u; postgresql servisini restart edecek,
03-01intallmain.yaml
#04-01changelastsetting.yaml
---
  - hosts: master
    become: yes
  - name : 04-02changepostgresqlconf
    import_playbook: 04-02changepostgresqlconf.yaml
  - name : 04-03service restart postgresql
    import_playbook: 03-05servicerestart.yaml
    vars:
      ansible_python_interpreter: /usr/bin/python3

04-01changelastsetting.yaml; 03-01intallmain.yaml dosyasında olduğu gibi sırası ile 2 playbook çalıştıracak, belirtilen playbookları inceleyelim;

#04-02changepostgresqlconf.yaml
---
  #create postgresql db for master
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: File Create for regexp line postgresql conf file
        ansible.builtin.lineinfile:
          path: /etc/postgresql/13/main/postgresql.conf
          regexp: "#listen_addresses = 'localhost'"
          line: listen_addresses = '*'
#03-05servicerestart.yaml
---
  - hosts: master
    become: yes
    vars:
      ansible_python_interpreter: /usr/bin/python3

    tasks:
      - name: Postgresql Service restart
        become: yes
        ansible.builtin.service:
          name: postgresql
          state: restarted
  • 04-02 playbook’u; postgresql/13/main/postgresql.conf içerisinde listen_address’i * olarak değişiriyor,
  • 03-05 playbook’u; postgresql servisini restart edecek,
04-01changelastsetting.yaml

Son olarak farklı bir hosttan test edelim;

TEST

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.