Автоматизация жизненного цикла приложений с Infobox Jelastic API

в 4:37, , рубрики: api, infobox, java, jelastic, Блог компании Infobox, хостинг

Jelastic Cloud API позволяет автоматизировать действия для обеспечения жизненного цикла приложений и расширить функциональность платформы, связывая Jelatic с другими сервисами. Используя API вы можете программно создавать окружения, разворачивать приложения и выполнять другие задачи, которые возможно сделать из панели управления Jelastic, но не ограничиваясь ими.

Автоматизация жизненного цикла приложений с Infobox Jelastic API

Jelastic API следует REST принципам. Взаимодействие происходит через HTTP протокол. Преимущество такого подхода — широкая расширяемость протокола HTTP. Вы можете использовать REST API практически с любым языком программирования.

В этой статье вы узнаете, как использовать Jelastic Cloud API и Jelastic Client Library (Java) на облачном хостинге Infobox. В конце статьи 300 рублей на счет Infobox Jelastic в подарок (получить можно только один раз).

Запрос Jelastic API

Все запросы методов API GET или POST к Infobox Jelastic производятся для адреса:

https://app.jelasticloud.com/1.0/

В документации этот адрес указан, как [hoster-api-host].

Автоматизация жизненного цикла приложений с Infobox Jelastic API

Данные запроса могут быть переданы в строке запроса после символа "?" при использовании GET–метода или в теле POST-запроса. В случае использования GET–запроса параметры должны использовать percent encoding (URL encoding).

Помните про ограничение длины запроса в 2048 символов. Поэтому мы рекомендуем:

  • GET запрос использовать для получения информации, которая просто помещается в ограничение длины запроса;
  • POST запрос использовать для изменения данных (создания окружений, изменение файлов конфигурации и т.д.).

Таким образом вы не ограничены длинной запроса. Такое использование и более релевантно для спецификации протокола HTTP.

Каждый запрос должен содержать набор обязательных параметров. Для некоторых функций есть набор дополнительных параметров, описанных в документации.

Каждый запрос включает обязательный параметр appid, обощначающий запрошенное окружение. Если запрос не связан с окружениями, должно быть использовано системное значение 1dd8d191d38fff45e62564fcf67fdcd6. Текстовое значения параметров должно быть представлено в кодировке UTF-8. Последовательность параметров не важна.

Ответ Jelastic API

Ответ на запрос представлен в кодировке UTF-8. Ответы всех функций API даются в формате JSON. Пример результата запроса для каждой функции описан в документации.

Автоматизация жизненного цикла приложений с Infobox Jelastic API

Jelastic API в действии (на примере Java-библиотеки)

Для начала автоматизации требуемого процесса с Jelastic API необходимо зарегистрироваться на облачном хостинге Infobox Jelastic. Также необходимо скачать Jelastic Client Library и добавить ее в classpath.

Если вы используете Maven, добавьте следующую зависимость в pom.xml

<dependency>
    <groupId>com.jelastic</groupId>
    <artifactId>jelastic-public-j2se</artifactId>
    <version>2.2</version>
</dependency>

Для вызова любой функции API вам нужно пройти аутентификацию. За это отвечает параметр «session», идентифицируя пользователя с запросом. Сессия начинается с вызова метода Users > Authentication > Signin.

https://app.jelasticloud.com/1.0/users/authentication/rest/signin?appid=[string]&login=[string]&password=[string]

, где

  • appid это системное значение 1dd8d191d38fff45e62564fcf67fdcd6
  • login и password – это данные учетной записи в вашем аккаунте Jelastic

Следующие вызовы функций API должны быть выполнены с полученным значением сессии.
Для завершения сессии работы с API необходимо вызвать метод Users > Authentication > Signout.

https://app.jelasticloud.com/1.0/users/authentication/rest/signout?appid=[string]&session=[string]

С помощью Java Client Library, вы можете автоматизировать различные действия вашего жизненного цикла приложения, например: создавать окружения, изменять их статус, удалять, перезагружать хосты, разворачивать приложения и т.д.

Давайте посмотрим, как создать окружение с выбранной топологией и настроить его с помощью Jelastic Client Library.

Создание окружения

