PHP code example of tigusigalpa / yandex-cloud-client-php

1. Go to this page and download the library: Download tigusigalpa/yandex-cloud-client-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

tigusigalpa / yandex-cloud-client-php example snippets


use Tigusigalpa\YandexCloudClient\YandexCloudClient;

// Инициализация клиента
$client = new YandexCloudClient('ваш_oauth_токен');

// Список всех организаций
$organizations = $client->organizations()->list();

// Список облаков в организации
$clouds = $client->clouds()->list(organizationId: 'org_id');

// Создать новый каталог
$folder = $client->folders()->create(
    cloudId: 'cloud_id',
    name: 'Мой каталог',
    description: 'Создан через API'
);

use Tigusigalpa\YandexCloudClient\Laravel\Facades\YandexCloud;

// Facade
$organizations = YandexCloud::organizations()->list();
$org = YandexCloud::organizations()->get('organization_id');

// Создать облако с именованными параметрами
$cloud = YandexCloud::clouds()->create(
    organizationId: 'org_id',
    name: 'Продакшн облако',
    description: 'Основное продакшн окружение',
    labels: ['env' => 'production']
);

use Tigusigalpa\YandexCloudClient\YandexCloudClient;

class CloudController extends Controller
{
    public function __construct(
        private YandexCloudClient $yandexCloud
    ) {}

    public function index()
    {
        $clouds = $this->yandexCloud->clouds()->list();
        return view('clouds.index', compact('clouds'));
    }
    
    public function store(Request $request)
    {
        $folder = $this->yandexCloud->folders()->create(
            cloudId: $request->cloud_id,
            name: $request->name,
            description: $request->description
        );
        
        return response()->json($folder, 201);
    }
}

// Список организаций
$organizations = $client->organizations()->list(
    pageSize: 100,
    pageToken: null
);

// Получить организацию
$org = $client->organizations()->get('organization_id');

// Обновить организацию
$org = $client->organizations()->update('organization_id', [
    'name' => 'Новое имя',
    'description' => 'Новое описание',
]);

// Назначить роль на организацию
$result = $client->organizations()->addRole(
    organizationId: 'org_id',
    subjectId: 'user_id',
    roleId: 'editor',
    subjectType: 'userAccount'
);

// Удалить роль с организации
$result = $client->organizations()->removeRole(
    organizationId: 'org_id',
    subjectId: 'user_id',
    roleId: 'editor'
);

// Список назначенных ролей
$bindings = $client->organizations()->listAccessBindings('organization_id');

// Список облаков
$clouds = $client->clouds()->list(
    organizationId: 'org_id',
    pageSize: 100
);

// Получить облако
$cloud = $client->clouds()->get('cloud_id');

// Создать облако
$cloud = $client->clouds()->create(
    organizationId: 'org_id',
    name: 'Мое облако',
    description: 'Продакшн облако',
    labels: ['env' => 'production']
);

// Обновить облако
$cloud = $client->clouds()->update('cloud_id', [
    'name' => 'Обновленное имя',
    'description' => 'Обновленное описание',
]);

// Удалить облако
$result = $client->clouds()->delete('cloud_id');

// Назначить роль на облако
$result = $client->clouds()->addRole(
    cloudId: 'cloud_id',
    subjectId: 'user_id',
    roleId: 'editor'
);

// Список назначенных ролей
$bindings = $client->clouds()->listAccessBindings('cloud_id');

// Список каталогов
$folders = $client->folders()->list(
    cloudId: 'cloud_id',
    pageSize: 100
);

// Получить каталог
$folder = $client->folders()->get('folder_id');

// Создать каталог
$folder = $client->folders()->create(
    cloudId: 'cloud_id',
    name: 'Мой каталог',
    description: 'Каталог для разработки',
    labels: ['team' => 'backend']
);

// Обновить каталог
$folder = $client->folders()->update('folder_id', [
    'name' => 'Обновленное имя',
]);

// Удалить каталог
$result = $client->folders()->delete('folder_id');

// Список операций
$operations = $client->folders()->listOperations('folder_id');

// Назначить роль на каталог
$result = $client->folders()->addRole(
    folderId: 'folder_id',
    subjectId: 'user_id',
    roleId: 'ai.languageModels.user'
);

// Список назначенных ролей
$bindings = $client->folders()->listAccessBindings('folder_id');

// Список refresh-токенов
$tokens = $client->refreshTokens()->list();

