Chefを使ってWebLogic Serverのマシンを構成してみた


# 概要
Chefを利用してのWebLogic Serverのマシンを自動構成してみました。

-[Chefを使ってWebLogic Serverの基本ドメインを作ってみた](http://qiita.com/shinyay/items/8ea3c25b0160ec91d666)

上記の投稿でWebLogic Serverの基本的なドメイン構成をChefで自動構成できるようにしました。
その中でも記載してありますが、WebLogic ドメインに含まれる管理対象は以下の構成要素です。

- サーバ
    - 管理サーバ
    - 管理対象サーバ
- クラスタ
- マシン

前述の自動構成した基本的なWebLogic ドメインは、ドメイン内にサーバ（管理サーバ）が含まれるのみの非常にシンプルで最も基本的なドメイン構成でした。
![Domain_Admin.png](https://bytebucket.org/shinyay/images-for-blog/raw/aff4d755ab9d70075cc01884b39512fcd3f09a2c/qiita/160730_chef-oracle-weblogic-machine/Domain_Admin.png)

この構成に対して、今後その他サーバやクラスタを構成するために**マシン**を構成します。

## WebLogic Server - マシン
マシンとは、１つ以上のWebLogic Server インスタンスをホストするハードウェアの論理的な表現です。
以下のような場合に、マシンを構成する必要があります。
- 管理サーバをホストしない別のハードウェアでノードマネージャを実行する場合
- クラスタが複数のハードウェアに跨り、複数のサーバ・インスタンスが各ハードウェア上で稼働する場合

マシンを構成する事によりハードウェアの境界を明確とするため、クラスタの構成時にセッション情報のレプリケーション時にハードウェア障害を避けるような動作がとられます。

## 今回作成するRecipe
- WebLogic ドメインにマシンを定義する

# Recipe. WLSTによりマシンの構成
以下の3種類のファイルを作成します。
- Recipe
- Template
- Attribute

## WLSTスクリプトファイルを生成
テンプレートからWLSTスクリプトファイルを生成し、オーナー/グループ権限を設定します。

```recipes/create-machine.rb
template "#{node['weblogic-domain']['response_file_dir']}/create_#{node['weblogic-domain']['domain_name']}_machine.py" do
  source "create_machine.py.erb"
  owner node['weblogic-domain']['owner']
  group node['weblogic-domain']['group']
  mode '0755'
end
```

## WLSTスクリプトファイルのひな型
WLSTスクリプトの中では以下のフローを取ります。

1. WLS管理サーバに接続
2. 編集モードに設定
3. マシンをUnixタイプで定義
4. マシン内で稼働するノードマネージャのListen Address / Portの定義
5. 反映
6. 管理サーバから切断

マシン名やポート番号など汎用性のある設定項目はAttributeを利用してパラメータ化しておきます。

以下、Templateファイルより抜粋

```tempalates/default/create_machine.py.erb
connect('<%= node['weblogic-domain']['admin_user'] %>','<%= node['weblogic-domain']['admin_password'] %>','t3://localhost:7001')

edit()

print '########## CREATING Machine in <%= node['weblogic-domain']['domain_name'] %> DOMAIN ##########'

startEdit()
cd('/')
cmo.createUnixMachine('<%= node['weblogic-domain']['machine_name'] %>')
cd('/Machines/<%= node['weblogic-domain']['machine_name'] %>/NodeManager/<%= node['weblogic-domain']['machine_name'] %>')
cmo.setNMType('SSL')
cmo.setListenAddress('localhost')
cmo.setListenPort(<%= node['weblogic-domain']['nm_port'] %>)
cmo.setDebugEnabled(false)
activate()

print '########## CREATED Machine in <%= node['weblogic-domain']['domain_name'] %> DOMAIN ##########'

disconnect()
```

## デフォルト値の設定
パラメータ化している属性値のデフォルト値を設定します。

今回はパスワードは平文でハードコードしていますが、実際はData Bagを使用して暗号化するとよいです。

```attributes/default.rb
default['weblogic-domain']['nm_port'] = '5556'
default['weblogic-domain']['machine_name'] = 'mymachine'
```

# Chefの実行イメージ
![chef-oracle-weblogic-machine.gif](https://bytebucket.org/shinyay/images-for-blog/raw/d52d23a8d79f07a3b86e25176d15768dffa3eb81/qiita/160730_chef-oracle-weblogic-machine/160730_chef-oracle-weblogic-machine.gif)

# まとめ
マシンをWebLogic ドメインに追加しました。
![Domain_Machine-Admin.png](https://bytebucket.org/shinyay/images-for-blog/raw/fea1d6c8a70d8b90d9072b4edfaf982ed4ad87a7/qiita/160730_chef-oracle-weblogic-machine/Domain_Machine-Admin.png)

これによって物理環境としての境界が定められ、また同時に定義されるノードマネージャによる管理領域となります。
このマシンに対してサーバインスタンスを追加定義していくことによって、ノードマネージャ経由での各サーバインスタンスのライフタイム管理が可能となります。

- [今回のレシピ：oracle-weblogic-domain::create-machine](https://github.com/shinyay/chef-oracle-weblogic-domain/tree/publish_20160805 "oracle-weblogic-domain::create-machine")
  - WebLogic ドメインにマシンを追加するレシピです。