Содержание


Применение скриптов на платформе IBM PureApplication System

Comments

Инструмент интерфейса командной строки (CLI) платформы PureApplication System предоставляет скриптовую среду, которая позволяет выполнять команды для дистанционного управления платформой PureApplication System. Можно также исполнять скрипты на языке Python и отдельные команды Python. Скриптовая среда базируется на Jython (реализации Python на основе Java). Используемый интерпретатор Jython реализует подмножество языка Python 2.5.1. CLI-инструмент предоставляет администратору для управления средой PureApplication System интерпретатор Jython, а также стандартные библиотеки, функции и классы Jython.

В дополнение к скриптовой среде на базе Jython платформа PureApplication System предоставляет интерфейс REST API, позволяющий создавать скрипты на любом языке программирования.

Начало работы

Прежде чем приступать к работе, обратитесь к справочной системе по PureApplication и ознакомьтесь со следующими двумя темами.

CLI-инструмент PureCLI можно загрузить с начальной страницы PureApplication System. На рис. 1 показан экран загрузки.

Рисунок 1. Загрузка CLI-инструмента
Downloading the CLI
Downloading the CLI

Загружаемый файл представляет собой архив в формате zip; распакуйте его в каталог /purecli.. В листинге 1 показан пример структуры каталогов после установки инструмента PureCLI.

Листинг 1. Структура каталогов инструмента PureCLI
 ├── bin │ ├── 2.0.0.0-201409151314631 │ └── 2.0.0.1-201411251434417 ├── lib │ ├── 2.0.0.0-201409151314631 │ │ ├── admin │ │ │ ├── resources │ │ │ ├── settings │ │ │ └── troubleshooting │ │ ├── deployer │ │ │ ├── messages │ │ │ │ └── ext │ │ │ ├── resources │ │ │ └── settings │ │ └── utility │ └── 2.0.0.1-201411251434417 │ ├── admin │ │ ├── resources │ │ ├── settings │ │ └── troubleshooting │ ├── deployer │ │ ├── messages │ │ │ └── ext │ │ ├── resources │ │ └── settings │ └── utility ├── logs └── samplesCODE

Каталоги bin и lib имеют подкаталоги для двух версий: 2.0.0.0 и 2.0.0.1. Инструмент PureCLI автоматически обновляется до новой версии, если обнаруживает ее в системе IBM PureApplication System.

Простейший пример

Простейшим примером использования инструмента PureCLI может служить подключение к системе PureApplication System из командной строки. Перейдите в каталог bin и выполните команду pure (или pure.bat в среде Windows®). Результаты исполнения этой команды показаны в листинге 2.

Листинг 2. Результаты исполнения команды pure
 pure -h [HOST] -u [USER] -p [PASSWORD] pure -h [HOST] -u [USER] -p [PASSWORD] -c [COMMAND] pure -h [HOST] -u [USER] -p [PASSWORD] -f [SCRIPT_FILE] [ARG]*

Убедитесь в том, что используется правильное имя хоста или IP-адрес, и что у машины, исполняющей CLI-команду, открыт сетевой порт 443. Теперь укажите в командной строке значения имя хоста, имя пользователя и пароль для своей системы и снова выполните ее. Выходная информация должна выглядеть, как в листинге 3.

Листинг 3. Соединение с PureApplication System установлено
 Welcome to the IBM PureApplication System CLI. Enter "help" if you need help getting started. >>>

Для начала работы введите команду help. В листинге 4 показан фрагмент содержимого help.

Листинг 4. Фрагмент содержимого help
 In addition to the standard Jython libraries, the CLI provides a rich set of functions and classes in the admin and deployer packages to help you manage your system. More extensive help is available for the deployer and admin packages by entering: >>> help(deployer) >>> help(admin)

Теперь можно использовать инструмент PureCLI для выполнения какой-либо реальной работы.

Использование инструмента PureCLI

Как показано в предшествующем разделе, инструмент PureCLI можно использовать в интерактивном режиме. Один из вариантов применения интерактивного режима – тестирование команд перед включением их в файл и получение справочной информации по командам PureCLI. Например, следующие команды позволяют узнать, сколько вычислительных узлов имеет ваша система PureApplication System.

  • Введите команду help(admin) для получения справки о доступных функциях. Вы увидите, что в вашем распоряжении имеется функция с именем admin.computenodes.
  • Выполните функцию admin.computenodes, чтобы получить список JSON-объектов с данными о вычислительных узлах.
  • Чтобы получить общее количество вычислительных узлов, введите команду len(admin.computenodes). Она возвращает число 6 – это означает, что ваша система PureApplication System имеет шесть вычислительных узлов.

