docker-php-client

Документація класу AbstractOperations

Опис

AbstractOperations - це абстрактний базовий клас для всіх класів операцій кластера Docker. Він забезпечує основну функціональність для виконання операцій на декількох вузлах Docker одночасно, з підтримкою послідовного та паралельного виконання, повторних спроб при невдачі та різних рівнів деталізації помилок.

Простір імен

Sangezar\DockerClient\Cluster\Operations

Константи

Типи стратегій виконання

public const EXECUTION_SEQUENTIAL = 'sequential';
public const EXECUTION_PARALLEL = 'parallel';

Рівні деталізації помилок

public const ERROR_LEVEL_BASIC = 'basic';      // Тільки повідомлення
public const ERROR_LEVEL_STANDARD = 'standard'; // Повідомлення + тип винятку + код
public const ERROR_LEVEL_DETAILED = 'detailed'; // Всі деталі, включаючи стек викликів

Властивості

/** @var array<string, DockerClient> */
protected array $nodes;

/** @var string Стратегія виконання */
protected string $executionStrategy = self::EXECUTION_SEQUENTIAL;

/** @var string Рівень деталізації помилок */
protected string $errorDetailLevel = self::ERROR_LEVEL_STANDARD;

/** @var bool Дозволити автоматичні повторні спроби при невдачі */
protected bool $retryOnFailure = false;

/** @var int Максимальна кількість повторних спроб */
protected int $maxRetries = 3;

Методи

__construct

public function __construct(array $nodes, ?ClusterConfig $config = null)

Конструктор.

Параметри:

Винятки:

applyConfig

public function applyConfig(ClusterConfig $config): self

Застосовує конфігурацію кластера.

Параметри:

Повертає:

setExecutionStrategy

public function setExecutionStrategy(string $strategy): self

Встановлює стратегію виконання.

Параметри:

Повертає:

Винятки:

setErrorDetailLevel

public function setErrorDetailLevel(string $level): self

Встановлює рівень деталізації помилок.

Параметри:

Повертає:

Винятки:

setRetryOnFailure

public function setRetryOnFailure(bool $enable, ?int $maxRetries = null): self

Встановлює налаштування повторних спроб при невдачі.

Параметри:

Повертає:

Винятки:

executeOnAll

protected function executeOnAll(callable $operation): array

Виконує операцію на всіх вузлах кластера.

Параметри:

Повертає:

Винятки:

getNodes

public function getNodes(): array

Отримує всі вузли.

Повертає:

isEmpty

public function isEmpty(): bool

Перевіряє, чи колекція вузлів порожня.

Повертає:

count

public function count(): int

Підраховує кількість вузлів.

Повертає:

addNode

public function addNode(string $name, DockerClient $client): self

Додає новий вузол до колекції.

Параметри:

Повертає:

Винятки:

removeNode

public function removeNode(string $name): self

Видаляє вузол з колекції.

Параметри:

Повертає:

hasNode

public function hasNode(string $name): bool

Перевіряє, чи існує вузол з вказаним іменем.

Параметри:

Повертає:

Захищені та приватні методи

executeSequential

private function executeSequential(callable $operation): array

Виконує операцію послідовно на всіх вузлах кластера.

Параметри:

Повертає:

executeParallel

private function executeParallel(callable $operation): array

Виконує операцію паралельно на всіх вузлах кластера.

Параметри:

Повертає:

formatError

private function formatError(\Throwable $e): array

Форматує помилку відповідно до встановленого рівня деталізації.

Параметри:

Повертає:

Приклади використання

Базове використання в успадкованих класах

class MyOperations extends AbstractOperations
{
    public function perform(): array
    {
        return $this->executeOnAll(function (DockerClient $client) {
            // Виконати операцію з клієнтом
            return $client->container()->list();
        });
    }
}

// Створення екземпляру
$nodes = [
    'node1' => DockerClient::createTcp('tcp://192.168.1.10:2375'),
    'node2' => DockerClient::createTcp('tcp://192.168.1.11:2375'),
];
$operations = new MyOperations($nodes);

// Виконання операції на всіх вузлах
$results = $operations->perform();

Налаштування стратегії виконання та обробки помилок

use Sangezar\DockerClient\Config\ClusterConfig;
use Sangezar\DockerClient\Cluster\Operations\AbstractOperations;

// Створення конфігурації кластера
$config = ClusterConfig::create()
    ->setExecutionStrategy(AbstractOperations::EXECUTION_PARALLEL)
    ->setErrorDetailLevel(AbstractOperations::ERROR_LEVEL_DETAILED)
    ->setRetryOnFailure(true, 5);

// Застосування конфігурації до операцій
$operations->applyConfig($config);

// Або індивідуальне налаштування
$operations->setExecutionStrategy(AbstractOperations::EXECUTION_PARALLEL)
    ->setErrorDetailLevel(AbstractOperations::ERROR_LEVEL_DETAILED)
    ->setRetryOnFailure(true, 5);

Керування вузлами під час виконання

// Додавання нового вузла
$operations->addNode('node3', DockerClient::createTcp('tcp://192.168.1.12:2375'));

// Перевірка наявності вузла
if ($operations->hasNode('node1')) {
    echo "Вузол 'node1' існує\n";
}

// Видалення вузла
$operations->removeNode('node2');

// Отримання списку всіх вузлів
$allNodes = $operations->getNodes();

// Перевірка кількості вузлів
echo "Кількість вузлів: " . $operations->count() . "\n";