2016年1月13日水曜日

OpenStackとChef Server、Vagrantを使って完全自動化を図る

用意するもの

Chef Workstationを導入するPCもしくはインスタンス
私はUbuntuの仮想インスタンスを用意しました。

Chef Workstationを導入する

下記URL先にあるChef Tutorialの案内に従います。
https://learn.chef.io/manage-a-node/ubuntu/
Chef DKをインストールします。

Chef Serverを利用可能にする

引き続き同じURLの案内に従ってChef Server(ホステット版)を利用可能にします。
サインナップが必要ですが無料です。
Chef ServerでOrganizationを1つ作成します。
Organizationを作成するとStarter Kitをダウンロードできるようになります。
Starter Kitをダウンロードして指定のディレクトリでUnzipします。
Starter KitにはChef Server (Hosted)にアクセスするための認証キーや組織名などが含まれています。


Vagrantを導入する

下記のサイトからVagrantをダウンロードして導入します。
https://www.vagrantup.com/downloads.html

Vagrantfileを作成する


Starter Kitで作成した~/chef-repoディレクトリに移動します。
vagrant initコマンドを実行します。
Vagrantfileを編集します。

VagrantのProvisionerとしてChef Clientを指定するガイドは下記のURLにあります。

https://docs.vagrantup.com/v2/provisioning/chef_client.html





ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
require 'vagrant-openstack-provider'

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

  config.vm.provision :chef_client do |chef|
    # ~/chef-repo/.chef/knife.rbに以下の3つのパラメータの内容が記述されています
    chef.chef_server_url = 'https://api.chef.io/organizations/matsuos'
    chef.validation_key_path = '~/chef-repo/.chef/matsuos-validator.pem'
    chef.validation_client_name = 'matsuos-validator'
    chef.add_recipe 'recipe[learn_chef_apache2]'
  end

  config.vm.define "primary-node" do |primary|
    primary.vm.provider :openstack do |os|
      os.networks           = [ {
                                name: 'internal',
                                address: '10.230.41.185'
                              } ]
      os.server_name        = 'matsuos-primary-node'
      os.user_data          = '
                              #cloud-config
                              password: zaq12wsx
                              chpasswd: { expire: False }
                              ssh_pwauth: True
                              hostname: matsuos-primary-node
                              manage_etc_hosts: true
                              '
    end
  end

  config.vm.define "backup-node" do |backup|
    backup.vm.provider :openstack do |os|
      os.networks           = [ {
                                name: 'internal',
                                address: '10.230.41.186'
                              } ]
      os.server_name        = 'matsuos-backup-node'
      os.user_data          = '
                              #cloud-config
                              password: zaq12wsx
                              chpasswd: { expire: False }
                              ssh_pwauth: True
                              hostname: matsuos-backup-node
                              manage_etc_hosts: true
                              '
    end
  end

  config.vm.box = 'openstack'
  config.ssh.username = 'ubuntu'
  # OpenStack上でキーペアを作成し、ダウンロードした秘密鍵を指定します
  config.ssh.private_key_path = '~/chef-repo/matsuos-vagrant-key.pem'
  config.omnibus.chef_version = :latest

  config.vm.provider :openstack do |os|
    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'
    os.flavor             = 'm1.tiny'
    os.image              = 'ubuntu-14.04'
    os.floating_ip_pool   = 'external'
    os.keypair_name       = 'matsuos-vagrant-key'
    os.security_groups    = ['matsuos-sg-ssh']
  end
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

OpenStackへアクセスするあたりの設定はこちらのリンクを参照ください。

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


実行する

~/chef-repoに移動し(Vagrantfileがあるディレクトリ)、vagrant upを実行します。
もしインスタンスの作成には成功したものの、Chefの実行で失敗するような場合は、vagrant upを実行してもすでに作成済みといわれて何も動きません。
そのような場合はvagrant provisionを実行します。


Chef Server (hosted)のサイトでNodeを見ると、下図のように今プロビジョニングしたインスタンスが見えるようになります。


実行結果をブラウザで見ると、確かにChef Tutorialにあるような画面が出てきます。













0 件のコメント:

コメントを投稿