From e8e640fa28fbdafed9d08bbf87805e8d4ca4a0c9 Mon Sep 17 00:00:00 2001 From: Attilio Greco Date: Thu, 26 May 2022 14:08:42 +0200 Subject: [PATCH] add timescale and postgrest --- defaults/main.yml | 18 +++- handlers/main.yml | 15 +++ molecule/default/molecule.yml | 8 +- molecule/default/prepare.yml | 8 ++ molecule/default/verify.yml | 2 +- tasks/extension/PostgREST.yaml | 103 ++++++++++++++++++++ tasks/extension/pg_graphql.yaml | 51 ++++++++++ tasks/extension/timescale.yaml | 4 +- templates/installation/postgrest.conf.j2 | 3 + templates/installation/postgrest.service.j2 | 12 +++ 10 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 tasks/extension/PostgREST.yaml create mode 100644 tasks/extension/pg_graphql.yaml create mode 100644 templates/installation/postgrest.conf.j2 create mode 100644 templates/installation/postgrest.service.j2 diff --git a/defaults/main.yml b/defaults/main.yml index bd31e15..9dfb8e1 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,10 +1,7 @@ --- # defaults file for postgres postgres_repo: "https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm" -postgres_version: 13 -postgis_install: true -postgis_version: 31 -postgis_version_pakage_name: postgis{{postgis_version}}_{{postgres_version}} +postgres_version: 14 pg_config_listen_addresses: localhost pg_config_port: 5432 pg_config_max_connections: 1024 @@ -36,6 +33,7 @@ pg_config_shared_preload_libraries: [] additional_extension: # - postgis - timescale + - PostgREST pg_hba_user_options: - contype: host users: all @@ -57,3 +55,15 @@ pg_hba_user_options: source: 192.169.100.1/24 databases: all method: md5 + +# keepd as described in ufficial doc example: +# https://postgrest.org/en/stable/tutorials/tut0.html +postgrest_version: latest +postgrest_db_uri: "postgres://authenticator:mysecretpassword@localhost:5432/postgres" +postgrest_db_schemas: "api" +postgrest_db_anon_role: "web_anon" +# postgis +postgis_version_pakage_name: postgis{{postgis_version}}_{{postgres_version}} +postgis_install: true +postgis_version: 31 +# Postgres configuration \ No newline at end of file diff --git a/handlers/main.yml b/handlers/main.yml index 3904767..8af1bf9 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -15,3 +15,18 @@ ansible.builtin.systemd: state: reloaded name: "postgresql-{{postgres_version}}" + +- name: reloaded postgrest + ansible.builtin.systemd: + state: reloaded + name: "postgrest" + +- name: started postgrest + ansible.builtin.systemd: + state: started + name: "postgrest" + +- name: restarted postgrest + ansible.builtin.systemd: + state: restarted + name: "postgrest" \ No newline at end of file diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 48277c1..02ec740 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -4,9 +4,11 @@ driver: name: libvirt platforms: - name: instance-1 - image_url: "http://remoteshare.4sigma.top/Rocky8.4-try-srinked.qcow2" - disk_size: "10G" - memory_size: "1" # in GB + # image_url: "http://127.0.0.1:8000/Rocky-8-GenericCloud-8.6-20220515.x86_64.qcow2" + image_url: "http://127.0.0.1:8000/Rocky-8-GenericCloud-8.5-20211114.2.x86_64.qcow2" + disk_size: "15G" + default_vcpu: 2 + memory_size: "1" provisioner: name: ansible verifier: diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml index 976b3a9..ca2aec3 100644 --- a/molecule/default/prepare.yml +++ b/molecule/default/prepare.yml @@ -8,6 +8,10 @@ delay: 15 timeout: 60 + - name: set timezone to Europe/Rome + timezone: + name: Europe/Rome + - name: prepare hosts: all become: true @@ -19,6 +23,10 @@ - python3-pip - python3-devel - gcc + - net-tools + - vim + - iotop + - bash-completion - name: prepare | create ansible requirements ansible.builtin.file: diff --git a/molecule/default/verify.yml b/molecule/default/verify.yml index cd0ddcc..97574ff 100644 --- a/molecule/default/verify.yml +++ b/molecule/default/verify.yml @@ -8,7 +8,7 @@ tasks: - name: Verify | check postgres is running ansible.builtin.systemd: - name: postgresql-13.service + name: postgresql-{{ }}.service state: started - name: create sql testing file diff --git a/tasks/extension/PostgREST.yaml b/tasks/extension/PostgREST.yaml new file mode 100644 index 0000000..8788c44 --- /dev/null +++ b/tasks/extension/PostgREST.yaml @@ -0,0 +1,103 @@ +- name: postgres | tasks | extension | PostgREST | create userand group | create group for postgrest + ansible.builtin.group: + name: postgrest + state: present + system: yes + +- name: postgres | tasks | extension | PostgREST | create userand group | create user for postgrest + ansible.builtin.user: + name: postgrest + group: postgrest + createhome: no + system: yes + state: present + +- name: postgres | tasks | extension | PostgREST | get tags | show version selected + debug: + var: postgrest_version + +- name: postgres | tasks | extension | PostgREST | install get latest version + block: + - name: postgres | tasks | extension | PostgREST | get tags | get latest restic tags from github API + uri: + url: https://api.github.com/repos/PostgREST/postgrest/releases/latest + method: GET + status_code: 200 + register: github_json_response + + - name: postgres | tasks | extension | PostgREST | get tags | parsing github api response and set PostgREST version + set_fact: + postgrest_version: "{{ github_json_response.json.tag_name }}" + + when: postgrest_version == 'latest' + +- name: postgres | tasks | extension | PostgREST | get tags | show version selected + debug: + var: postgrest_version + +- name: postgres | tasks | extension | PostgREST | create directory tree | PostgREST/ + ansible.builtin.file: + path: /opt/PostgREST/ + state: directory + mode: '0755' + +- name: postgres | tasks | extension | PostgREST | create directory tree | tar_archive + ansible.builtin.file: + path: /opt/PostgREST/tar_archive + state: directory + mode: '0755' + +- name: postgres | tasks | extension | PostgREST | create directory tree | "postgrest-{{postgrest_version}}" + ansible.builtin.file: + path: /opt/PostgREST/postgrest-{{postgrest_version}}/ + state: directory + mode: '0755' + +- name: postgres | tasks | extension | PostgREST | create directory tree | create /etc/postgrest/ configuration directory + ansible.builtin.file: + path: /etc/postgrest/ + state: directory + mode: '0755' + +- name: postgres | tasks | extension | PostgREST | check if "postgrest-{{postgrest_version}}-linux-static-x64.tar.xz exist" + stat: + path: /opt/PostgREST/postgrest-{{postgrest_version}}-linux-static-x64.tar.xz + register: postgrest_archive_exist + +- name: postgres | tasks | extension | PostgREST | Download binary "postgrest-{{postgrest_version}}-linux-static-x64.tar.xz" + get_url: + url: https://github.com/PostgREST/postgrest/releases/download/{{ postgrest_version }}/postgrest-{{postgrest_version}}-linux-static-x64.tar.xz + dest: /opt/PostgREST/postgrest-{{postgrest_version}}-linux-static-x64.tar.xz + when: not postgrest_archive_exist.stat.exists + +- name: postgres | tasks | extension | PostgREST | Unarchive "postgrest-{{postgrest_version}}-linux-static-x64.tar.xz" + ansible.builtin.unarchive: + src: /opt/PostgREST/postgrest-{{postgrest_version}}-linux-static-x64.tar.xz + dest: /opt/PostgREST/postgrest-{{postgrest_version}}/ + remote_src: yes + +- name: postgres | tasks | extension | PostgREST | create directory tree | create symlink to latest version + ansible.builtin.file: + src: /opt/PostgREST/postgrest-{{postgrest_version}}/postgrest + dest: /opt/PostgREST/postgrest_current + state: link + mode: '0755' + notify: + - restarted postgrest + +- name: postgres | tasks | extension | PostgREST | create systemd service + ansible.builtin.template: + dest: /etc/systemd/system/postgrest.service + src: installation/postgrest.service.j2 + notify: + - reloaded postgrest + +- name: postgres | tasks | extension | PostgREST | create PostgREST configuration file + ansible.builtin.template: + src: installation/postgrest.conf.j2 + dest: /etc/postgrest/postgrest.conf + mode: '0644' + owner: postgres + group: postgres + notify: + - restarted postgrest diff --git a/tasks/extension/pg_graphql.yaml b/tasks/extension/pg_graphql.yaml new file mode 100644 index 0000000..f441205 --- /dev/null +++ b/tasks/extension/pg_graphql.yaml @@ -0,0 +1,51 @@ +- name: postgres | tasks | extension| pg_graphql | install requirements + dnf: + name: + - '@Development tools' + - git + - python2 + - cmake + - postgresql{{ postgres_version }}-devel.x86_64 + state: present + +- name: postgres | tasks | extension| pg_graphql | install graphql/libgraphqlparser | clone code from github + ansible.builtin.git: + repo: https://github.com/graphql/libgraphqlparser.git + dest: /opt/libgraphqlparser + +- name: postgres | tasks | extension| pg_graphql | install graphql/libgraphqlparser | cmake + ansible.builtin.command: cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr . + args: + chdir: /opt/libgraphqlparser/ + creates: /opt/libgraphqlparser/libgraphqlparser.so + +- name: postgres | tasks | extension| pg_graphql | install graphql/libgraphqlparser | make + ansible.builtin.command: make + args: + chdir: /opt/libgraphqlparser/ + creates: /opt/libgraphqlparser/libgraphqlparser.so + +- name: postgres | tasks | extension| pg_graphql | install graphql/libgraphqlparser | make install + ansible.builtin.command: make install + args: + chdir: /opt/libgraphqlparser/ + creates: /usr/local/lib/libgraphqlparser.so + +- name: postgres | tasks | extension| pg_graphql | install graphql/pg_graphql | clone code from github + ansible.builtin.git: + repo: https://github.com/supabase/pg_graphql.git + dest: /opt/pg_graphql + +- name: postgres | tasks | extension| pg_graphql | install graphql/pg_graphql | make + ansible.builtin.command: make install + environment: + PATH: "/usr/pgsql-{{postgres_version}}/bin/:{{ ansible_env.PATH }}" + args: + chdir: /opt/pg_graphql + creates: /opt/pg_graphql/pg_graphql.so + +- name: "postgres | tasks | extension| pg_graphql | install graphql/pg_graphql | create link to /usr/pgsql-{{ postgres_version }}/lib/libgraphqlparser.so" + ansible.builtin.file: + src: /usr/lib/libgraphqlparser.so + dest: "/usr/pgsql-{{ postgres_version }}/lib/libgraphqlparser.so" + state: link \ No newline at end of file diff --git a/tasks/extension/timescale.yaml b/tasks/extension/timescale.yaml index 5e9854f..e08f755 100644 --- a/tasks/extension/timescale.yaml +++ b/tasks/extension/timescale.yaml @@ -1,10 +1,10 @@ -- name: postgres | install | extension | timescale | add timescale repo +- name: postgres | tasks | extension| timescale | install | add timescale repo ansible.builtin.template: src: installation/timescale.repo.j2 dest: /etc/yum.repos.d/timescale_timescaledb.repo -- name: postgres | install | install postgresql +- name: postgres | tasks | extension| timescale | install | install timescaledb extension dnf: name: - timescaledb-2-postgresql-{{postgres_version}} diff --git a/templates/installation/postgrest.conf.j2 b/templates/installation/postgrest.conf.j2 new file mode 100644 index 0000000..acbf857 --- /dev/null +++ b/templates/installation/postgrest.conf.j2 @@ -0,0 +1,3 @@ +db-uri = "{{postgrest_db_uri}}" +db-schemas = "{{ postgrest_db_schemas }}" +db-anon-role = "{{ postgrest_db_anon_role }}" diff --git a/templates/installation/postgrest.service.j2 b/templates/installation/postgrest.service.j2 new file mode 100644 index 0000000..f5de6f9 --- /dev/null +++ b/templates/installation/postgrest.service.j2 @@ -0,0 +1,12 @@ +[Unit] +Description=REST API for any PostgreSQL database +After=postgresql.service + +[Service] +User=postgrest +Group=postgrest +ExecStart=/opt/PostgREST/postgrest_current /etc/postgrest/postgrest.conf +ExecReload=/bin/kill -SIGUSR1 $MAINPID + +[Install] +WantedBy=multi-user.target