Overview
- 目的
terraform使ってみたい。(in conoha)
しかし、その前にconohaのAPIを使ってみた方が良いと思った(直感
なので、先人に倣いconohaのAPIを使ってみる。
- このページでなんとなく判ること
- conohaVPSでAPIを実行出来る
- conohaVPSで必要最低限のinstance生成が行える
- Reference
- 結論
API実行はやはり面倒だなぁ。という感じだった。
CLIは個人の方が作ってるけれども、自動系ならterraformを使えば良さそうなので意欲湧いた。
API実行の準備
- API使うために情報を集める
手順はConohaのページに書かれてます。
APIを実行するにあたり、トークンを取得する必要がある。
このため、トークンを取得するためにはConohaのIdentifyのエンドポイントにRESTを飛ばす必要がある。
その際、色々情報(user/password/endpoint/tenantid)を載せて飛ばす必要がある。
この情報の準備、収集をする
★注意
user/passwordはAPI用に新たに準備するもの。ログインID/Passwordではない。
- トークン取得
今後色々使う情報なので変数に入れておくと無難。こんな感じで変数に確保しました。
TOKEN=`curl -s -X POST -H "Accept: application/json" \
-d '{ "auth": { "passwordCredentials": { "username": "'"$C_USER_NAME"'", "password": "'"$C_PASSWORD"'" }, "tenantId": "'"$C_TENANT_ID"'" } }' \
https://identity.tyo2.conoha.io/v2.0/tokens \
| jq ".access.token.id"| sed -e s/\"//g`;echo $TOKEN
試しにAPIをいくつか実行してみよう
conohaに既にConoHa API Documantationがあるのでこれを見ながらいくつか打ってみる。
- Compute API v2 (nova list相当)
自分のinstanceの一覧を表示。(今は1台のみ有る)
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers | jq
azuki@maki-mac:~/Deployments/terraform$ curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers | jq
{
"servers": [
{
"id": "9f5a09a3-ae33-410a-bf7a-f22810747aXX",
"links": [
{
"href": "https://compute.tyo2.conoha.io/v2/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX",
"rel": "self"
},
{
"href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX",
"rel": "bookmark"
}
],
"name": "118-27-28-241"
}
]
}
- Compute API v2 (nova show相当)
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers/<INSTANCE_ID> | jq
azuki@maki-mac:~/Deployments/terraform$ curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://compute.tyo2.conoha.io/v2/$C_TENANT_ID/servers/9f5a09a3-ae33-410a-bf7a-f22810747aXX | jq
{
"server": {
"status": "ACTIVE",
"updated": "2019-05-03T05:46:13Z",
"hostId": "7ee0386cf0299e07acbff410bd6792542e30aaaccf9ee66cdbdXXXXX",
"OS-EXT-SRV-ATTR:host": "cn-d12141.g1.tyo2.v4",
~snip~
"image": {
"id": "de03b36d-21d8-4e58-9b8e-24581dda86fa",
"links": [
{
~snip~
"flavor": {
"id": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7",
"links": [
{
"href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/flavors/d92b02ce-9a4f-4544-8d7f-ae8380bc08XX",
"rel": "bookmark"
}
~snip~
"backup_set": "0"
}
}
}
instance作成する前に
APIを実行してinstanceを作成する上で、最低限以下の情報が必要になる。
- image_id(使用するImage情報, ubuntu,centOS等)
- flavor_id(使用するプラン情報, 1CPU-512mb等)
- 結果として
以下のAPIを実行して2つのIDを決めました
- image_id : de03b36d-21d8-4e58-9b8e-24581dda86fa(ubuntu16.04)
- flavor_id : d92b02ce-9a4f-4544-8d7f-ae8380bc08e7(512mb)
- ImageListを取得してみる
どこかにイメージのリストが転がってないか見てみたけど見つからなかったのでAPIを打った。
この結果からさらにgrepすると良いと思う。(本当は公式でCLIが提供されてたら嬉しい。)
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://$C_EP_IMAGE/v2/images | jq . | egrep "\"id\"|\"name\""
- flavorlistを取得してみる
curl -s -X GET -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" https://$C_EP_COMPUTE/flavors | jq
insntaceを作成
url -s -X POST -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" -d '{ "server": { "imageRef": "de03b36d-21d8-4e58-9b8e-24581dda86fa", "flavorRef": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7", "adminPass": "XXXXX"} }' https://${C_EP_COMPUTE}/servers | jq
azuki@maki-mac:~/Deployments/terraform$ curl -s -X POST -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" -d '{ "server": { "imageRef": "de03b36d-21d8-4e58-9b8e-24581dda86fa", "flavorRef": "d92b02ce-9a4f-4544-8d7f-ae8380bc08e7", "adminPass": "XXXXXX"} }' https://${C_EP_COMPUTE}/servers | jq
{
"server": {
"security_groups": [
{
"name": "default"
}
],
"OS-DCF:diskConfig": "MANUAL",
"id": "c4419fd2-e36a-4074-ab9a-89a46612XXXX",
"links": [
{
"href": "https://compute.tyo2.conoha.io/v2/5a04833c9fbe42709cc3fcbdcaa41XXXXX/servers/c4419fd2-e36a-4074-ab9a-89a46612XXXXX",
"rel": "self"
},
{
"href": "https://compute.tyo2.conoha.io/5a04833c9fbe42709cc3fcbdcaa4XXXX/servers/c4419fd2-e36a-4074-ab9a-89a46612XXXXX",
"rel": "bookmark"
}
],
"adminPass": "XXXXX"
}
}
azuki@maki-mac:~/Deployments/terraform$
おまけ
rcファイル作成した方が良さそう
途中から面倒なのでrcファイル作って実施してました。
C_TENANT_ID=<TENANT_NAME>
C_USER_NAME=<API USER>
C_PASSWORD=<API PASSWORD>
C_EP_COMPUTE=compute.tyo2.conoha.io/v2/${C_TENANT_ID}
C_EP_IMAGE=image-service.tyo2.conoha.io
C_EP_VOLUME=block-storage.tyo2.conoha.io/v2/${C_TENANT_ID}