raidcom-mcp 0.0.0-stage → 0.1.2
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.
- package/CHANGELOG.md +57 -0
- package/INSTALL.md +169 -0
- package/LICENSE +21 -0
- package/README.docker.md +50 -0
- package/README.md +117 -2
- package/README.plugin.md +56 -0
- package/dist/builder.js +409 -0
- package/dist/catalog.js +79 -0
- package/dist/cmdline.js +145 -0
- package/dist/config.js +118 -0
- package/dist/http.js +198 -0
- package/dist/index.js +307 -0
- package/dist/recipes.js +307 -0
- package/dist/search.js +157 -0
- package/dist/tools.js +179 -0
- package/package.json +54 -4
- package/spec/examples.json +390 -0
- package/spec/limits.json +236 -0
- package/spec/notes/conventions.md +56 -0
- package/spec/notes/horcm-setup.md +27 -0
- package/spec/raidcom-catalog.json +1 -0
- package/spec/recipes.json +1106 -0
|
@@ -0,0 +1,1106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Workflows written in the project's own words from common raidcom practice and the Command Reference. Every step is validated against the catalogue by tests/unit/recipes.test.mjs.",
|
|
3
|
+
"recipes": {
|
|
4
|
+
"provision-fc-volumes": {
|
|
5
|
+
"title": "Provision volumes to a Fibre Channel host",
|
|
6
|
+
"summary": "Create DP volumes in a pool, create a host group on one or more ports, set its host mode, register the host's WWNs and map the volumes to it.",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"provision",
|
|
9
|
+
"new server",
|
|
10
|
+
"add host",
|
|
11
|
+
"fibre channel",
|
|
12
|
+
"fc",
|
|
13
|
+
"wwn",
|
|
14
|
+
"host group",
|
|
15
|
+
"map volumes",
|
|
16
|
+
"present lun"
|
|
17
|
+
],
|
|
18
|
+
"params": {
|
|
19
|
+
"pool": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"required": true,
|
|
22
|
+
"description": "Pool ID or name the volumes are created in, e.g. 0."
|
|
23
|
+
},
|
|
24
|
+
"ldev_ids": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"required": true,
|
|
27
|
+
"range": true,
|
|
28
|
+
"description": "LDEV IDs to create, e.g. [\"100-103\"] or [100, 101]."
|
|
29
|
+
},
|
|
30
|
+
"capacity": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"required": true,
|
|
33
|
+
"description": "Size of each volume, e.g. 100G."
|
|
34
|
+
},
|
|
35
|
+
"ports": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"required": true,
|
|
38
|
+
"description": "Ports the host is zoned to, e.g. [\"CL1-A\", \"CL2-A\"]."
|
|
39
|
+
},
|
|
40
|
+
"host_grp": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"required": true,
|
|
43
|
+
"description": "Host group name, e.g. esx01."
|
|
44
|
+
},
|
|
45
|
+
"host_mode": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"required": true,
|
|
48
|
+
"description": "Host mode, e.g. LINUX/IRIX, VMWARE_EX or WIN_EX."
|
|
49
|
+
},
|
|
50
|
+
"host_mode_opt": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"description": "Host mode options, e.g. [63] for VMware. Optional."
|
|
53
|
+
},
|
|
54
|
+
"wwns": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"required": true,
|
|
57
|
+
"description": "Host WWPNs, e.g. [\"210000e08b0256f8\"]."
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"steps": [
|
|
61
|
+
{
|
|
62
|
+
"title": "Create the volumes",
|
|
63
|
+
"command": "add ldev",
|
|
64
|
+
"options": {
|
|
65
|
+
"-pool": "{pool}",
|
|
66
|
+
"-ldev_id": "{ldev}",
|
|
67
|
+
"-capacity": "{capacity}"
|
|
68
|
+
},
|
|
69
|
+
"foreach": {
|
|
70
|
+
"ldev": "ldev_ids"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"title": "Create the host group on each port",
|
|
75
|
+
"command": "add host_grp",
|
|
76
|
+
"options": {
|
|
77
|
+
"-port": "{port}",
|
|
78
|
+
"-host_grp_name": "{host_grp}"
|
|
79
|
+
},
|
|
80
|
+
"foreach": {
|
|
81
|
+
"port": "ports"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"title": "Set the host mode",
|
|
86
|
+
"command": "modify host_grp",
|
|
87
|
+
"options": {
|
|
88
|
+
"-port": [
|
|
89
|
+
"{port}",
|
|
90
|
+
"{host_grp}"
|
|
91
|
+
],
|
|
92
|
+
"-host_mode": "{host_mode}",
|
|
93
|
+
"-set_host_mode_opt": "{host_mode_opt}"
|
|
94
|
+
},
|
|
95
|
+
"foreach": {
|
|
96
|
+
"port": "ports"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"title": "Register the host's WWNs",
|
|
101
|
+
"command": "add hba_wwn",
|
|
102
|
+
"options": {
|
|
103
|
+
"-port": [
|
|
104
|
+
"{port}",
|
|
105
|
+
"{host_grp}"
|
|
106
|
+
],
|
|
107
|
+
"-hba_wwn": "{wwn}"
|
|
108
|
+
},
|
|
109
|
+
"foreach": {
|
|
110
|
+
"port": "ports",
|
|
111
|
+
"wwn": "wwns"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"title": "Map the volumes to the host group",
|
|
116
|
+
"command": "add lun",
|
|
117
|
+
"options": {
|
|
118
|
+
"-port": [
|
|
119
|
+
"{port}",
|
|
120
|
+
"{host_grp}"
|
|
121
|
+
],
|
|
122
|
+
"-ldev_id": "{ldev}"
|
|
123
|
+
},
|
|
124
|
+
"foreach": {
|
|
125
|
+
"port": "ports",
|
|
126
|
+
"ldev": "ldev_ids"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"title": "Verify the paths",
|
|
131
|
+
"command": "get lun",
|
|
132
|
+
"options": {
|
|
133
|
+
"-port": [
|
|
134
|
+
"{port}",
|
|
135
|
+
"{host_grp}"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"foreach": {
|
|
139
|
+
"port": "ports"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"notes": [
|
|
144
|
+
"add host_grp assigns the next free host group ID. When the same group must have the same ID on every port, add it with the ID in the port (CL1-A-1) instead.",
|
|
145
|
+
"add lun without -lun_id assigns the lowest free LUN. Give -lun_id explicitly when the host expects fixed LUN numbers."
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"provision-iscsi-volumes": {
|
|
149
|
+
"title": "Provision volumes to an iSCSI host",
|
|
150
|
+
"summary": "Create DP volumes, create an iSCSI target on a port, register the initiator's IQN and map the volumes.",
|
|
151
|
+
"keywords": [
|
|
152
|
+
"iscsi",
|
|
153
|
+
"iqn",
|
|
154
|
+
"initiator",
|
|
155
|
+
"target",
|
|
156
|
+
"provision",
|
|
157
|
+
"new server"
|
|
158
|
+
],
|
|
159
|
+
"params": {
|
|
160
|
+
"pool": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"required": true,
|
|
163
|
+
"description": "Pool ID or name."
|
|
164
|
+
},
|
|
165
|
+
"ldev_ids": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"required": true,
|
|
168
|
+
"range": true,
|
|
169
|
+
"description": "LDEV IDs to create."
|
|
170
|
+
},
|
|
171
|
+
"capacity": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"required": true,
|
|
174
|
+
"description": "Size of each volume, e.g. 100G."
|
|
175
|
+
},
|
|
176
|
+
"ports": {
|
|
177
|
+
"type": "array",
|
|
178
|
+
"required": true,
|
|
179
|
+
"description": "iSCSI ports, e.g. [\"CL3-A\"]."
|
|
180
|
+
},
|
|
181
|
+
"target": {
|
|
182
|
+
"type": "string",
|
|
183
|
+
"required": true,
|
|
184
|
+
"description": "iSCSI target (host group) name."
|
|
185
|
+
},
|
|
186
|
+
"host_mode": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"required": true,
|
|
189
|
+
"description": "Host mode, e.g. LINUX/IRIX."
|
|
190
|
+
},
|
|
191
|
+
"iqns": {
|
|
192
|
+
"type": "array",
|
|
193
|
+
"required": true,
|
|
194
|
+
"description": "Initiator IQNs, e.g. [\"iqn.1994-05.com.redhat:host01\"]."
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"steps": [
|
|
198
|
+
{
|
|
199
|
+
"title": "Create the volumes",
|
|
200
|
+
"command": "add ldev",
|
|
201
|
+
"options": {
|
|
202
|
+
"-pool": "{pool}",
|
|
203
|
+
"-ldev_id": "{ldev}",
|
|
204
|
+
"-capacity": "{capacity}"
|
|
205
|
+
},
|
|
206
|
+
"foreach": {
|
|
207
|
+
"ldev": "ldev_ids"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"title": "Create the iSCSI target on each port",
|
|
212
|
+
"command": "add host_grp",
|
|
213
|
+
"options": {
|
|
214
|
+
"-port": "{port}",
|
|
215
|
+
"-host_grp_name": "{target}"
|
|
216
|
+
},
|
|
217
|
+
"foreach": {
|
|
218
|
+
"port": "ports"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"title": "Set the host mode",
|
|
223
|
+
"command": "modify host_grp",
|
|
224
|
+
"options": {
|
|
225
|
+
"-port": [
|
|
226
|
+
"{port}",
|
|
227
|
+
"{target}"
|
|
228
|
+
],
|
|
229
|
+
"-host_mode": "{host_mode}"
|
|
230
|
+
},
|
|
231
|
+
"foreach": {
|
|
232
|
+
"port": "ports"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"title": "Register the initiator IQNs",
|
|
237
|
+
"command": "add hba_iscsi",
|
|
238
|
+
"options": {
|
|
239
|
+
"-port": [
|
|
240
|
+
"{port}",
|
|
241
|
+
"{target}"
|
|
242
|
+
],
|
|
243
|
+
"-hba_iscsi_name": "{iqn}"
|
|
244
|
+
},
|
|
245
|
+
"foreach": {
|
|
246
|
+
"port": "ports",
|
|
247
|
+
"iqn": "iqns"
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"title": "Map the volumes to the target",
|
|
252
|
+
"command": "add lun",
|
|
253
|
+
"options": {
|
|
254
|
+
"-port": [
|
|
255
|
+
"{port}",
|
|
256
|
+
"{target}"
|
|
257
|
+
],
|
|
258
|
+
"-ldev_id": "{ldev}"
|
|
259
|
+
},
|
|
260
|
+
"foreach": {
|
|
261
|
+
"port": "ports",
|
|
262
|
+
"ldev": "ldev_ids"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"notes": [
|
|
267
|
+
"Port IP addressing, VLANs and virtual ports are set with raidcom modify port; see raidcom_describe_command for `modify port`."
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
"provision-nvme-tcp-namespaces": {
|
|
271
|
+
"title": "Provision namespaces to an NVMe/TCP host",
|
|
272
|
+
"summary": "Create volumes, an NVM subsystem with its ports, register the host NQN, add namespaces and give the host access to them.",
|
|
273
|
+
"keywords": [
|
|
274
|
+
"nvme",
|
|
275
|
+
"nvme/tcp",
|
|
276
|
+
"nqn",
|
|
277
|
+
"namespace",
|
|
278
|
+
"subsystem",
|
|
279
|
+
"nvm_subsystem"
|
|
280
|
+
],
|
|
281
|
+
"params": {
|
|
282
|
+
"pool": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"required": true,
|
|
285
|
+
"description": "Pool ID or name."
|
|
286
|
+
},
|
|
287
|
+
"ldev_ids": {
|
|
288
|
+
"type": "array",
|
|
289
|
+
"required": true,
|
|
290
|
+
"range": true,
|
|
291
|
+
"description": "LDEV IDs to create."
|
|
292
|
+
},
|
|
293
|
+
"capacity": {
|
|
294
|
+
"type": "string",
|
|
295
|
+
"required": true,
|
|
296
|
+
"description": "Size of each volume, e.g. 100G."
|
|
297
|
+
},
|
|
298
|
+
"ns_ids": {
|
|
299
|
+
"type": "array",
|
|
300
|
+
"required": true,
|
|
301
|
+
"range": true,
|
|
302
|
+
"description": "Namespace IDs, one per LDEV in the same order, e.g. [\"1-4\"]."
|
|
303
|
+
},
|
|
304
|
+
"nvm_subsystem_id": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"required": true,
|
|
307
|
+
"description": "NVM subsystem ID, e.g. 1."
|
|
308
|
+
},
|
|
309
|
+
"nvm_subsystem_name": {
|
|
310
|
+
"type": "string",
|
|
311
|
+
"description": "NVM subsystem name. Optional."
|
|
312
|
+
},
|
|
313
|
+
"ports": {
|
|
314
|
+
"type": "array",
|
|
315
|
+
"required": true,
|
|
316
|
+
"description": "NVMe/TCP ports, e.g. [\"CL1-A\"]."
|
|
317
|
+
},
|
|
318
|
+
"host_nqn": {
|
|
319
|
+
"type": "string",
|
|
320
|
+
"required": true,
|
|
321
|
+
"description": "Host NQN, e.g. nqn.2014-08.org.nvmexpress:uuid:..."
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"steps": [
|
|
325
|
+
{
|
|
326
|
+
"title": "Create the volumes",
|
|
327
|
+
"command": "add ldev",
|
|
328
|
+
"options": {
|
|
329
|
+
"-pool": "{pool}",
|
|
330
|
+
"-ldev_id": "{ldev}",
|
|
331
|
+
"-capacity": "{capacity}"
|
|
332
|
+
},
|
|
333
|
+
"foreach": {
|
|
334
|
+
"ldev": "ldev_ids"
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"title": "Create the NVM subsystem",
|
|
339
|
+
"command": "add nvm_subsystem",
|
|
340
|
+
"options": {
|
|
341
|
+
"-nvm_subsystem_id": "{nvm_subsystem_id}",
|
|
342
|
+
"-nvm_subsystem_name": "{nvm_subsystem_name}",
|
|
343
|
+
"-request_id": "auto"
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"title": "Add the subsystem ports",
|
|
348
|
+
"command": "add nvm_subsystem_port",
|
|
349
|
+
"options": {
|
|
350
|
+
"-nvm_subsystem_id": "{nvm_subsystem_id}",
|
|
351
|
+
"-port": "{port}",
|
|
352
|
+
"-request_id": "auto"
|
|
353
|
+
},
|
|
354
|
+
"foreach": {
|
|
355
|
+
"port": "ports"
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"title": "Register the host NQN",
|
|
360
|
+
"command": "add host_nqn",
|
|
361
|
+
"options": {
|
|
362
|
+
"-nvm_subsystem_id": "{nvm_subsystem_id}",
|
|
363
|
+
"-host_nqn": "{host_nqn}",
|
|
364
|
+
"-request_id": "auto"
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"title": "Add the namespaces",
|
|
369
|
+
"command": "add namespace",
|
|
370
|
+
"options": {
|
|
371
|
+
"-nvm_subsystem_id": "{nvm_subsystem_id}",
|
|
372
|
+
"-ns_id": "{ns}",
|
|
373
|
+
"-ldev_id": "{ldev}",
|
|
374
|
+
"-request_id": "auto"
|
|
375
|
+
},
|
|
376
|
+
"zip": {
|
|
377
|
+
"ns": "ns_ids",
|
|
378
|
+
"ldev": "ldev_ids"
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"title": "Give the host access to each namespace",
|
|
383
|
+
"command": "add namespace_path",
|
|
384
|
+
"options": {
|
|
385
|
+
"-nvm_subsystem_id": "{nvm_subsystem_id}",
|
|
386
|
+
"-ns_id": "{ns}",
|
|
387
|
+
"-host_nqn": "{host_nqn}",
|
|
388
|
+
"-request_id": "auto"
|
|
389
|
+
},
|
|
390
|
+
"foreach": {
|
|
391
|
+
"ns": "ns_ids"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
],
|
|
395
|
+
"notes": [
|
|
396
|
+
"The ports must already be in NVMe mode (raidcom modify port -port_mode nvme) and addressed (raidcom modify port ... -ipv4_address ...)."
|
|
397
|
+
]
|
|
398
|
+
},
|
|
399
|
+
"create-dp-pool": {
|
|
400
|
+
"title": "Create a Dynamic Provisioning pool",
|
|
401
|
+
"summary": "Create a pool from existing LDEVs (or a parity group), then check it.",
|
|
402
|
+
"keywords": [
|
|
403
|
+
"pool",
|
|
404
|
+
"dp pool",
|
|
405
|
+
"hdp",
|
|
406
|
+
"create pool",
|
|
407
|
+
"new pool",
|
|
408
|
+
"dynamic provisioning"
|
|
409
|
+
],
|
|
410
|
+
"params": {
|
|
411
|
+
"pool_id": {
|
|
412
|
+
"type": "string",
|
|
413
|
+
"required": true,
|
|
414
|
+
"description": "Free pool ID. Find one with raidcom get pool."
|
|
415
|
+
},
|
|
416
|
+
"pool_name": {
|
|
417
|
+
"type": "string",
|
|
418
|
+
"required": true,
|
|
419
|
+
"description": "Pool name."
|
|
420
|
+
},
|
|
421
|
+
"pool_ldevs": {
|
|
422
|
+
"type": "array",
|
|
423
|
+
"required": true,
|
|
424
|
+
"range": true,
|
|
425
|
+
"description": "LDEV IDs that become pool volumes."
|
|
426
|
+
},
|
|
427
|
+
"warning_threshold": {
|
|
428
|
+
"type": "string",
|
|
429
|
+
"description": "Warning threshold percent, e.g. 70. Optional; give both thresholds or neither."
|
|
430
|
+
},
|
|
431
|
+
"depletion_threshold": {
|
|
432
|
+
"type": "string",
|
|
433
|
+
"description": "Depletion threshold percent, e.g. 80."
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
"steps": [
|
|
437
|
+
{
|
|
438
|
+
"title": "Look for a free pool ID",
|
|
439
|
+
"command": "get pool"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"title": "Create the pool",
|
|
443
|
+
"command": "add dp_pool",
|
|
444
|
+
"options": {
|
|
445
|
+
"-pool_id": "{pool_id}",
|
|
446
|
+
"-pool_name": "{pool_name}",
|
|
447
|
+
"-ldev_id": "{pool_ldevs}"
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"title": "Set the thresholds",
|
|
452
|
+
"command": "modify pool",
|
|
453
|
+
"options": {
|
|
454
|
+
"-pool": "{pool_id}",
|
|
455
|
+
"-user_threshold": [
|
|
456
|
+
"{warning_threshold}",
|
|
457
|
+
"{depletion_threshold}"
|
|
458
|
+
]
|
|
459
|
+
},
|
|
460
|
+
"when": [
|
|
461
|
+
"warning_threshold",
|
|
462
|
+
"depletion_threshold"
|
|
463
|
+
]
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"title": "Check the pool",
|
|
467
|
+
"command": "get pool",
|
|
468
|
+
"options": {
|
|
469
|
+
"-pool": "{pool_id}",
|
|
470
|
+
"-key": "opt"
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"notes": [
|
|
475
|
+
"The LDEVs must exist and be formatted and unmapped before they can become pool volumes."
|
|
476
|
+
]
|
|
477
|
+
},
|
|
478
|
+
"grow-dp-pool": {
|
|
479
|
+
"title": "Add pool volumes to a pool",
|
|
480
|
+
"summary": "Expand an existing Dynamic Provisioning pool with more pool volumes. raidcom cannot shrink a pool.",
|
|
481
|
+
"keywords": [
|
|
482
|
+
"grow pool",
|
|
483
|
+
"expand pool",
|
|
484
|
+
"add pool volume",
|
|
485
|
+
"more capacity"
|
|
486
|
+
],
|
|
487
|
+
"params": {
|
|
488
|
+
"pool_id": {
|
|
489
|
+
"type": "string",
|
|
490
|
+
"required": true,
|
|
491
|
+
"description": "Pool ID to expand."
|
|
492
|
+
},
|
|
493
|
+
"pool_ldevs": {
|
|
494
|
+
"type": "array",
|
|
495
|
+
"required": true,
|
|
496
|
+
"range": true,
|
|
497
|
+
"description": "LDEV IDs to add as pool volumes."
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
"steps": [
|
|
501
|
+
{
|
|
502
|
+
"title": "Add the pool volumes",
|
|
503
|
+
"command": "add dp_pool",
|
|
504
|
+
"options": {
|
|
505
|
+
"-pool_id": "{pool_id}",
|
|
506
|
+
"-ldev_id": "{pool_ldevs}"
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
"title": "Check the pool",
|
|
511
|
+
"command": "get pool",
|
|
512
|
+
"options": {
|
|
513
|
+
"-pool": "{pool_id}",
|
|
514
|
+
"-key": "opt"
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
],
|
|
518
|
+
"notes": [
|
|
519
|
+
"Removing pool volumes is a GUI operation; there is no raidcom command for it."
|
|
520
|
+
]
|
|
521
|
+
},
|
|
522
|
+
"extend-dp-volume": {
|
|
523
|
+
"title": "Extend DP volumes",
|
|
524
|
+
"summary": "Grow DP volumes online. The capacity is the amount to ADD, not the new size, and the change cannot be undone.",
|
|
525
|
+
"keywords": [
|
|
526
|
+
"extend",
|
|
527
|
+
"expand volume",
|
|
528
|
+
"grow volume",
|
|
529
|
+
"resize",
|
|
530
|
+
"increase size"
|
|
531
|
+
],
|
|
532
|
+
"params": {
|
|
533
|
+
"ldev_ids": {
|
|
534
|
+
"type": "array",
|
|
535
|
+
"required": true,
|
|
536
|
+
"range": true,
|
|
537
|
+
"description": "LDEV IDs to extend."
|
|
538
|
+
},
|
|
539
|
+
"add_capacity": {
|
|
540
|
+
"type": "string",
|
|
541
|
+
"required": true,
|
|
542
|
+
"description": "Capacity to add to each volume, e.g. 100G."
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
"steps": [
|
|
546
|
+
{
|
|
547
|
+
"title": "Extend each volume by the given capacity",
|
|
548
|
+
"command": "extend ldev",
|
|
549
|
+
"options": {
|
|
550
|
+
"-ldev_id": "{ldev}",
|
|
551
|
+
"-capacity": "{add_capacity}"
|
|
552
|
+
},
|
|
553
|
+
"foreach": {
|
|
554
|
+
"ldev": "ldev_ids"
|
|
555
|
+
}
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
"title": "Show the new size",
|
|
559
|
+
"command": "get ldev",
|
|
560
|
+
"options": {
|
|
561
|
+
"-ldev_id": "{ldev}"
|
|
562
|
+
},
|
|
563
|
+
"foreach": {
|
|
564
|
+
"ldev": "ldev_ids"
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
],
|
|
568
|
+
"notes": [
|
|
569
|
+
"Only DP volumes can be extended this way. A volume cannot be shrunk."
|
|
570
|
+
]
|
|
571
|
+
},
|
|
572
|
+
"unmap-and-delete-volumes": {
|
|
573
|
+
"title": "Unmap and delete volumes",
|
|
574
|
+
"summary": "Remove the LU paths of volumes, then delete the volumes. Destructive.",
|
|
575
|
+
"keywords": [
|
|
576
|
+
"delete volume",
|
|
577
|
+
"remove volume",
|
|
578
|
+
"unmap",
|
|
579
|
+
"decommission",
|
|
580
|
+
"delete lun"
|
|
581
|
+
],
|
|
582
|
+
"params": {
|
|
583
|
+
"ports": {
|
|
584
|
+
"type": "array",
|
|
585
|
+
"required": true,
|
|
586
|
+
"description": "Ports the volumes are mapped on."
|
|
587
|
+
},
|
|
588
|
+
"host_grp": {
|
|
589
|
+
"type": "string",
|
|
590
|
+
"required": true,
|
|
591
|
+
"description": "Host group name."
|
|
592
|
+
},
|
|
593
|
+
"ldev_ids": {
|
|
594
|
+
"type": "array",
|
|
595
|
+
"required": true,
|
|
596
|
+
"range": true,
|
|
597
|
+
"description": "LDEV IDs to remove."
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
"steps": [
|
|
601
|
+
{
|
|
602
|
+
"title": "Remove the LU paths",
|
|
603
|
+
"command": "delete lun",
|
|
604
|
+
"options": {
|
|
605
|
+
"-port": [
|
|
606
|
+
"{port}",
|
|
607
|
+
"{host_grp}"
|
|
608
|
+
],
|
|
609
|
+
"-ldev_id": "{ldev}"
|
|
610
|
+
},
|
|
611
|
+
"foreach": {
|
|
612
|
+
"port": "ports",
|
|
613
|
+
"ldev": "ldev_ids"
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"title": "Delete the volumes",
|
|
618
|
+
"command": "delete ldev",
|
|
619
|
+
"options": {
|
|
620
|
+
"-ldev_id": "{ldev}"
|
|
621
|
+
},
|
|
622
|
+
"foreach": {
|
|
623
|
+
"ldev": "ldev_ids"
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
],
|
|
627
|
+
"notes": [
|
|
628
|
+
"Make sure the host no longer uses the volumes. Deleting a volume destroys its data."
|
|
629
|
+
]
|
|
630
|
+
},
|
|
631
|
+
"rename-host-group": {
|
|
632
|
+
"title": "Rename a host group",
|
|
633
|
+
"summary": "raidcom has no rename for host groups: adding a group with the same ID and a new name renames it. Find the ID first.",
|
|
634
|
+
"keywords": [
|
|
635
|
+
"rename host group",
|
|
636
|
+
"change host group name"
|
|
637
|
+
],
|
|
638
|
+
"params": {
|
|
639
|
+
"port": {
|
|
640
|
+
"type": "string",
|
|
641
|
+
"required": true,
|
|
642
|
+
"description": "Port, e.g. CL3-A."
|
|
643
|
+
},
|
|
644
|
+
"host_grp_id": {
|
|
645
|
+
"type": "string",
|
|
646
|
+
"required": true,
|
|
647
|
+
"description": "Host group ID found with get host_grp, e.g. 1."
|
|
648
|
+
},
|
|
649
|
+
"new_name": {
|
|
650
|
+
"type": "string",
|
|
651
|
+
"required": true,
|
|
652
|
+
"description": "New host group name."
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
"steps": [
|
|
656
|
+
{
|
|
657
|
+
"title": "List the host groups to find the ID",
|
|
658
|
+
"command": "get host_grp",
|
|
659
|
+
"options": {
|
|
660
|
+
"-port": "{port}"
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"title": "Rename the host group",
|
|
665
|
+
"command": "add host_grp",
|
|
666
|
+
"options": {
|
|
667
|
+
"-port": "{port}-{host_grp_id}",
|
|
668
|
+
"-host_grp_name": "{new_name}"
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
],
|
|
672
|
+
"notes": [
|
|
673
|
+
"This is the behaviour described for the arrays the command was written for; run it with checkmode first on yours."
|
|
674
|
+
]
|
|
675
|
+
},
|
|
676
|
+
"create-command-device": {
|
|
677
|
+
"title": "Create a command device",
|
|
678
|
+
"summary": "Create a small volume, turn it into a command device and map it to the CCI host.",
|
|
679
|
+
"keywords": [
|
|
680
|
+
"command device",
|
|
681
|
+
"cmd dev",
|
|
682
|
+
"horcm_cmd",
|
|
683
|
+
"cci host"
|
|
684
|
+
],
|
|
685
|
+
"params": {
|
|
686
|
+
"pool": {
|
|
687
|
+
"type": "string",
|
|
688
|
+
"required": true,
|
|
689
|
+
"description": "Pool for the volume."
|
|
690
|
+
},
|
|
691
|
+
"ldev_id": {
|
|
692
|
+
"type": "string",
|
|
693
|
+
"required": true,
|
|
694
|
+
"description": "LDEV ID of the command device."
|
|
695
|
+
},
|
|
696
|
+
"capacity": {
|
|
697
|
+
"type": "string",
|
|
698
|
+
"required": true,
|
|
699
|
+
"description": "Size, e.g. 100M (at least 33 MB)."
|
|
700
|
+
},
|
|
701
|
+
"security": {
|
|
702
|
+
"type": "string",
|
|
703
|
+
"description": "Security setting digit placed after y, e.g. 3. Optional."
|
|
704
|
+
},
|
|
705
|
+
"port": {
|
|
706
|
+
"type": "string",
|
|
707
|
+
"required": true,
|
|
708
|
+
"description": "Port, e.g. CL3-A."
|
|
709
|
+
},
|
|
710
|
+
"host_grp": {
|
|
711
|
+
"type": "string",
|
|
712
|
+
"required": true,
|
|
713
|
+
"description": "Host group of the CCI host."
|
|
714
|
+
},
|
|
715
|
+
"lun_id": {
|
|
716
|
+
"type": "string",
|
|
717
|
+
"description": "LUN number. Optional."
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
"steps": [
|
|
721
|
+
{
|
|
722
|
+
"title": "Create the volume",
|
|
723
|
+
"command": "add ldev",
|
|
724
|
+
"options": {
|
|
725
|
+
"-pool": "{pool}",
|
|
726
|
+
"-ldev_id": "{ldev_id}",
|
|
727
|
+
"-capacity": "{capacity}"
|
|
728
|
+
}
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
"title": "Make it a command device",
|
|
732
|
+
"command": "modify ldev",
|
|
733
|
+
"options": {
|
|
734
|
+
"-ldev_id": "{ldev_id}",
|
|
735
|
+
"-command_device": [
|
|
736
|
+
"y",
|
|
737
|
+
"{security}"
|
|
738
|
+
]
|
|
739
|
+
}
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"title": "Map it to the CCI host",
|
|
743
|
+
"command": "add lun",
|
|
744
|
+
"options": {
|
|
745
|
+
"-port": [
|
|
746
|
+
"{port}",
|
|
747
|
+
"{host_grp}"
|
|
748
|
+
],
|
|
749
|
+
"-ldev_id": "{ldev_id}",
|
|
750
|
+
"-lun_id": "{lun_id}"
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
],
|
|
754
|
+
"notes": [
|
|
755
|
+
"Never put a file system on a command device. Leave at least one command device per host OS type."
|
|
756
|
+
]
|
|
757
|
+
},
|
|
758
|
+
"reclaim-zero-pages": {
|
|
759
|
+
"title": "Reclaim zero pages",
|
|
760
|
+
"summary": "Start zero page reclamation on DP volumes and check that it finished.",
|
|
761
|
+
"keywords": [
|
|
762
|
+
"zero page",
|
|
763
|
+
"reclaim",
|
|
764
|
+
"discard",
|
|
765
|
+
"free space",
|
|
766
|
+
"thin"
|
|
767
|
+
],
|
|
768
|
+
"params": {
|
|
769
|
+
"ldev_ids": {
|
|
770
|
+
"type": "array",
|
|
771
|
+
"required": true,
|
|
772
|
+
"range": true,
|
|
773
|
+
"description": "DP volume LDEV IDs."
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"steps": [
|
|
777
|
+
{
|
|
778
|
+
"title": "Start reclamation",
|
|
779
|
+
"command": "modify ldev",
|
|
780
|
+
"options": {
|
|
781
|
+
"-ldev_id": "{ldev}",
|
|
782
|
+
"-status": "discard_zero_page"
|
|
783
|
+
},
|
|
784
|
+
"foreach": {
|
|
785
|
+
"ldev": "ldev_ids"
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
],
|
|
789
|
+
"notes": [
|
|
790
|
+
"The command is asynchronous; raidcom get command_status shows when it is done."
|
|
791
|
+
]
|
|
792
|
+
},
|
|
793
|
+
"inventory-report": {
|
|
794
|
+
"title": "Read-only inventory of a storage system",
|
|
795
|
+
"summary": "Commands that report ports, parity groups, pools, host groups and LDEVs. Nothing is changed.",
|
|
796
|
+
"keywords": [
|
|
797
|
+
"inventory",
|
|
798
|
+
"report",
|
|
799
|
+
"list",
|
|
800
|
+
"audit",
|
|
801
|
+
"what is configured",
|
|
802
|
+
"overview"
|
|
803
|
+
],
|
|
804
|
+
"params": {},
|
|
805
|
+
"steps": [
|
|
806
|
+
{
|
|
807
|
+
"title": "Ports",
|
|
808
|
+
"command": "get port"
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"title": "Parity groups",
|
|
812
|
+
"command": "get parity_grp"
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"title": "Pools",
|
|
816
|
+
"command": "get pool",
|
|
817
|
+
"options": {
|
|
818
|
+
"-key": "opt"
|
|
819
|
+
}
|
|
820
|
+
},
|
|
821
|
+
{
|
|
822
|
+
"title": "Host groups on every port",
|
|
823
|
+
"command": "get host_grp",
|
|
824
|
+
"options": {
|
|
825
|
+
"-allports": true
|
|
826
|
+
}
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"title": "Implemented LDEVs",
|
|
830
|
+
"command": "get ldev",
|
|
831
|
+
"options": {
|
|
832
|
+
"-ldev_list": "defined"
|
|
833
|
+
}
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"title": "LDEVs that have LU paths",
|
|
837
|
+
"command": "get ldev",
|
|
838
|
+
"options": {
|
|
839
|
+
"-ldev_list": "mapped"
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
],
|
|
843
|
+
"notes": []
|
|
844
|
+
},
|
|
845
|
+
"create-copy-group": {
|
|
846
|
+
"title": "Create device groups and a copy group",
|
|
847
|
+
"summary": "Put primary and secondary LDEVs into device groups and tie them together in a copy group, ready for paircreate.",
|
|
848
|
+
"keywords": [
|
|
849
|
+
"copy group",
|
|
850
|
+
"device group",
|
|
851
|
+
"replication",
|
|
852
|
+
"pair",
|
|
853
|
+
"gad",
|
|
854
|
+
"ur",
|
|
855
|
+
"truecopy",
|
|
856
|
+
"shadowimage"
|
|
857
|
+
],
|
|
858
|
+
"params": {
|
|
859
|
+
"primary_group": {
|
|
860
|
+
"type": "string",
|
|
861
|
+
"required": true,
|
|
862
|
+
"description": "Device group name for the primary volumes."
|
|
863
|
+
},
|
|
864
|
+
"primary_ldevs": {
|
|
865
|
+
"type": "array",
|
|
866
|
+
"required": true,
|
|
867
|
+
"range": true,
|
|
868
|
+
"description": "Primary LDEV IDs."
|
|
869
|
+
},
|
|
870
|
+
"secondary_group": {
|
|
871
|
+
"type": "string",
|
|
872
|
+
"required": true,
|
|
873
|
+
"description": "Device group name for the secondary volumes."
|
|
874
|
+
},
|
|
875
|
+
"secondary_ldevs": {
|
|
876
|
+
"type": "array",
|
|
877
|
+
"required": true,
|
|
878
|
+
"range": true,
|
|
879
|
+
"description": "Secondary LDEV IDs, same count and order as the primary."
|
|
880
|
+
},
|
|
881
|
+
"copy_group": {
|
|
882
|
+
"type": "string",
|
|
883
|
+
"required": true,
|
|
884
|
+
"description": "Copy group name."
|
|
885
|
+
},
|
|
886
|
+
"device_prefix": {
|
|
887
|
+
"type": "string",
|
|
888
|
+
"required": true,
|
|
889
|
+
"description": "Prefix for device names; the LDEV ID is appended."
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
"steps": [
|
|
893
|
+
{
|
|
894
|
+
"title": "Primary device group",
|
|
895
|
+
"command": "add device_grp",
|
|
896
|
+
"options": {
|
|
897
|
+
"-device_grp_name": [
|
|
898
|
+
"{primary_group}",
|
|
899
|
+
"{device_prefix}{p}"
|
|
900
|
+
],
|
|
901
|
+
"-ldev_id": "{p}"
|
|
902
|
+
},
|
|
903
|
+
"foreach": {
|
|
904
|
+
"p": "primary_ldevs"
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"title": "Secondary device group",
|
|
909
|
+
"command": "add device_grp",
|
|
910
|
+
"options": {
|
|
911
|
+
"-device_grp_name": [
|
|
912
|
+
"{secondary_group}",
|
|
913
|
+
"{device_prefix}{p}"
|
|
914
|
+
],
|
|
915
|
+
"-ldev_id": "{s}"
|
|
916
|
+
},
|
|
917
|
+
"zip": {
|
|
918
|
+
"p": "primary_ldevs",
|
|
919
|
+
"s": "secondary_ldevs"
|
|
920
|
+
}
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"title": "Copy group",
|
|
924
|
+
"command": "add copy_grp",
|
|
925
|
+
"options": {
|
|
926
|
+
"-copy_grp_name": [
|
|
927
|
+
"{copy_group}",
|
|
928
|
+
"{primary_group}",
|
|
929
|
+
"{secondary_group}"
|
|
930
|
+
]
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
],
|
|
934
|
+
"notes": [
|
|
935
|
+
"Run the device group and copy group commands on the instance that owns each side, then create the pairs with paircreate (not part of this server)."
|
|
936
|
+
]
|
|
937
|
+
},
|
|
938
|
+
"check-async-result": {
|
|
939
|
+
"title": "Check an asynchronous command",
|
|
940
|
+
"summary": "Show the result of asynchronous commands and look up an error code.",
|
|
941
|
+
"keywords": [
|
|
942
|
+
"command status",
|
|
943
|
+
"async",
|
|
944
|
+
"request id",
|
|
945
|
+
"did it finish",
|
|
946
|
+
"error",
|
|
947
|
+
"ssb"
|
|
948
|
+
],
|
|
949
|
+
"params": {
|
|
950
|
+
"request_id": {
|
|
951
|
+
"type": "string",
|
|
952
|
+
"description": "Request ID printed by a command run with -request_id auto. Optional."
|
|
953
|
+
}
|
|
954
|
+
},
|
|
955
|
+
"steps": [
|
|
956
|
+
{
|
|
957
|
+
"title": "Show command status",
|
|
958
|
+
"command": "get command_status",
|
|
959
|
+
"options": {
|
|
960
|
+
"-request_id": "{request_id}"
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
],
|
|
964
|
+
"notes": [
|
|
965
|
+
"Give the SSB1 and SSB2 codes it shows to raidcom get error_message to read the reason."
|
|
966
|
+
]
|
|
967
|
+
},
|
|
968
|
+
"create-mainframe-pool": {
|
|
969
|
+
"title": "Create a mainframe (3390) Dynamic Provisioning pool",
|
|
970
|
+
"summary": "Create a parity group with the 3390-V mainframe emulation type, create and quick-format 3390-V LDEVs on it, optionally assign them an SSID, and make them the volumes of a DP pool.",
|
|
971
|
+
"keywords": [
|
|
972
|
+
"mainframe",
|
|
973
|
+
"3390",
|
|
974
|
+
"3390-v",
|
|
975
|
+
"ckd",
|
|
976
|
+
"ssid",
|
|
977
|
+
"qfmt",
|
|
978
|
+
"quick format",
|
|
979
|
+
"pool",
|
|
980
|
+
"dp pool",
|
|
981
|
+
"parity group",
|
|
982
|
+
"zos",
|
|
983
|
+
"drive operation"
|
|
984
|
+
],
|
|
985
|
+
"env": {
|
|
986
|
+
"HORCC_DRIVEOPERATION": "1"
|
|
987
|
+
},
|
|
988
|
+
"params": {
|
|
989
|
+
"parity_grp_id": {
|
|
990
|
+
"type": "string",
|
|
991
|
+
"required": true,
|
|
992
|
+
"description": "Parity group ID to create, in the form gno-sgno, e.g. 1-2."
|
|
993
|
+
},
|
|
994
|
+
"drive_locations": {
|
|
995
|
+
"type": "array",
|
|
996
|
+
"required": true,
|
|
997
|
+
"description": "Drive locations of the parity group, e.g. [\"0-1\",\"1-1\",\"2-1\",\"3-1\",\"4-1\",\"5-1\",\"6-1\",\"7-1\"]. Find free drives with raidcom get drive."
|
|
998
|
+
},
|
|
999
|
+
"raid_type": {
|
|
1000
|
+
"type": "string",
|
|
1001
|
+
"required": true,
|
|
1002
|
+
"description": "RAID level and layout, e.g. 6D2P."
|
|
1003
|
+
},
|
|
1004
|
+
"ldev_ids": {
|
|
1005
|
+
"type": "array",
|
|
1006
|
+
"required": true,
|
|
1007
|
+
"range": true,
|
|
1008
|
+
"description": "LDEV IDs to create, as CU:LDEV in hex. Ranges work: [\"dd:00-dd:0f\"] is sixteen LDEVs."
|
|
1009
|
+
},
|
|
1010
|
+
"ldev_capacity": {
|
|
1011
|
+
"type": "string",
|
|
1012
|
+
"required": true,
|
|
1013
|
+
"description": "Capacity of each LDEV; a number without a unit is blocks, e.g. 912350208."
|
|
1014
|
+
},
|
|
1015
|
+
"ssid": {
|
|
1016
|
+
"type": "string",
|
|
1017
|
+
"description": "Subsystem ID (SSID) to assign to the LDEVs: four hex digits, chosen by you and unused on this system. Optional; the step is left out if you don't give one."
|
|
1018
|
+
},
|
|
1019
|
+
"pool_id": {
|
|
1020
|
+
"type": "string",
|
|
1021
|
+
"required": true,
|
|
1022
|
+
"description": "Free pool ID."
|
|
1023
|
+
},
|
|
1024
|
+
"pool_name": {
|
|
1025
|
+
"type": "string",
|
|
1026
|
+
"required": true,
|
|
1027
|
+
"description": "Pool name."
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
"steps": [
|
|
1031
|
+
{
|
|
1032
|
+
"title": "List the drives",
|
|
1033
|
+
"command": "get drive"
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"title": "Create the parity group",
|
|
1037
|
+
"command": "add parity_grp",
|
|
1038
|
+
"options": {
|
|
1039
|
+
"-parity_grp_id": "{parity_grp_id}",
|
|
1040
|
+
"-drive_location": "{drive_locations}",
|
|
1041
|
+
"-emulation": "3390-V",
|
|
1042
|
+
"-raid_type": "{raid_type}"
|
|
1043
|
+
}
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"title": "Check the drives again",
|
|
1047
|
+
"command": "get drive"
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
"title": "Check the parity group",
|
|
1051
|
+
"command": "get parity_grp"
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"title": "Assign the SSID",
|
|
1055
|
+
"command": "modify ldev",
|
|
1056
|
+
"options": {
|
|
1057
|
+
"-ldev_id": "{ldev}",
|
|
1058
|
+
"-ssid": "{ssid}"
|
|
1059
|
+
},
|
|
1060
|
+
"foreach": {
|
|
1061
|
+
"ldev": "ldev_ids"
|
|
1062
|
+
},
|
|
1063
|
+
"when": "ssid"
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"title": "Create the LDEVs",
|
|
1067
|
+
"command": "add ldev",
|
|
1068
|
+
"options": {
|
|
1069
|
+
"-ldev_id": "{ldev}",
|
|
1070
|
+
"-capacity": "{ldev_capacity}",
|
|
1071
|
+
"-emulation": "3390-V",
|
|
1072
|
+
"-parity_grp_id": "{parity_grp_id}"
|
|
1073
|
+
},
|
|
1074
|
+
"foreach": {
|
|
1075
|
+
"ldev": "ldev_ids"
|
|
1076
|
+
}
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
"title": "Quick-format the LDEVs",
|
|
1080
|
+
"command": "initialize ldev",
|
|
1081
|
+
"options": {
|
|
1082
|
+
"-operation": "qfmt",
|
|
1083
|
+
"-ldev_id": "{ldev}"
|
|
1084
|
+
},
|
|
1085
|
+
"foreach": {
|
|
1086
|
+
"ldev": "ldev_ids"
|
|
1087
|
+
}
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
"title": "Create the pool",
|
|
1091
|
+
"command": "add dp_pool",
|
|
1092
|
+
"options": {
|
|
1093
|
+
"-pool_id": "{pool_id}",
|
|
1094
|
+
"-pool_name": "{pool_name}",
|
|
1095
|
+
"-ldev_id": "{ldev_ids}"
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
],
|
|
1099
|
+
"notes": [
|
|
1100
|
+
"Run the script with a HORCM instance that manages the array. The script exports HORCC_DRIVEOPERATION=1, which the drive and parity group commands need.",
|
|
1101
|
+
"Quick format runs in the background: wait until raidcom get ldev shows the LDEVs are no longer formatting before relying on the pool.",
|
|
1102
|
+
"The commands follow a sequence used on a real mainframe-capable system; -emulation on add parity_grp is not in the manual's syntax line. Check the SSID against your configuration."
|
|
1103
|
+
]
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|