From 078ffdb6bbbdcbdd9e803ee92bf12b9a65a73353 Mon Sep 17 00:00:00 2001 From: Jiri 'Ghormoon' Novak Date: Thu, 6 May 2021 07:05:44 +0200 Subject: [PATCH 1/3] fix(pgsql): do not try to create db and user with schema --- zabbix/pgsql/conf.sls | 32 ++------------------------------ zabbix/pgsql/pkgs.sls | 34 ++++++++++++++++++++++++++++++++++ zabbix/pgsql/schema.sls | 2 +- 3 files changed, 37 insertions(+), 31 deletions(-) create mode 100644 zabbix/pgsql/pkgs.sls diff --git a/zabbix/pgsql/conf.sls b/zabbix/pgsql/conf.sls index 2884ef13..1ad72804 100644 --- a/zabbix/pgsql/conf.sls +++ b/zabbix/pgsql/conf.sls @@ -10,36 +10,8 @@ {% set dbroot_user = settings.get('dbroot_user') -%} {% set dbroot_pass = settings.get('dbroot_pass') -%} -# Install packages required for Salt postgres module -{% if settings.get('pkgs', defaults.get('pkgs', False)) - and not settings.get('skip_pkgs', defaults.skip_pkgs) -%} -pgsql_packages: - pkg.installed: - - pkgs: {{ settings.get('pkgs', defaults.pkgs)|json }} -{% elif settings.get('skip_pkgs', defaults.skip_pkgs) -%} -pgsql_packages: - test.configurable_test_state: - - name: You skipped installation of packages required for Salt postgres module. - - changes: False - - result: True -{% else -%} -pgsql_packages: - test.configurable_test_state: - - name: Packages required for Salt postgres module are not defined - - changes: False - - result: False - - comment: | - Additional packages are required to manage the PostgreSQL database. - Please specify them in pillar as list. - Tip: you need postgresql-client packages, like: - zabbix-pgsql: - pkgs: - - postgresql-client-common - - postgresql-client - Or you can skip installing them, but formula likely fail without them. - zabbix-pgsql: - skip_pkgs: True -{% endif -%} +include: + - zabbix.pgsql.pkgs zabbix_pgsql_user: postgres_user.present: diff --git a/zabbix/pgsql/pkgs.sls b/zabbix/pgsql/pkgs.sls new file mode 100644 index 00000000..bc697686 --- /dev/null +++ b/zabbix/pgsql/pkgs.sls @@ -0,0 +1,34 @@ +{% from "zabbix/map.jinja" import zabbix with context -%} +{% set settings = salt['pillar.get']('zabbix-pgsql', {}) -%} +{% set defaults = zabbix.get('pgsql', {}) -%} + +# Install packages required for Salt postgres module +{% if settings.get('pkgs', defaults.get('pkgs', False)) + and not settings.get('skip_pkgs', defaults.skip_pkgs) -%} +pgsql_packages: + pkg.installed: + - pkgs: {{ settings.get('pkgs', defaults.pkgs)|json }} +{% elif settings.get('skip_pkgs', defaults.skip_pkgs) -%} +pgsql_packages: + test.configurable_test_state: + - name: You skipped installation of packages required for Salt postgres module. + - changes: False + - result: True +{% else -%} +pgsql_packages: + test.configurable_test_state: + - name: Packages required for Salt postgres module are not defined + - changes: False + - result: False + - comment: | + Additional packages are required to manage the PostgreSQL database. + Please specify them in pillar as list. + Tip: you need postgresql-client packages, like: + zabbix-pgsql: + pkgs: + - postgresql-client-common + - postgresql-client + Or you can skip installing them, but formula likely fail without them. + zabbix-pgsql: + skip_pkgs: True +{% endif -%} diff --git a/zabbix/pgsql/schema.sls b/zabbix/pgsql/schema.sls index 9b148867..967d45a4 100644 --- a/zabbix/pgsql/schema.sls +++ b/zabbix/pgsql/schema.sls @@ -28,7 +28,7 @@ {% endif -%} include: - - zabbix.pgsql.conf + - zabbix.pgsql.pkgs check_db_pgsql: test.configurable_test_state: From 4f962c3c5dfb4f1ba1dea6e495501cef4039bdae Mon Sep 17 00:00:00 2001 From: Jiri 'Ghormoon' Novak Date: Mon, 19 Apr 2021 09:58:45 +0200 Subject: [PATCH 2/3] fix(pgsql): fix pgsql import - pgsql fixes, defaults --- zabbix/defaults.yaml | 1 + zabbix/osfamilymap.yaml | 1 + zabbix/pgsql/schema.sls | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/zabbix/defaults.yaml b/zabbix/defaults.yaml index 4e553c88..e2d87d8b 100644 --- a/zabbix/defaults.yaml +++ b/zabbix/defaults.yaml @@ -77,3 +77,4 @@ zabbix: dbname: zabbix dbuser: zabbix dbpassword: zabbix + sql_file: /usr/share/doc/zabbix-server-pgsql/create.sql.gz diff --git a/zabbix/osfamilymap.yaml b/zabbix/osfamilymap.yaml index d4a34396..ff64daf0 100644 --- a/zabbix/osfamilymap.yaml +++ b/zabbix/osfamilymap.yaml @@ -167,6 +167,7 @@ Suse: pgsql: pkgs: - postgresql + - gzip sql_file: /usr/share/doc/packages/zabbix-server-pgsql/create.sql.gz diff --git a/zabbix/pgsql/schema.sls b/zabbix/pgsql/schema.sls index 967d45a4..9fa4a407 100644 --- a/zabbix/pgsql/schema.sls +++ b/zabbix/pgsql/schema.sls @@ -11,7 +11,7 @@ {% set dbroot_user = settings.get('dbroot_user') -%} {% set dbroot_pass = settings.get('dbroot_pass') -%} -{% set sql_file = settings.get('sql_file', '/usr/share/doc/zabbix-server-pgsql/create.sql.gz') -%} +{% set sql_file = settings.get('sql_file', defaults.sql_file) -%} # Connection args required only if dbroot_user and dbroot_pass defined. {% set connection_args = {} -%} @@ -51,7 +51,7 @@ upload_sql_dump: import_sql: cmd.run: - - name: zcat {{ sql_file }} | psql | head -5 + - name: zcat {{ sql_file }} | psql | { head -5; cat >/dev/null; } - runas: {{ zabbix.user }} - env: - PGUSER: {{ dbuser }} From a42d8222019744e1a4a8d513ee57dfce70262ab8 Mon Sep 17 00:00:00 2001 From: Jiri 'Ghormoon' Novak Date: Tue, 11 May 2021 16:30:46 +0200 Subject: [PATCH 3/3] fix(pgsql): fix pgsql import - fix table detection --- zabbix/pgsql/schema.sls | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/zabbix/pgsql/schema.sls b/zabbix/pgsql/schema.sls index 9fa4a407..a00404d4 100644 --- a/zabbix/pgsql/schema.sls +++ b/zabbix/pgsql/schema.sls @@ -8,34 +8,26 @@ {% set dbuser = settings.get('dbuser', defaults.dbuser) -%} {% set dbpassword = settings.get('dbpassword', defaults.dbpassword) -%} -{% set dbroot_user = settings.get('dbroot_user') -%} -{% set dbroot_pass = settings.get('dbroot_pass') -%} - {% set sql_file = settings.get('sql_file', defaults.sql_file) -%} -# Connection args required only if dbroot_user and dbroot_pass defined. -{% set connection_args = {} -%} -{% if dbroot_user and dbroot_pass -%} -{% set connection_args = {'runas': 'nobody', 'host': dbhost, 'user': dbroot_user, 'password': dbroot_pass} -%} -{% endif -%} - -# Check is there any tables in database. -# salt.postgres.psql_query return empty result if there is no tables or 'False' on any error i.e. failed auth. -{% set list_tables = "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' LIMIT 1;" %} -{% set is_db_empty = True -%} -{% if salt.postgres.psql_query(query=list_tables, maintenance_db=dbname, **connection_args) -%} -{% set is_db_empty = False -%} -{% endif -%} +{% set table_query = "SELECT count(tablename) FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';" %} +{% set psql_cmd = "$(psql -X -A -t -c \\\"" + table_query + "\\\" || echo \\\"-1\\\") -eq \\\"0\\\" " %} include: - zabbix.pgsql.pkgs +# Check is there any tables in database. +# returns changed if there are zero tables in the db check_db_pgsql: - test.configurable_test_state: - - name: Is there any tables in '{{ dbname }}' database? - - changes: {{ is_db_empty }} - - result: True - - comment: If changes is 'True' data import required. + cmd.run: + - name: "[[ {{ psql_cmd }} ]] && echo \"changed=yes comment='DB needs schema import.'\" || echo \"changed=no comment='No DB import needed or possible.'\"" + - runas: {{ zabbix.user }} + - stateful: True + - env: + - PGUSER: {{ dbuser }} + - PGPASSWORD: {{ dbpassword }} + - PGDATABASE: {{ dbname }} + - PGHOST: {{ dbhost }} {% if 'sql_file' in settings -%} upload_sql_dump: @@ -61,4 +53,4 @@ import_sql: - require: - pkg: zabbix-server - onchanges: - - test: check_db_pgsql + - cmd: check_db_pgsql