// Отозвать refresh-токен
$result = $client->refreshTokens()->revoke('token_id');

// Список сервисных аккаунтов в каталоге
$serviceAccounts = $client->serviceAccounts()->list(
    folderId: 'folder_id',
    pageSize: 100
);

// Получить сервисный аккаунт
$sa = $client->serviceAccounts()->get('service_account_id');

// Создать сервисный аккаунт
$sa = $client->serviceAccounts()->create(
    folderId: 'folder_id',
    name: 'my-service-account',
    description: 'Сервисный аккаунт для API'
);

// Обновить сервисный аккаунт
$sa = $client->serviceAccounts()->update('service_account_id', [
    'name' => 'Обновлённое имя',
    'description' => 'Обновлённое описание',
]);

// Удалить сервисный аккаунт
$result = $client->serviceAccounts()->delete('service_account_id');

// Назначить роль на сервисный аккаунт
$result = $client->serviceAccounts()->addRole(
    serviceAccountId: 'service_account_id',
    subjectId: 'user_id',
    roleId: 'editor'
);

// Список назначенных ролей
$bindings = $client->serviceAccounts()->listAccessBindings('service_account_id');

// Получить пользователя по ID
$user = $client->userAccounts()->get('user_account_id');

// Получить пользователя по логину Yandex Passport (для получения ID)
$user = $client->yandexPassportUserAccounts()->getByLogin('username');
// Возвращает: ['id' => 'user_id', 'login' => 'username', ...]

// Использовать ID для назначения ролей
$userId = $user['id'];
$client->folders()->addRole(
    folderId: 'folder_id',
    subjectId: $userId,
    roleId: 'editor',
    subjectType: 'userAccount'
);

// Список API ключей для сервисного аккаунта
$keys = $client->apiKeys()->list(
    serviceAccountId: 'service_account_id',
    pageSize: 100
);

// Получить API ключ
$key = $client->apiKeys()->get('api_key_id');

// Создать API ключ (secret показывается только один раз!)
$key = $client->apiKeys()->create(
    serviceAccountId: 'service_account_id',
    description: 'API ключ для продакшна'
);
// Сохраните $key['secret'] немедленно - он больше не будет показан!

// Обновить API ключ
$key = $client->apiKeys()->update('api_key_id', [
    'description' => 'Обновлённое описание',
]);

// Удалить API ключ
$result = $client->apiKeys()->delete('api_key_id');

// Назначить несколько ролей на каталог
$client->folders()->updateAccessBindings('folder_id', [
    [
        'action' => 'ADD',
        'accessBinding' => [
            'roleId' => 'editor',
            'subject' => [
                'id' => 'user_id_1',
                'type' => 'userAccount',
            ],
        ],
    ],
    [
        'action' => 'ADD',
        'accessBinding' => [
            'roleId' => 'viewer',
            'subject' => [
                'id' => 'user_id_2',
                'type' => 'userAccount',
            ],
        ],
    ],
]);

// Заменить все права доступа
$client->clouds()->setAccessBindings('cloud_id', [
    [
        'roleId' => 'admin',
        'subject' => [
            'id' => 'user_id',
            'type' => 'userAccount',
        ],
    ],
]);

// Получить ID пользователя по логину Yandex Passport
$user = $client->yandexPassportUserAccounts()->getByLogin('[email protected]');
$userId = $user['id'];

// Назначить роль на каталог, используя ID пользователя
$client->folders()->addRole(
    folderId: 'folder_id',
    subjectId: $userId,
    roleId: 'ai.languageModels.user',
    subjectType: 'userAccount'
);

// Или назначить на облако
$client->clouds()->addRole(
    cloudId: 'cloud_id',
    subjectId: $userId,
    roleId: 'editor',
    subjectType: 'userAccount'
);

use Tigusigalpa\YandexCloudClient\Exceptions\AuthenticationException;
use Tigusigalpa\YandexCloudClient\Exceptions\ApiException;
use Tigusigalpa\YandexCloudClient\Exceptions\ValidationException;

try {
    $clouds = $client->clouds()->list();
} catch (AuthenticationException $e) {
    // Обработка ошибок авторизации
    echo "Ошибка авторизации: " . $e->getMessage();
} catch (ValidationException $e) {
    // Обработка ошибок валидации
    echo "Ошибка валидации: " . $e->getMessage();
} catch (ApiException $e) {
    // Обработка ошибок API
    echo "Ошибка API: " . $e->getMessage();
}