В качестве примера типичной выходной информации в листинге 5 показан JSON-объект одного вычислительного узла.

Листинг 5. JSON-объект одного вычислительного узла
 { "acl": (nested object), "architecture": "10X", "cloud": (nested object), "energystats": (nested object), "firmwarelevel": "1AOO56G", "healthstats": (nested object), "id": "176bc2b8-a41c-4468-9236-cb1f62dcac64", "leds": (nested object), "locations": (nested object), "machinetype": "7863", "name": "SN#10B4E6B", "numberofpowercycles": 3, "physicalcpus": (nested object), "physicalioadapters": (nested object), "physicalmemory": (nested object), "powerstate": "powered_on", "pvuvalue": 70, "state": "available", "vios": (nested object), "virtualmachines": (nested object) }

Многие атрибуты имеют значение в виде вложенного объекта (nested object). Чтобы получить JSON-объект для вложенного объекта, просто укажите имя атрибута в вызове функции. Например, чтобы получить все виртуальные машины первого вычислительного узла, введите команду: admin.computenodes[0].virtualmachines.

Инструмент PureCLI предоставляет пользователю множество объектов и функций. Всеми этими объектами и функциями можно управлять из командной строки PureApplication System без использования графического интерфейса браузера.

Как показано в листинге 2, PureCLI позволяет выполнять файлы скриптов – и именно так обычно используется этот CLI-инструмент. Интерактивное применение PureCLI – это хороший способ понять и протестировать различные подходы к получению желаемого результата, а когда вы надлежащий подход найден, вы можете поместить соответствующие команды в скрипт.

Управление рабочими нагрузками

Рабочая нагрузка – это экземпляр шаблона, исполняющийся в среде PureApplication System. Шаблоны являются одной из ключевых технологий платформы PureApplication System; в частности, шаблон полностью описывает архитектуру вашего приложения. С помощью PureCLI можно из командной строки развертывать шаблоны и управлять ими, а также писать скрипты и автоматизировать развертывание и другие связанные с шаблонами задачи.

PureCLI-команда help(deployer) выводит доступные функции для управления рабочими нагрузками. В следующем разделе представлен пример использования инструмента PureCLI.

Развертывание шаблона

В качестве реального примера использования скриптов инструмента PureCLI продемонстрируем развертывание шаблона и просмотр статуса развертывания. В листинге 6 показан скрипт, с помощью которого можно развернуть шаблон, а в листинге 7 показан статус развертывания.

Скрипт развертывания в листинге 6 принимает два аргумента командной строки: pattern name и environment profile name. Этих двух аргументов вполне достаточно для развертывания шаблона. После начала развертывания идентификатор виртуального экземпляра выводится на консоль и сохраняется в файле для последующего использования.

Листинг 6. Развертывание шаблона
 import sys import time import os if len(sys.argv)!=3: print "Usage: %s <pattern name> <environment profile name>" exit(1) #аргументы: pattern name и env profile patternName=sys.argv[1] envProfileName=sys.argv[2] ctime=time.strftime("%H%M%S") print "Deploying pattern '%s' to profile '%s'..." % \ (patternName,envProfileName) #Извлечение объектов шаблона и профиля среды из PureApplication #по заданным именам mypattern=deployer.virtualsystempatterns.list({"app_name": patternName})[0] envprofile=deployer.environmentprofiles.list({'name':envProfileName})[0] deploymentParams={ 'environment_profile':envprofile } #Инициирование развертывания virtualInstance=mypattern.deploy("%s %s" % (patternName,ctime),deploymentParams) #Получение идентификатора экземпляра virtualInstanceID=virtualInstance.id #Вывод на консоль идентификатора экземпляра и сохранение его в файле для последующего использования print "Pattern %s is deploying. ID: %s" % (patternName,virtualInstanceID) f=open("virtualInstanceID","w") f.write(virtualInstanceID) f.close()

После начала развертывания его статус можно просмотреть с помощью скрипта, показанного в листинге 7.