Полная версия примера создания окружения доступна в документации по Jelastic API (раздел «Jelastic Java Samples»). Здесь мы шаг за шагом рассмотрим основные пункты:

1. Определите новый публичный класс CreateEnviroment, в который войдут все следующие блоки и параметры. Первый блок параметров должен содержать следующие строки:

private final static String PLATFORM_APPID = "1dd8d191d38fff45e62564fcf67fdcd6";
private final static String HOSTER_URL = "https://app.jelasticloud.com"; 
private final static String USER_EMAIL = "<email>";
private final static String USER_PASSWORD = "<password>"; 
private final static String ENV_NAME = "test-api-environment-" + new Random().nextInt(100);

, где:

  • email – ваш логин в Jelastic;
  • password – пароль от вашего аккаунта в Jelastic;

2. Затем настроем аутентификацию, которая будет использовать логин и пароль, указанный выше:

public static void main(String[] args) {         
        System.out.println("Authenticate user...");
        AuthenticationResponse authenticationResponse = authenticationService.signin(USER_EMAIL, USER_PASSWORD);
        System.out.println("Signin response: " + authenticationResponse);
        if (!authenticationResponse.isOK()) {
            System.exit(authenticationResponse.getResult());
        }
 
        final String session = authenticationResponse.getSession();

После аутентификации создана новая уникальная сессия. Она будет использоваться для выполнения необходимых операций на пользовательском аккаунте. Все следующие вызовы API должны быть выполнены через эту сессию, которая остается действительной до вызова метода Signout.

3. На следующем шаге получим список движков, доступных для указанного <engine_type> (может быть java, ruby, php, python и т.д.).

        System.out.println("Getting list of engines...");
        ArrayResponse arrayResponse = environmentService.getEngineList(PLATFORM_APPID, session, "<engine_type>");
        System.out.println("GetEngineList response: " + arrayResponse);
        if (!arrayResponse.isOK()) {
            System.exit(arrayResponse.getResult());
        }

4. После этого получим список доступных шаблонов ноды в соответствии с указанным <template_type>, который может быть следующих видов:
ALL – все доступные шаблоны платформы, включая и нативные и картриджи.
NATIVE – шаблоны Jelastic по умолчанию.
CARTRIDGE – собственные шаблоны, добавленные как картриджи компанией Infobox.

        System.out.println("Getting list of templates...");
        arrayResponse = environmentService.getTemplates(PLATFORM_APPID, session, "<templates_type>", false);
        System.out.println("GetTemplates response: " + arrayResponse);
        if (!arrayResponse.isOK()) {
            System.exit(arrayResponse.getResult());
        }

5. В следующем блоке определим необходимую конфигурацию и настройки вашего нового окружения и сервера, которые оно будет содержать. Более детально о параметрах JSON, используемых в манифестах Jelastic для определения топологии окружения, можно почитать тут.

        JSONObject env = new JSONObject()
                .put("ishaenabled", false)
                .put("engine", "php5.5")
                .put("shortdomain", ENV_NAME);
 
        JSONObject apacheNode = new JSONObject()
                .put("nodeType", "apache2")
                .put("extip", false)
                .put("count", 1)
                .put("fixedCloudlets", 1)
                .put("flexibleCloudlets", 4);
 
        JSONObject mysqlNode = new JSONObject()
                .put("nodeType", "mysql5")
                .put("extip", false)
                .put("fixedCloudlets", 1)
                .put("flexibleCloudlets", 4);
 
        JSONObject memcachedNode = new JSONObject()
                .put("nodeType", "memcached");
 
        JSONArray nodes = new JSONArray()
                .put(apacheNode)
                .put(mysqlNode)
                .put(memcachedNode);

6. И, наконец, инициируем создание нового окружения:

        System.out.println("Creating environment...");
        ScriptEvalResponse scriptEvalResponse = environmentService.createEnvironment(PLATFORM_APPID, session, 
        "createenv", env.toString(), nodes.toString());
        System.out.println("CreateEnvironment response: " + scriptEvalResponse);

Автоматизация жизненного цикла приложений с Infobox Jelastic API

Наше окружение успешно создано.

Автоматизация жизненного цикла приложений с Infobox Jelastic API

Таким образом вы можете автоматизировать создание различных окружений. Также в Jelastic Java Samples вы можете найти и другие примеры использования Jelastic Java Client Library.

package com.infobox.playground;

import com.jelastic.api.development.response.ScriptEvalResponse;
import com.jelastic.api.development.response.interfaces.ArrayResponse;
import com.jelastic.api.environment.Environment;
import com.jelastic.api.users.Authentication;
import com.jelastic.api.users.response.AuthenticationResponse;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Random;

public class App {
    private final static String PLATFORM_APPID = "1dd8d191d38fff45e62564fcf67fdcd6";
    private final static String HOSTER_URL = "https://app.jelasticloud.com";
    private final static String USER_EMAIL = "<login>";
    private final static String USER_PASSWORD = "<password>";
    private final static String ENV_NAME = "test-api-environment-" + new Random().nextInt(100);


    private static Authentication authenticationService;
    private static Environment environmentService;

    static {
        authenticationService = new Authentication(PLATFORM_APPID);
        authenticationService.setServerUrl(HOSTER_URL + "/1.0/");

        environmentService = new Environment(PLATFORM_APPID);
        environmentService.setServerUrl(HOSTER_URL + "/1.0/");
    }

    public static void main(String[] args) {
        /**
         * Authentication
         * To get started you need to specify the login and password of your Jelastic account in order to authenticate.
         * After this a unique session will be created for performing the required actions within user account.
         * The further calling of the API functions should be performed with the received session value.
         * This session is valid until the Signout method is called.
         */
        System.out.println("Authenticate user...");
        AuthenticationResponse authenticationResponse = authenticationService.signin(USER_EMAIL, USER_PASSWORD);
        System.out.println("Signin response: " + authenticationResponse);
        if (!authenticationResponse.isOK()) {
            System.exit(authenticationResponse.getResult());
        }

        final String session = authenticationResponse.getSession();

        /**
         * Get the list of all available engines available for the required engine type (java, php, ruby, js etc.).
         */
        System.out.println("Getting list of engines...");
        ArrayResponse arrayResponse = environmentService.getEngineList(PLATFORM_APPID, session, "php");
        System.out.println("GetEngineList response: " + arrayResponse);
        if (!arrayResponse.isOK()) {
            System.exit(arrayResponse.getResult());
        }

        /**
         * Get the list of available node templates according to the specified type (ALL, NATIVE or CARTRIDGE).
         */
        System.out.println("Getting list of templates...");
        arrayResponse = environmentService.getTemplates(PLATFORM_APPID, session, "NATIVE", false);
        System.out.println("GetTemplates response: " + arrayResponse);
        if (!arrayResponse.isOK()) {
            System.exit(arrayResponse.getResult());
        }

        JSONObject env = new JSONObject()
                .put("ishaenabled", false)
                .put("engine", "php5.5")
                .put("shortdomain", ENV_NAME);

        JSONObject apacheNode = new JSONObject()
                .put("nodeType", "apache2")
                .put("extip", false)
                .put("count", 1)
                .put("fixedCloudlets", 1)
                .put("flexibleCloudlets", 4);

        JSONObject mysqlNode = new JSONObject()
                .put("nodeType", "mysql5")
                .put("extip", false)
                .put("fixedCloudlets", 1)
                .put("flexibleCloudlets", 4);

        JSONObject memcachedNode = new JSONObject()
                .put("nodeType", "memcached");

        JSONArray nodes = new JSONArray()
                .put(apacheNode)
                .put(mysqlNode)
                .put(memcachedNode);

        /**
         * Create a new environment with all required settings.
         */
        System.out.println("Creating environment...");
        ScriptEvalResponse scriptEvalResponse = environmentService.createEnvironment(PLATFORM_APPID, session, "createenv", env.toString(), nodes.toString());
        System.out.println("CreateEnvironment response: " + scriptEvalResponse);
    }
}

Попробуйте Jelastic Cloud API сейчас и оцените удобство разработки с Infobox Jelastic! Получите 300 рублей на счет Infobox Jelastic для экспериментов (если еще не получали их из других наших статей). Для начисления бонуса отправьте ваш логин от Jelastic на trukhinyuri@infoboxcloud.com.

Автор: infobox

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js