пролог
Я использую и участвую в 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
Вы можете либо создать клиентскую версию из исходного кода, либо скачать tar-шар. После того, как вы извлечете его, вы найдете такую структуру:
Папка bin содержит два скрипта:
- jclouds-cli : запускает интерактивную оболочку.
- jcouds: скрипт, через который вы вызываете операции jclouds.
Распределение почтового индекса предоставляет эквивалентные файлы летучей мыши для окон.
Давайте начнем со скрипта jclouds. Сценарий принимает два параметра, несколько параметров и аргументы. Общее использование:
./jclouds [категория] [действие] [параметры] [аргументы]
Категория: тип используемой команды. Например, узел, группа, образ, оборудование, образ и т. Д.
Действие: действие, которое нужно выполнить с категорией. Например: перечисление, создание, уничтожение, запуск сценария, информация и т. Д.
Все операции, связанные с операциями вычислительной службы или хранилища больших двоичных объектов, потребуют поставщика или API и действительных учетных данных для этого поставщика / API. Все это может быть указано в качестве опции для команды. Например, чтобы вывести список всех работающих узлов на Amazon EC2:
/jclouds node list
/jclouds node list --provider aws-ec2 --identity [my identity] --credential [my credential] --add-option [some jclouds options]
--provider aws-ec2 --identity [my identity] --credential [my credential] --add-option [some jclouds options]
Для apis вам также нужно указать конечную точку, например, та же операция для
Cloudstack может быть:
./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, а затем выполнили список узлов, который отображал узлы, которые мы создали и уничтожили в предыдущем примере.
Использование интерактивной оболочки с несколькими поставщиками или API-интерфейсом
. Интерактивная оболочка позволит вам зарегистрировать вычислительную службу для нескольких поставщиков и API-интерфейсов или даже несколько служб для одного и того же поставщика или API-интерфейса, используя разные параметры конфигурации, учетные записи и т. Д.
На изображении выше показано, как вы можете создать несколько сервисов для одного и того же провайдера с разными параметрами конфигурации. Также показано, как указать, какой сервис использовать в каждом конкретном случае. Еще раз обратите внимание, что в этом примере идентификатор и поставщик не были переданы, но были предоставлены в качестве переменных среды.
Модульная природа интерактивного режима
Как упоминалось выше, интерактивная оболочка также является модульной, что позволяет добавлять / удалять модули во время выполнения. Модуль может быть поддержкой для провайдера или API, но это может быть расширение любого типа, которое вам может понадобиться.
Чтобы просмотреть список доступных провайдеров и API-интерфейсы, которые можно использовать в интерактивном режиме, вы можете использовать команды
: список и
функции: установить . В приведенном ниже примере мы перечисляем функции и grep для «
openstack », а затем устанавливаем jclouds openstack-nova api. Затем мы создаем для него сервис и перечисляем узлы в нашем openstack.
Настройка вывода команды
Изначально вывод команды был разработан и отформатирован с использованием наиболее распространенных поставщиков облачных вычислений в качестве руководства. Однако результат был не оптимальным для всех провайдеров
(разной ширины и т. Д.) Более того, разные пользователи нуждались в отображении разных вещей.
Чтобы решить эту проблему, cli использует вывод команд в виде таблиц с автоматически настраиваемыми размерами столбцов, которые наилучшим образом соответствуют выводу команды. Также вывод команд полностью настраивается.
Каждый экземпляр таблицы передает данные дисплея в виде коллекции, представляющей строки таблицы. Заголовки столбцов считываются из файла конфигурации. Фактическое значение для каждой ячейки вычисляется с использованием выражений сценария JSR-233 (по умолчанию используется groovy), которые применяются для каждой строки и столбца. Наконец, таблица поддерживает сортировку по столбцам.
Пример конфигурации для команды списка оборудования может выглядеть примерно так:
#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:
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} .
Обновленная конфигурация будет выглядеть так:
#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/