Листинг 7. Получение статуса развертывания
 import sys import time import os if len(sys.argv)==2: #Чтение идентификатора виртуального экземпляра из командной строки virtualInstanceID=sys.argv[1] else: #Чтение идентификатора из файла f=open("virtualInstanceID","r") virtualInstanceID=f.read().strip() f.close() #Получение экземпляра instances=deployer.virtualsysteminstances.list({'id':virtualInstanceID}) if len(instances)==0: print "Instance %s does not exist." % (virtualInstanceID) else: instance=instances[0] #Вывод истории развертывания history=instance.history for line in history: print "%s: %s" % (line['created_time'],line['current_message']) name=instance.deployment_name status=instance.status print 'Instance "%s"... %s' % (name,status) if status=="RUNNING": #Вывод списка виртуальных машин print 'Virtual machines:' virtualmachines=instance.virtualmachines for vm in virtualmachines: name=vm.displayname ip=vm.ip hostname=ip.userhostname ipaddr=ip.ipaddress print " %s (%s): %s" % (hostname,ipaddr,name)

Этот скрипт читает идентификатор виртуального экземпляра из файла, который был записан скриптом развертывания (листинг 6). Идентификатор виртуального экземпляра также можно указать в виде аргумента командной строки. По этому идентификатору извлекается объект экземпляра, а скрипт выводит на консоль историю развертывания. Если экземпляр исполняется, скрипт отображает имя, имя хоста и IP-адрес для всех виртуальных машин в экземпляре виртуальной системы. В листинге 8 показан пример статуса развертывания.

Листинг 8. Статус развертывания
 2015-03-23T08:56:27.047Z: Deployment has been queued 2015-03-23T08:56:30.058Z: Reserving cloud resources 2015-03-23T08:56:32.528Z: Generating model for topology and network 2015-03-23T08:56:37.408Z: Pattern deployment starting 2015-03-23T08:56:38.398Z: Registering virtual system sjs Base OS 105502 2015-03-23T08:58:40.275Z: Added new disk for virtual machine OS_Node.11427100964512 of size 20 GB 2015-03-23T08:58:40.876Z: Starting virtual machines in virtual system sjs Base OS 105502 2015-03-23T08:58:40.898Z: Starting virtual machine OS_Node.11427100964512 2015-03-23T08:59:52.763Z: Executing script packages 2015-03-23T09:00:08.451Z: Executing script package Default add disk on virtual machine OS_Node.11427100964512 2015-03-23T09:00:17.143Z: Script package Default add disk on virtual machine OS_Node.11427100964512 completed successfully 2015-03-23T09:00:17.299Z: Executing script package Must Gather Logs on virtual machine OS_Node.11427100964512 2015-03-23T09:00:22.378Z: Script package Must Gather Logs on virtual machine OS_Node.11427100964512 completed successfully 2015-03-23T09:00:23.053Z: Virtual machines are ready Instance "sjs Base OS 105502"... RUNNING Virtual machines: ipas3-cg1-vm27.stgt.spc.ihost.com (172.17.63.27): OS_Node.11427100964512

При желании исполняющийся экземпляр можно удалить с помощью команды deployer.virtualsysteminstances.delete(virtualInstanceID).

Использование интерфейса REST API

При всей полезности инструмента PureCLI интерфейс REST API еще полезнее; в действительности инструмент PureCLI сам пользуется интерфейсом REST API. Чтобы использовать инструмент REST API, вам ничего не нужно загружать – к нему можно напрямую обратиться из командной строки с помощью команды curl или из вашего предпочтительного языка программирования. В листинге 9 показано, как обращаться к REST API с помощью команды curl.

Листинг 9. Доступ к PureApplication System с помощью команды curl
 curl --cacert <IPASHOSTORIP> -k -H "X-IBM-PureSystem-API-Version: 1.0" -H "Accept: application/json" --user <UID>:<PWD> https://<IPASHOSTORIP><RESTPATH>

IPASHOSTORIP – это адрес к PureApplication System, аргументы UID и PWD не нуждаются в пояснениях, а RESTPATH – это маршрут к ресурсу.

Список совместно используемых сервисов

Очевидный вариант использования REST API – ситуация, когда вам нужно что-либо, что сложно получить с помощью PureCLI, например, нужен список совместно используемых экземпляров сервисов и объемы потребляемых ими процессорных ресурсов и ресурсов памяти.

Выходная информация REST API представлена в формате JSON. Если для написания скриптов вы используете язык Python, модуль simplejson преобразует строки JSON в удобные для работы объекты Python.

В листинге 10 показан скрипт, который создает список совместно используемых сервисов, используя вызов интерфейса REST API. Этот скрипт включает Python-обертку (wrapper) для curl и исполняется с помощью обычного интерпретатора Python без применения инструмента PureCLI.

