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.
- {clustershell-1.10 → clustershell-1.10.1}/ChangeLog +49 -0
- {clustershell-1.10 → clustershell-1.10.1}/MANIFEST.in +0 -2
- {clustershell-1.10/lib/ClusterShell.egg-info → clustershell-1.10.1}/PKG-INFO +2 -4
- {clustershell-1.10 → clustershell-1.10.1}/README.md +27 -10
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/ansible.conf.example +3 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/examples/check_nodes.py +16 -19
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/clubak.1 +25 -10
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/cluset.1 +19 -19
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/clush.1 +25 -18
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man1/nodeset.1 +16 -16
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man5/clush.conf.5 +22 -12
- {clustershell-1.10 → clustershell-1.10.1}/doc/man/man5/groups.conf.5 +38 -26
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/_static/theme_overrides.css +6 -0
- clustershell-1.10.1/doc/sphinx/api/EnginePort.rst +10 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/MsgTree.rst +3 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/NodeSet.rst +1 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/NodeUtils.rst +4 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/index.rst +1 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/conf.py +5 -10
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/config.rst +294 -113
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/further.rst +4 -4
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/examples.rst +44 -39
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/nodesets.rst +59 -50
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/rangesets.rst +17 -10
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/taskmgnt.rst +30 -28
- clustershell-1.10.1/doc/sphinx/install.rst +248 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/intro.rst +1 -1
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/release.rst +41 -4
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/clubak.rst +15 -10
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/cluset.rst +49 -39
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/clush.rst +39 -53
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/nodeset.rst +52 -42
- clustershell-1.10.1/doc/txt/README +4 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clubak.txt +17 -10
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/cluset.txt +44 -43
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clush.conf.txt +27 -19
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clush.txt +27 -20
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/groups.conf.txt +39 -29
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/nodeset.txt +41 -40
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/OptionParser.py +1 -1
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Communication.py +12 -5
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Defaults.py +1 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/EPoll.py +1 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Select.py +1 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Event.py +4 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/NodeSet.py +5 -5
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Propagation.py +17 -8
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/RangeSet.py +2 -1
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Task.py +10 -8
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/EngineClient.py +8 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Tree.py +11 -7
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Worker.py +1 -1
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/__init__.py +3 -3
- {clustershell-1.10 → clustershell-1.10.1/lib/ClusterShell.egg-info}/PKG-INFO +2 -4
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/SOURCES.txt +3 -2
- {clustershell-1.10 → clustershell-1.10.1}/setup.py +3 -3
- clustershell-1.10.1/tests/CLICompletionTest.py +189 -0
- clustershell-1.10.1/tests/EngineErrorTest.py +51 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/NodeSetTest.py +6 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/RangeSetTest.py +16 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/StreamWorkerTest.py +60 -1
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantMixin.py +1 -1
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskLocalMixin.py +2 -2
- {clustershell-1.10 → clustershell-1.10.1}/tests/TreeGatewayTest.py +131 -5
- {clustershell-1.10 → clustershell-1.10.1}/tests/TreeWorkerTest.py +43 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/WorkerExecTest.py +1 -1
- clustershell-1.10/conf/groups.conf.d/ace.conf.example +0 -18
- clustershell-1.10/doc/epydoc/clustershell_epydoc.conf +0 -38
- clustershell-1.10/doc/sphinx/install.rst +0 -304
- clustershell-1.10/doc/txt/README +0 -4
- {clustershell-1.10 → clustershell-1.10.1}/COPYING.LGPLv2.1 +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/bash_completion.d/cluset +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/bash_completion.d/clush +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/README +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/sshpass.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/clush.conf.d/sudo.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/README +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/genders.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/slurm.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.conf.d/xcat.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/README +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/cluster.yaml.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/groups.d/local.cfg +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/conf/topology.conf.example +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/examples/defaults.conf-rsh +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/ftdetect/clustershell.vim +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/syntax/clushconf.vim +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/extras/vim/syntax/groupsconf.vim +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/CHARTER.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/Makefile +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/_static/clustershell-nautilus-logo200.png +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/acknowledgments.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Defaults.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/EngineTimer.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Event.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/RangeSet.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/Task.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/ExecWorker.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/StreamWorker.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/TreeWorker.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/Worker.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerPdsh.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerPopen.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerRsh.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/WorkerSsh.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/api/workers/index.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/guide/index.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/index.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/sphinx/tools/index.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/doc/txt/clustershell.rst +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Clubak.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Clush.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Config.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Display.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Error.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Nodeset.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/Utils.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/CLI/__init__.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Engine.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Factory.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/Poll.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Engine/__init__.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Gateway.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/MsgTree.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/NodeUtils.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Topology.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Exec.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Pdsh.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Popen.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Rsh.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/Ssh.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/__init__.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell/Worker/fastsubprocess.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/dependency_links.txt +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/entry_points.txt +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/requires.txt +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/lib/ClusterShell.egg-info/top_level.txt +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/setup.cfg +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLIClubakTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLIClushTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLIConfigTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLIDisplayTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLINodesetTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/CLIOptionParserTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/DefaultsTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/MisusageTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/MsgTreeTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/NodeSetGroupTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/RangeSetNDTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TLib.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantPdshMixin.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantPdshTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskDistantTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskEventTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskLocalTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskMsgTreeTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskPortTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskRLimitsTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskThreadJoinTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskThreadSuspendTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskTimeoutTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TaskTimerTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TreeTaskTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/TreeTopologyTest.py +0 -0
- {clustershell-1.10 → clustershell-1.10.1}/tests/__init__.py +0 -0
- {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,
|
|
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
|
|
47
|
-
|
|
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
|
|
101
|
+
<ClusterShell.Worker.Ssh.WorkerSsh object at 0x7f45287db910>
|
|
84
102
|
>>> for buf, key in task.iter_buffers():
|
|
85
|
-
... print
|
|
103
|
+
... print(NodeSet.fromlist(key), buf.message().decode())
|
|
86
104
|
...
|
|
87
|
-
linux[32-39]
|
|
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/
|
|
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
|
|
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
|
|
33
|
-
|
|
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
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
#
|
|
53
|
-
|
|
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
|
-
|
|
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
|
|
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-
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
\
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
102
|
+
exclude specified nodeset
|
|
103
103
|
.TP
|
|
104
104
|
.BI \-i \ AND_NODES\fR,\fB \ \-\-intersection\fB= AND_NODES
|
|
105
|
-
calculate
|
|
105
|
+
calculate nodesets intersection
|
|
106
106
|
.TP
|
|
107
107
|
.BI \-X \ XOR_NODES\fR,\fB \ \-\-xor\fB= XOR_NODES
|
|
108
|
-
calculate symmetric difference between
|
|
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,
|
|
128
|
+
working on numerical cluster ranges, e.g. 1,5,18\-31
|
|
129
129
|
.TP
|
|
130
130
|
.B \-G\fP,\fB \-\-groupbase
|
|
131
|
-
|
|
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 (
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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.
|