пролог
Я использую и участвую в jclouds уже больше года. До сих пор я широко использовал его во многих областях, особенно в экосистеме плавких предохранителей . При всей своей удивительности ему не хватало одной вещи — инструмента, который вы можете использовать для управления любым облачным провайдером, к которому jclouds также предоставляет доступ. Что-то вроде командного инструмента EC2, но с крутостью jclouds. Обычный инструмент, с помощью которого вы сможете управлять EC2, Rackspace, Opesntack, CloudStack … вы называете это.
Я очень рад, что теперь есть такой инструмент, и его первый выпуск находится на пороге.
Итак, этот пост представляет собой введение в новый jclouds cli, который представлен в двух вариантах:
- Интерактивный режим (оболочка)
- Неинтерактивный режим (cli)
Немного истории
Будучи коммиттером Karaf, одним из первых, что я сделал в отношении jclouds, была работа над поддержкой OSGi. Второе — работа над интеграцией jclouds для Apache Karaf . Поэтому я работал над проектом, который действительно облегчил установку jclouds поверх Karaf, и добавил первые базовые команды для хранилищ больших двоичных объектов, и проект Jclouds Karaf начал обретать форму. В то же время мой друг и коллега, Гийом Ноде, начал аналогичную работу, которую он внес в Jclouds Karaf . Этот проект теперь поддерживает большинство операций jclouds, предоставляет богатую поддержку завершения, что делает его действительно быстрым и простым в использовании.
Конечно, этот интеграционный проект в основном нацелен на людей, которые знакомы с OSGi и Apache Karaf и не могут рассматриваться как инструмент общего назначения, как тот, о котором я мечтал в прологе.
Пару месяцев назад Эндрю Байер начал задумываться о создании универсального jclouds cli. Затем меня поразило : « Почему бы нам не использовать работу, проделанную над Jclouds Karaf, для создания общего назначения? »
Одна из замечательных особенностей Apache Karaf заключается в том, что он легко маркируется и благодаря его модульной основе вы можете довольно легко добавлять / удалять биты для создания своего собственного дистрибутива. Кроме того, он позволяет вам находить и использовать команды вне OSGi.
Таким образом, казалось хорошей идеей создать индивидуальный дистрибутив Karaf с интеграцией jclouds « из коробки », который мог бы быть использован любым человеком без необходимости знать что-либо о Karaf, как в виде интерактивной оболочки, так и в качестве клиента. И вот оно: Jclouds CLI .
Начало работы с Jclouds CLI
Вы можете либо собрать cli из исходного кода, либо скачать tar-шар. После того, как вы извлечете его, вы найдете такую структуру:
Папка bin содержит два скрипта:
- jclouds-cli : запускает интерактивную оболочку.
- jcouds: скрипт, через который вы вызываете операции jclouds.
Распределение почтового индекса предоставляет эквивалентные файлы летучей мыши для окон.
Давайте начнем со скрипта jclouds. Сценарий принимает два параметра, несколько параметров и аргументы. Общее использование:
./jclouds [категория] [действие] [опции] [аргументы]
- Категория: тип команды для использования. Например, узел, группа, образ, оборудование, образ и т. Д.
- Действие: действие, которое нужно выполнить с категорией. Например: список, создание, уничтожение, запуск сценария, информация и т. Д.
Все операции, связанные с обслуживанием вычислений или хранилищем данных, потребуют поставщика или API и действительные учетные данные для этого поставщика / API. Все это может быть указано в качестве опции для команды. Например, чтобы вывести список всех работающих узлов на Amazon EC2:
1
|
/jclouds node list --provider aws-ec2 --identity [my identity] --credential [my credential] --add-option [some jclouds options] |
Для apis вам также нужно указать конечную точку, например, та же операция для Cloudstack может быть:
1
|
. /jclouds node list --api cloudstack --identity [my identity] --credential [my credential] --endpoint http: //localhost :8080 /client/api |
Конечно, вы можете не захотеть указывать одни и те же параметры снова и снова. В этом случае вы можете просто указать их как переменные среды. Имя переменной всегда пишется заглавными буквами и начинается с префикса JCLOUDS_COMPUTE_ или JCLOUDS_BLOBSTORE_ для операций вычислительного сервиса и хранилища больших двоичных объектов соответственно. Таким образом, параметр –provider будет соответствовать JCLOUDS_COMPUTE_PROVIDER для службы вычислений или JCLOUDS_BLOBSTORE_PROVIDER для хранилищ больших двоичных объектов .
На рисунке ниже показан пример использования cli в настройках среды для доступа к EC2. Команды создают 3 узла в EC2, а затем уничтожают все из них.
Настроенные переменные среды:
- JCLOUDS_COMPUTE_PROVIDER aws-ec2
- JCLOUDS_COMPUTE_IDENITY ????
- JCLOUDS_COMPUTE_CREDENTIAL ???
При использовании скрипта jclouds все провайдеры, поддерживаемые jclouds, будут доступны по умолчанию. Вы можете добавить пользовательских провайдеров и apis, поместив пользовательские jar-файлы в системную папку (предпочтительно используя структуру каталогов, похожую на maven).
Использование интерактивной оболочки
Вторым вариантом jclouds cli является интерактивная оболочка. Интерактивная оболочка работает аналогичным образом, но также предоставляет дополнительные функции:
- Повторное использование услуг
- Сервисы создаются один раз
- Команды могут повторно использовать службы, что приводит к ускорению выполнения.
- Завершение кода
- Завершение команд
- Завершение значений аргументов и опций
- модульность
- Позволяет устанавливать только то, что вам нужно.
- растяжимый
- Вы можете добавить свои собственные команды.
- Вы можете дополнительный проект.
- Пример: Начиная с Whirr 0.8.0, вы можете установить его в любую среду на базе Karaf. Таким образом, вы можете добавить его в Cli.
В приведенном выше примере мы создали повторно используемую службу для EC2, а затем выполнили список узлов, который отображал узлы, которые мы создали и уничтожили в предыдущем примере.
Использование интерактивной оболочки с несколькими провайдерами или apis
Интерактивная оболочка позволит вам зарегистрировать вычислительный сервис для нескольких провайдеров и API или даже несколько сервисов для одного и того же провайдера или API, используя разные параметры конфигурации, учетные записи и т. Д.
На изображении выше показано, как вы можете создать несколько сервисов для одного и того же провайдера с разными параметрами конфигурации. Также показано, как указать, какой сервис использовать в каждом конкретном случае. Еще раз обратите внимание, что в этом примере идентификатор и поставщик не были переданы, но были предоставлены в качестве переменных среды.
Модульная природа интерактивного режима
Как уже упоминалось выше, интерактивная оболочка также является модульной, что позволяет добавлять / удалять модули во время выполнения. Модуль может быть поддержкой для провайдера или API, но это может быть расширение любого типа, которое вам может понадобиться.
Чтобы просмотреть список доступных провайдеров и API-интерфейсы, которые можно использовать в интерактивном режиме, вы можете использовать команды : список и функции: установить . В приведенном ниже примере мы перечисляем функции и grep для « openstack », а затем устанавливаем jclouds openstack-nova api. Затем мы создаем для него сервис и перечисляем узлы в нашем openstack.
Настройка вывода команды
Изначально выходные данные команды были разработаны и отформатированы с использованием наиболее распространенных поставщиков облачных вычислений в качестве руководства. Однако результат был не оптимальным для всех провайдеров (разной ширины и т. Д.). Более того, разные пользователи нуждались в отображении разных вещей.
Чтобы решить эту проблему, cli использует вывод команд в виде таблиц с автоматически настраиваемыми размерами столбцов, которые наилучшим образом соответствуют выводу команды. Также вывод команд полностью настраивается.
Каждый экземпляр таблицы передает данные дисплея в виде коллекции, представляющей строки таблицы. Заголовки столбцов считываются из файла конфигурации. Фактическое значение для каждой ячейки вычисляется с использованием выражений сценария JSR-233 (по умолчанию используется groovy), которые применяются для каждой строки и столбца. Наконец, таблица поддерживает сортировку по столбцам.
Пример конфигурации для команды списка оборудования может выглядеть примерно так:
01
02
03
04
05
06
07
08
09
10
11
12
|
#The column headers hardware.headers=[ id ];[ ram ];[cpu];[cores] #Groovy expressions for displaying id, ram, sum of (cores X speed) for each proceessor, sum of cores. hardware.expressions=hardware. id ;hardware. ram ;hardware.processors. sum {it.cores*it.speed};hardware.processors. sum {it.cores} #Cell alignments. We prefer numbers to be right aligned. hardware.alignments=left;right;right;right #Sort by the [cpu] column in descending order hardware.shortby=[cpu] hardware.ascending= true |
С этой конфигурацией команда image list выдаст следующий вывод:
Мы можем изменить приведенную выше конфигурацию и добавить дополнительный столбец, в котором будут отображаться тома, назначенные текущему профилю оборудования. Для этого нам нужно иметь краткое представление о том, как выглядит аппаратный объект jclouds:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
public interface Hardware extends ComputeMetadata { List<? extends Processor> getProcessors(); int getRam(); List<? extends Volume> getVolumes(); Predicate<Image> supportsImage(); } public interface Volume { String getId(); Type getType(); Float getSize(); String getDevice(); boolean isDurable(); boolean isBootDevice(); } |
Таким образом, чтобы получить весь размер тома и тип тома, мы можем использовать следующее выражение для аппаратного объекта: hardware.volumes.collect {it.size + «GB» + it.type} .
Обновленная конфигурация будет выглядеть так:
01
02
03
04
05
06
07
08
09
10
11
12
|
#The column headers hardware.headers=[ id ];[ ram ];[cpu];[cores];[volumes] #Groovy expressions for displaying id, ram, sum of (cores X speed) for each proceessor, sum of cores. hardware.expressions=hardware. id ;hardware. ram ;hardware.processors. sum {it.cores*it.speed};hardware.processors. sum {it.cores};hardware.volumes.collect{it.size + "GB " + it. type } #Cell alignments. We prefer numbers to be right aligned. hardware.alignments=left;right;right;right;left #Sort by the [cpu] column in descending order hardware.shortby=[cpu] hardware.ascending= true |
Новая конфигурация выдаст следующий вывод на EC2:
Вы можете найти проект на github: https://github.com/jclouds/jclouds-cli . Или вы можете напрямую загрузить архивы по адресу: http://repo1.maven.org/maven2/org/jclouds/cli/jclouds-cli/1.5.0/