Vagrant BoxをVagrant Cloudへ登録
やりたいこと
- Vagrant Cloudへboxを登録する
Vagrant BoxのホスティングがAtlasのサービスから分離されてVagrant Cloudになった. 今後はVagrant Cloud APIを利用してVagrant Boxの登録をおこなう.
Vagrant Boxの作成はPackerでVagrant Boxファイルを作成を参照.
トークンの生成
Setting → Security の Authentication Tokensで生成できる. Descriptionにトークンを認識するための記述を入力し,Generate tokenボタンを押す.
一度だけトークンが表示されるので適切なところに保存しておく.
APIを利用しても生成可能.
curl \
--header "Content-Type: application/json" \
https://app.vagrantup.com/api/v1/authenticate \
--data '
{
"token": {
"description": "Login from cURL"
},
"user": {
"login": "USERNAME",
"password": "PASSWORD"
}
}
'
# レスポンス例
{
"description": "Login from cURL",
"token": "qwlIE1qBVUafsg.atlasv1.FLwfJSSYkl49i4qZIu8R31GBnI9r8DrW4IQKMppkGq5rD264lRksTqaIN0zY9Bmy0zs",
"token_hash": "7598236a879ecb42cb0f25399d6f25d1d2cfbbc6333392131bbdfba325eb352795c169daa4a61a8094d44afe817a857e0e5fc7dc72a1401eb434577337d1246c",
"created_at": "2017-10-18T19:16:24.956Z"
}
USERNAME
とPASSWORD
はVagrant Cloudのものを入力する.
Vagrant Boxの登録
ここからはAPIを利用する方法だけ触れる.
新しいBoxの作成
公開したいBoxについて一回だけ実行すれば良い.
curl \
--header "Content-Type: application/json" \
--header "Authorization: Bearer VAGRANT_CLOUD_TOKEN" \
https://app.vagrantup.com/api/v1/boxes \
--data '
{
"box": {
"username": "USERNAME",
"name": "BOXNAME",
"short_description": "My dev box",
"description": "My development Vagrant box",
"is_private": false
}
}
'
VAGRANT_CLOUD_TOKEN
はアクセストークン.
公開する場合はis_private
をfalse
にする.
true
でも作成できるが,vagrant
コマンドなどで実際にアクセスする場合には有料プランに変更する必要がある.
新しいバージョンの作成
公開しているVagrant Boxを更新する場合に毎回実行する.
curl \
--header "Content-Type: application/json" \
--header "Authorization: Bearer VAGRANT_CLOUD_TOKEN" \
https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/versions \
--data '{ "version": { "version": "VERSION" } }'
VERSION
で適切なバージョンを指定する.
新しいプロバイダーの作成
プロバイダーを指定する.
- VirtualBox
- VMware
- Docker
- Hyper-V
が対応している.その他にもカスタムで作ることもできる. 例えば,Parallelsなども利用できる.
今回はVirtualBoxを使うことにする.
curl \
--header "Content-Type: application/json" \
--header "Authorization: Bearer VAGRANT_CLOUD_TOKEN" \
https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/providers \
--data '{ "provider": { "name": "virtualbox" } }'
Boxのアップロード
ビルドしたVagrant Boxファイルをアップロードする.
# アップロード用URLの取得
response=$(curl \
--header "Authorization: Bearer VAGRANT_CLOUD_TOKEN" \
https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/provider/virtualbox/upload)
# jqを使ってアップロード用URLを抽出
upload_path=$(echo $response | jq .upload_path | sed 's/"//g')
# アップロード
curl $upload_path --request PUT --upload-file BOXPATH
# レスポンス例
{
"upload_path": "https://archivist.hashicorp.com/v1/object/630e42d9-2364-2412-4121-18266770468e"
}
BOXPATH
にはBoxファイルへのパスを指定する.
今回はアップロードを失敗することが多かった. 最終的にはいつの間にかアップロードされていた. 原因不明.今後の課題.
リリース
vagrant
コマンドからアクセスできるようにリリースする.
curl \
--header "Authorization: Bearer VAGRANT_CLOUD_TOKEN" \
https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/release \
--request PUT
これで,
vagrant init USER/BOX
vagrant up
で利用できる.
旧版を導入済みの場合はvagrant box update USER/BOX
で更新できる.
今後の課題
- boxのアップロードが失敗することが多い.原因を知りたい.
- PackerのVagrant Cloud Post-Processorへの移行