iSCSIストレージをマウントするCHEFクックブック

#[SoftLayerクッキングLABO] (http://qiita.com/MahoTakara/items/464da29ccf932698b753)

# このクックブックで実現すること

SoftLayerで提供される パフォーマンス・ストレージ や エンデュランス・ストレージは、iSCSI プロトコルを利用してサービスが提供されます。このクックブックは、仮想サーバーや物理サーバーの設定をおこない、iSCSIのユーザー認証からブロック・ストレージのマウントするまでを実施します。

iSCSIストレージを利用するケースでは、アクティブ・スタンバイの構成の共有ディスクとして利用する事が多いため、このクックブックでも、アクティブ側とスタンバイ側の設定を選択できます。


# クックブック要約
この iscsiStorage01 クックブックは、次の箇条書きの項目を実施します。

- open-iscsi、マルチパスのモジュールの導入
- SCSIイニシエーター名の設定
- iscsid.confの認証設定
- iscsiデバイスのディスカバリー
- WWID の取得
- マルチパスとデバイスの設定
- fstabに対してマウント・ポイントの追加
- マウント・ポイントのディレクトリ作成
- マスターノードであればマウント実行

このクックブックは、attribute の ["iscsi_host"]設定により、次の図の様な、アクティブ側とスタンバイ側の設定が実施できます。
![スクリーンショット 2015-11-09 16.08.46.png](https://qiita-image-store.s3.amazonaws.com/0/42829/15b5870b-2625-c0a9-68b9-ade8d473a4cc.png)


# レシピの置き場所
最新版のクックブックは次のURLにあります。
- https://github.com/takara9/iscsiStorage01


# 対応するソフトレイヤー活用ガイド
このレシピを利用することで、以下の設計パターンや設定作業を自動化することができます。

- [コンフィグレーション・ガイド 1.6 ストレージの種類と選択] (https://www.change-makers.jp/post/10312)
- [コンフィグレーション・ガイド 1.6.6 パフォーマンス・ストレージを利用するには？] (https://www.change-makers.jp/post/10318)
- [コンフィグレーション・ガイド 1.6.7 エンデュランス・ストレージを利用するには？] (https://www.change-makers.jp/post/10319)




# テスト済みのLinuxディストリビューション

こちらのURL https://github.com/takara9/iscsiStorage01/の README.md に記載しています。



# クックブックの説明

## iSCSIストレージの準備
このレシピを実行する前に、パフォーマンス・ストレージ、または、エンデュランス・ストレージ を確保しておく必要があります。例えば、ブロック・ストレージのリストの中に以下の様に表示されている必要があります。

![スクリーンショット 2015-10-05 17.44.18.png](https://qiita-image-store.s3.amazonaws.com/0/42829/c4084713-a3ad-ed00-7213-1229dd580412.png)

slcli コマンドでは、次の様な状態になっている必要があります。

```
chef@ChefWs:~$ slcli iscsi list
:.........:............:......:.................:..................:.............:
:    id   : datacenter : size :     username    :     password     :    server   :
:.........:............:......:.................:..................:.............:
: 6429159 :   tok02    : 20GB : IBM01SL289550-1 :        -         :  10.3.78.55 :
:.........:............:......:.................:..................:.............:
```

iSCSIストレージにアクセスを許可するサーバーの指定は、slcliコマンドに実装されていないので、カスタマーポータルから実施します。
メニューバーから「Storage」->「Block Storage」->「Lun Name」を選択して以下の画面を表示します。 そして、赤枠のリンクをクリックして、「Authorized Hosts」の欄に、アクセスを許可するサーバーを追加します。　アクティブ・スタンバイ構成を組むのであれば、２台分のサーバーをセットします。

![スクリーンショット 2015-10-05 21.50.51.png](https://qiita-image-store.s3.amazonaws.com/0/42829/0b32cc0b-4aad-e99a-22a4-4f520a4b3cb4.png)

後ほど、このスクリーンコピーの黄色の吹き出し部分の値を拾って、attributes/default.rbのファイルにセットしていきます。

## クックブックのファイル
このクックブックに必要なファイルは、以下のディレクトリ・ツリーに表す様に３本です。次の実行結果は不要部分を省略しています。

```
$ tree iscsiStorage01/
iscsiStorage01/
├── CHANGELOG.md
├── README.md
├── attributes
│   └── default.rb   <-- (1) iSCSIストレージの認証などの情報（パラメータ）
├── recipes
│   └── default.rb  <--- (2) レシピ本体
└── templates
    └── default
        └── iscsid.conf.erb  <--- (3) iscsiデーモンの設定ファイル
```

## (1) iSCSIストレージの認証などの情報（パラメータ）

このファイル attributes/default.rb は、iSCSIストレージを設定するためのパラメータです。　以下の(A)〜(D)までは必須設定項目です。それ以外の項目は、必要に応じて変更できます。

```
default["iscsi_target_ipaddr"] = "(A)ターゲットIPアドレス"
default["iscsi_user_name"]     = "(B)サーバー毎に付与されるユーザー名"
default["iscsi_user_password"] = "(C)ユーザー名に対応するパスワード"
default["initiator_name"]      = "(D)イニシエータを識別する名前 Host IQN"

default["multipath_device"]["name1"]  = "/dev/mapper/iscsimp1"  <--- マルチパスデバイスの名前
default["multipath_device"]["mount1"] = "/data1" <--- 上記デバイスのマウントポイント

default["iscsi_host"] = 'master'   <--- "master"とすればマウントまで実行、"backup"ではデバイスの認識まで実施
```

## (2) レシピ本体
レシピ本体のコードは、GitHub の https://github.com/takara9/iscsiStorage01/blob/master/recipes/default.rb を参照ねがいます。 処理のブロック単位でコメントを書いていますので、コメントを追えば何をしているか判るようになっています。


## (3) iscsiデーモンの設定ファイル

iscsidの設定ファイルをテンプレートファイルで置き換えます。　以下の抜粋部分の様に、iSCSIストレージのユーザー名とパスワードに置き換えます。
このユーザー名とパスワードは、アトリビュートの以下の項目からセットされます。

- default["iscsi_user_name"]     = "(B)サーバー毎に付与されるユーザー名"
- default["iscsi_user_password"] = "(C)ユーザー名に対応するパスワード"

```lang:iscsid.conf.erb
省略
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = <%= @username %>
node.session.auth.password = <%= @password %>
省略
# To set a discovery session CHAP username and password for the initiator
# authentication by the target(s), uncomment the following lines:
discovery.sendtargets.auth.username = <%= @username %>
discovery.sendtargets.auth.password = <%= @password %>
省略
```

# 適用手順と確認方法
GitHUB https://github.com/takara9/iscsiStorage01 のREADME.md を参照ねがいます。

# Chef 関連マニュアル
このレシピを作るにあたって参照したCHEFマニュアルのリンクです。
- script  (https://docs.chef.io/resource_script.html )
- execute (https://docs.chef.io/resource_execute.html )
- package (https://docs.chef.io/resource_package.html )
- About the Recipe DSL (https://docs.chef.io/dsl_recipe.html#about-the-recipe-dsl )
- About Ohai (https://docs.chef.io/ohai.html )
- ruby_block (https://docs.chef.io/resource_ruby_block.html)
- directory (https://docs.chef.io/resource_directory.html)
- mount (https://docs.chef.io/resource_mount.html)
- template (https://docs.chef.io/resource_template.html)