そのため、 Fuelのプラグインの作成方法についてお話しいただきました。 私たちはこの要求を満足させます。 しかし、「真空中の球体プラグイン」について話すのは難しく、面白くない。 したがって、NFSプラグインを例に取り、作成およびテストの方法を伝えることにしました。
まず、OpenStackエコシステムは、特定のタスクのソリューションを提供する個々のエンジニアとエンジニアリングチームの努力によって開発され、コミュニティ全体で可能なことの境界を広げることを思い出します。 この観点から、プラグインは、エコシステム内に存在するプロジェクトに最も適切なアーキテクチャソリューションです。
燃料はそのような正しい設計の1つです。 Mirantis OpenStackの展開プロセスとその後のクラウド管理を促進するように設計されています。 誰もがプラグインを通じてFuelの機能を拡張する機会を持っています。
このシリーズの記事では、説明を完全に行うつもりはありません。 燃料プラグインSDKと競合することのできない素材の形式に関してです。 しかし、このテキストにはいくつかの重要な利点があります。 まず、ロシア語です。 次に、特定のプラグインの作成履歴について詳しく説明します。つまり、開発者であるAlexander Kislitskyとともに、最初から最後まですべてを実行する機会があります。 最後に、第三に、何か不明瞭であることが判明した場合は、コメントでいつでも質問することができ、包括的な回答を提供しようとします。 とても良い狩り!
いくつかの欠点があります。 主な問題は、この一連の記事がFuelバージョン6.0のプラグインを作成した経験に基づいていることです。 そして現在のバージョンは6.1です。 ただし、6.1はまもなく廃止され、7.0に置き換えられます。 言い換えれば、Fuel Pluggableフレームワークは、成長および改善する生物であり、一定の制限があります。 それらはバージョンごとに異なります。 したがって、このテキストを読んだ瞬間、すでに少し古くなっています。 しかし、記事に記載されているリンクにより、読者は資料自体を更新できます。
Fuelのプラグインは何ですか?
ほとんどの場合、プラグインを使用して、次のようなOpenStack要素の機能を拡張します。
1.計算
2.ネットワーク
3.ストレージ
4.操作(ログ、監視、セキュリティ)
プラグインを使用して、たとえば、これらのコンポーネントの代替バックエンドを作成したり、クラウドを監視するタスクを解決したりできます。LMACollectorは、コントローラー、コンピューティング、ストレージノードなどのノードにインストールされます。 このモジュールは、OpenStackエコシステムのさまざまなサービスからログ、メトリック、および通知を収集し、この情報をElasticSearchやInfluxDBなどの外部データベースバックエンドに送信します。 または、 Zabbixはプラグインです。 このプラグインは、最も人気のあるオープンソースのエンタープライズ監視ソリューションの1つであるZabbixをインストールします。 現在のプラグインの完全なリストはこちらにあります 。 Fuel 6.1では正しく機能することに注意してください。 クラウドモニタリングは一般的に流行のトピックです。 そして、次の記事でそれに戻ろうとします。
注:作成する各プラグインは個別のリポジトリに保存する必要があります。 この目的でStackForgeを使用することをお勧めします(これはOpenStack開発者の間で受け入れられているツールです。詳細については、 こちらをご覧ください -英語)。 コード、仕様、ドキュメントなど、必要なものをすべて手元に置いておくと非常に便利です。 テスト例には仕様とドックはありませんが、追加することを強くお勧めします。 ここでは、 Calicoのプラグインで、すべてが必要に応じて実行されます。 他の開発者は、順次統合(CI)コードにGerritワークフローを使用し、Mirantis OpenStackの後続リリースの要件に従ってプラグインを更新できるため、感謝します。
プラグインの構造
作成されたプラグインは次のようになります。
fuel_plugin_name /
├──deployment_scripts
│└──deploy.sh
├──environment_config.yaml
├──metadata.yaml
├──pre_build_hook
├──リポジトリ
│├──centos
│└──ubuntu
└──tasks.yaml
このテンプレートは、Fuelプラグインビルダーを使用して自動的に生成できます。 手はこれらのファイルを作成する必要はありません。
YAMLは、データを記述するためのシンプルな言語です。 指定された形式では、次の情報を入力できます。
-tasks.yaml-この変数は、いつ、どこで、どのようにスクリプトを実行するかを記述します
-metadata.yaml-プラグインの名前、バージョン、リンクを設定します(燃料6.1のメタデータの例を参照)
-environment_config.yaml-このプラグインに固有のパラメーターを設定します。ユーザーは、Fuelインターフェースの「設定」タブで設定できます
-deployment_scripts-bashスクリプトまたはパペットマニフェストを追加できるディレクトリ。
-リポジトリ-プラグインが機能するために必要なUbuntuまたはCentOSパッケージを追加できます。
Fuelはどのタスクをサポートしていますか?
Fuelはシェルおよびパペットタスクをサポートし、特定のシェルコマンドおよびPuppetマニフェストを実行できます。 シェルタスクの例を次に示します。
#このタスクはコントローラーノードに適用され、
#ここで、いくつかのロールを指定することもできます。例えば
#['cinder'、 'compute']はのみに適用されます
#cinderおよび計算ノード
-役割:['コントローラー']
ステージ:post_deployment
タイプ:シェル
パラメータ:
cmd:./deploy.sh
タイムアウト:42
#タスクはすべての役割に適用されます
-役割:「*」
ステージ:pre_deployment
タイプ:シェル
パラメータ:
cmd:echo all> /tmp/plugin.all
タイムアウト:42
この例では、最初のタスクがdeploy.shスクリプトを実行します。
./deploy.shは、対応する説明に記載されているように、デプロイ後に実行されます。
2番目のタスクは、テキスト「all」で/tmp/plugin.allファイルを作成します。つまり、コマンド「echo all> /tmp/plugin.all」を実行します。
Puppetでタスクを実行すると、次のような独自のPuppetマニフェストをOpenStackノードに適用できます。
1. site.ppファイルをdeployment_scripts / puppet / manifests /ディレクトリに追加します。 puppet_manifestは、deployment_scriptsに関連するマニフェストのディレクトリパスを記述します
2.すべての必要なモジュールをdeployment_scripts / puppet / modulesディレクトリに挿入します-puppet_modulesは、** deployment_scriptsに関連するモジュールのディレクトリパスを決定します
例:
#展開はコントローラーにのみ適用されます
-役割:['コントローラー']
ステージ:post_deployment
タイプ:パペット
パラメータ:
puppet_manifest:puppet / manifests / site.pp
puppet_modules:puppet / modules
タイムアウト:360
燃料はPuppet Masterを使用しません。 代わりに、Fuelタスクエグゼキューターは、Fuel Masterノードからマニフェストをコピーし、選択した各ノードで「puppet apply」コマンドを実行します。 シェルタスクでPuppetを実行する代わりに、プラグインでPuppetタスクを使用することをお勧めします。 Fuelの内部アーキテクチャに興味のある人は、 Fuel開発ドキュメントを読むために送られます。この情報はこのトピックの範囲外であるためです。
作成されるプラグインの種類は重要ではありません。開発プロセスに影響はなく、変更されません。 Fuelのインストール後、プラグイン要素が[設定]タブに表示されます。
残念ながら、Fuelの現在のバージョンは、プラグインに関する完全な情報の表示を保証していません。 プラグインに関する情報は、Fuel Wizardには表示されませんが、Fuel Settingsには表示されるため、UXの観点から作業することはあまり便利ではありません。 私たちはこれを知っており、プロセスをより快適にするために取り組んでいます。 いくつかのツールが欠落している場合、CLIを使用できますが、これもユーザーフレンドリーではありませんが、Fuelを使用する管理者にとっては、これが必要なものです。
FuelプラグインSDKでタスクのフォーマットに関するすべての詳細を取得できることを再度お知らせします 。 そして、一般的な質問から直接プラグインを作成する手順に進みます。
続行するには...