Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package crmsh for openSUSE:Factory checked 
in at 2024-08-20 16:14:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
 and      /work/SRC/openSUSE:Factory/.crmsh.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "crmsh"

Tue Aug 20 16:14:10 2024 rev:341 rq:1194792 version:5.0.0+20240812.49aeacfa

Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes      2024-08-05 
17:22:56.815234377 +0200
+++ /work/SRC/openSUSE:Factory/.crmsh.new.2698/crmsh.changes    2024-08-20 
16:14:23.888653283 +0200
@@ -1,0 +2,13 @@
+Mon Aug 12 12:58:02 UTC 2024 - xli...@suse.com
+
+- Update to version 5.0.0+20240812.49aeacfa:
+  * Dev: Add option core.add_advised_op_values, default value is 'yes'
+  * Dev: Rename variable 'add_default_op_values' to 'add_advised_op_values'
+
+-------------------------------------------------------------------
+Tue Aug 06 08:10:09 UTC 2024 - alex_burla...@gmx.de
+
+- Update to version 5.0.0+20240806.7e270329:
+  * Dev: scripts/health/collect: use ansible to get sysinfo
+
+-------------------------------------------------------------------

Old:
----
  crmsh-5.0.0+20240731.2abacf27.tar.bz2

New:
----
  crmsh-5.0.0+20240812.49aeacfa.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.EDX7F1/_old  2024-08-20 16:14:24.464676926 +0200
+++ /var/tmp/diff_new_pack.EDX7F1/_new  2024-08-20 16:14:24.468677091 +0200
@@ -36,7 +36,7 @@
 Summary:        High Availability cluster command-line interface
 License:        GPL-2.0-or-later
 Group:          %{pkg_group}
-Version:        5.0.0+20240731.2abacf27
+Version:        5.0.0+20240812.49aeacfa
 Release:        0
 URL:            http://crmsh.github.io
 Source0:        %{name}-%{version}.tar.bz2

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.EDX7F1/_old  2024-08-20 16:14:24.512678896 +0200
+++ /var/tmp/diff_new_pack.EDX7F1/_new  2024-08-20 16:14:24.516679060 +0200
@@ -9,7 +9,7 @@
 </service>
 <service name="tar_scm">
   <param name="url">https://github.com/ClusterLabs/crmsh.git</param>
-  <param 
name="changesrevision">2abacf273fa8804ad537d8338127b93e30bf2a49</param>
+  <param 
name="changesrevision">697716cd3b27ea6437aaee8e428d785fa6303818</param>
 </service>
 </servicedata>
 (No newline at EOF)

