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

  • 0
    Like
  • 0
    Comment

    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