2016年1月2日土曜日

VagrantとChef SoloによるOpenStack環境の自動構成

VagrantはVirtual Boxなどの仮想環境を制御するための便利なツールですが、OpenStackにも対応しています。
Chefはインスタンスの設定やミドルウェアの導入、設定を自動的に行うツールです。
VagrantとChefを組み合わせると、インスタンスを作成後に自動的にインスタンスに必要な導入設定を実施することができるので、コマンド一発で本番環境を作動させることも可能です。


準備


Vagrantの導入とOpenStack対応用のプラグイン導入は次の記事を参考にしてください。


Vagrantを使ってOpenStackを操作してみる

Chef Workstationの導入と設定は次の記事を参考にしてください。

Chef Workstationを構築する

なお、Chef Serverに関する設定は不要です(秘密鍵などの操作)。

次のコマンドを実行してテスト用のレシピをダウンロードします。

$ cd ~/chef-repo
$ mkdir cookbooks
$ cd cookbooks
$ chef generate cookbook learn_chef_apache2



設定


Vagrantfileは次のように設定します。赤字箇所が今回新たに追加した部分です。


require 'vagrant-openstack-provider'

Vagrant.configure('2') do |config|

  config.vm.box       = 'openstack'
  config.ssh.username = 'ubuntu'
  config.ssh.private_key_path = '~/.ssh/matsuos-vagrant-key.pem'

  config.omnibus.chef_version = :latest

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = '~/chef-repo/cookbooks'
    chef.run_list     = 'learn_chef_apache2'
  end

  config.vm.provider :openstack do |os|

    # OpenStack Authentication
    os.openstack_auth_url = 'https://icos-sea.openstack.blueboxgrid.com:5001/v2.0'
    os.openstack_network_url = 'https://icos-sea.openstack.blueboxgrid.com:9797/v2.0'
    os.username           = 'matsuos'
    os.password           = 'xxxxxxxx'
    os.tenant_name        = 'demo project'

    # Instance definition
    os.flavor             = 'm1.tiny'
    os.image              = 'ubuntu-14.04'
    os.networks           = [
                            {
                              name: 'internal',
                              address: '10.230.41.184'
                            }
                            ]
    os.floating_ip_pool   = 'external'
    os.keypair_name       = 'matsuos-vagrant-key'
    os.security_groups    = ['matsuos-sg-ssh']
    os.server_name        = 'matsuos-01'
    os.user_data          = '
                            #cloud-config
                            password: zaq12wsx
                            chpasswd: { expire: False }
                            ssh_pwauth: True
                            hostname: matsuos-01
                            manage_etc_hosts: true
  end
end






それでは実行してみましょう。
Vagrantfileを置いたディレクトリから次のコマンドを実行します。

$ vagrant up



インスタンスが起動してsshをリスンするまでConnection refusedメッセージが数回表示されます。



インスタンスが起動すると、cookbooksディレクトリをrsyncしているようです。
Chef Clientをインストールするのに少し時間がかかります。
Chefを起動し、run_listに指定したレシピを読み込みます。



apache2を導入し、index.htmlを構成します。



apacheを起動して完成です。

出来上がったインスタンスのパブリックIPアドレスを確認します。




ブラウザでこのアドレスにアクセスします。



”hello world”という文字が表示されました。


0 件のコメント:

コメントを投稿