++++++ crmsh-5.0.0+20240731.2abacf27.tar.bz2 -> 
crmsh-5.0.0+20240812.49aeacfa.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/crmsh/cibconfig.py 
new/crmsh-5.0.0+20240812.49aeacfa/crmsh/cibconfig.py
--- old/crmsh-5.0.0+20240731.2abacf27/crmsh/cibconfig.py        2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/crmsh/cibconfig.py        2024-08-12 
14:28:46.000000000 +0200
@@ -854,7 +854,7 @@
     output: XML, obj_type, obj_id
     """
     node = None
-    default_op_values = False
+    advised_op_values = False
     default_promotable_meta = False
     comments = []
     if isinstance(cli, str):
@@ -864,12 +864,12 @@
     else:  # should be a pre-tokenized list
         utils.auto_convert_role = True
         if len(cli) >= 3 and cli[0] == "primitive" and cli[2].startswith("@"):
-            default_op_values = False
+            advised_op_values = False
             default_promotable_meta = False
         else:
-            default_op_values = True
+            advised_op_values = config.core.add_advised_op_values
             default_promotable_meta = True
-        node = parse.parse(cli, comments=comments, ignore_empty=False, 
add_default_op_values=default_op_values)
+        node = parse.parse(cli, comments=comments, ignore_empty=False, 
add_advised_op_values=advised_op_values)
     if node is False:
         return None, None, None
     elif node is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/crmsh/config.py 
new/crmsh-5.0.0+20240812.49aeacfa/crmsh/config.py
--- old/crmsh-5.0.0+20240731.2abacf27/crmsh/config.py   2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/crmsh/config.py   2024-08-12 
14:28:46.000000000 +0200
@@ -256,6 +256,7 @@
         'ignore_missing_metadata': opt_boolean('no'),
         'report_tool_options': opt_string(''),
         'lock_timeout': opt_string('120'),
+        'add_advised_op_values': opt_boolean('yes'),
         'OCF_1_1_SUPPORT': opt_boolean('yes'),
         'obscure_pattern': opt_string('passw*')
     },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/crmsh/parse.py 
new/crmsh-5.0.0+20240812.49aeacfa/crmsh/parse.py
--- old/crmsh-5.0.0+20240731.2abacf27/crmsh/parse.py    2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/crmsh/parse.py    2024-08-12 
14:28:46.000000000 +0200
@@ -170,13 +170,13 @@
         self.begin(cmd, min_args=min_args)
         return self.match_dispatch(errmsg="Unknown command")
 
-    def do_parse(self, cmd, ignore_empty, add_default_op_values):
+    def do_parse(self, cmd, ignore_empty, add_advised_op_values):
         """
         Called by CliParser. Calls parse()
         Parsers should pass their return value through this method.
         """
         self.ignore_empty = ignore_empty
-        self.add_default_op_values = add_default_op_values
+        self.add_advised_op_values = add_advised_op_values
         out = self.parse(cmd)
         if self.has_tokens():
             self.err("Unknown arguments: " + ' 
'.join(self._cmd[self._currtok:]))
@@ -661,7 +661,7 @@
         """
         Add default operation actions advised values
         """
-        if not self.add_default_op_values or out.tag != "primitive":
+        if not self.add_advised_op_values or out.tag != "primitive":
             return
         ra_inst = ra.RAInfo(out.get('class'), out.get('type'), 
out.get('provider'))
         ra_actions_dict = ra_inst.actions()
@@ -753,7 +753,7 @@
                     inst_attrs = xmlutil.child(container_node, name)
                     # set meaningful id for port-mapping and storage-mapping
                     # when the bundle is newly created
-                    if self.add_default_op_values:
+                    if self.add_advised_op_values:
                         id_str = f"{bundle_id}_{name.replace('-', 
'_')}_{index}"
                         inst_attrs.set('id', id_str)
                     child_flag = True
@@ -1794,7 +1794,7 @@
         return ret
 
 
-def parse(s, comments=None, ignore_empty=True, add_default_op_values=False):
+def parse(s, comments=None, ignore_empty=True, add_advised_op_values=False):
     '''
     Input: a list of tokens (or a CLI format string).
     Return: a cibobject
@@ -1840,7 +1840,7 @@
         return False
 
     try:
-        ret = parser.do_parse(s, ignore_empty, add_default_op_values)
+        ret = parser.do_parse(s, ignore_empty, add_advised_op_values)
         if ret is not None and len(comments) > 0:
             if ret.tag in constants.defaults_tags:
                 xmlutil.stuff_comments(ret[0], comments)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/crmsh/utils.py 
new/crmsh-5.0.0+20240812.49aeacfa/crmsh/utils.py
--- old/crmsh-5.0.0+20240731.2abacf27/crmsh/utils.py    2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/crmsh/utils.py    2024-08-12 
14:28:46.000000000 +0200
@@ -24,6 +24,7 @@
 import gzip
 import bz2
 import lzma
+import json
 from pathlib import Path
 from contextlib import contextmanager, closing
 from stat import S_ISBLK
@@ -3137,4 +3138,27 @@
     Check if the time value contains unit
     """
     return re.search(r'^\d+[a-z]+$', time_value) is not None
+
+
+def ansible_installed():
+    return shutil.which('ansible')
+
+
+def ansible_facts(module_name) -> dict:
+    proc = subprocess.run(['ansible', '-m', module_name, 'localhost']
+                        , capture_output=True, text=True)
+    out = proc.stdout
+    # output format 'localhost | SUCCESS => { json...'
+    bracket_pos = out.find('{')
+    if bracket_pos == -1:
+        logger.error("Parsing ansible output.")
+        return {}
+    is_ok = out[:bracket_pos].find('SUCCESS =>')
+    if is_ok == -1:
+        logger.error("Failure calling ansible module.")
+        return {}
+    # get the json part
+    out = out[bracket_pos:]
+    json_tree = json.loads(out)
+    return json_tree['ansible_facts']
 # vim:ts=4:sw=4:et:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/etc/crm.conf.in 
new/crmsh-5.0.0+20240812.49aeacfa/etc/crm.conf.in
--- old/crmsh-5.0.0+20240731.2abacf27/etc/crm.conf.in   2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/etc/crm.conf.in   2024-08-12 
14:28:46.000000000 +0200
@@ -20,6 +20,7 @@
 ; ignore_missing_metadata = no
 ; report_tool_options =
 ; lock_timeout = 120
+; add_advised_op_values = yes
 
 ; set OCF_1_1_SUPPORT to yes is to fully turn on OCF 1.1 feature once the 
corresponding CIB detected.
 ; OCF_1_1_SUPPORT = yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/crmsh-5.0.0+20240731.2abacf27/scripts/health/collect.py 
new/crmsh-5.0.0+20240812.49aeacfa/scripts/health/collect.py
--- old/crmsh-5.0.0+20240731.2abacf27/scripts/health/collect.py 2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/scripts/health/collect.py 2024-08-12 
14:28:46.000000000 +0200
@@ -10,6 +10,7 @@
 import crmsh.log
 crmsh.log.setup_logging()
 from crmsh.report import utils
+import crmsh.utils
 
 data = crm_script.get_input()
 
@@ -32,6 +33,27 @@
 
 
 def sys_info():
+    with open('/proc/uptime') as f:
+        uptime = f.read().split()
+
+    if crmsh.utils.ansible_installed():
+        facts = crmsh.utils.ansible_facts('setup')
+
+        return {'system': facts.get("ansible_system"),
+            'node': facts.get("ansible_hostname"),
+            'release': facts.get("ansible_kernel"),
+            'version': facts.get("ansible_kernel_version"),
+            'machine': facts.get("ansible_machine"),
+            'processor': facts.get("ansible_architecture"),
+            'distname': facts.get("ansible_distribution"),
+            'user': facts.get("ansible_user_id"),
+            'hostname': facts.get("ansible_nodename"),
+            'uptime': facts.get("ansible_uptime_seconds"),
+            'idletime': uptime[1], # :( not in ansible setup module
+            'loadavg': facts.get("ansible_loadavg").get("15m")  # 15 minute 
average
+            }
+
+    # if ansible is not installed, do it like before
     sysname, nodename, release, version, machine = os.uname()
     # The first three columns measure CPU and IO utilization of the
     # last one, five, and 15 minute periods. The fourth column shows
@@ -41,8 +63,8 @@
     distname = utils.get_distro_info()
     hostname = os.uname()[1]
 
-    uptime = open('/proc/uptime').read().split()
-    loadavg = open('/proc/loadavg').read().split()
+    with open('/proc/loadavg') as f:
+        loadavg = f.read().split()
 
     return {'system': system,
             'node': node,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/crmsh-5.0.0+20240731.2abacf27/utils/crm_rpmcheck.py 
new/crmsh-5.0.0+20240812.49aeacfa/utils/crm_rpmcheck.py
--- old/crmsh-5.0.0+20240731.2abacf27/utils/crm_rpmcheck.py     2024-07-31 
08:38:07.000000000 +0200
+++ new/crmsh-5.0.0+20240812.49aeacfa/utils/crm_rpmcheck.py     2024-08-12 
14:28:46.000000000 +0200
@@ -7,6 +7,7 @@
 import json
 import subprocess
 import shutil
+from crmsh import utils
 
 def run(cmd):
     proc = subprocess.Popen(cmd,
@@ -23,10 +24,8 @@
     """
     Gathers version and release information about a package.
     """
-    if shutil.which('ansible'):
-        rc, data = ansible_package_data(pkg)
-        if rc == 0:
-            return data
+    if utils.ansible_installed():
+        return ansible_package_data(pkg)
 
     if shutil.which('rpm'):
         return rpm_package_data(pkg)
@@ -36,36 +35,23 @@
 
     return {'name': pkg, 'error': "unknown package manager"}
 
+
 _packages = None
-def ansible_package_data(pkg) -> tuple[int, dict]:
+def ansible_package_data(pkg) -> dict:
     """
     Gathers version and release information about a package.
     Using ansible.
     """
+    # if _packages is None, then get it
     global _packages
     if not _packages:
-        # if _packages is None, then get it
-        rc, out, err = run(['ansible', '-m', 'package_facts', 'localhost'])
-        if rc == -1:
-            return -1, {}
-        # output format 'localhost | SUCCESS => { json...'
-        bracket_pos = out.find('{')
-        if bracket_pos == -1:
-            return -1, {}
-        is_ok = out[:bracket_pos].find('SUCCESS =>')
-        if is_ok == -1:
-            return -1, {}
-
-        # get the json part
-        out = out[bracket_pos:]
-        json_tree = json.loads(out)
-        # get _packages
-        _packages = json_tree['ansible_facts']['packages']
-
-    if pkg not in _packages:
-        return 0, {'name': pkg, 'error': "package not installed"}
-    else:
-        return 0, _packages[pkg][0]
+        facts = utils.ansible_facts('package_facts')
+        _packages = facts.get('packages')
+
+    if _packages and pkg in _packages:
+        return _packages[pkg][0]
+    
+    return {'name': pkg, 'error': "package not installed"}       
 
 
 def rpm_package_data(pkg):

Reply via email to