Sun N1 Service Provisioning System ユーザーズガイド (OS Provisioning Plug-In 3.0)

モジュール設計のガイドライン

ツールキットそれ自体がある基本的な原理に基づいて設計されています。そのツールキットとともに当初作成されたモジュールもこのスタイルに従っていました。すべてのモジュール開発者は独自の手法を使用できますが、少なくとも次の事項を考慮し、可能であれば従う必要があります。

モジュールの対応範囲

各モジュールは、なるべく別のモジュールで使用可能な機能を複製することなく、アプリケーションの特定の範囲に対応する必要があります。また、モジュールのサイズを適切にする必要があります。モジュールを適切にサブコンポーネントに分割できる場合、1 つの巨大なモジュールの代わりに、より小さなモジュールを作成する必要があります。

次に例を示します。設計者が、ターゲットサーバーインストールにセキュリティーサービスを提供するモジュールを書くことを決定する場合を考えます。このモジュールの一部として、設計者はファイアウォールと、一連の強化スクリプトをインストールすることを決定します。

この場合、設計者は別のモジュールがこれら 2 つの領域のいずれかにすでに対応しており、そのモジュールを活用できるかどうかを調べる必要があります。また、ファイアウォールと強化スクリプトのいずれかがお互いに分離して別の場所で使用できる場合、それらをまとめるのではなく、2 つのモジュールとして作成する方がより柔軟性が高い場合があります。

モジュールの依存関係

各モジュールはそれ自身で完結している必要があり、別のモジュールに依存したり、別のモジュールの存在を想定したりするべきではありません。そのような相互作用が必要である場合 (場合によっては実際に意味をなす)、そのモジュールはもう一方のモジュールに依存していると明確に指定する必要があります。このような状況が生じた場合、独立したモジュールに機能が最もよく実現されているかどうか、またはお互いに依存する 2 つのモジュールが 1 つの包括的なモジュールでよりよく実現されているかどうかを判断する必要があります。基本的な前提は、意味のある場合は項目をまとめ、多数のより小さなモジュールを、それ自体を目的として作成しないことです。

モジュールの相互作用

状況がモジュールの分離に有利であり、モジュールが (少なくとも一方向で) 依存している場合、モジュールは正しい (望ましい) 結果が得られるように相互作用を行うようにする必要があります。ツールキットには、モジュールごとにヒントを設定および取得するための非常に単純なメカニズムがあります。モジュールがヒントを取得するかどうかは、モジュールの設計者にかかっていますが、モジュール開発者の間の連携により、モジュールは孤立した状態で正しく動作し、統合した場合により強力なソリューションを提供するようにモジュールを書くことも可能です。

次に例を示します。実際の例では、Sun Cluster 3 製品は Solstice DiskSuite がどのように構成されているかに依存しますが、必ずしも DiskSuite がインストールされている必要はなく、また DiskSuite もクラスタソフトウェアがインストールされている必要はありません。実際、DiskSuite がクラスタマシン以外のマシン上にインストールされていることが非常に重要です。

この場合、DiskSuite に対応するモジュールと、Sun Cluster 製品に対応するモジュールの 2 つの別々のモジュールを用意します。それぞれのモジュールは独立して正しく動作しますが、同じターゲットサーバー構成内で結びつけられた場合、Sun Cluster モジュールは DiskSuite モジュールに影響し、 Sun Cluster 3.0 により DiskSuite に課せられた制限に適合します。

この相互作用はモジュールヒントを使用することにより行われ、スタンドアロンシナリオでのそれらの動作は次のように要約できます。

ヒントが実際に何を表現するかは、完全にモジュール開発者にかかっています。モジュール開発者間の緊密な連携により、ヒントを最も効率的に使用できるようになります。可能であれば、そのほかのモジュール開発者が追加インタフェースを活用できるように、モジュールのリリースノート内にヒントを文書化する必要があります。

モジュールのコーディング

モジュール開発者は、JumpStart インストール時に使用可能な標準スクリプト言語を選択する必要があります。たとえば、ターゲットサーバーが使用する NFS ブートイメージにシェルが含まれないため、「バッシュ」が使用できない場合があります。

この問題はすべてのバージョンの Solaris で存在することが認識されているため、可能であれば Bourne Shell を使用する必要があります。最後の手段としてのみ、コンパイル済み言語を検討してください。