Листинг 10. Получение совместно используемых экземпляров сервисов с помощью REST API
 import sys import time import os import simplejson if len(sys.argv)!=4: print "Usage: %s <ip address> <uid> <pwd>" % sys.argv[0] exit(1) pureappIPAddress=sys.argv[1] uid=sys.argv[2] password=sys.argv[3] #Вызов REST API с помощью curl и возвращение JSON-строк def callREST(path): cmd=["curl","--cacert",pureappIPAddress,"https://%s%s" % (pureappIPAddress,path), "-k","-H",'"X-IBM-PureSystem-API-Version: 1.0"', "-H",'"Accept: application/json"', "--user"," %s:%s" % (uid,password)] cmd= " ".join(cmd) fname="output.json" rc= os.system(cmd+" > "+fname+" 2> err_output.txt") outputfile=open(fname,'r') jsonStr=outputfile.read() outputfile.close() json = simplejson.loads(jsonStr) if rc != 0: print "some error happened: %d" % rc return json path="/resources/sharedServices/" json=callREST(path) print "Available services:" alreadyPrinted=[] for svc in json: name=svc["app_name"] if name not in alreadyPrinted: print " %s" % (name) alreadyPrinted.append(name) path="/resources/sharedServiceInstances/" json=callREST(path) print "Deployments:" totalramforsvc=0 totalcpuforsvc=0 for svc in json: print " Name: %s" % svc["deployment_name"] totalram=0 totalcpu=0 for instance in svc["instances"]: ram=instance["memory"] totalram=totalram+ram vcpu=instance["cpucount"] totalcpu=totalcpu+vcpu cloudgroup=instance["location"]["cloud_group"]["name"] print " %s (RAM: %d MB, vCPU: %d) %s" % (instance["displayname"],ram,vcpu,cloudgroup) print " Total: RAM: %.2f GB, vCPU: %d" % (totalram/1000.0,totalcpu) totalramforsvc=totalramforsvc+totalram totalcpuforsvc=totalcpuforsvc+totalcpu print "Totals for shared services:" totalramforsvc=totalramforsvc/1000.0 print " RAM : %.2f GB" % totalramforsvc print " vCPU: %d" % totalcpuforsvc

Показанный выше скрипт вызывает REST API с помощью wrapper-функции для curl и возвращает информацию в формате JSON. После этого на консоль выводятся нужные фрагменты в формате JSON, в которых перечисляются все совместно используемые экземпляры, а также определенная информация о сервисах. Ниже показана часть выходной информации.

Листинг 11. Фрагмент выходной информации скрипта sharedsvc
 Name: Caching Service Caching-Catalog.21421683118601 (RAM: 16768 MB, vCPU: 2) ipas3-CloudGroup1 Caching-Catalog.11421683118600 (RAM: 16768 MB, vCPU: 2) ipas3-CloudGroup1 Caching-Container.11421683118602 (RAM: 15744 MB, vCPU: 2) ipas3-CloudGroup1 Caching-Master.11421683118599 (RAM: 16768 MB, vCPU: 2) ipas3-CloudGroup1 Total: RAM: 66.05 GB, vCPU: 8 Name: ELB Proxy Service Services-elbInstance.11422448392023 (RAM: 4864 MB, vCPU: 2) ipas3-CloudGroup2 Services-elbManagement.11422448392022 (RAM: 2432 MB, vCPU: 1) ipas3-CloudGroup2 Services-elbInstance.21422448392024 (RAM: 4864 MB, vCPU: 2) ipas3-CloudGroup2 Total: RAM: 12.16 GB, vCPU: 5 Totals for shared services: RAM : 146.43 GB vCPU: 36

Заключение

В этом учебном пособии были показаны примеры использования CLI-инструмента и интерфейса REST API системы IBM PureApplication System. Оба эти инструмента хорошо документированы; их можно использовать для автоматизации множества задач, связанных с платформой PureApplication System. Благодаря механизмам управления доступом платформы PureApplication System с этими инструментами могут работать любые пользователи PureApplication System – от системных администраторов до индивидуальных заказчиков, развертывающих одиночные среды разработки для своих личных нужд.

Благодарности

Автор благодарит своего коллегу по IBM Маркуса Торнквиста (Marcus Törnqvist) за рецензирование этой статьи.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Облачные вычисления, WebSphere
ArticleID=1028892
ArticleTitle=Применение скриптов на платформе IBM PureApplication System
publish-date=03242016