Почему не CLIDK?
Не зачем. Лично для себя не нашёл ни единой причины использовать эту утилиту на современных массивах, пока есть SSH. Тем более, что "фишки", о которых я хочу здесь поведать, работают только в SSH. К сути: в скриптах Вы можете использовать символы "#" чтобы закоментировать строку и ";" в качестве разделителя команд.
Повторюсь, работает только в скриптах. Если попытаться использовать в интерактивном режиме, увидите примерно следующее (парсер команд явно не ожидает таких символов):
admin:/>#show
^
add change clear create delete exit export help import
poweroff poweron reboot remove restore scan show swap test
admin:/>#show
admin:/>show user;
^
user user_mode user_session user_ssh_auth_info
admin:/>show user;
Как использовать?
Пример 1. Следующий скрипт быстро создаёт пачку LUN-ов по образу и подобию уже существующего:
#!/bin/bash
[ 1 -gt $# ] && { echo Too few arguments 1>&2; exit 1; }
for lun
do
buffer="${buffer}create lun name=$lun copy_lun_id=60;"
done
echo "$buffer" | ssh admin@10.6.6.6
LUN с идентификатором 60 имеет все необходимые параметры, которые мы хотим скопировать, остаётся только запустить скрипт, передав ему названия новых LUN-ов. В цикле происходит наполнение командами буферной переменной, в качестве разделителя команд используется ";". В конце скрита происходит единственное подключение к массиву (нужно ввести пароль) и выполнение цепочки команд. Если выполнить команду $ ./create_luns.sh lun115200 lun115300 lun115400
скрипт сгенерирует и отправит массиву следующую строку:
create lun name=lun115200 copy_lun_id=60;create lun name=lun115300 copy_lun_id=60;create lun name=lun115400 copy_lun_id=60;
А вывод на консоль получим примерно такой:
$ ./create_luns.sh lun115200 lun115300 lun115400
Pseudo-terminal will not be allocated because stdin is not a terminal.
Authorized users only. All activities may be monitored and reported.
admin@10.6.6.6's password:
#create lun name=lun115200 copy_lun_id=60
Command executed successfully.
#create lun name=lun115300 copy_lun_id=60
Command executed successfully.
#create lun name=lun115400 copy_lun_id=60
Command executed successfully.
Пример 2. Следующий скрипт выводит два значения для указанного дискового домена: 1) "сырое" свободное место на дисках и 2) с учётом накладных расходов на RAID5-8 (в данном примере в домене только Tier2 диски и скрипт для простоты это использует):
#!/bin/bash
# The first argument is Domain ID, use 0 by default
domID=${1:-0}
ssh admin@10.6.6.6 <<EOF
# Print RAW capacity for selected disk domain
show disk_domain general |filterRow column=ID predict=equal_to value=$domID |filterColumn include columnList=Free\sCapacity
# Print Available capacity for selected disk domain
show disk_domain available_capacity disk_domain_id=$domID raid_level=RAID5-8|filterColumn include columnList=Tier2\sAvailable\sCapacity
EOF
На вход скрипт принимает идентификатор домена, по умолчанию использует нулевой. В самом скрипте 3 комментария, первый из которых обрабатывается (или правильнее сказать игнорируется =) bash-ем на локальной машинке, а два других - командным интерпретатором OceanStor. Опять таки происходит одно единственное подключение к массиву, а мы имеем достаточно простой самодокументированный скрипт. Результат выполнения команды, конечно, не очень красивый, есть что украсить, но эта цель в сей заметке не преследовалась:
$ ./get_domain_capacity.sh 0
Pseudo-terminal will not be allocated because stdin is not a terminal.
Authorized users only. All activities may be monitored and reported.
admin@10.6.6.6's password:
#show disk_domain general |filterRow column=ID predict=equal_to value=0 |filterColumn include columnList=Free\sCapacity
Free Capacity
-------------
1.972TB
#show disk_domain available_capacity disk_domain_id=0 raid_level=RAID5-8|filterColumn include columnList=Tier2\sAvailable\sCapacity
Tier2 Available Capacity
------------------------
1.073TB
Важный момент: в OceanStor CLI "#" работает только в начале строки, а не в произвольном месте. Если попытаться оставить комментарий в конце команды - это вызовет ошибку.
Всё это дело проверено на прошивке версии V300R006C20.