ClusterShell 1.6__tar.gz → 1.7__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 (173) hide show
  1. {clustershell-1.6 → clustershell-1.7}/ChangeLog +206 -0
  2. clustershell-1.6/README → clustershell-1.7/README.md +47 -71
  3. {clustershell-1.6 → clustershell-1.7}/clustershell.spec +24 -14
  4. clustershell-1.7/conf/clush.conf +28 -0
  5. clustershell-1.7/conf/groups.conf +45 -0
  6. {clustershell-1.6 → clustershell-1.7}/conf/groups.conf.d/README +1 -1
  7. clustershell-1.7/conf/groups.conf.d/ace.conf.example +32 -0
  8. clustershell-1.7/conf/groups.conf.d/slurm.conf.example +21 -0
  9. clustershell-1.7/conf/groups.d/README +22 -0
  10. clustershell-1.7/conf/groups.d/cluster.yaml.example +48 -0
  11. clustershell-1.7/conf/groups.d/local.cfg +17 -0
  12. clustershell-1.7/conf/topology.conf.example +12 -0
  13. clustershell-1.7/doc/examples/defaults.conf-rsh +13 -0
  14. clustershell-1.7/doc/extras/vim/ftdetect/clustershell.vim +6 -0
  15. {clustershell-1.6 → clustershell-1.7}/doc/extras/vim/syntax/clushconf.vim +3 -1
  16. {clustershell-1.6 → clustershell-1.7}/doc/extras/vim/syntax/groupsconf.vim +9 -6
  17. {clustershell-1.6 → clustershell-1.7}/doc/man/man1/clubak.1 +28 -44
  18. {clustershell-1.6 → clustershell-1.7}/doc/man/man1/clush.1 +103 -133
  19. {clustershell-1.6 → clustershell-1.7}/doc/man/man1/nodeset.1 +104 -71
  20. {clustershell-1.6 → clustershell-1.7}/doc/man/man5/clush.conf.5 +36 -29
  21. {clustershell-1.6 → clustershell-1.7}/doc/man/man5/groups.conf.5 +81 -35
  22. clustershell-1.7/doc/sphinx/Makefile +154 -0
  23. clustershell-1.7/doc/sphinx/_static/clustershell-nautilus-logo200.png +0 -0
  24. clustershell-1.7/doc/sphinx/_static/theme_overrides.css +12 -0
  25. clustershell-1.7/doc/sphinx/api/Defaults.rst +13 -0
  26. clustershell-1.7/doc/sphinx/api/EngineTimer.rst +9 -0
  27. clustershell-1.7/doc/sphinx/api/Event.rst +10 -0
  28. clustershell-1.7/doc/sphinx/api/MsgTree.rst +9 -0
  29. clustershell-1.7/doc/sphinx/api/NodeSet.rst +15 -0
  30. clustershell-1.7/doc/sphinx/api/NodeUtils.rst +15 -0
  31. clustershell-1.7/doc/sphinx/api/RangeSet.rst +17 -0
  32. clustershell-1.7/doc/sphinx/api/Task.rst +13 -0
  33. clustershell-1.7/doc/sphinx/api/index.rst +17 -0
  34. clustershell-1.7/doc/sphinx/api/workers/ExecWorker.rst +13 -0
  35. clustershell-1.7/doc/sphinx/api/workers/StreamWorker.rst +12 -0
  36. clustershell-1.7/doc/sphinx/api/workers/Worker.rst +13 -0
  37. clustershell-1.7/doc/sphinx/api/workers/WorkerPdsh.rst +16 -0
  38. clustershell-1.7/doc/sphinx/api/workers/WorkerPopen.rst +13 -0
  39. clustershell-1.7/doc/sphinx/api/workers/WorkerRsh.rst +16 -0
  40. clustershell-1.7/doc/sphinx/api/workers/WorkerSsh.rst +16 -0
  41. clustershell-1.7/doc/sphinx/api/workers/index.rst +22 -0
  42. clustershell-1.7/doc/sphinx/clustershell-nautilus-logo200.png +1 -0
  43. clustershell-1.7/doc/sphinx/conf.py +254 -0
  44. clustershell-1.7/doc/sphinx/config.rst +379 -0
  45. clustershell-1.7/doc/sphinx/further.rst +34 -0
  46. clustershell-1.7/doc/sphinx/guide/examples.rst +253 -0
  47. clustershell-1.7/doc/sphinx/guide/index.rst +21 -0
  48. clustershell-1.7/doc/sphinx/guide/nodesets.rst +319 -0
  49. clustershell-1.7/doc/sphinx/guide/rangesets.rst +76 -0
  50. clustershell-1.7/doc/sphinx/guide/taskmgnt.rst +313 -0
  51. clustershell-1.7/doc/sphinx/index.rst +25 -0
  52. clustershell-1.7/doc/sphinx/install.rst +189 -0
  53. clustershell-1.7/doc/sphinx/intro.rst +39 -0
  54. clustershell-1.7/doc/sphinx/release.rst +235 -0
  55. clustershell-1.7/doc/sphinx/tools/clubak.rst +94 -0
  56. clustershell-1.7/doc/sphinx/tools/clush.rst +515 -0
  57. clustershell-1.7/doc/sphinx/tools/index.rst +19 -0
  58. clustershell-1.7/doc/sphinx/tools/nodeset.rst +926 -0
  59. {clustershell-1.6 → clustershell-1.7}/doc/txt/clubak.txt +3 -3
  60. {clustershell-1.6 → clustershell-1.7}/doc/txt/clush.conf.txt +31 -14
  61. {clustershell-1.6 → clustershell-1.7}/doc/txt/clush.txt +32 -10
  62. {clustershell-1.6 → clustershell-1.7}/doc/txt/groups.conf.txt +67 -21
  63. {clustershell-1.6 → clustershell-1.7}/doc/txt/nodeset.txt +50 -14
  64. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Clubak.py +2 -2
  65. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Clush.py +292 -122
  66. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Config.py +48 -13
  67. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Display.py +8 -2
  68. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Error.py +14 -7
  69. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Nodeset.py +114 -63
  70. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/OptionParser.py +107 -55
  71. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/Utils.py +20 -3
  72. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Communication.py +105 -86
  73. clustershell-1.7/lib/ClusterShell/Defaults.py +242 -0
  74. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/EPoll.py +44 -55
  75. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/Engine.py +220 -270
  76. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/Factory.py +10 -3
  77. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/Poll.py +38 -52
  78. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/Select.py +29 -42
  79. clustershell-1.7/lib/ClusterShell/Event.py +163 -0
  80. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Gateway.py +154 -73
  81. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/MsgTree.py +33 -26
  82. clustershell-1.7/lib/ClusterShell/NodeSet.py +1552 -0
  83. clustershell-1.6/lib/ClusterShell/NodeSet.py → clustershell-1.7/lib/ClusterShell/NodeSet.py-XD2.py +489 -234
  84. clustershell-1.7/lib/ClusterShell/NodeUtils.py +631 -0
  85. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Propagation.py +155 -78
  86. clustershell-1.7/lib/ClusterShell/RangeSet.py +1448 -0
  87. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Task.py +294 -244
  88. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Topology.py +29 -12
  89. clustershell-1.7/lib/ClusterShell/Worker/EngineClient.py +530 -0
  90. clustershell-1.7/lib/ClusterShell/Worker/Exec.py +393 -0
  91. clustershell-1.7/lib/ClusterShell/Worker/Pdsh.py +276 -0
  92. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Worker/Popen.py +54 -76
  93. clustershell-1.7/lib/ClusterShell/Worker/Rsh.py +147 -0
  94. clustershell-1.7/lib/ClusterShell/Worker/Ssh.py +176 -0
  95. clustershell-1.7/lib/ClusterShell/Worker/Tree.py +431 -0
  96. clustershell-1.7/lib/ClusterShell/Worker/Worker.py +661 -0
  97. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/__init__.py +6 -7
  98. {clustershell-1.6 → clustershell-1.7}/setup.py +29 -10
  99. {clustershell-1.6 → clustershell-1.7}/tests/CLIClubakTest.py +8 -10
  100. clustershell-1.7/tests/CLIClushTest.py +487 -0
  101. {clustershell-1.6 → clustershell-1.7}/tests/CLIConfigTest.py +82 -21
  102. {clustershell-1.6 → clustershell-1.7}/tests/CLIDisplayTest.py +32 -35
  103. {clustershell-1.6 → clustershell-1.7}/tests/CLINodesetTest.py +352 -53
  104. {clustershell-1.6 → clustershell-1.7}/tests/CLIOptionParserTest.py +2 -2
  105. clustershell-1.7/tests/DefaultsTest.py +202 -0
  106. {clustershell-1.6 → clustershell-1.7}/tests/MisusageTest.py +3 -2
  107. {clustershell-1.6 → clustershell-1.7}/tests/MsgTreeTest.py +55 -3
  108. clustershell-1.7/tests/NodeSetErrorTest.py +182 -0
  109. clustershell-1.7/tests/NodeSetGroupTest.py +1539 -0
  110. {clustershell-1.6 → clustershell-1.7}/tests/NodeSetTest.py +1213 -92
  111. clustershell-1.7/tests/RangeSetNDTest.py +507 -0
  112. {clustershell-1.6 → clustershell-1.7}/tests/RangeSetTest.py +16 -0
  113. clustershell-1.7/tests/StreamWorkerTest.py +202 -0
  114. clustershell-1.7/tests/TLib.py +107 -0
  115. clustershell-1.6/tests/TaskDistantTest.py → clustershell-1.7/tests/TaskDistantMixin.py +321 -210
  116. clustershell-1.7/tests/TaskDistantPdshMixin.py +527 -0
  117. clustershell-1.7/tests/TaskDistantPdshTest.py +68 -0
  118. clustershell-1.7/tests/TaskDistantTest.py +68 -0
  119. {clustershell-1.6 → clustershell-1.7}/tests/TaskEventTest.py +101 -19
  120. clustershell-1.6/tests/TaskLocalTest.py → clustershell-1.7/tests/TaskLocalMixin.py +303 -87
  121. clustershell-1.7/tests/TaskLocalTest.py +66 -0
  122. {clustershell-1.6 → clustershell-1.7}/tests/TaskMsgTreeTest.py +62 -29
  123. {clustershell-1.6 → clustershell-1.7}/tests/TaskRLimitsTest.py +3 -3
  124. {clustershell-1.6 → clustershell-1.7}/tests/TaskThreadJoinTest.py +1 -6
  125. {clustershell-1.6 → clustershell-1.7}/tests/TaskTimerTest.py +94 -22
  126. clustershell-1.7/tests/TreeCopyTest.py +71 -0
  127. clustershell-1.7/tests/TreeGatewayTest.py +470 -0
  128. clustershell-1.7/tests/TreeTaskTest.py +60 -0
  129. clustershell-1.7/tests/TreeTopologyTest.py +443 -0
  130. clustershell-1.7/tests/WorkerExecTest.py +149 -0
  131. clustershell-1.7/tests/fromlist_timeit.py +16 -0
  132. clustershell-1.7/tests/replace_timeit.py +12 -0
  133. clustershell-1.7/tests/t.py +9 -0
  134. clustershell-1.6/conf/clush.conf +0 -17
  135. clustershell-1.6/conf/groups +0 -7
  136. clustershell-1.6/conf/groups.conf +0 -23
  137. clustershell-1.6/conf/groups.conf.d/slurm.conf.example +0 -14
  138. clustershell-1.6/doc/extras/vim/ftdetect/clustershell.vim +0 -6
  139. clustershell-1.6/lib/ClusterShell/Event.py +0 -99
  140. clustershell-1.6/lib/ClusterShell/NodeUtils.py +0 -357
  141. clustershell-1.6/lib/ClusterShell/RangeSet.py +0 -729
  142. clustershell-1.6/lib/ClusterShell/Worker/EngineClient.py +0 -434
  143. clustershell-1.6/lib/ClusterShell/Worker/Pdsh.py +0 -314
  144. clustershell-1.6/lib/ClusterShell/Worker/Ssh.py +0 -348
  145. clustershell-1.6/lib/ClusterShell/Worker/Tree.py +0 -282
  146. clustershell-1.6/lib/ClusterShell/Worker/Worker.py +0 -577
  147. clustershell-1.6/tests/CLIClushTest.py +0 -244
  148. clustershell-1.6/tests/NodeSetErrorTest.py +0 -72
  149. clustershell-1.6/tests/NodeSetGroupTest.py +0 -734
  150. clustershell-1.6/tests/TLib.py +0 -78
  151. clustershell-1.6/tests/TaskAdvancedTest.py +0 -137
  152. clustershell-1.6/tests/TaskDistantPdshTest.py +0 -489
  153. clustershell-1.6/tests/binary_to_hex.py +0 -11
  154. {clustershell-1.6 → clustershell-1.7}/Licence_CeCILL-C_V1-en.txt +0 -0
  155. {clustershell-1.6 → clustershell-1.7}/Licence_CeCILL-C_V1-fr.txt +0 -0
  156. {clustershell-1.6 → clustershell-1.7}/conf/groups.conf.d/genders.conf.example +0 -0
  157. {clustershell-1.6 → clustershell-1.7}/doc/epydoc/clustershell_epydoc.conf +0 -0
  158. {clustershell-1.6 → clustershell-1.7}/doc/examples/check_nodes.py +0 -0
  159. {clustershell-1.6 → clustershell-1.7}/doc/txt/README +0 -0
  160. {clustershell-1.6 → clustershell-1.7}/doc/txt/clustershell.rst +0 -0
  161. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/CLI/__init__.py +0 -0
  162. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Engine/__init__.py +0 -0
  163. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Worker/__init__.py +0 -0
  164. {clustershell-1.6 → clustershell-1.7}/lib/ClusterShell/Worker/fastsubprocess.py +0 -0
  165. {clustershell-1.6 → clustershell-1.7}/scripts/clubak.py +0 -0
  166. {clustershell-1.6 → clustershell-1.7}/scripts/clush.py +0 -0
  167. {clustershell-1.6 → clustershell-1.7}/scripts/nodeset.py +0 -0
  168. {clustershell-1.6 → clustershell-1.7}/setup.cfg +0 -0
  169. {clustershell-1.6 → clustershell-1.7}/tests/RangeSetErrorTest.py +0 -0
  170. {clustershell-1.6 → clustershell-1.7}/tests/TaskPortTest.py +0 -0
  171. {clustershell-1.6 → clustershell-1.7}/tests/TaskThreadSuspendTest.py +0 -0
  172. {clustershell-1.6 → clustershell-1.7}/tests/TaskTimeoutTest.py +0 -0
  173. {clustershell-1.6 → clustershell-1.7}/tests/test_command.py +0 -0
