Я пытаюсь связаться с моим кластером Proxmox, который содержит 3 сервера, из API. Цель состоит в том, чтобы подключиться по крайней мере к одному из этих серверов в случае сбоя, а затем выполнить другой код (здесь не отображается).
С помощью приведенного ниже кода я подключаюсь к этим серверам 1 на 1, используя «foreach», и я хочу, чтобы l oop остановился, когда один сервер вернул "200" из Curl (так что я могу продолжить работу с этим онлайн-сервером). Для теста я остановил первый сервер и подключил остальные 2, но «foreach» l oop продолжает подключать третий сервер.
Есть идеи? Спасибо и извините за мой английский sh.
<?php
$datas = array(
array(
"apiurl" => "192.168.1.34:8006",
"node" => "pve1",
"user" => "root",
"userpass" => "pass",
),
array(
"apiurl" => "192.168.1.35:8006",
"node" => "pve2",
"user" => "root",
"userpass" => "pass",
),
array(
"apiurl" => "192.168.1.36:8006",
"node" => "pve3",
"user" => "root",
"userpass" => "pass",
)
);
do {
foreach ($datas as $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://'.$data['apiurl'].'/api2/json/access/ticket');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.$data['user'].'@pam&password='.$data['userpass']);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Server ' .$data['node']. ' is not reachable (error : ' .curl_error($ch). ')<br>';
}
else {
$myArray = json_decode($result, true);
$cookie = $myArray['data']['ticket'];
$info = curl_getinfo($ch);
echo "Server " .$data['node']. " is reachable (code is : " .$info['http_code']. ")<br>";
}
curl_close($ch);
}
} while ($info['http_code'] !== 200);
?>