Help us understand the problem. What is going on with this article?

Vagrantfileで設定値をyamlファイルで管理する

More than 3 years have passed since last update.

Vagrantfileを作成する際に、ディレクトリのパスや設定値等で同じ値を複数箇所で記述する場合に
外部ファイル(ここではyaml形式)で管理する様に設定します。
※やり過ぎるとVagrantfie単体での可読性は低下します。。。普通の変数の方が手軽かもです。

環境

Vagrant 1.9.7

下準備

当然Vagrantが必要なので、インストールをしていない場合(でMacの方)は下記ページの下準備を行います。
MacでVagrant上にdocker環境を構築

設定用のyamlファイルを用意する

yaml形式で設定値を記述します。
以下はサンプルです。

############
# host
############
vm:
 os: "centos/7"
 ip: "192.168.33.10"

############
# nginx
############
nginx:
 conf:
  host: "dockers/nginx/conf.d"
  guest: "/var/dockers/nginx/conf.d"
  docker: "/etc/nginx/conf.d"
 www:
  host: "dockers/nginx/www"
  guest: "/var/dockers/nginx/www"
  docker: "/var/nginx/www"

Vagrantfileにyamlファイルを読み込む設定をする

VagrantfileはRubyなので以下の様にVagrantfileに追記します。
ここではsettings/localsetting.yamlを読み込みsettings変数に入れています。

require 'yaml'
settings = YAML.load_file 'settings/localsetting.yaml' #<- 読み込むyamlファイルのパス

localsetting.yamlの場所

.
├── Vagrantfile
└── settings
     └── localsetting.yaml

Vagrantfileに設定値を記述する

Rubyのハッシュ形式で取得できるので
ハッシュオブジェクト[キー][キー]...
の様に取得できます。

例)

config.vm.box = settings['vm']['os'] 

上記の様に記述して変数に設定します。

サンプル

実際に使用しているサンプルは以下にあります。
https://github.com/manjiii/Vagrant-samples/tree/master/Skeleton-nginx-nodejs-mongodb

Manjiii
カナヘイ大好きエンジニア 勉強・備忘録を兼ねて投稿中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした