ClusterShell 1.10__tar.gz → 1.10.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. {clustershell-1.10 → clustershell-1.10.1}/ChangeLog +49 -0
  2. {clustershell-1.10 → clustershell-1.10.1}/MANIFEST.in +0 -2
  3. {clustershell-1.10/lib/ClusterShell.egg-info → clustershell-1.10.1}/PKG-INFO +2 -4
  4. {clustershell-1.10 → clustershell-1.10.1}/README.md +27 -10
  5. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/ansible.conf.example +3 -0
  6. {clustershell-1.10 → clustershell-1.10.1}/doc/examples/check_nodes.py +16 -19
  7. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/clubak.1 +25 -10
  8. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/cluset.1 +19 -19
  9. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/clush.1 +25 -18
  10. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/nodeset.1 +16 -16
  11. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man5/clush.conf.5 +22 -12
  12. {clustershell-1.10 → clustershell-1.10.1}/doc/man/man5/groups.conf.5 +38 -26
  13. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/_static/theme_overrides.css +6 -0
  14. clustershell-1.10.1/doc/sphinx/api/EnginePort.rst +10 -0
  15. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/MsgTree.rst +3 -0
  16. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/NodeSet.rst +1 -0
  17. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/NodeUtils.rst +4 -0
  18. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/index.rst +1 -0
  19. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/conf.py +5 -10
  20. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/config.rst +294 -113
  21. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/further.rst +4 -4
  22. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/examples.rst +44 -39
  23. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/nodesets.rst +59 -50
  24. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/rangesets.rst +17 -10
  25. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/taskmgnt.rst +30 -28
  26. clustershell-1.10.1/doc/sphinx/install.rst +248 -0
  27. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/intro.rst +1 -1
  28. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/release.rst +41 -4
  29. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/clubak.rst +15 -10
  30. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/cluset.rst +49 -39
  31. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/clush.rst +39 -53
  32. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/nodeset.rst +52 -42
  33. clustershell-1.10.1/doc/txt/README +4 -0
  34. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clubak.txt +17 -10
  35. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/cluset.txt +44 -43
  36. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clush.conf.txt +27 -19
  37. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clush.txt +27 -20
  38. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/groups.conf.txt +39 -29
  39. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/nodeset.txt +41 -40
  40. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/OptionParser.py +1 -1
  41. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Communication.py +12 -5
  42. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Defaults.py +1 -0
  43. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/EPoll.py +1 -0
  44. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Select.py +1 -0
  45. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Event.py +4 -0
  46. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/NodeSet.py +5 -5
  47. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Propagation.py +17 -8
  48. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/RangeSet.py +2 -1
  49. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Task.py +10 -8
  50. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/EngineClient.py +8 -0
  51. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Tree.py +11 -7
  52. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Worker.py +1 -1
  53. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/__init__.py +3 -3
  54. {clustershell-1.10 → clustershell-1.10.1/lib/ClusterShell.egg-info}/PKG-INFO +2 -4
  55. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/SOURCES.txt +3 -2
  56. {clustershell-1.10 → clustershell-1.10.1}/setup.py +3 -3
  57. clustershell-1.10.1/tests/CLICompletionTest.py +189 -0
  58. clustershell-1.10.1/tests/EngineErrorTest.py +51 -0
  59. {clustershell-1.10 → clustershell-1.10.1}/tests/NodeSetTest.py +6 -0
  60. {clustershell-1.10 → clustershell-1.10.1}/tests/RangeSetTest.py +16 -0
  61. {clustershell-1.10 → clustershell-1.10.1}/tests/StreamWorkerTest.py +60 -1
  62. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantMixin.py +1 -1
  63. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskLocalMixin.py +2 -2
  64. {clustershell-1.10 → clustershell-1.10.1}/tests/TreeGatewayTest.py +131 -5
  65. {clustershell-1.10 → clustershell-1.10.1}/tests/TreeWorkerTest.py +43 -0
  66. {clustershell-1.10 → clustershell-1.10.1}/tests/WorkerExecTest.py +1 -1
  67. clustershell-1.10/conf/groups.conf.d/ace.conf.example +0 -18
  68. clustershell-1.10/doc/epydoc/clustershell_epydoc.conf +0 -38
  69. clustershell-1.10/doc/sphinx/install.rst +0 -304
  70. clustershell-1.10/doc/txt/README +0 -4
  71. {clustershell-1.10 → clustershell-1.10.1}/COPYING.LGPLv2.1 +0 -0
  72. {clustershell-1.10 → clustershell-1.10.1}/bash_completion.d/cluset +0 -0
  73. {clustershell-1.10 → clustershell-1.10.1}/bash_completion.d/clush +0 -0
  74. {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf +0 -0
  75. {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/README +0 -0
  76. {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/sshpass.conf.example +0 -0
  77. {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/sudo.conf.example +0 -0
  78. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf +0 -0
  79. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/README +0 -0
  80. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/genders.conf.example +0 -0
  81. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/slurm.conf.example +0 -0
  82. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/xcat.conf.example +0 -0
  83. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/README +0 -0
  84. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/cluster.yaml.example +0 -0
  85. {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/local.cfg +0 -0
  86. {clustershell-1.10 → clustershell-1.10.1}/conf/topology.conf.example +0 -0
  87. {clustershell-1.10 → clustershell-1.10.1}/doc/examples/defaults.conf-rsh +0 -0
  88. {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/ftdetect/clustershell.vim +0 -0
  89. {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/syntax/clushconf.vim +0 -0
  90. {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/syntax/groupsconf.vim +0 -0
  91. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/CHARTER.rst +0 -0
  92. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/Makefile +0 -0
  93. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/_static/clustershell-nautilus-logo200.png +0 -0
  94. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/acknowledgments.rst +0 -0
  95. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Defaults.rst +0 -0
  96. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/EngineTimer.rst +0 -0
  97. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Event.rst +0 -0
  98. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/RangeSet.rst +0 -0
  99. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Task.rst +0 -0
  100. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/ExecWorker.rst +0 -0
  101. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/StreamWorker.rst +0 -0
  102. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/TreeWorker.rst +0 -0
  103. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/Worker.rst +0 -0
  104. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerPdsh.rst +0 -0
  105. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerPopen.rst +0 -0
  106. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerRsh.rst +0 -0
  107. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerSsh.rst +0 -0
  108. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/index.rst +0 -0
  109. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/index.rst +0 -0
  110. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/index.rst +0 -0
  111. {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/index.rst +0 -0
  112. {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clustershell.rst +0 -0
  113. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Clubak.py +0 -0
  114. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Clush.py +0 -0
  115. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Config.py +0 -0
  116. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Display.py +0 -0
  117. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Error.py +0 -0
  118. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Nodeset.py +0 -0
  119. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Utils.py +0 -0
  120. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/__init__.py +0 -0
  121. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Engine.py +0 -0
  122. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Factory.py +0 -0
  123. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Poll.py +0 -0
  124. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/__init__.py +0 -0
  125. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Gateway.py +0 -0
  126. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/MsgTree.py +0 -0
  127. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/NodeUtils.py +0 -0
  128. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Topology.py +0 -0
  129. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Exec.py +0 -0
  130. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Pdsh.py +0 -0
  131. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Popen.py +0 -0
  132. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Rsh.py +0 -0
  133. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Ssh.py +0 -0
  134. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/__init__.py +0 -0
  135. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/fastsubprocess.py +0 -0
  136. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/dependency_links.txt +0 -0
  137. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/entry_points.txt +0 -0
  138. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/requires.txt +0 -0
  139. {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/top_level.txt +0 -0
  140. {clustershell-1.10 → clustershell-1.10.1}/setup.cfg +0 -0
  141. {clustershell-1.10 → clustershell-1.10.1}/tests/CLIClubakTest.py +0 -0
  142. {clustershell-1.10 → clustershell-1.10.1}/tests/CLIClushTest.py +0 -0
  143. {clustershell-1.10 → clustershell-1.10.1}/tests/CLIConfigTest.py +0 -0
  144. {clustershell-1.10 → clustershell-1.10.1}/tests/CLIDisplayTest.py +0 -0
  145. {clustershell-1.10 → clustershell-1.10.1}/tests/CLINodesetTest.py +0 -0
  146. {clustershell-1.10 → clustershell-1.10.1}/tests/CLIOptionParserTest.py +0 -0
  147. {clustershell-1.10 → clustershell-1.10.1}/tests/DefaultsTest.py +0 -0
  148. {clustershell-1.10 → clustershell-1.10.1}/tests/MisusageTest.py +0 -0
  149. {clustershell-1.10 → clustershell-1.10.1}/tests/MsgTreeTest.py +0 -0
  150. {clustershell-1.10 → clustershell-1.10.1}/tests/NodeSetGroupTest.py +0 -0
  151. {clustershell-1.10 → clustershell-1.10.1}/tests/RangeSetNDTest.py +0 -0
  152. {clustershell-1.10 → clustershell-1.10.1}/tests/TLib.py +0 -0
  153. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantPdshMixin.py +0 -0
  154. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantPdshTest.py +0 -0
  155. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantTest.py +0 -0
  156. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskEventTest.py +0 -0
  157. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskLocalTest.py +0 -0
  158. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskMsgTreeTest.py +0 -0
  159. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskPortTest.py +0 -0
  160. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskRLimitsTest.py +0 -0
  161. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskThreadJoinTest.py +0 -0
  162. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskThreadSuspendTest.py +0 -0
  163. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskTimeoutTest.py +0 -0
  164. {clustershell-1.10 → clustershell-1.10.1}/tests/TaskTimerTest.py +0 -0
  165. {clustershell-1.10 → clustershell-1.10.1}/tests/TreeTaskTest.py +0 -0
  166. {clustershell-1.10 → clustershell-1.10.1}/tests/TreeTopologyTest.py +0 -0
  167. {clustershell-1.10 → clustershell-1.10.1}/tests/__init__.py +0 -0
  168. {clustershell-1.10 → clustershell-1.10.1}/tests/bin/hostname +0 -0
@@ -1,3 +1,52 @@
1
+ 2026-07-16 S. Thiell <stephane@thiell.com>
2
+
3
+ * Version 1.10.1 released. The main changes are listed below.
4
+
5
+ * setup: install the ansible.conf.example group source example, which
6
+ was missing from binary packages in 1.10 (#645)
7
+
8
+ * NodeSet: fix stepped slices across multiple patterns on Python 3 (#661)
9
+
10
+ * RangeSet: fix unpickling of empty sets (#658)
11
+
12
+ * Communication: pin the pickle protocol used for gateway messages, fixing
13
+ tree mode across mixed Python versions with Python 3.14 (#658)
14
+
15
+ * Communication: fix TypeError when reporting channel errors (#673)
16
+
17
+ * Tree: report gateway errors received before channel setup (#674)
18
+
19
+ * Tree: fix rcopy extraction error reporting (#663)
20
+
21
+ * EngineClient: remove stream on broken pipe, fixing a possible hang with
22
+ the select engine (#651, #652)
23
+
24
+ * Engine: fix error handling in the EPoll and Select event loops (#662)
25
+
26
+ * conf: remove the deprecated Cray ACE group source example (#644)
27
+
28
+ * packaging: remove the unmaintained in-repo RPM spec file; RPM packaging
29
+ is maintained in the Fedora and EPEL repositories (#643)
30
+
31
+ * doc: refresh the installation guide (#653)
32
+
33
+ * doc: port library examples to Python 3 (#654)
34
+
35
+ * doc: coverage, accuracy and rendering improvements across man pages and
36
+ Sphinx docs (#648, #655, #666, #671, #675)
37
+
38
+ * doc: modernize the Sphinx build: remove stale epydoc config, enable
39
+ viewcode, update build requirements; animate the tree mode diagram
40
+ (#667, #668, #669, #670)
41
+
42
+ * tests: add bash completion tests and improve test portability and
43
+ reliability (#650, #664, #665)
44
+
45
+ * CI: build the documentation with warnings as errors on every change (#649)
46
+
47
+ * CI: publish releases to PyPI with a GitHub Actions workflow using
48
+ Trusted Publishing (#646)
49
+
1
50
  2026-07-04 S. Thiell <sthiell@stanford.edu>
2
51
 
3
52
  * Version 1.10 released. The main changes are listed below.
@@ -18,7 +18,6 @@ include doc/man/man1/*.1
18
18
  include doc/man/man5/*.5
19
19
  include doc/sphinx/Makefile
20
20
  include doc/sphinx/conf.py
21
- include doc/sphinx/*.png
22
21
  include doc/sphinx/*.rst
23
22
  include doc/sphinx/_static/*.png
24
23
  include doc/sphinx/_static/*.css
@@ -30,6 +29,5 @@ include doc/extras/vim/syntax/*.vim
30
29
  include doc/extras/vim/ftdetect/*.vim
31
30
  include doc/examples/*.py
32
31
  include doc/examples/defaults.conf-rsh
33
- include doc/epydoc/*.conf
34
32
  include tests/*.py
35
33
  include tests/bin/*
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ClusterShell
3
- Version: 1.10
3
+ Version: 1.10.1
4
4
  Summary: ClusterShell library and tools
5
5
  Home-page: https://clustershell.readthedocs.io/
6
- Download-URL: https://github.com/clustershell/clustershell/archive/refs/tags/v1.10.tar.gz
6
+ Download-URL: https://github.com/clustershell/clustershell/archive/refs/tags/v1.10.1.tar.gz
7
7
  Author: Stephane Thiell
8
- Author-email: sthiell@stanford.edu
9
8
  License: LGPLv2+
10
9
  Keywords: clustershell,clush,clubak,nodeset
11
10
  Platform: GNU/Linux
@@ -28,7 +27,6 @@ Description-Content-Type: text/x-rst
28
27
  License-File: COPYING.LGPLv2.1
29
28
  Requires-Dist: PyYAML
30
29
  Dynamic: author
31
- Dynamic: author-email
32
30
  Dynamic: classifier
33
31
  Dynamic: description
34
32
  Dynamic: description-content-type
@@ -24,7 +24,7 @@ of the library features.
24
24
  Requirements
25
25
  ------------
26
26
 
27
- * GNU/Linux, BSD, Mac OS X
27
+ * GNU/Linux, BSD, macOS
28
28
  * OpenSSH (ssh/scp) or rsh
29
29
  * Python 2.x (x >= 7) or Python 3.x (x >= 6)
30
30
  * PyYAML
@@ -43,9 +43,9 @@ Online documentation is available here:
43
43
  https://clustershell.readthedocs.io/
44
44
 
45
45
  The Sphinx documentation source is available under the doc/sphinx directory.
46
- Type 'make' to see all available formats (you need Sphinx installed and
47
- sphinx_rtd_theme to build the documentation). For example, to generate html
48
- docs, just type:
46
+ Type 'make' to see all available formats (you need the packages listed in
47
+ doc/sphinx/requirements.txt to build the documentation). For example, to
48
+ generate html docs, just type:
49
49
 
50
50
  make html BUILDDIR=/dest/path
51
51
 
@@ -55,7 +55,25 @@ For local library API documentation, just type:
55
55
 
56
56
  The following man pages are also provided:
57
57
 
58
- clush(1), clubak(1), nodeset(1), clush.conf(5), groups.conf(5)
58
+ clush(1), clubak(1), cluset(1), nodeset(1), clush.conf(5), groups.conf(5)
59
+
60
+ Building
61
+ --------
62
+
63
+ To build the Python source distribution and wheel from a source checkout:
64
+
65
+ $ python -m build
66
+
67
+ The resulting tarball and wheel are written to the 'dist' directory.
68
+
69
+ RPM packaging is not maintained in this repository. RPM packages for Fedora,
70
+ RHEL and compatible distributions are maintained in the Fedora and EPEL
71
+ dist-git repositories:
72
+
73
+ https://src.fedoraproject.org/rpms/clustershell
74
+
75
+ To build RPMs locally, use that spec file, for example with 'fedpkg' or
76
+ 'rpmbuild'.
59
77
 
60
78
  Test Suite
61
79
  ----------
@@ -80,13 +98,12 @@ Python code (simple example)
80
98
  >>> from ClusterShell.NodeSet import NodeSet
81
99
  >>> task = task_self()
82
100
  >>> task.run("/bin/uname -r", nodes="linux[4-6,32-39]")
83
- <ClusterShell.Worker.Ssh.WorkerSsh object at 0x20a5e90>
101
+ <ClusterShell.Worker.Ssh.WorkerSsh object at 0x7f45287db910>
84
102
  >>> for buf, key in task.iter_buffers():
85
- ... print NodeSet.fromlist(key), buf
103
+ ... print(NodeSet.fromlist(key), buf.message().decode())
86
104
  ...
87
- linux[32-39] 2.6.40.6-0.fc15.x86_64
88
-
89
- linux[4-6] 2.6.32-71.el6.x86_64
105
+ linux[32-39] 6.14.9-300.fc42.x86_64
106
+ linux[4-6] 5.14.0-570.12.1.el9_6.x86_64
90
107
  ```
91
108
 
92
109
  Links
@@ -10,6 +10,9 @@
10
10
  # Replace /path/to/inventory with your inventory path or directory,
11
11
  # or set ANSIBLE_INVENTORY in your environment to override it.
12
12
  #
13
+ # Hostnames can be post-processed in jq, for instance to strip a DNS domain
14
+ # suffix; see the Ansible inventory bindings section of the online docs.
15
+ #
13
16
  [ansible]
14
17
 
15
18
  # Resolve group members, recursing into child groups
@@ -1,7 +1,7 @@
1
- #!/usr/bin/python
1
+ #!/usr/bin/python3
2
2
  # check_nodes.py: ClusterShell simple example script.
3
3
  #
4
- # This script runs a simple command on remote nodes and report node
4
+ # This script runs a simple command on remote nodes and reports node
5
5
  # availability (basic health check) and also min/max boot dates.
6
6
  # It shows an example of use of Task, NodeSet and EventHandler objects.
7
7
  # Feel free to copy and modify it to fit your needs.
@@ -10,7 +10,6 @@
10
10
 
11
11
  import optparse
12
12
  from datetime import date, datetime
13
- import time
14
13
 
15
14
  from ClusterShell.Event import EventHandler
16
15
  from ClusterShell.NodeSet import NodeSet
@@ -29,10 +28,10 @@ class CheckNodesResult(object):
29
28
  def show(self):
30
29
  """Display results"""
31
30
  if self.nodes_ok:
32
- print "%s: OK (boot date: min %s, max %s)" % \
33
- (self.nodes_ok, self.min_boot_date, self.max_boot_date)
31
+ print("%s: OK (boot date: min %s, max %s)" %
32
+ (self.nodes_ok, self.min_boot_date, self.max_boot_date))
34
33
  if self.nodes_ko:
35
- print "%s: FAILED" % self.nodes_ko
34
+ print("%s: FAILED" % self.nodes_ko)
36
35
 
37
36
  class CheckNodesHandler(EventHandler):
38
37
  """Our ClusterShell EventHandler"""
@@ -45,20 +44,18 @@ class CheckNodesHandler(EventHandler):
45
44
  def ev_read(self, worker, node, sname, msg):
46
45
  """Read event from remote nodes"""
47
46
  # this is an example to demonstrate remote result parsing
48
- bootime = " ".join(msg.strip().split()[2:])
49
- date_boot = None
50
- for fmt in ("%Y-%m-%d %H:%M",): # formats with year
47
+ bootime = " ".join(msg.decode().strip().split()[2:])
48
+ # 'who -b' prints the boot date with or without the year
49
+ try:
50
+ date_boot = datetime.strptime(bootime, "%Y-%m-%d %H:%M")
51
+ except ValueError:
51
52
  try:
52
- # datetime.strptime() is Python2.5+, use old method instead
53
- date_boot = datetime(*(time.strptime(bootime, fmt)[0:6]))
53
+ # no year: prepend the current one before parsing
54
+ # (yearless dates are deprecated as of Python 3.13)
55
+ date_boot = datetime.strptime(
56
+ "%d %s" % (date.today().year, bootime), "%Y %b %d %H:%M")
54
57
  except ValueError:
55
- pass
56
- for fmt in ("%b %d %H:%M",): # formats without year
57
- try:
58
- date_boot = datetime(date.today().year, \
59
- *(time.strptime(bootime, fmt)[1:6]))
60
- except ValueError:
61
- pass
58
+ date_boot = None
62
59
  if date_boot:
63
60
  if not self.result.min_boot_date or \
64
61
  self.result.min_boot_date > date_boot:
@@ -98,7 +95,7 @@ def main():
98
95
  nodes_target = NodeSet(options.nodes)
99
96
  task.set_info("fanout", options.fanout)
100
97
  if options.debug:
101
- print "nodeset : %s" % nodes_target
98
+ print("nodeset : %s" % nodes_target)
102
99
  task.set_info("debug", True)
103
100
 
104
101
  # Create ClusterShell event handler
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "CLUBAK" 1 "2026-07-04" "1.10" "ClusterShell User Manual"
30
+ .TH "CLUBAK" 1 "2026-07-16" "1.10.1" "ClusterShell User Manual"
31
31
  .SH NAME
32
32
  clubak \- format output from clush/pdsh-like output and more
33
33
  .SH SYNOPSIS
@@ -41,7 +41,7 @@ provides additional features. For instance, \fBclubak\fP always displays
41
41
  its results sorted by node/nodeset.
42
42
  .sp
43
43
  You do not need to use \fBclubak\fP when using \fBclush\fP(1) as all output
44
- formatting features are already included in. It is provided for other usages,
44
+ formatting features are already included in it. It is provided for other usages,
45
45
  like post\-processing results of the form \(dq\fInode:output\fP\(dq.
46
46
  .sp
47
47
  Like \fBclush\fP(1), \fBclubak\fP uses the \fIClusterShell.MsgTree\fP module of the
@@ -55,9 +55,18 @@ ClusterShell library (see \fBpydoc ClusterShell.MsgTree\fP).
55
55
  .B \-\-version
56
56
  show \fBclubak\fP version number and exit
57
57
  .TP
58
- .B \-b\fP,\fB \-c
59
- gather nodes with same output (\-c is provided for \fBdshbak\fP(1)
60
- compatibility)
58
+ .B \-b\fP,\fB \-c\fP,\fB \-\-dshbak
59
+ gather nodes with same output (\-c and \-\-dshbak are provided
60
+ for \fBdshbak\fP(1) compatibility)
61
+ .TP
62
+ .B \-B
63
+ same as \-b; accepted for compatibility with \fBclush\fP(1), where \-B also gathers standard error
64
+ .TP
65
+ .B \-q\fP,\fB \-\-quiet
66
+ be quiet, print essential output only (e.g. suppress the node count displayed next to gathered nodeset headers)
67
+ .TP
68
+ .B \-v\fP,\fB \-\-verbose
69
+ be verbose, print informative messages; also echo each input line to standard output prefixed by \fBINPUT\fP
61
70
  .TP
62
71
  .B \-d\fP,\fB \-\-debug
63
72
  output more messages for debugging purpose
@@ -65,17 +74,20 @@ output more messages for debugging purpose
65
74
  .B \-L
66
75
  disable header block and order output by nodes
67
76
  .TP
77
+ .B \-N
78
+ disable labeling of command output
79
+ .TP
68
80
  .B \-r\fP,\fB \-\-regroup
69
81
  fold nodeset using node groups
70
82
  .TP
71
83
  .BI \-\-axis\fB= RANGESET
72
- for nD nodesets, fold the displayed nodeset (eg. in gathered output headers) along provided axis only. Axis are indexed from 1 to n and can be specified here either using the rangeset syntax, eg. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the index is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range. This is the per\-invocation equivalent of the \fBfold_axis\fP library default.
84
+ for nD nodesets, fold the displayed nodeset (e.g. in gathered output headers) along provided axis only. Axes are indexed from 1 to n and can be specified here either using the rangeset syntax, e.g. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the index is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range. This is the per\-invocation equivalent of the \fBfold_axis\fP library default.
73
85
  .TP
74
86
  .BI \-s \ GROUPSOURCE\fR,\fB \ \-\-groupsource\fB= GROUPSOURCE
75
87
  optional \fBgroups.conf\fP(5) group source to use
76
88
  .TP
77
89
  .BI \-\-groupsconf\fB= FILE
78
- use alternate config file for groups.conf(5)
90
+ use alternate config file for \fBgroups.conf\fP(5)
79
91
  .TP
80
92
  .B \-G\fP,\fB \-\-groupbase
81
93
  do not display group source prefix (always \fI@groupname\fP)
@@ -87,10 +99,13 @@ node / line content separator string (default: \fI:\fP)
87
99
  faster but memory hungry mode (preload all messages per node)
88
100
  .TP
89
101
  .B \-T\fP,\fB \-\-tree
90
- message tree trace mode; switch to enable \fBClusterShell.MsgTree\fP trace mode, all keys/nodes being kept for each message element of the tree, thus allowing special output gathering
102
+ message tree trace mode; switch to enable \fBClusterShell.MsgTree\fP trace mode, all keys/nodes being kept for each message element of the tree, thus allowing special output display
103
+ .TP
104
+ .BI \-\-interpret\-keys\fB= INTERPRET_KEYS
105
+ whether to interpret keys (the field before the separator on each input line) as node sets. \fIINTERPRET_KEYS\fP is \fBnever\fP, \fBalways\fP or \fBauto\fP (the default). With \fBnever\fP, each key is kept as a plain string; with \fBalways\fP, every key must be a valid node set; with \fBauto\fP, keys are interpreted as node sets, but if any key cannot be parsed, \fBclubak\fP silently switches to treating all keys as plain strings.
91
106
  .TP
92
107
  .BI \-\-color\fB= WHENCOLOR
93
- \fBclush\fP can use NO_COLOR, CLICOLOR and CLICOLOR_FORCE environment variables. \fB\-\-color\fP command line option always takes precedence over environment variables. NO_COLOR takes precedence over CLICOLOR_FORCE which takes precedence over CLICOLOR. \fB\-\-color\fP tells whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. \fIWHENCOLOR\fP is \fBnever\fP, \fBalways\fP or \fBauto\fP (which use color if standard output refers to a terminal). Color is set to [34m (blue foreground text) and cannot be modified.
108
+ \fBclubak\fP can use NO_COLOR, CLICOLOR and CLICOLOR_FORCE environment variables. \fB\-\-color\fP command line option always takes precedence over environment variables. NO_COLOR takes precedence over CLICOLOR_FORCE which takes precedence over CLICOLOR. \fB\-\-color\fP tells whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. \fIWHENCOLOR\fP is \fBnever\fP, \fBalways\fP or \fBauto\fP (which uses color if standard output refers to a terminal). Color is set to [34m (blue foreground text) and cannot be modified.
94
109
  .TP
95
110
  .B \-\-diff
96
111
  show diff between gathered outputs
@@ -144,7 +159,7 @@ node2: 9
144
159
  \fI\%https://github.com/clustershell/clustershell/issues\fP
145
160
  .UNINDENT
146
161
  .SH AUTHOR
147
- Stephane Thiell <sthiell@stanford.edu>
162
+ Stephane Thiell
148
163
  .SH COPYRIGHT
149
164
  GNU Lesser General Public License version 2.1 or later (LGPLv2.1+)
150
165
  .\" Generated by docutils manpage writer.
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "CLUSET" 1 "2026-07-04" "1.10" "ClusterShell User Manual"
30
+ .TH "CLUSET" 1 "2026-07-16" "1.10.1" "ClusterShell User Manual"
31
31
  .SH NAME
32
32
  cluset \- compute advanced cluster node set operations
33
33
  .SH SYNOPSIS
@@ -40,7 +40,7 @@ cluset \- compute advanced cluster node set operations
40
40
  .sp
41
41
  Note: \fBcluset\fP and \fBnodeset\fP are the same command.
42
42
  .sp
43
- \fBcluset\fP is an utility command provided with the ClusterShell library which
43
+ \fBcluset\fP is a utility command provided with the ClusterShell library which
44
44
  implements some features of ClusterShell\(aqs NodeSet and RangeSet Python classes.
45
45
  It provides easy manipulation of 1D or nD\-indexed cluster nodes and node
46
46
  groups.
@@ -63,7 +63,7 @@ show this help message and exit
63
63
  optional \fBgroups.conf\fP(5) group source to use
64
64
  .TP
65
65
  .BI \-\-groupsconf\fB= FILE
66
- use alternate config file for groups.conf(5)
66
+ use alternate config file for \fBgroups.conf\fP(5)
67
67
  .UNINDENT
68
68
  .INDENT 0.0
69
69
  .TP
@@ -80,10 +80,10 @@ expand nodeset(s) to separate nodes (see also \-S \fISEPARATOR\fP)
80
80
  fold nodeset(s) (or separate nodes) into one nodeset
81
81
  .TP
82
82
  .B \-l\fP,\fB \-\-list
83
- list node groups, list node groups and nodes (\fB\-ll\fP) or list node groups, nodes and node count (\fB\-lll\fP). When no argument is specified at all, this command will list all node group names found in selected group source (see also \-s \fIGROUPSOURCE\fP). If any nodesets are specified as argument, this command will find node groups these nodes belongs to (individually). Optionally for each group, the fraction of these nodes being member of the group may be displayed (with \fB\-ll\fP), and also member count/total group node count (with \fB\-lll\fP). If a single hyphen\-minus (\-) is given as a nodeset, it will be read from standard input.
83
+ list node groups, list node groups and nodes (\fB\-ll\fP) or list node groups, nodes and node count (\fB\-lll\fP). When no argument is specified at all, this command will list all node group names found in selected group source (see also \-s \fIGROUPSOURCE\fP). If any nodesets are specified as argument, this command will find node groups these nodes belong to (individually). Optionally for each group, the fraction of these nodes being member of the group may be displayed (with \fB\-ll\fP), and also member count/total group node count (with \fB\-lll\fP). If a single hyphen\-minus (\-) is given as a nodeset, it will be read from standard input.
84
84
  .TP
85
85
  .B \-L\fP,\fB \-\-list\-all
86
- list node groups from all group sources (\fB\-LL\fP shows nodes and \fB\-LLL\fP adds node count). Like \fB\-l\fP, if any nodesets are specified as argument, this command will find node groups these nodes belongs to (individually).
86
+ list node groups from all group sources (\fB\-LL\fP shows nodes and \fB\-LLL\fP adds node count). Like \fB\-l\fP, if any nodesets are specified as argument, this command will find node groups these nodes belong to (individually).
87
87
  .TP
88
88
  .B \-r\fP,\fB \-\-regroup
89
89
  fold nodes using node groups (see \-s \fIGROUPSOURCE\fP)
@@ -91,7 +91,7 @@ fold nodes using node groups (see \-s \fIGROUPSOURCE\fP)
91
91
  .BI \-\-index\fB= NODE
92
92
  output the index of NODE in the nodeset (reverse of \-I/\-\-slice)
93
93
  .TP
94
- .B \-\-groupsources
94
+ .B \-\-list\-sources\fP,\fB \-\-groupsources
95
95
  list all active group sources (see \fBgroups.conf\fP(5))
96
96
  .UNINDENT
97
97
  .TP
@@ -99,13 +99,13 @@ list all active group sources (see \fBgroups.conf\fP(5))
99
99
  .INDENT 7.0
100
100
  .TP
101
101
  .BI \-x \ SUB_NODES\fR,\fB \ \-\-exclude\fB= SUB_NODES
102
- exclude specified set
102
+ exclude specified nodeset
103
103
  .TP
104
104
  .BI \-i \ AND_NODES\fR,\fB \ \-\-intersection\fB= AND_NODES
105
- calculate sets intersection
105
+ calculate nodesets intersection
106
106
  .TP
107
107
  .BI \-X \ XOR_NODES\fR,\fB \ \-\-xor\fB= XOR_NODES
108
- calculate symmetric difference between sets
108
+ calculate symmetric difference between nodesets
109
109
  .UNINDENT
110
110
  .TP
111
111
  .B Options:
@@ -115,7 +115,7 @@ calculate symmetric difference between sets
115
115
  call external node groups support to display all nodes
116
116
  .TP
117
117
  .BI \-\-autostep\fB= AUTOSTEP
118
- enable a\-b/step style syntax when folding nodesets, value is min node count threshold (integer \(aq4\(aq, percentage \(aq50%\(aq or \(aqauto\(aq). If not specified, auto step is disabled (best for compatibility with other cluster tools. Example: autostep=4, \(dqnode2 node4 node6\(dq folds in node[2,4,6] but autostep=3, \(dqnode2 node4 node6\(dq folds in node[2\-6/2].
118
+ enable a\-b/step style syntax when folding nodesets, value is min node count threshold (integer \(aq4\(aq, percentage \(aq50%\(aq or \(aqauto\(aq). If not specified, auto step is disabled (best for compatibility with other cluster tools). Example: autostep=4, \(dqnode2 node4 node6\(dq folds in node[2,4,6] but autostep=3, \(dqnode2 node4 node6\(dq folds in node[2\-6/2].
119
119
  .TP
120
120
  .B \-d\fP,\fB \-\-debug
121
121
  output more messages for debugging purpose
@@ -125,10 +125,10 @@ be quiet, print essential output only
125
125
  .TP
126
126
  .B \-R\fP,\fB \-\-rangeset
127
127
  switch to RangeSet instead of NodeSet. Useful when
128
- working on numerical cluster ranges, eg. 1,5,18\-31
128
+ working on numerical cluster ranges, e.g. 1,5,18\-31
129
129
  .TP
130
130
  .B \-G\fP,\fB \-\-groupbase
131
- hide group source prefix (always \fI@groupname\fP)
131
+ do not display group source prefix (always \fI@groupname\fP)
132
132
  .TP
133
133
  .BI \-S \ SEPARATOR\fR,\fB \ \-\-separator\fB= SEPARATOR
134
134
  separator string to use when expanding nodesets
@@ -144,10 +144,10 @@ return sliced off result; examples of SLICE_RANGESET are \(dq0\(dq for simple in
144
144
  split result into a number of subsets
145
145
  .TP
146
146
  .B \-\-contiguous
147
- split result into contiguous subsets (ie. for nodeset, subsets will contain nodes with same pattern name and a contiguous range of indexes, like foobar[1\-100]; for rangeset, subsets with consists in contiguous index ranges)\(dq\(dq\(dq
147
+ split result into contiguous subsets (i.e. for nodeset, subsets will contain nodes with same pattern name and a contiguous range of indexes, like foobar[1\-100]; for rangeset, subsets consist of contiguous index ranges)
148
148
  .TP
149
149
  .BI \-\-axis\fB= RANGESET
150
- for nD nodesets, fold along provided axis only. Axis are indexed from 1 to n and can be specified here either using the rangeset syntax, eg. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the indices is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range.
150
+ for nD nodesets, fold along provided axis only. Axes are indexed from 1 to n and can be specified here either using the rangeset syntax, e.g. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the index is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range.
151
151
  .TP
152
152
  .BI \-\-pick\fB= N
153
153
  pick N node(s) at random in nodeset
@@ -165,7 +165,7 @@ standard input.
165
165
  The \fBcluset\fP command benefits from ClusterShell NodeSet basic
166
166
  arithmetic addition. This feature extends recognized string patterns by
167
167
  supporting operators matching all Operations seen previously. String
168
- patterns are read from left to right, by proceeding any character
168
+ patterns are read from left to right, by processing any character
169
169
  operators accordingly.
170
170
  .INDENT 0.0
171
171
  .TP
@@ -229,7 +229,7 @@ node[0\-4,11\-13]
229
229
  .B $ cluset \-f @gpu^@slurm:bigmem!@chassis[1\-9/2]
230
230
  .UNINDENT
231
231
  .sp
232
- This computes a folded nodeset containing nodes found in group @gpu and @slurm:bigmem, but not in both, minus the nodes found in odd chassis groups from 1 to 9.
232
+ This computes a folded nodeset containing nodes found in groups @gpu and @slurm:bigmem, but not in both, minus the nodes found in odd chassis groups from 1 to 9.
233
233
  .TP
234
234
  .B \(dqAll nodes\(dq extension
235
235
  The \fB@*\fP and \fB@SOURCE:*\fP special notations may be used in extended patterns to represent all nodes (in SOURCE) according to the \fIall\fP external shell command (see \fBgroups.conf\fP(5)) and are equivalent to:
@@ -243,7 +243,7 @@ The \fB@*\fP and \fB@SOURCE:*\fP special notations may be used in extended patte
243
243
  .UNINDENT
244
244
  .TP
245
245
  .B Group names in expressions
246
- The \fB@@SOURCE\fP notation may be used to access all group names from the specified SOURCE (or from the default group source when just \fB@@\fP is used) in node set expressions; this works with either file\-based group sources or with external group sources that have the \fIlist\fP upcall defined (see \fBgroups.conf\fP(5)):
246
+ The \fB@@SOURCE\fP notation may be used to access all group names from the specified SOURCE (or from the default group source when just \fB@@\fP is used) in node set expressions; this works with either file\-based group sources or with external group sources that have the \fIlist\fP or \fImapall\fP upcall defined (see \fBgroups.conf\fP(5)):
247
247
  .INDENT 7.0
248
248
  .INDENT 3.5
249
249
  .INDENT 0.0
@@ -264,7 +264,7 @@ Any wildcard mask found is matched against all nodes from the group source (see
264
264
  This can be especially useful for server farms, or when cluster node names differ.
265
265
  .INDENT 0.0
266
266
  .TP
267
- .B Say that your group configuration is set to return the following “all nodes”:
267
+ .B Say that your group configuration is set to return the following \(dqall nodes\(dq:
268
268
  .INDENT 7.0
269
269
  .TP
270
270
  .B $ cluset \-f \-a
@@ -488,7 +488,7 @@ command and also to conform with ClusterShell\(aqs \(dqclu*\(dq command nomencla
488
488
  \fI\%https://github.com/clustershell/clustershell/issues\fP
489
489
  .UNINDENT
490
490
  .SH AUTHOR
491
- Stephane Thiell <sthiell@stanford.edu>
491
+ Stephane Thiell
492
492
  .SH COPYRIGHT
493
493
  GNU Lesser General Public License version 2.1 or later (LGPLv2.1+)
494
494
  .\" Generated by docutils manpage writer.
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "CLUSH" 1 "2026-07-04" "1.10" "ClusterShell User Manual"
30
+ .TH "CLUSH" 1 "2026-07-16" "1.10.1" "ClusterShell User Manual"
31
31
  .SH NAME
32
32
  clush \- execute shell commands on a cluster
33
33
  .SH SYNOPSIS
@@ -66,7 +66,7 @@ gathered output results.
66
66
  .sp
67
67
  The \fB\-w\fP option allows you to specify remote hosts by using ClusterShell
68
68
  NodeSet syntax, including the node groups \fB@group\fP special syntax and the
69
- \fBExtended Patterns\fP syntax to benefits from NodeSet basic arithmetic
69
+ \fBExtended Patterns\fP syntax to benefit from NodeSet basic arithmetic
70
70
  (like \fB@Agroup\e&@Bgroup\fP). See EXTENDED PATTERNS in \fBnodeset\fP(1) and
71
71
  also \fBgroups.conf\fP(5) for more information.
72
72
  .sp
@@ -100,7 +100,7 @@ terminal, \fBclush\fP runs interactively. In this mode, \fBclush\fP uses the GNU
100
100
  searching through the command history for lines containing a specified
101
101
  string. For instance, type Control\-R to search in the history for the next
102
102
  entry matching the search string typed so far. \fBclush\fP also recognizes
103
- special single\-character prefixes that allows the user to see and modify
103
+ special single\-character prefixes that allow the user to see and modify
104
104
  the current nodeset (the nodes where the commands are executed).
105
105
  .INDENT 7.0
106
106
  .TP
@@ -134,7 +134,9 @@ Instead of running provided command on remote nodes, \fBclush\fP can use the
134
134
  dedicated \fIexec\fP worker to launch the command \fIlocally\fP, for each node.
135
135
  Some parameters could be used in the command line to make a different
136
136
  command for each node. \fB%h\fP or \fB%host\fP will be replaced by node name and
137
- \fB%n\fP or \fB%rank\fP by the remote rank [0\-N] (to get a literal % use %%)
137
+ \fB%n\fP or \fB%rank\fP by the remote rank [0\-N] (to get a literal % use %%).
138
+ \fB%hosts\fP will be replaced by the full target nodeset, in which case the
139
+ command is executed only once.
138
140
  .TP
139
141
  .B File copying mode ( \fB\-\-copy\fP )
140
142
  When \fBclush\fP is started with the \fB\-c\fP or \fB\-\-copy\fP option, it will
@@ -166,10 +168,10 @@ optional \fBgroups.conf\fP(5) group source to use
166
168
  do not watch for possible input from stdin; this should be used when \fBclush\fP is run in the background (or in scripts).
167
169
  .TP
168
170
  .BI \-\-groupsconf\fB= FILE
169
- use alternate config file for groups.conf(5)
171
+ use alternate config file for \fBgroups.conf\fP(5)
170
172
  .TP
171
173
  .BI \-\-conf\fB= FILE
172
- use alternate config file for clush.conf(5)
174
+ use alternate config file for \fBclush.conf\fP(5)
173
175
  .TP
174
176
  .BI \-O \ <KEY=VALUE>\fR,\fB \ \-\-option\fB= <KEY=VALUE>
175
177
  override any key=value \fBclush.conf\fP(5) options (repeat as needed)
@@ -204,7 +206,7 @@ topology configuration file to use for tree mode
204
206
  pick N node(s) at random in nodeset
205
207
  .UNINDENT
206
208
  .TP
207
- .B Output behaviour:
209
+ .B Output behavior:
208
210
  .INDENT 7.0
209
211
  .TP
210
212
  .B \-q\fP,\fB \-\-quiet
@@ -217,13 +219,13 @@ be verbose, print informative messages
217
219
  output more messages for debugging purpose
218
220
  .TP
219
221
  .B \-G\fP,\fB \-\-groupbase
220
- do not display group source prefix
222
+ do not display group source prefix (always \fB@groupname\fP)
221
223
  .TP
222
224
  .B \-L
223
- disable header block and order output by nodes; if \-b/\-B is not specified, \fBclush\fP will wait for all commands to finish and then display aggregated output of commands with same return codes, ordered by node name; alternatively, when used in conjunction with \-b/\-B (eg. \-bL), \fBclush\fP will enable a \(dqlife gathering\(dq of results by line, such as the next line is displayed as soon as possible (eg. when all nodes have sent the line)
225
+ disable header block and order output by nodes; if \-b/\-B is not specified, \fBclush\fP will wait for all commands to finish and then display aggregated output of commands with same return codes, ordered by node name; alternatively, when used in conjunction with \-b/\-B (e.g. \-bL), \fBclush\fP will enable a \(dqlive gathering\(dq of results by line, so that the next line is displayed as soon as possible (e.g. when all nodes have sent the line)
224
226
  .TP
225
227
  .B \-N
226
- disable labeling of command line
228
+ disable labeling of command output
227
229
  .TP
228
230
  .B \-P\fP,\fB \-\-progress
229
231
  show progress during command execution; if writing is performed to standard input, the live progress indicator will display the global bandwidth of data written to the target nodes
@@ -238,13 +240,13 @@ like \-b but including standard error
238
240
  fold nodeset using node groups
239
241
  .TP
240
242
  .BI \-\-axis\fB= RANGESET
241
- for nD nodesets, fold the displayed nodeset (eg. in gathered output headers) along provided axis only. Axis are indexed from 1 to n and can be specified here either using the rangeset syntax, eg. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the index is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range. This is the per\-invocation equivalent of the \fBfold_axis\fP library default.
243
+ for nD nodesets, fold the displayed nodeset (e.g. in gathered output headers) along provided axis only. Axes are indexed from 1 to n and can be specified here either using the rangeset syntax, e.g. \(aq1\(aq, \(aq1\-2\(aq, \(aq1,3\(aq, or by a single negative number meaning that the index is counted from the end. Because some nodesets may have several different dimensions, axis indices are silently truncated to fall in the allowed range. This is the per\-invocation equivalent of the \fBfold_axis\fP library default.
242
244
  .TP
243
245
  .B \-S\fP,\fB \-\-maxrc
244
246
  return the largest of command return codes
245
247
  .TP
246
248
  .BI \-\-color\fB= WHENCOLOR
247
- \fBclush\fP can use NO_COLOR, CLICOLOR and CLICOLOR_FORCE environment variables. NO_COLOR takes precedence over CLICOLOR_FORCE which takes precedence over CLICOLOR. When \fB\-\-color\fP option is used these environment variables are not taken into account. \fB\-\-color\fP tells whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. \fIWHENCOLOR\fP is \fBnever\fP, \fBalways\fP or \fBauto\fP (which use color if standard output/error refer to a terminal). Colors are set to [34m (blue foreground text) for stdout and [31m (red foreground text) for stderr, and cannot be modified.
249
+ \fBclush\fP can use NO_COLOR, CLICOLOR and CLICOLOR_FORCE environment variables. NO_COLOR takes precedence over CLICOLOR_FORCE which takes precedence over CLICOLOR. When \fB\-\-color\fP option is used these environment variables are not taken into account. \fB\-\-color\fP tells whether to use ANSI colors to surround node or nodeset prefix/header with escape sequences to display them in color on the terminal. \fIWHENCOLOR\fP is \fBnever\fP, \fBalways\fP or \fBauto\fP (which uses color if standard output/error refer to a terminal). Colors are set to [34m (blue foreground text) for stdout and [31m (red foreground text) for stderr, and cannot be modified.
248
250
  .TP
249
251
  .B \-\-diff
250
252
  show diff between common outputs (find the best reference output by focusing on largest nodeset and also smaller command return code)
@@ -284,7 +286,7 @@ do not execute more than FANOUT commands at the same time, useful to limit resou
284
286
  execute remote command as user
285
287
  .TP
286
288
  .BI \-o \ OPTIONS\fR,\fB \ \-\-options\fB= OPTIONS
287
- can be used to give ssh options, eg. \fB\-o \(dq\-p 2022 \-i ~/.ssh/myidrsa\(dq\fP; these options are added first to ssh and override default ones
289
+ can be used to give ssh options, e.g. \fB\-o \(dq\-p 2022 \-i ~/.ssh/myidrsa\(dq\fP; these options are added first to ssh and override default ones
288
290
  .TP
289
291
  .BI \-t \ CONNECT_TIMEOUT\fR,\fB \ \-\-connect_timeout\fB= CONNECT_TIMEOUT
290
292
  limit time to connect to a node
@@ -348,13 +350,13 @@ Search some files on node32 in /etc/yum.repos.d and use clush to list the matchi
348
350
  Run this Linux command to get BIOS version on nodes[3\-5,62] and show version differences (if any).
349
351
  .TP
350
352
  .B # clush \-w dc[1\-2]n[1\-2] \-\-axis=1 \-b uname \-r
351
- Gather output and fold the displayed nodeset header along axis 1 only, eg. show \fBdc[1\-2]n1,dc[1\-2]n2\fP rather than \fBdc[1\-2]n[1\-2]\fP in the header block. See also \fBfold_axis\fP in the Library Defaults configuration to change it permanently.
353
+ Gather output and fold the displayed nodeset header along axis 1 only, e.g. show \fBdc[1\-2]n1,dc[1\-2]n2\fP rather than \fBdc[1\-2]n[1\-2]\fP in the header block. See also \fBfold_axis\fP in the Library Defaults configuration to change it permanently.
352
354
  .UNINDENT
353
355
  .SS All nodes
354
356
  .INDENT 0.0
355
357
  .TP
356
358
  .B # clush \-a uname \-r
357
- Run command \fIuname \-r\fP on all cluster nodes, see \fBgroups.conf\fP(5) to setup all cluster nodes (\fIall:\fP field).
359
+ Run command \fIuname \-r\fP on all cluster nodes, see \fBgroups.conf\fP(5) to set up all cluster nodes (\fIall:\fP field).
358
360
  .TP
359
361
  .B # clush \-a \-x node[5,7] uname \-r
360
362
  Run command \fIuname \-r\fP on all cluster nodes except on nodes node5 and node7.
@@ -388,7 +390,7 @@ Recursively copy local directory \fI/usr/share/doc/clustershell\fP to the same
388
390
  path on remote nodes node[3\-5,62].
389
391
  .TP
390
392
  .B # clush \-w node[3\-5,62] \-\-rcopy /etc/motd \-\-dest /tmp
391
- Copy \fI/etc/motd\fP from remote nodes node[3\-5,62] to local \fI/tmp\fP directory, each file having their remote hostname appended, eg. \fI/tmp/motd.node3\fP\&.
393
+ Copy \fI/etc/motd\fP from remote nodes node[3\-5,62] to local \fI/tmp\fP directory, each file having their remote hostname appended, e.g. \fI/tmp/motd.node3\fP\&.
392
394
  .UNINDENT
393
395
  .SH FILES
394
396
  .INDENT 0.0
@@ -401,11 +403,16 @@ Global clush configuration file. If $CLUSTERSHELL_CFGDIR is not defined,
401
403
  User configuration file for clush. If $XDG_CONFIG_HOME is not defined,
402
404
  \fI$HOME/.config/clustershell/clush.conf\fP is used instead.
403
405
  .TP
406
+ .B \fI{sys.prefix}/etc/clustershell/clush.conf\fP
407
+ Configuration file when ClusterShell is installed in a Python virtual
408
+ environment.
409
+ .TP
404
410
  .B \fI$HOME/.local/etc/clustershell/clush.conf\fP
405
411
  Local user configuration file for clush (default installation for pip \-\-user)
406
412
  .TP
407
413
  .B \fI~/.clush.conf\fP
408
- Deprecated per\-user clush configuration file.
414
+ Deprecated per\-user clush configuration file (no longer read since
415
+ version 1.9).
409
416
  .TP
410
417
  .B \fI~/.clush_history\fP
411
418
  File in which interactive \fBclush\fP command history is saved.
@@ -422,7 +429,7 @@ File in which interactive \fBclush\fP command history is saved.
422
429
  \fI\%https://github.com/clustershell/clustershell/issues\fP
423
430
  .UNINDENT
424
431
  .SH AUTHOR
425
- Stephane Thiell <sthiell@stanford.edu>
432
+ Stephane Thiell
426
433
  .SH COPYRIGHT
427
434
  GNU Lesser General Public License version 2.1 or later (LGPLv2.1+)
428
435
  .\" Generated by docutils manpage writer.