@@ -1,3 +1,209 @@
1
+ 2015-11-10 S. Thiell <sthiell@stanford.edu>
2
+
3
+ * Version 1.7 released.
4
+
5
+ 2015-11-01 S. Thiell <sthiell@stanford.edu>
6
+
7
+ * Clush.py: added -P/--progress to force display of the live progress
8
+ indicator and display global write bandwidth when writing standard input.
9
+
10
+ 2015-10-25 S. Thiell <sthiell@stanford.edu>
11
+
12
+ * Clush.py: added --option/-O clush.conf settings override (pull
13
+ request #248).
14
+
15
+ 2015-10-18 S. Thiell <sthiell@stanford.edu>
16
+
17
+ * Clush.py: added --hostfile command line option to specify a file
18
+ containing single hosts, node sets or node groups (ticket #235).
19
+
20
+ 2015-10-16 S. Thiell <sthiell@stanford.edu>
21
+
22
+ * NodeSet.py: enhancing parser to recognize nodesets with brackets having
23
+ leading/trailing digits like in "prod-00[01-99]" (ticket #228).
24
+
25
+ 2015-08-29 S. Thiell <sthiell@stanford.edu>
26
+
27
+ * CLI/Nodeset.py: added --axis option to choose nD fold axis (ticket
28
+ #269).
29
+ * NodeSet.py: added fold_axis public member to NodeSetBase along with
30
+ expand algorithm when casting to string to choose nD fold axis (ticket
31
+ #269).
32
+
33
+ 2015-08-28 S. Thiell <sthiell@stanford.edu>
34
+
35
+ * CLI/Config.py: better per-user clush.conf support. clush now also checks
36
+ for $XDG_CONFIG_HOME/clustershell/clush.conf and
37
+ $HOME/.local/etc/clustershell/clush.conf (ticket #111).
38
+
39
+ 2015-08-27 S. Thiell <sthiell@stanford.edu>
40
+
41
+ * CLI/Nodeset.py: add --list-all / -L to list groups from all group
42
+ sources (ticket #266). If repeated, it has the same behavior than -l.
43
+
44
+ * NodeUtils.py: add support for built-in groups definition files based on
45
+ YAML. Added autodir configuration option in groups.conf to declare a
46
+ directory where .yaml files are automatically loaded. Example available in
47
+ groups.d/cluster.yaml.example. Added support for groups.conf section with
48
+ multiple source names separated by comma. This is also the case for
49
+ groups.conf.d/*.conf extensions. Also added new upcall command $SOURCE
50
+ variable that is replaced by calling source name before execution.
51
+ Finally, /etc/clustershell/groups is now deprecated and replaced by
52
+ /etc/clustershell/groups.d/local.cfg for new installation (ticket #258).
53
+
54
+ 2015-07-07 S. Thiell <sthiell@stanford.edu>
55
+
56
+ * CLI/Nodeset.py: add --autostep=auto and --autostep=x% option (#161).
57
+
58
+ * NodeSet: add autostep property to allow changing the way every RangeSet of
59
+ a NodeSet object is displayed (eg. node[2-8/2] instead of node[2,4,6,8]).
60
+ Autostep value is the min number of indexes that are found at equal distance
61
+ of each other inside a range before NodeSet starts to use this syntax.
62
+
63
+ 2015-05-18 S. Thiell <stephane.thiell@cea.fr>
64
+
65
+ * Version 1.6.92 released.
66
+
67
+ 2015-04-10 S. Thiell <stephane.thiell@cea.fr>
68
+
69
+ * Tree: implement task.copy() in tree mode using temporary tar file.
70
+
71
+ 2015-04-01 S. Thiell <stephane.thiell@cea.fr>
72
+
73
+ * Tree: allow local command execution on gateways by adding remote=False to
74
+ task.shell()/run(). In practice with this patch, we can now easily
75
+ execute local commands on (remote) gateways using node argument like
76
+ `ipmitool -H %h` to spread the load between gateways.
77
+
78
+ 2015-03-24 S. Thiell <stephane.thiell@cea.fr>
79
+
80
+ * NodeSet.py: disallow opening bracket after digit (ticket #228).
81
+
82
+ 2015-03-23 S. Thiell <stephane.thiell@cea.fr>
83
+
84
+ * Clush.py: Warn user of possible use of shell globbing, especially when
85
+ using brackets and bash without GLOBIGNORE set (ticket #225).
86
+ * Clush.py: Fix --diff against null content (ticket #214).
87
+
88
+ 2015-03-19 S. Thiell <stephane.thiell@cea.fr>
89
+
90
+ * Task.py: Make max_retcode() return None on no-op. Until now, max_retcode()
91
+ returned 0 by default, so even when no command was able to finish (for
92
+ example, due to reached timeout). This behavior did not allow users to
93
+ distinguish between successful commands and such no-op.
94
+
95
+ 2015-03-11 S. Thiell <stephane.thiell@cea.fr>
96
+
97
+ * Worker.py: Introduce StreamWorker as a generic worker class to manage a
98
+ set of streams (using one EngineClient with multiple I/O streams
99
+ internally). It's a concrete class that is now used in Gateway.py to
100
+ manage I/O from the parent host in tree propagation mode. Also changed
101
+ WorkerSimple (and thus WorkerPopen) to inherit from StreamWorker.
102
+
103
+ 2014-05-20 S. Thiell <stephane.thiell@cea.fr>
104
+
105
+ * EngineClient.py: Code improvement to support multiple customizable I/O
106
+ streams per EngineClient in different mode, each being named and having
107
+ their own read/write buffers and attributes.
108
+
109
+ 2014-04-30 A. Degremont <aurelien.degremont@cea.fr>
110
+
111
+ * Clush.py: Add a 'worker' option to switch default worker (ticket #221).
112
+
113
+ 2014-04-23 S. Thiell <stephane.thiell@cea.fr>
114
+
115
+ * EPoll.py: Close epoll control file descriptor when engine is released.
116
+
117
+ 2014-01-26 A. Degremont <aurelien.degremont@cea.fr>
118
+
119
+ * NodeUtils.py: Add group source caching expiration (ticket #98).
120
+
121
+ 2014-01-16 S. Thiell <stephane.thiell@cea.fr>
122
+
123
+ * RangeSet.py: Multidimensional RangeSet support (new RangeSetND class).
124
+ Created RangeSetND class to manage a matrix of RangeSet objects. Folding
125
+ of such objects is quite complex and time consuming. A special
126
+ optimization is provided when only one dimension is varying. Patch by
127
+ aurelien.degremont@cea.fr and stephane.thiell@cea.fr.
128
+
129
+ * NodeSet.py: Multidimensional nodeset support. Added support of
130
+ RangeSetND to NodeSet. Optimized NodeSet so that 1D NodeSet objects are
131
+ still using RangeSet (ticket #92). Also benefiting from RangeSetND
132
+ optimization when only one dimension is varying. Patch by
133
+ aurelien.degremont@cea.fr and stephane.thiell@cea.fr.
134
+
135
+ 2014-01-14 S. Thiell <stephane.thiell@cea.fr>
136
+
137
+ * NodeSet.py: fix and clean fromall()/@* magic and add resolver option to
138
+ grouplist()'s NodeSet module function.
139
+
140
+ 2014-01-14 S. Thiell <stephane.thiell@cea.fr>
141
+
142
+ * NodeSet.py: Define module API to access and set group resolver used for
143
+ @-prefixed (eg. '@group') resolution. This is used to circumvent accessing
144
+ and setting NodeSet module's variable 'RESOLVER_STD_GROUP' directly, which
145
+ is not convenient and error prone. The new functions are
146
+ std_group_resolver() and set_std_group_resolver(). Updated User Guide.
147
+
148
+ * CLI/Clush.py: ignore IOError on stdin reader thread, but print a warning
149
+ in verbose or debug mode (ticket #201).
150
+
151
+ 2014-01-06 S. Thiell <stephane.thiell@cea.fr>
152
+
153
+ * NodeSet.py: Fix internal implementation of NodeSet.contiguous(), that
154
+ is, as NodeSet is mutable, we should avoid using the same NodeSet instance
155
+ in NodeSet.contiguous() for different NodeSet values.
156
+
157
+ 2013-12-17 S. Thiell <stephane.thiell@cea.fr>
158
+
159
+ * Task.py: fix task.iter_buffers() and worker.iter_buffers() to allow
160
+ optional argument match_keys to be an empty list for convenience. It
161
+ should be set to None to disable match_keys check. Also check that
162
+ match_keys is a true key/node sequence and not a string.
163
+
164
+ 2013-11-05 S. Thiell <stephane.thiell@cea.fr>
165
+
166
+ * EngineClient.py: Hide unwanted debug messages: when aborting a task,
167
+ cleanup of associated resources may lead to dropped inter-task messages
168
+ through the EnginePort mechanism. We now only display associated warning
169
+ messages when debugging is enabled...
170
+
171
+ * Task.py: Fix abort() race condition.
172
+
173
+ * CLI/Clush.py: Fix a defect to allow the use of command timeout when
174
+ copying files (with clush -u delay -c ..., ticket #220).
175
+
176
+ 2013-11-04 A. Degremont <aurelien.degremont@cea.fr>
177
+
178
+ * Worker/Rsh.py: Add a Rsh worker. It is compatible with rsh clones
179
+ like mrsh/krsh. (ticket #216).
180
+ * Task.py: Add a 'worker' default option for Task object. It is used
181
+ in Task.shell() and Task.copy().
182
+
183
+ 2012-09-13 S. Thiell <stephane.thiell@cea.fr>
184
+
185
+ * Engine.py: Allow EngineTimer with immediate fire date, that is, a fire
186
+ delay of 0s. Obviously not fired in time, such a timer will still be armed
187
+ and fired as soon as possible (ticket #200).
188
+
189
+ 2012-08-27 S. Thiell <stephane.thiell@cea.fr>
190
+
191
+ * Engine.py: Fix catch-all used in case of KeyboardInterrupt exception
192
+ during runloop, resulting in ghost engine clients in that case and results
193
+ possibly not cleaned properly (ticket #199).
194
+
195
+ 2012-08-01 S. Thiell <stephane.thiell@cea.fr>
196
+
197
+ * CLI/Clush.py: Fix clush_exit() side effects thanks to latest task
198
+ termination improvements (tickets #185).
199
+
200
+ * Task.py: Avoid termination race condition when using multiple threads
201
+ and calling abort()+join() from another thread (tickets #197).
202
+
203
+ 2012-07-09 S. Thiell <stephane.thiell@cea.fr>
204
+
205
+ * NodeSet.py: "All nodes" extended pattern support with @* (ticket #193).
206
+
1
207
  2012-04-08 S. Thiell <stephane.thiell@cea.fr>
2
208
 
3
209
  * Version 1.6 released.
@@ -1,6 +1,5 @@
1
- -----------------------------------------
2
- ClusterShell 1.6 Python Library and Tools
3
- -----------------------------------------
1
+ ClusterShell 1.7 Python Library and Tools
2
+ =========================================
4
3
 
5
4
  ClusterShell is an event-driven open source Python library, designed to run
6
5
  local or distant commands in parallel on server farms or on large Linux
@@ -16,43 +15,44 @@ developers. It also provides clush, clubak and nodeset, three convenient
16
15
  command-line tools that allow traditional shell scripts to benefit from some
17
16
  of the library features.
18
17
 
19
- -------------------
20
- Requirements (v1.6)
21
- -------------------
22
-
23
- * GNU/Linux, *BSD, Mac OS X, etc.
24
-
25
- * OpenSSH (ssh/scp)
18
+ Requirements (v1.7)
19
+ -------------------
26
20
 
21
+ * GNU/Linux, *BSD, Mac OS X
22
+ * OpenSSH (ssh/scp) or rsh
27
23
  * Python 2.x (x >= 4)
24
+ * PyYAML (optional)
28
25
 
29
- -------
30
- License
31
- -------
26
+ License
27
+ -------
32
28
 
33
29
  ClusterShell is distributed under the CeCILL-C license, a French transposition
34
30
  of the GNU LGPL, and is fully LGPL-compatible (see Licence_CeCILL-C_V1-en.txt).
35
31
 
36
- ------------
37
- Installation
38
- ------------
32
+ Documentation
33
+ -------------
34
+
35
+ Online documentation is available here:
39
36
 
40
- When possible, please use the RPM/deb package distribution:
37
+ http://clustershell.readthedocs.org/
41
38
 
42
- https://github.com/cea-hpc/clustershell/wiki/GetClusterShell
39
+ The Sphinx documentation source is available under the doc/sphinx directory.
40
+ Type 'make' to see all available formats (you need Sphinx installed and
41
+ sphinx_rtd_theme to build the documentation). For example, to generate html
42
+ docs, just type:
43
43
 
44
- Otherwise in the source directory, use:
44
+ make html BUILDDIR=/dest/path
45
45
 
46
- # python setup.py install
47
- # cp -r conf /etc/clustershell
46
+ For local library API documentation, just type:
47
+
48
+ $ pydoc ClusterShell
48
49
 
49
- For installation on Mac OS X, please see:
50
+ The following man pages are also provided:
50
51
 
51
- https://github.com/cea-hpc/clustershell/wiki/ClusterShellOnMacOSX
52
+ clush(1), clubak(1), nodeset(1), clush.conl(5), groups.conf(5)
52
53
 
53
- ----------
54
- Test Suite
55
- ----------
54
+ Test Suite
55
+ ----------
56
56
 
57
57
  Regression testing scripts are available in the 'tests' directory:
58
58
 
@@ -60,27 +60,14 @@ Regression testing scripts are available in the 'tests' directory:
60
60
  $ nosetests -sv <Test.py>
61
61
  $ nosetests -sv --all-modules
62
62
 
63
- You have to allow 'ssh localhost' with no warning for "remote" tests to run.
64
-
65
- --------------
66
- Documentation
67
- -------------
68
-
69
- Local API documentation is available, just type:
70
-
71
- $ pydoc ClusterShell
72
-
73
- Online API documentation (epydoc) is available here:
74
-
75
- http://packages.python.org/ClusterShell/
63
+ You have to allow 'ssh localhost' and 'ssh $HOSTNAME' without any warnings for
64
+ "remote" tests to run as expected. $HOSTNAME should not be 127.0.0.1 nor ::1.
65
+ Also some tests use the 'bc' command.
76
66
 
77
- --------------------------
78
- ClusterShell interactively
79
- --------------------------
67
+ ClusterShell interactively
68
+ --------------------------
80
69
 
81
- Python 2.7.1 (r271:86832, Apr 12 2011, 16:15:16)
82
- [GCC 4.6.0 20110331 (Red Hat 4.6.0-2)] on linux2
83
- Type "help", "copyright", "credits" or "license" for more information.
70
+ ```python
84
71
  >>> from ClusterShell.Task import task_self
85
72
  >>> from ClusterShell.NodeSet import NodeSet
86
73
  >>> task = task_self()
@@ -92,32 +79,20 @@ Type "help", "copyright", "credits" or "license" for more information.
92
79
  linux[32-39] 2.6.40.6-0.fc15.x86_64
93
80
 
94
81
  linux[4-6] 2.6.32-71.el6.x86_64
82
+ ```
95
83
 
96
- ------------------
97
- ClusterShell Tools
98
- ------------------
99
-
100
- Powerful tools are provided: clush, nodeset and clubak.
101
-
102
- * clush is a friendly and full-featured parallel shell (see: man clush).
103
- If in doubt, just check if your other parallel tools can do things like:
104
- # tar -czf - dir | clush -w node[10-44] tar -C /tmp -xzvf -
105
-
106
- * nodeset is used to deal with your cluster nodeset, it can be bound to
107
- external groups (see: man nodeset and man groups.conf).
84
+ Links
85
+ -----
108
86
 
109
- * clubak is a tool used to format output from clush/pdsh-like output
110
- (already included in clush with -b), see man clubak.
111
-
112
- -----
113
- Links
114
- -----
115
-
116
- Main web site:
87
+ Web site:
117
88
 
118
89
  http://clustershell.sourceforge.net
119
90
  or http://cea-hpc.github.com/clustershell/
120
91
 
92
+ Online documentation:
93
+
94
+ http://clustershell.readthedocs.org/
95
+
121
96
  Github source respository:
122
97
 
123
98
  https://github.com/cea-hpc/clustershell
@@ -142,11 +117,12 @@ ClusterShell was born along with Shine, a scalable Lustre FS admin tool:
142
117
 
143
118
  http://lustre-shine.sourceforge.net
144
119
 
145
- -------
146
- Authors
147
- -------
120
+ Core developers/reviewers
121
+ -------------------------
148
122
 
149
- Stephane Thiell <stephane.thiell@cea.fr>
150
- Aurelien Degremont <aurelien.degremont@cea.fr>
123
+ * Stephane Thiell
124
+ * Aurelien Degremont
125
+ * Henri Doreau
126
+ * Dominique Martinet
151
127
 
152
- CEA/DAM 2010, 2011, 2012 - http://www-hpc.cea.fr
128
+ CEA/DAM 2010, 2011, 2012, 2013, 2014, 2015 - http://www-hpc.cea.fr
@@ -1,7 +1,7 @@
1
1
  %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
2
2
 
3
3
  Name: clustershell
4
- Version: 1.6
4
+ Version: 1.7
5
5
  Release: 1%{?dist}
6
6
  Summary: Python framework for efficient cluster administration
7
7
 
@@ -12,6 +12,7 @@ Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.g
12
12
  BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
13
13
  BuildArch: noarch
14
14
  BuildRequires: python-devel python-setuptools
15
+ Requires: PyYAML
15
16
 
16
17
  %description
17
18
  Tools and event-based Python library to execute commands on cluster nodes in
@@ -38,12 +39,14 @@ Syntax highlighting in the VIM editor for ClusterShell configuration files.
38
39
 
39
40
  %install
40
41
  rm -rf %{buildroot}
42
+ # install library (lib), scripts (bin) and config (etc)
41
43
  %{__python} setup.py install -O1 --skip-build --root %{buildroot}
44
+ # move config dir away from default setuptools /usr prefix (if rpm-building as user)
45
+ [ -d %{buildroot}/usr/etc ] && mv %{buildroot}/usr/etc %{buildroot}/%{_sysconfdir}
42
46
 
43
- # config files
44
- install -d %{buildroot}/%{_sysconfdir}/clustershell/groups.conf.d
45
- install -p -m 0644 conf/*.conf conf/groups %{buildroot}/%{_sysconfdir}/clustershell/
46
- install -p -m 0644 conf/groups.conf.d/README conf/groups.conf.d/*.conf.example %{buildroot}/%{_sysconfdir}/clustershell/groups.conf.d
47
+ # old versions of rpm (el5) requires that a file/link exists in buildroot even
48
+ # when ghosted, but it is not installed at the end...
49
+ ln -s conf/groups.d/local.cfg %{buildroot}/%{_sysconfdir}/clustershell/groups
47
50
 
48
51
  # man pages
49
52
  install -d %{buildroot}/%{_mandir}/{man1,man5}
@@ -53,11 +56,6 @@ install -p -m 0644 doc/man/man1/nodeset.1 %{buildroot}/%{_mandir}/man1/
53
56
  install -p -m 0644 doc/man/man5/clush.conf.5 %{buildroot}/%{_mandir}/man5/
54
57
  install -p -m 0644 doc/man/man5/groups.conf.5 %{buildroot}/%{_mandir}/man5/
55
58
 
56
- # docs and example scripts
57
- install -d %{buildroot}/%{_defaultdocdir}/%{name}-%{version}/examples
58
- install -p -m 0644 README ChangeLog Licence_CeCILL-C_V1-en.txt Licence_CeCILL-C_V1-fr.txt %{buildroot}/%{_defaultdocdir}/%{name}-%{version}/
59
- install -p -m 0755 doc/examples/*.py %{buildroot}/%{_defaultdocdir}/%{name}-%{version}/examples/
60
-
61
59
  # vim addons
62
60
  %define vimdatadir %{_datadir}/vim/vimfiles
63
61
  install -d %{buildroot}/%{vimdatadir}/{ftdetect,syntax}
@@ -65,25 +63,31 @@ install -p -m 0644 doc/extras/vim/ftdetect/clustershell.vim %{buildroot}/%{vimda
65
63
  install -p -m 0644 doc/extras/vim/syntax/clushconf.vim %{buildroot}/%{vimdatadir}/syntax/
66
64
  install -p -m 0644 doc/extras/vim/syntax/groupsconf.vim %{buildroot}/%{vimdatadir}/syntax/
67
65
 
68
-
69
66
  %clean
70
67
  rm -rf %{buildroot}
71
68
 
72
69
  %files
73
70
  %defattr(-,root,root,-)
74
- %doc %{_defaultdocdir}/%{name}-%{version}/
71
+ %doc README.md ChangeLog Licence_CeCILL-C_V1-en.txt Licence_CeCILL-C_V1-fr.txt
72
+ %doc doc/examples
73
+ %doc doc/sphinx
75
74
  %{_mandir}/man1/clubak.1*
76
75
  %{_mandir}/man1/clush.1*
77
76
  %{_mandir}/man1/nodeset.1*
78
77
  %{_mandir}/man5/clush.conf.5*
79
78
  %{_mandir}/man5/groups.conf.5*
80
79
  %dir %{_sysconfdir}/clustershell
80
+ %dir %{_sysconfdir}/clustershell/groups.d
81
+ %dir %{_sysconfdir}/clustershell/groups.conf.d
81
82
  %config(noreplace) %{_sysconfdir}/clustershell/clush.conf
82
- %config(noreplace) %{_sysconfdir}/clustershell/groups
83
83
  %config(noreplace) %{_sysconfdir}/clustershell/groups.conf
84
- %dir %{_sysconfdir}/clustershell/groups.conf.d
84
+ %ghost %{_sysconfdir}/clustershell/groups
85
+ %config(noreplace) %{_sysconfdir}/clustershell/groups.d/local.cfg
85
86
  %doc %{_sysconfdir}/clustershell/groups.conf.d/README
86
87
  %doc %{_sysconfdir}/clustershell/groups.conf.d/*.conf.example
88
+ %doc %{_sysconfdir}/clustershell/groups.d/README
89
+ %doc %{_sysconfdir}/clustershell/groups.d/*.yaml.example
90
+ %doc %{_sysconfdir}/clustershell/topology.conf.example
87
91
  %{python_sitelib}/ClusterShell/
88
92
  %{python_sitelib}/ClusterShell-*-py?.?.egg-info
89
93
  %{_bindir}/clubak
@@ -97,6 +101,12 @@ rm -rf %{buildroot}
97
101
  %{vimdatadir}/syntax/groupsconf.vim
98
102
 
99
103
  %changelog
104
+ * Tue Nov 10 2015 Stephane Thiell <sthiell@stanford.edu> 1.7-1
105
+ - update to 1.7
106
+
107
+ * Fri Aug 7 2015 Stephane Thiell <stephane.thiell@cea.fr> 1.6.96-1
108
+ - update to 1.6.96
109
+
100
110
  * Sun Apr 08 2012 Stephane Thiell <stephane.thiell@cea.fr> 1.6-1
101
111
  - update to 1.6
102
112
 
@@ -0,0 +1,28 @@
1
+ # Configuration file for clush
2
+ #
3
+ # Please see man clush.conf(5)
4
+ #
5
+
6
+ [Main]
7
+ fanout: 64
8
+ connect_timeout: 15
9
+ command_timeout: 0
10
+ color: auto
11
+ fd_max: 16384
12
+ history_size: 100
13
+ node_count: yes
14
+ verbosity: 1
15
+
16
+ # Add always all remote hosts to known_hosts without confirmation
17
+ #ssh_user: root
18
+ #ssh_path: /usr/bin/ssh
19
+ #ssh_options: -oStrictHostKeyChecking=no
20
+
21
+ # Non-interactively performing password authentication with SSH's so called
22
+ # "interactive keyboard password authentication".
23
+ #ssh_user: root
24
+ #ssh_path: /usr/bin/sshpass -f /root/remotepasswordfile /usr/bin/ssh
25
+ #scp_path: /usr/bin/sshpass -f /root/remotepasswordfile /usr/bin/scp
26
+ #ssh_options: -oBatchMode=no -oStrictHostKeyChecking=no
27
+
28
+
@@ -0,0 +1,45 @@
1
+ # ClusterShell node groups main configuration file
2
+ #
3
+ # Please see `man 5 groups.conf` and
4
+ # http://clustershell.readthedocs.org/en/latest/config.html#node-groups
5
+ # for further details.
6
+ #
7
+ # NOTE: This is a simple group configuration example file, not a
8
+ # default config file. Please edit it to fit your own needs.
9
+ #
10
+ [Main]
11
+
12
+ # Default group source
13
+ default: local
14
+
15
+ # Group source config directory list (space separated, use quotes if needed).
16
+ # Examples are provided. Copy them from *.conf.example to *.conf to enable.
17
+ #
18
+ # $CFGDIR is replaced by the highest priority config directory found.
19
+ # Default confdir value enables both system-wide and user configuration.
20
+ confdir: /etc/clustershell/groups.conf.d $CFGDIR/groups.conf.d
21
+
22
+ # New in 1.7, autodir defines a directory list (space separated, use quotes if
23
+ # needed) where group data files will be auto-loaded.
24
+ # Only *.yaml file are loaded. Copy *.yaml.example files to enable.
25
+ # Group data files avoid the need of external calls for static config files.
26
+ #
27
+ # $CFGDIR is replaced by the highest priority config directory found.
28
+ # Default autodir value enables both system-wide and user configuration.
29
+ autodir: /etc/clustershell/groups.d $CFGDIR/groups.d
30
+
31
+ # Sections below also define group sources.
32
+ #
33
+ # NOTE: /etc/clustershell/groups is deprecated since version 1.7, thus if it
34
+ # doesn't exist, the "local.cfg" file from autodir will be used.
35
+ #
36
+ # See the documentation for $CFGDIR, $SOURCE, $GROUP and $NODE upcall special
37
+ # variables. Please remember that they are substitued before the shell command
38
+ # is effectively executed.
39
+ #
40
+ [local]
41
+ # flat file "group: nodeset" based group source using $CFGDIR/groups.d/local.cfg
42
+ # with backward support for /etc/clustershell/groups
43
+ map: [ -f $CFGDIR/groups ] && f=$CFGDIR/groups || f=$CFGDIR/groups.d/local.cfg; sed -n 's/^$GROUP:\(.*\)/\1/p' $f
44
+ all: [ -f $CFGDIR/groups ] && f=$CFGDIR/groups || f=$CFGDIR/groups.d/local.cfg; sed -n 's/^all:\(.*\)/\1/p' $f
45
+ list: [ -f $CFGDIR/groups ] && f=$CFGDIR/groups || f=$CFGDIR/groups.d/local.cfg; sed -n 's/^\([0-9A-Za-z_-]*\):.*/\1/p' $f
@@ -1,5 +1,5 @@
1
1
  groups.conf.d/README
2
2
 
3
3
  Default directory for additional node group sources configuration files.
4
- ClusterShell scans the directory set by the groupsdir variable, defined
4
+ ClusterShell scans the directory set by the confdir variable, defined
5
5
  in /etc/clustershell/groups.conf, loading all files of the form *.conf.
@@ -0,0 +1,32 @@
1
+ # Additional ClusterShell group source config file
2
+ #
3
+ # Please see `man 5 groups.conf` for further details.
4
+ #
5
+ # This config file provided as an example of group sources for Cray
6
+ # Advanced Cluster Engine (ACE) system management software.
7
+ #
8
+
9
+ # ACE @type -> host(s)
10
+ #
11
+ # example:
12
+ # $ nodeset -f @ace:compute
13
+ # prod-[0001-0144]
14
+ #
15
+ [ace]
16
+ map: cd /acefs/servers; for s in server-*; do [[ $(cat $s/type) == $GROUP && -f $s/host/name ]] && cat $s/host/name; done || true
17
+ all: cat /acefs/servers/server-*/host/name
18
+ list: cd /acefs/servers; for s in server-*; do [ -f $s/host/name ] && cat $s/type; done | sort -u
19
+
20
+ # ACE @server -> host
21
+ #
22
+ # server is the permanent node name used by ACE
23
+ # host is the dynamic/current cluster node name
24
+ #
25
+ # example:
26
+ # $ nodeset -Gs ace-servers -r prod-0038
27
+ # @server-0042
28
+ #
29
+ [ace-servers]
30
+ map: [ -f /acefs/servers/$GROUP/host/name ] && cat /acefs/servers/$GROUP/host/name
31
+ all: cat /acefs/servers/server-*/host/name
32
+ list: cd /acefs/servers; for s in server-*; do [ -f $s/host/name ] && echo $s; done || true
@@ -0,0 +1,21 @@
1
+ # Additional ClusterShell group source config file
2
+ #
3
+ # Please see `man 5 groups.conf` for further details.
4
+ #
5
+
6
+ # SLURM partition bindings
7
+ #
8
+ [slurm]
9
+ map: sinfo -h -o "%N" -p $GROUP
10
+ all: sinfo -h -o "%N"
11
+ list: sinfo -h -o "%R"
12
+ reverse: sinfo -h -N -o "%R" -n $NODE
13
+
14
+ # SLURM state bindings
15
+ #
16
+ [slurmstate]
17
+ map: if [ "$GROUP" == "broken" ]; then sinfo -h -o "%N" -t down,drained; else sinfo -h -o "%N" -t $GROUP; fi
18
+ all: sinfo -h -o "%N"
19
+ list: sinfo -h -o "%T"
20
+ reverse: sinfo -h -N -o "%T" -n $NODE
21
+ cache_time: 300
@@ -0,0 +1,22 @@
1
+ groups.d/README
2
+
3
+ Default directory for YAML node group sources definition files.
4
+ ClusterShell scans the directory set by the autodir variable, defined
5
+ in /etc/clustershell/groups.conf, loading all files of the form *.yaml.
6
+
7
+ These files are automatically parsed by ClusterShell to avoid the need
8
+ of external upcalls for flat files-based group sources.
9
+
10
+ Each file may contain one or several group sources definitions.
11
+ Format of each YAML file is as follow:
12
+
13
+ source1:
14
+ group1: 'nodeset1'
15
+ group2: 'nodeset2'
16
+
17
+ source2:
18
+ group3: 'nodeset3'
19
+ group4: 'nodeset4'
20
+ ...
21
+
22
+ Please take a look at *.yaml.example files for more examples.