Hello community, here is the log from the commit of package saphanabootstrap-formula for openSUSE:Factory checked in at 2019-07-04 15:43:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/saphanabootstrap-formula (Old) and /work/SRC/openSUSE:Factory/.saphanabootstrap-formula.new.4615 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "saphanabootstrap-formula" Thu Jul 4 15:43:19 2019 rev:2 rq:713172 version:0.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/saphanabootstrap-formula/saphanabootstrap-formula.changes 2019-05-08 15:16:46.993030927 +0200 +++ /work/SRC/openSUSE:Factory/.saphanabootstrap-formula.new.4615/saphanabootstrap-formula.changes 2019-07-04 15:43:21.870117930 +0200 @@ -1,0 +2,48 @@ +Tue Jul 2 11:14:50 UTC 2019 - Diego Vinicius Akechi <dake...@suse.com> + +- Version bump 0.2.4 + * Change the salt-formula directories permissions to 0750 to avoid + conflicts with the package salt-standalone-formulas-configuration. + + * Correct the required package name to + salt-standalone-formulas-configuration + +------------------------------------------------------------------- +Mon Jul 1 11:27:50 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.3 supporting hanadb_exporter logging system + +------------------------------------------------------------------- +Wed Jun 19 14:23:59 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.2 adding hanadb_exporter deployment + +------------------------------------------------------------------- +Tue Jun 11 11:42:31 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.1 with fixed spec files. Now the package + is available in all SLE12 and SLE15 versions (boo#1137989, jsc#SLE-4143) + +------------------------------------------------------------------- +Thu Jun 6 07:28:43 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Fix how qas instance number is created in scale_up_resources template + +------------------------------------------------------------------- +Fri May 21 12:37:43 UTC 2019 - Diego Vinicius Akechi <dake...@suse.com> + +- Version bump 0.2.0 + * Include the salt-formulas-configuration dependency on + SLE/Leap 15-SP1 and higher. This package configures the shared salt + formulas location (/usr/share/salt-formulas) to be used by SUMA 4.0 + or salt in standalone mode. + * Drops the saphanabootstrap-formula-suma package, as the forms metadata + will be available only on SUMA 4.0 using the shared location. + +------------------------------------------------------------------- +Thu May 16 08:52:06 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Update formula to work with the latest shaptools code. In this version + the secondary node registration is managed completely in shaptools + +------------------------------------------------------------------- Old: ---- saphanabootstrap-formula-0.1.0.tar.gz New: ---- saphanabootstrap-formula-0.2.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ saphanabootstrap-formula.spec ++++++ --- /var/tmp/diff_new_pack.jR0NAW/_old 2019-07-04 15:43:22.562119012 +0200 +++ /var/tmp/diff_new_pack.jR0NAW/_new 2019-07-04 15:43:22.566119018 +0200 @@ -1,7 +1,7 @@ # # spec file for package saphanabootstrap-formula # -# Copyright (c) 2018 SUSE LLC, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,40 +12,39 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # # See also http://en.opensuse.org/openSUSE:Specfile_guidelines Name: saphanabootstrap-formula -Version: 0.1.0 -Release: 1 +Version: 0.2.4 +Release: 0 Summary: SAP HANA platform deployment formula - License: Apache-2.0 + Url: https://github.com/SUSE/%{name} Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch -Requires: salt-shaptools Requires: habootstrap-formula +Requires: salt-shaptools + +# On SLE/Leap 15-SP1 and TW requires the new salt-formula configuration location. +%if ! (0%{?sle_version:1} && 0%{?sle_version} < 150100) +Requires: salt-standalone-formulas-configuration +%endif %define fname hana -%define fdir %{_datadir}/susemanager/formulas +%define fdir %{_datadir}/salt-formulas %define ftemplates templates %description -SAP HANA deployment salt formula - -# package to deploy on SUMA specific path. -%package suma -Summary: SAP HANA platform deployment formula (SUMA specific) -Requires: salt-shaptools -Requires: habootstrap-formula-suma - -%description suma -SAP HANA deployment salt formula (SUMA specific) +SAP HANA deployment salt formula. This formula is capable to install +SAP HANA nodes, enable system replication and configure SLE-HA cluster +with the SAPHanaSR resource agent, using standalone salt or via SUSE Manager +formulas with forms, available on SUSE Manager 4.0. %prep %setup -q @@ -53,12 +52,17 @@ %build %install -pwd + +# before SUMA 4.0/15-SP1, install on the standard Salt Location. +%if 0%{?sle_version:1} && 0%{?sle_version} < 150100 + mkdir -p %{buildroot}/srv/salt/ cp -R %{fname} %{buildroot}/srv/salt/ cp -R %{ftemplates} %{buildroot}/srv/salt/%{fname}/ -# SUMA Specific +%else + +# On SUMA 4.0/15-SP1, a single shared directory will be used. mkdir -p %{buildroot}%{fdir}/states/%{fname} mkdir -p %{buildroot}%{fdir}/metadata/%{fname} cp -R %{fname} %{buildroot}%{fdir}/states @@ -69,21 +73,28 @@ cp -R metadata.yml %{buildroot}%{fdir}/metadata/%{fname} fi +%endif +%if 0%{?sle_version:1} && 0%{?sle_version} < 150100 %files %defattr(-,root,root,-) -%license LICENSE +%if 0%{?sle_version} < 120300 +%doc README.md LICENSE +%else %doc README.md +%license LICENSE +%endif /srv/salt/%{fname} /srv/salt/%{fname}/%{ftemplates} %dir %attr(0755, root, salt) /srv/salt -%files suma +%else + +%files %defattr(-,root,root,-) -%license LICENSE %doc README.md -%dir %{_datadir}/susemanager +%license LICENSE %dir %{fdir} %dir %{fdir}/states %dir %{fdir}/metadata @@ -91,9 +102,10 @@ %{fdir}/states/%{fname}/%{ftemplates} %{fdir}/metadata/%{fname} -%dir %attr(0755, root, salt) %{_datadir}/susemanager -%dir %attr(0755, root, salt) %{fdir} -%dir %attr(0755, root, salt) %{fdir}/states -%dir %attr(0755, root, salt) %{fdir}/metadata +%dir %attr(0750, root, salt) %{fdir} +%dir %attr(0750, root, salt) %{fdir}/states +%dir %attr(0750, root, salt) %{fdir}/metadata + +%endif %changelog ++++++ saphanabootstrap-formula-0.1.0.tar.gz -> saphanabootstrap-formula-0.2.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/README.md new/saphanabootstrap-formula-0.2.4/README.md --- old/saphanabootstrap-formula-0.1.0/README.md 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/README.md 2019-07-03 10:00:51.613343765 +0200 @@ -37,7 +37,7 @@ is used in the example): ```bash -sudo zypper addrepo zypper addrepo https://download.opensuse.org/repositories/network:ha-clustering:Factory/openSUSE_Leap_15.0/network:ha-clustering:Factory.repo +sudo zypper addrepo https://download.opensuse.org/repositories/network:ha-clustering:Factory/openSUSE_Leap_15.0/network:ha-clustering:Factory.repo sudo zypper ref sudo zypper in saphanabootstrap-formula ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/form.yml new/saphanabootstrap-formula-0.2.4/form.yml --- old/saphanabootstrap-formula-0.1.0/form.yml 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/form.yml 2019-07-03 10:00:51.613343765 +0200 @@ -179,3 +179,31 @@ $name: Operation mode $type: select $values: [logreplay, delta_datashipping] + timeout: + $name: Timeout to wait until the primary node is enabled + $type: text + $optional: true + + add_exporter: + $name: Add SAP HANA database metrics exporter + $type: boolean + $default: false + $help: Mark if you want add the SAP HANA database metrics exporter + exporter: + $name: SAP HANA database metrics exporter + $optional: true + $visibleIf: .add_exporter == true + $type: group + exposition_port: + $name: SAP HANA exposter exposition port + $type: text + $optional: true + user: + $name: SAP HANA user + $type: text + $default: SYSTEM + $optional: false + password: + $name: SAP HANA password + $type: password + $optional: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/copy_ssfs.sls new/saphanabootstrap-formula-0.2.4/hana/copy_ssfs.sls --- old/saphanabootstrap-formula-0.1.0/hana/copy_ssfs.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/copy_ssfs.sls 1970-01-01 01:00:00.000000000 +0100 @@ -1,51 +0,0 @@ -{%- from "hana/map.jinja" import hana with context -%} - -{% set host = grains['host'] %} - -{% for node in hana.nodes %} -{% if node.host == host and node.secondary is defined %} - -add-network-repo: - pkgrepo.managed: - - name: network - - baseurl: https://download.opensuse.org/repositories/network/SLE_12_SP3 - - gpgautoimport: True - -install-sshpass: - pkg.installed: - - name: sshpass - - refresh: False - - fromrepo: network - - require: - - add-network-repo - -{% for prim_node in hana.nodes %} -{% if node.secondary.remote_host == prim_node.host and prim_node.primary is defined %} -{% set primary_pass = prim_node.password %} - -copy-ssfs-data: - cmd.run: - - name: sshpass -p '{{ primary_pass }}' scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null - {{ node.sid.lower() }}adm@{{ node.secondary.remote_host }}:/usr/sap/{{ node.sid.upper() }}/SYS/global/security/rsecssfs/data/SSFS_{{ node.sid.upper() }}.DAT - /usr/sap/{{ node.sid.upper() }}/SYS/global/security/rsecssfs/data/SSFS_{{ node.sid.upper() }}.DAT - - runas: {{ node.sid.lower() }}adm - - password: {{ node.password }} - - require: - - primary-available - - install-sshpass - -copy-ssfs-key: - cmd.run: - - name: sshpass -p '{{ primary_pass }}' scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null - {{ node.sid.lower() }}adm@{{ node.secondary.remote_host }}:/usr/sap/{{ node.sid.upper() }}/SYS/global/security/rsecssfs/key/SSFS_{{ node.sid.upper() }}.KEY - /usr/sap/{{ node.sid.upper() }}/SYS/global/security/rsecssfs/key/SSFS_{{ node.sid.upper() }}.KEY - - runas: {{ node.sid.lower() }}adm - - password: {{ node.password }} - - require: - - primary-available - - install-sshpass - -{% endif %} -{% endfor %} -{% endif %} -{% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/defaults.yaml new/saphanabootstrap-formula-0.2.4/hana/defaults.yaml --- old/saphanabootstrap-formula-0.1.0/hana/defaults.yaml 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/defaults.yaml 2019-07-03 10:00:51.613343765 +0200 @@ -41,3 +41,4 @@ remote_instance: '00' replication_mode: 'sync' operation_mode: 'logreplay' + timeout: 600 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/enable_cost_optimized.sls new/saphanabootstrap-formula-0.2.4/hana/enable_cost_optimized.sls --- old/saphanabootstrap-formula-0.1.0/hana/enable_cost_optimized.sls 1970-01-01 01:00:00.000000000 +0100 +++ new/saphanabootstrap-formula-0.2.4/hana/enable_cost_optimized.sls 2019-07-03 10:00:51.613343765 +0200 @@ -0,0 +1,55 @@ +{%- from "hana/map.jinja" import hana with context -%} +{% set host = grains['host'] %} + +{% for node in hana.nodes %} +{% if node.host == host and node.scenario_type is defined and node.scenario_type.lower() == 'cost-optimized' and node.cost_optimized_parameters is defined%} + +reduce_memory_resources_{{ node.host+node.sid }}: + hana.memory_resources_updated: + - name: {{ node.host }} + - global_allocation_limit: {{ node.cost_optimized_parameters.global_allocation_limit }} + - preload_column_tables: {{ node.cost_optimized_parameters.preload_column_tables }} + - user_name: SYSTEM + {% if node.install.system_user_password is defined %} + - user_password: {{ node.install.system_user_password }} + {% endif %} + - sid: {{ node.sid }} + - inst: {{ node.instance }} + - password: {{ node.password }} + - require: + - hana_install_{{ node.host+node.sid }} + +{% if node.host == host and node.secondary is defined %} + +setup_srHook_directory: + file.directory: + - name: /hana/shared/srHook + - user: {{ node.sid.lower() }}adm + - group: sapsys + - mode: 755 + - makedirs: True + +install_srTakeover_hook: + file.managed: + - source: salt://hana/templates/srTakeover_hook.j2 + - name: /hana/shared/srHook/sr-Takeover.py + - user: {{ node.sid.lower() }}adm + - group: sapsys + - template: jinja + - require: + - reduce_memory_resources_{{ node.host+node.sid }} + - setup_srHook_directory + +install_hana_python_packages: + archive.extracted: + - name: /hana/shared/srHook + - user: {{ node.sid.lower() }}adm + - group: sapsys + - enforce_toplevel: False + - source: {{ grains['hana_inst_folder']~'/DATA_UNITS/HDB_CLIENT_LINUX_X86_64/client/PYDBAPI.TGZ' }} + - require: + - reduce_memory_resources_{{ node.host+node.sid }} + - setup_srHook_directory +{% endif %} +{% endif %} +{% endfor %} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/enable_secondary.sls new/saphanabootstrap-formula-0.2.4/hana/enable_secondary.sls --- old/saphanabootstrap-formula-0.1.0/hana/enable_secondary.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/enable_secondary.sls 2019-07-03 10:00:51.613343765 +0200 @@ -3,9 +3,10 @@ {% for node in hana.nodes %} {% if node.host == host and node.secondary is defined %} -include: - - .primary_available - - .copy_ssfs + +{% for prim_node in hana.nodes %} +{% if node.secondary.remote_host == prim_node.host and prim_node.primary is defined %} +{% set primary_pass = prim_node.password %} {{ node.secondary.name }}: hana.sr_secondary_registered: @@ -16,8 +17,11 @@ - remote_instance: {{ node.secondary.remote_instance }} - replication_mode: {{ node.secondary.replication_mode }} - operation_mode: {{ node.secondary.operation_mode }} - - require: - - primary-available + - timeout: {{ node.secondary.primary_timeout|default(100) }} + - interval: {{ node.secondary.interval|default(10) }} + - primary_pass: {{ primary_pass }} {% endif %} {% endfor %} +{% endif %} +{% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/exporter.sls new/saphanabootstrap-formula-0.2.4/hana/exporter.sls --- old/saphanabootstrap-formula-0.1.0/hana/exporter.sls 1970-01-01 01:00:00.000000000 +0100 +++ new/saphanabootstrap-formula-0.2.4/hana/exporter.sls 2019-07-03 10:00:51.613343765 +0200 @@ -0,0 +1,38 @@ +{%- from "hana/map.jinja" import hana with context -%} +{% set host = grains['host'] %} + +{% for node in hana.nodes %} +{% if node.host == host and node.exporter is defined %} + +{% set instance = '{:0>2}'.format(node.instance) %} +{% set config_file = '/etc/hanadb_exporter/config_{}_{}.json'.format(node.sid, instance) %} + +hanadb_exporter: + pkg.installed + +python3-PyHDB: + pkg.installed + +configure_exporter: + file.managed: + - source: salt://hana/templates/hanadb_exporter.j2 + - name: {{ config_file }} + - template: jinja + - require: + - hanadb_exporter + - python3-PyHDB + +stop_exporter: + process.absent: + - name: hanadb_exporter -c {{ config_file }} -m /etc/hanadb_exporter/metrics.json + - require: + - configure_exporter + +start_exporter: + cmd.run: + - name: nohup hanadb_exporter -c {{ config_file }} -m /etc/hanadb_exporter/metrics.json &>/dev/null & + - require: + - configure_exporter + +{% endif %} +{% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/init.sls new/saphanabootstrap-formula-0.2.4/hana/init.sls --- old/saphanabootstrap-formula-0.1.0/hana/init.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/init.sls 2019-07-03 10:00:51.613343765 +0200 @@ -8,3 +8,4 @@ - hana.install - hana.enable_primary - hana.enable_secondary + - hana.exporter diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/install.sls new/saphanabootstrap-formula-0.2.4/hana/install.sls --- old/saphanabootstrap-formula-0.1.0/hana/install.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/install.sls 2019-07-03 10:00:51.613343765 +0200 @@ -1,6 +1,9 @@ {%- from "hana/map.jinja" import hana with context -%} {% set host = grains['host'] %} +include: + - .enable_cost_optimized + {% for node in hana.nodes %} {% if node.host == host and node.install is defined %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/packages.sls new/saphanabootstrap-formula-0.2.4/hana/packages.sls --- old/saphanabootstrap-formula-0.1.0/hana/packages.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/packages.sls 2019-07-03 10:00:51.613343765 +0200 @@ -10,6 +10,9 @@ patterns-sap-hana: pkg.installed: - fromrepo: {{ repo }} + - retry: + attempts: 3 + interval: 15 {% else %} install_required_packages: @@ -21,15 +24,10 @@ {% endif %} # Install shaptools depending on the os and python version -{% if (grains['os_family'] == 'Suse') and (grains['osmajorrelease'] == 12) %} -{% set python2_prefix = 'python' %} -{% else %} -{% set python2_prefix = 'python2' %} -{% endif %} - {% if grains['pythonversion'][0] == 2 %} -{{ python2_prefix }}-shaptools: +python-shaptools: {% else %} python3-shaptools: {% endif %} - pkg.installed + pkg.installed: + - resolve_capabilities: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/pre_validation.sls new/saphanabootstrap-formula-0.2.4/hana/pre_validation.sls --- old/saphanabootstrap-formula-0.1.0/hana/pre_validation.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/pre_validation.sls 2019-07-03 10:00:51.613343765 +0200 @@ -44,6 +44,11 @@ {% endif %} {% endif %} {# Check HANA Systen replication mode finish #} + {# Check HANA exporter #} + {% if node.add_exporter is defined and node.add_exporter == false%} + {% do node.pop('exporter') %} + {% endif %} + {# Check HANA exporter finish #} {% endif %} {% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/hana/primary_available.sls new/saphanabootstrap-formula-0.2.4/hana/primary_available.sls --- old/saphanabootstrap-formula-0.1.0/hana/primary_available.sls 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/hana/primary_available.sls 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -{%- from "hana/map.jinja" import hana with context -%} -{% set host = grains['host'] %} - -{% for node in hana.nodes %} -{% if node.host == host and node.secondary is defined %} -netcat-openbsd: - pkg.installed - -primary-available: - cmd.run: - - name: until nc -z {{ node.secondary.remote_host }} 4{{ '{:0>2}'.format(node.instance) }}02; do sleep 1; done - - timeout: {{ node.secondary.primary_timeout|default(100) }} - - require: - - netcat-openbsd - -{% endif %} -{% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/pillar.example new/saphanabootstrap-formula-0.2.4/pillar.example --- old/saphanabootstrap-formula-0.1.0/pillar.example 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/pillar.example 2019-07-03 10:00:51.613343765 +0200 @@ -30,6 +30,12 @@ user_password: 'Qwerty1234' database: 'SYSTEMDB' file: 'backup' + # Optional: Add hanadb_exporter to the instance + exporter: + exposition_port: 8001 # Optional, 8001 by default + user: 'SYSTEM' + password: 'Qwerty1234' + - host: 'hana02' sid: 'prd' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/saphanabootstrap-formula.changes new/saphanabootstrap-formula-0.2.4/saphanabootstrap-formula.changes --- old/saphanabootstrap-formula-0.1.0/saphanabootstrap-formula.changes 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/saphanabootstrap-formula.changes 2019-07-03 10:00:51.613343765 +0200 @@ -1,4 +1,52 @@ ------------------------------------------------------------------- +Tue Jul 2 11:14:50 UTC 2019 - Diego Vinicius Akechi <dake...@suse.com> + +- Version bump 0.2.4 + * Change the salt-formula directories permissions to 0750 to avoid + conflicts with the package salt-standalone-formulas-configuration. + + * Correct the required package name to + salt-standalone-formulas-configuration + +------------------------------------------------------------------- +Mon Jul 1 11:27:50 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.3 supporting hanadb_exporter logging system + +------------------------------------------------------------------- +Wed Jun 19 14:23:59 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.2 adding hanadb_exporter deployment + +------------------------------------------------------------------- +Tue Jun 11 11:42:31 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Create package version 0.2.1 with fixed spec files. Now the package + is available in all SLE12 and SLE15 versions (boo#1137989, jsc#SLE-4143) + +------------------------------------------------------------------- +Thu Jun 6 07:28:43 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Fix how qas instance number is created in scale_up_resources template + +------------------------------------------------------------------- +Fri May 21 12:37:43 UTC 2019 - Diego Vinicius Akechi <dake...@suse.com> + +- Version bump 0.2.0 + * Include the salt-formulas-configuration dependency on + SLE/Leap 15-SP1 and higher. This package configures the shared salt + formulas location (/usr/share/salt-formulas) to be used by SUMA 4.0 + or salt in standalone mode. + * Drops the saphanabootstrap-formula-suma package, as the forms metadata + will be available only on SUMA 4.0 using the shared location. + +------------------------------------------------------------------- +Thu May 16 08:52:06 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> + +- Update formula to work with the latest shaptools code. In this version + the secondary node registration is managed completely in shaptools + +------------------------------------------------------------------- Thu Apr 25 12:06:43 UTC 2019 - Diego Vinicius Akechi <dake...@suse.com> - Changed requires from salt-saphana to salt-shaptools. @@ -7,26 +55,26 @@ Mon Mar 18 08:50:43 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> - Update primary available checking to execute this action before - trying to copy the SSFS files from primary node + trying to copy the SSFS files from primary node - Add configurable timeout to wait to the primary node ------------------------------------------------------------------- Tue Mar 12 07:52:37 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> - Fix OS release comparison to use integer type in order to choose - installable python version + installable python version ------------------------------------------------------------------- Fri Mar 8 13:47:41 UTC 2019 - Xabier Arbulu Insausti <xarb...@suse.com> -- Improve shaptools installation python version management +- Improve shaptools installation python version management ------------------------------------------------------------------- Mon Mar 4 15:30:24 UTC 2019 - xarb...@suse.com - Improved the use of keystore access. When the key_name is informed, the user_name/user_password is not needed. - + ------------------------------------------------------------------- Wed Feb 25 10:15:35 UTC 2019 - dake...@suse.com @@ -37,9 +85,9 @@ ------------------------------------------------------------------- Wed Feb 20 08:18:35 UTC 2019 - xarb...@suse.com -- Add templates folder with RA configuration templates +- Add templates folder with RA configuration templates ------------------------------------------------------------------- Thu Dec 20 08:33:10 UTC 2018 - xarb...@suse.com -- First version of the SAP HANA deployment formula +- First version of the SAP HANA deployment formula diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/saphanabootstrap-formula.spec new/saphanabootstrap-formula-0.2.4/saphanabootstrap-formula.spec --- old/saphanabootstrap-formula-0.1.0/saphanabootstrap-formula.spec 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/saphanabootstrap-formula.spec 2019-07-03 10:00:51.613343765 +0200 @@ -1,7 +1,7 @@ # # spec file for package saphanabootstrap-formula # -# Copyright (c) 2018 SUSE LLC, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,40 +12,39 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # # See also http://en.opensuse.org/openSUSE:Specfile_guidelines Name: saphanabootstrap-formula -Version: 0.1.0 -Release: 1 +Version: 0.2.4 +Release: 0 Summary: SAP HANA platform deployment formula - License: Apache-2.0 + Url: https://github.com/SUSE/%{name} Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch -Requires: salt-shaptools Requires: habootstrap-formula +Requires: salt-shaptools + +# On SLE/Leap 15-SP1 and TW requires the new salt-formula configuration location. +%if ! (0%{?sle_version:1} && 0%{?sle_version} < 150100) +Requires: salt-standalone-formulas-configuration +%endif %define fname hana -%define fdir %{_datadir}/susemanager/formulas +%define fdir %{_datadir}/salt-formulas %define ftemplates templates %description -SAP HANA deployment salt formula - -# package to deploy on SUMA specific path. -%package suma -Summary: SAP HANA platform deployment formula (SUMA specific) -Requires: salt-shaptools -Requires: habootstrap-formula-suma - -%description suma -SAP HANA deployment salt formula (SUMA specific) +SAP HANA deployment salt formula. This formula is capable to install +SAP HANA nodes, enable system replication and configure SLE-HA cluster +with the SAPHanaSR resource agent, using standalone salt or via SUSE Manager +formulas with forms, available on SUSE Manager 4.0. %prep %setup -q @@ -53,12 +52,17 @@ %build %install -pwd + +# before SUMA 4.0/15-SP1, install on the standard Salt Location. +%if 0%{?sle_version:1} && 0%{?sle_version} < 150100 + mkdir -p %{buildroot}/srv/salt/ cp -R %{fname} %{buildroot}/srv/salt/ cp -R %{ftemplates} %{buildroot}/srv/salt/%{fname}/ -# SUMA Specific +%else + +# On SUMA 4.0/15-SP1, a single shared directory will be used. mkdir -p %{buildroot}%{fdir}/states/%{fname} mkdir -p %{buildroot}%{fdir}/metadata/%{fname} cp -R %{fname} %{buildroot}%{fdir}/states @@ -69,21 +73,28 @@ cp -R metadata.yml %{buildroot}%{fdir}/metadata/%{fname} fi +%endif +%if 0%{?sle_version:1} && 0%{?sle_version} < 150100 %files %defattr(-,root,root,-) -%license LICENSE +%if 0%{?sle_version} < 120300 +%doc README.md LICENSE +%else %doc README.md +%license LICENSE +%endif /srv/salt/%{fname} /srv/salt/%{fname}/%{ftemplates} %dir %attr(0755, root, salt) /srv/salt -%files suma +%else + +%files %defattr(-,root,root,-) -%license LICENSE %doc README.md -%dir %{_datadir}/susemanager +%license LICENSE %dir %{fdir} %dir %{fdir}/states %dir %{fdir}/metadata @@ -91,9 +102,10 @@ %{fdir}/states/%{fname}/%{ftemplates} %{fdir}/metadata/%{fname} -%dir %attr(0755, root, salt) %{_datadir}/susemanager -%dir %attr(0755, root, salt) %{fdir} -%dir %attr(0755, root, salt) %{fdir}/states -%dir %attr(0755, root, salt) %{fdir}/metadata +%dir %attr(0750, root, salt) %{fdir} +%dir %attr(0750, root, salt) %{fdir}/states +%dir %attr(0750, root, salt) %{fdir}/metadata + +%endif %changelog diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/templates/hanadb_exporter.j2 new/saphanabootstrap-formula-0.2.4/templates/hanadb_exporter.j2 --- old/saphanabootstrap-formula-0.1.0/templates/hanadb_exporter.j2 1970-01-01 01:00:00.000000000 +0100 +++ new/saphanabootstrap-formula-0.2.4/templates/hanadb_exporter.j2 2019-07-03 10:00:51.613343765 +0200 @@ -0,0 +1,25 @@ +{%- from "hana/map.jinja" import hana with context -%} +{% set host = grains['host'] %} + +{% for node in hana.nodes %} +{% if node.host == host and node.exporter is defined %} + +{% set dbinst = '{:0>2}'.format(node.instance) %} +{% set node_subix = '{}_{}'.format(node.sid, dbinst) %} + +{ + "exposition_port": {{ node.exporter.exposition_port|default(8001) }}, + "hana": { + "host": "{{ node.host }}", + "port": 3{{ dbinst }}15, + "user": "{{ node.exporter.user }}", + "password": "{{ node.exporter.password }}" + }, + "logging": { + "config_file": "/etc/hanadb_exporter/logging_config.ini", + "log_file": "/var/log/hanadb_exporter_{{ node_subix }}.log" + } +} + +{% endif %} +{% endfor %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/templates/performance_optimized.j2 new/saphanabootstrap-formula-0.2.4/templates/performance_optimized.j2 --- old/saphanabootstrap-formula-0.1.0/templates/performance_optimized.j2 2019-04-25 12:34:44.593238071 +0200 +++ new/saphanabootstrap-formula-0.2.4/templates/performance_optimized.j2 1970-01-01 01:00:00.000000000 +0100 @@ -1,70 +0,0 @@ -{% set data = pillar.cluster.configure.template.parameters %} -{% set sid = data.sid.upper() %} -{% set instance = '{:0>2}'.format(data.instance) %} - -# -# defaults -# - -rsc_defaults \ - resource-stickiness="1000" \ - migration-threshold="5000" - -op_defaults \ - timeout="600" - -# -# production HANA -# - -primitive rsc_ip_{{ sid }}_HDB{{ instance }} ocf:heartbeat:IPaddr2 \ - params \ - ip="{{ data.virtual_ip }}" cidr_netmask="{{ 32 if data.platform == "gcp" else data.virtual_ip_mask }}" {{ "nic=" ~ pillar.cluster.interface|default('eth0') }} \ - op start timeout="20" op stop timeout="20" \ - op monitor interval="10" timeout="20" - -primitive rsc_SAPHanaTopology_{{ sid }}_HDB{{ instance }} ocf:suse:SAPHanaTopology \ - params \ - SID="{{ sid }}" \ - InstanceNumber="{{ instance }}" \ - op monitor interval="10" timeout="600" \ - op start interval="0" timeout="600" \ - op stop interval="0" timeout="300" - -clone cln_SAPHanaTopology_{{ sid }}_HDB{{ instance }} rsc_SAPHanaTopology_{{ sid }}_HDB{{ instance }} \ - meta is-managed="true" clone-node-max="1" interleave="true" - -primitive rsc_SAPHana_{{ sid }}_HDB{{ instance }} ocf:suse:SAPHana \ - params \ - SID="{{ sid }}" \ - InstanceNumber="{{ instance }}" \ - PREFER_SITE_TAKEOVER="{{ data.prefer_takeover }}" \ - AUTOMATED_REGISTER="{{ data.auto_register }}" \ - DUPLICATE_PRIMARY_TIMEOUT="7200" \ - op start interval="0" timeout="3600" \ - op stop interval="0" timeout="3600" \ - op promote interval="0" timeout="3600" \ - op monitor interval="60" role="Master" timeout="700" \ - op monitor interval="61" role="Slave" timeout="700" - -ms msl_SAPHana_{{ sid }}_HDB{{ instance }} rsc_SAPHana_{{ sid }}_HDB{{ instance }} \ - meta clone-max="2" clone-node-max="1" interleave="true" - -{% if data.platform == "azure" %} - -primitive rsc_nc_{{ sid }}_HDB{{ instance }} anything \ - params binfile="/usr/bin/nc" cmdline_options="-l -k 62503" \ - meta resource-stickiness=0 \ - op monitor timeout="20" interval="10" depth="0" - -group g_ip_{{ sid }}_HDB{{ instance }} rsc_ip_{{ sid }}_HDB{{ instance }} rsc_nc_{{ sid }}_HDB{{ instance }} - -colocation col_saphana_ip_{{ sid }}_HDB{{ instance }} 2000: g_ip_{{ sid }}_HDB{{ instance }}:Started msl_SAPHana_{{ sid }}_HDB{{ instance }}:Master - -{% else %} - -colocation col_saphana_ip_{{ sid }}_HDB{{ instance }} 2000: rsc_ip_{{ sid }}_HDB{{ instance }}:Started msl_SAPHana_{{ sid }}_HDB{{ instance }}:Master - -{% endif %} - -order ord_SAPHana_{{ sid }}_HDB{{ instance }} Optional: cln_SAPHanaTopology_{{ sid }}_HDB{{ instance }} msl_SAPHana_{{ sid }}_HDB{{ instance }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/templates/scale_up_resources.j2 new/saphanabootstrap-formula-0.2.4/templates/scale_up_resources.j2 --- old/saphanabootstrap-formula-0.1.0/templates/scale_up_resources.j2 1970-01-01 01:00:00.000000000 +0100 +++ new/saphanabootstrap-formula-0.2.4/templates/scale_up_resources.j2 2019-07-03 10:00:51.613343765 +0200 @@ -0,0 +1,97 @@ +{% set data = pillar.cluster.configure.template.parameters %} +{% set sid = data.sid.upper() %} +{% set instance = '{:0>2}'.format(data.instance) %} + +# +# defaults +# + +rsc_defaults \ + resource-stickiness="1000" \ + migration-threshold="5000" + +op_defaults \ + timeout="600" + +# +# production HANA +# + +primitive rsc_ip_{{ sid }}_HDB{{ instance }} ocf:heartbeat:IPaddr2 \ + params \ + ip="{{ data.virtual_ip }}" cidr_netmask="{{ 32 if data.platform == "gcp" else data.virtual_ip_mask }}" {{ "nic=" ~ pillar.cluster.interface|default('eth0') }} \ + op start timeout="20" op stop timeout="20" \ + op monitor interval="10" timeout="20" + +primitive rsc_SAPHanaTopology_{{ sid }}_HDB{{ instance }} ocf:suse:SAPHanaTopology \ + params \ + SID="{{ sid }}" \ + InstanceNumber="{{ instance }}" \ + op monitor interval="10" timeout="600" \ + op start interval="0" timeout="600" \ + op stop interval="0" timeout="300" + +clone cln_SAPHanaTopology_{{ sid }}_HDB{{ instance }} rsc_SAPHanaTopology_{{ sid }}_HDB{{ instance }} \ + meta is-managed="true" clone-node-max="1" interleave="true" + +primitive rsc_SAPHana_{{ sid }}_HDB{{ instance }} ocf:suse:SAPHana \ + params \ + SID="{{ sid }}" \ + InstanceNumber="{{ instance }}" \ + PREFER_SITE_TAKEOVER="{{ data.prefer_takeover }}" \ + AUTOMATED_REGISTER="{{ data.auto_register }}" \ + DUPLICATE_PRIMARY_TIMEOUT="7200" \ + op start interval="0" timeout="3600" \ + op stop interval="0" timeout="3600" \ + op promote interval="0" timeout="3600" \ + op monitor interval="60" role="Master" timeout="700" \ + op monitor interval="61" role="Slave" timeout="700" + +ms msl_SAPHana_{{ sid }}_HDB{{ instance }} rsc_SAPHana_{{ sid }}_HDB{{ instance }} \ + meta clone-max="2" clone-node-max="1" interleave="true" + +{% if data.platform == "azure" %} + +primitive rsc_nc_{{ sid }}_HDB{{ instance }} anything \ + params binfile="/usr/bin/nc" cmdline_options="-l -k 62503" \ + meta resource-stickiness=0 \ + op monitor timeout="20" interval="10" depth="0" + +group g_ip_{{ sid }}_HDB{{ instance }} rsc_ip_{{ sid }}_HDB{{ instance }} rsc_nc_{{ sid }}_HDB{{ instance }} + +colocation col_saphana_ip_{{ sid }}_HDB{{ instance }} 2000: g_ip_{{ sid }}_HDB{{ instance }}:Started msl_SAPHana_{{ sid }}_HDB{{ instance }}:Master + +{% else %} + +colocation col_saphana_ip_{{ sid }}_HDB{{ instance }} 2000: rsc_ip_{{ sid }}_HDB{{ instance }}:Started msl_SAPHana_{{ sid }}_HDB{{ instance }}:Master + +{% endif %} + +order ord_SAPHana_{{ sid }}_HDB{{ instance }} Optional: cln_SAPHanaTopology_{{ sid }}_HDB{{ instance }} msl_SAPHana_{{ sid }}_HDB{{ instance }} + +{% if data.cost_optimized_parameters is defined %} +{% set qas_sid = data.cost_optimized_parameters.sid.upper() %} +{% set qas_instance = '{:0>2}'.format(data.cost_optimized_parameters.instance) %} +{% set qas_remote_host = data.cost_optimized_parameters.remote_host %} + +# +# non-production HANA +# + +primitive rsc_SAP_{{ qas_sid }}_HDB{{ qas_instance }} ocf:heartbeat:SAPDatabase \ + params DBTYPE="HDB" SID="{{ qas_sid }}" \ + MONITOR_SERVICES="hdbindexserver|hdbnameserver" \ + op start interval="0" timeout="600" \ + op monitor interval="120" timeout="700" \ + op stop interval="0" timeout="300" \ + meta priority="100" + +location loc_{{ qas_sid }}_never_on_{{ qas_remote_host }} rsc_SAP_{{ qas_sid }}_HDB{{ qas_instance }} -inf: {{ qas_remote_host }} + +colocation col_{{ qas_sid }}_never_with_{{ sid }}-ip -inf: rsc_SAP_{{ qas_sid }}_HDB{{ qas_instance }}:Started \ + rsc_ip_{{ sid }}_HDB{{ instance }} + +order ord_{{ qas_sid }}_stop_before_{{ sid }}-promote inf: rsc_SAP_{{ qas_sid }}_HDB{{ qas_instance }}:stop \ + msl_SAPHana_{{ sid }}_HDB{{ instance }}:promote + +{% endif %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/saphanabootstrap-formula-0.1.0/templates/srTakeover_hook.j2 new/saphanabootstrap-formula-0.2.4/templates/srTakeover_hook.j2 --- old/saphanabootstrap-formula-0.1.0/templates/srTakeover_hook.j2 1970-01-01 01:00:00.000000000 +0100 +++ new/saphanabootstrap-formula-0.2.4/templates/srTakeover_hook.j2 2019-07-03 10:00:51.613343765 +0200 @@ -0,0 +1,114 @@ +{%- from "hana/map.jinja" import hana with context -%} +{% set host = grains['host'] %} + +{% for node in hana.nodes %} +{% if node.host == host and node.secondary is defined and node.scenario_type.lower() == 'cost-optimized' %} + +{% set dbsid = node.sid.lower() %} +{% set dbinst = '{:0>2}'.format(node.instance) %} + +{% for prim_node in hana.nodes %} +{% if node.secondary.remote_host == prim_node.host and prim_node.primary is defined %} + +{% set dbuser = prim_node.primary.userkey.user_name %} +{% set dbpwd = prim_node.password %} +{% set dbversion = salt['hana.get_version'](sid=dbsid, inst=dbinst, password=dbpwd) %} +{% if salt['pkg.version_cmp'](dbversion, '2.0') < 0 %} + {% set dbport = ('3'~ dbinst ~'15')|int %} +{% else %} + {% set dbport = ('3'~ dbinst ~'13')|int %} +{% endif -%} + +dbuser="{{ dbuser }}" +dbpwd="{{ dbpwd }}" +dbinst="{{ dbinst }}" +dbport="{{ dbport }}" + +{% endif %} +{% endfor %} +{% endif %} +{% endfor %} + +#!/usr/bin/env python2 +""" +Auto-generated HA/DR hook script + +""" + +stmnt1 = "ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') UNSET ('memorymanager','global_allocation_limit') WITH RECONFIGURE" +stmnt2 = "ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') UNSET ('system_replication','preload_column_tables') WITH RECONFIGURE" + +import os, time, dbapi + +from hdb_ha_dr.client import HADRBase, Helper + +class srTakeover(HADRBase): + def __init__(self, *args, **kwargs): + # delegate construction to base class + super(srTakeover, self).__init__(*args, **kwargs) + + def about(self): + return {"provider_company" : "SUSE", + "provider_name" : "srTakeover", # provider name = class name + "provider_description" : "Replication takeover script to set parameters to default.", + "provider_version" : "1.0"} + + def startup(self, hostname, storage_partition, system_replication_mode, **kwargs): + self.tracer.debug("enter startup hook; %s" % locals()) + self.tracer.debug(self.config.toString()) + self.tracer.info("leave startup hook") + return 0 + + def shutdown(self, hostname, storage_partition, system_replication_mode, **kwargs): + self.tracer.debug("enter shutdown hook; %s" % locals()) + self.tracer.debug(self.config.toString()) + self.tracer.info("leave shutdown hook") + return 0 + + def failover(self, hostname, storage_partition, system_replication_mode, **kwargs): + self.tracer.debug("enter failover hook; %s" % locals()) + self.tracer.debug(self.config.toString()) + self.tracer.info("leave failover hook") + return 0 + + def stonith(self, failingHost, **kwargs): + self.tracer.debug("enter stonith hook; %s" % locals()) + self.tracer.debug(self.config.toString()) + # e.g. stonith of params["failed_host"] + # e-g- set vIP active + self.tracer.info("leave stonith hook") + return 0 + + def preTakeover(self, isForce, **kwargs): + """Pre takeover hook.""" + self.tracer.info("%s.preTakeover method called with isForce=%s" % + (self.__class__.__name__, isForce)) + if not isForce: + # run pre takeover code + # run pre-check, return != 0 in case of error => will abort takeover + return 0 + else: + # possible force-takeover only code + # usually nothing to do here + return 0 + + def postTakeover(self, rc, **kwargs): + """Post takeover hook.""" + self.tracer.info("%s.postTakeover method called with rc=%s" % (self.__class__.__name__, rc)) + if rc == 0: + # normal takeover succeeded + conn = dbapi.connect('localhost',dbport,dbuser,dbpwd) + cursor = conn.cursor() + cursor.execute(stmnt1) + cursor.execute(stmnt2) + return 0 + elif rc == 1: + # waiting for force takeover + conn = dbapi.connect('localhost',dbport,dbuser,dbpwd) + cursor = conn.cursor() + cursor.execute(stmnt1) + cursor.execute(stmnt2) + return 0 + elif rc == 2: + # error, something went wrong + return 0 \ No newline at end of file