null

Недокументированные особенности OceanStor CLI

Почему не 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.