ショコラ
ConoHa APIを使うには?
ひとまずマニュアル通りだとうまくいかないです。
もっさん先輩
マニュアルだと↓なのですが NG でした。v3だからかなぁ?
curl -i -X POST \
-H "Accept: application/json"\
-d '{ "auth": { "passwordCredentials": { "username": "APIユーザーのユーザー名", "password": "APIユーザーのパスワード" }, "tenantId": "テナント情報のテナントID" } }'\
"Identity ServiceのURLの後ろに/tokensを繋げる"ネットで調べたところ↓なのです。
curl -i -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"auth": {"identity": {"methods": ["password"],"password": {"user": {"id": "APIユーザーID","password": "パスワード"}}},"scope": {"project": {"id": "テナントID"}}}}' \
https://identity.c3j1.conoha.io/v3/auth/tokensやりたかったことは ConoHa のサーバーの一覧のCPU利用率を確認したかったです。

1枚ペラのプログラムです。
{トークン}、{ラベル}、{UUID}、{IPアドレス}を埋めて使ってください。
<?php
// 認証情報
$user = 'admin';
$pass = 'xxx';
// 認証されていない場合
if (
!isset($_SERVER['PHP_AUTH_USER']) ||
!isset($_SERVER['PHP_AUTH_PW']) ||
$_SERVER['PHP_AUTH_USER'] !== $user ||
$_SERVER['PHP_AUTH_PW'] !== $pass
) {
header('WWW-Authenticate: Basic realm="Restricted Area"');
header('HTTP/1.0 401 Unauthorized');
echo '認証が必要です';
exit;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fomantic-ui@2.9.4/dist/semantic.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.9.4/dist/semantic.min.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<?php
require '../vendor/autoload.php';
use GuzzleHttp\Client;
$token = '{トークン}';
$client = new Client([
'base_uri' => 'https://compute.c3j1.conoha.io/',
'timeout' => 10,
'headers' => [
'Accept' => 'application/json',
'X-Auth-Token' => $token,
],
]);
$servers = [
['label'=>'{ラベル}','uuid'=>'{UUID}','ip'=>'{IPアドレス}' ],
] ;
?>
<div class="ui grid container">
<?php
foreach ( $servers as $i => $server ) {
$labels = [];
$values = [];
//$data = [];
$response = $client->get("v2.1/servers/{$server['uuid']}/rrd/cpu");
$data = json_decode($response->getBody(), true);
if (isset($data['cpu']['data'])) {
foreach ($data['cpu']['data'] as $row) {
$labels[] = date('H:i', $row[0]); // 時刻
$values[] = $row[1] / 1_000_000; // CPU値
}
}
?>
<div class="five wide column"><canvas id="cpuChart<?= $i ?>" width="320" height="240"></canvas></div>
<script>
ctx = document.getElementById('cpuChart<?= $i ?>').getContext('2d');
labels = <?= json_encode($labels, JSON_UNESCAPED_UNICODE) ?>;
values = <?= json_encode($values, JSON_UNESCAPED_UNICODE) ?>;
new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: [{
label: '<?= $server['label'] ?> <?= $server['ip'] ?>',
data: values,
borderWidth: 1,
tension: 0.3,
pointRadius: 0
}]
},
options: {
responsive: false,
scales: {
y: {
beginAtZero: true
}
},
},
})
</script>
<? } ?>
</div>
</body>
</html>