私は現在新製品を展開しており、プレイブックとロールを構成するためにいくつかの問題に遭遇しました。私は3つの異なる解決策を持っていますが、どのパスが最適であるかを入力してもらいたいと思っています。
製品は、Windowsサーバー上のWebアプリケーションです。展開するには、次の手順が必要です(高レベル)。
- javajdkをインストールする
- Tomcatをインストールする
- win_serviceをインストールする
- Java regkesを構成する
- Tomcatを構成する
- webappをインストールする
- サービスを開始
私はprodとステージング、group_vars、ロール(ansible-galaxyで作成)に静的インベントリを使用しているため、何らかの構造があります。
解決策1
すべてを1つの巨大なハンドブックにまとめます。これはうまく聞こえませんが、以前のインストールからの変数を知っているという利点があります。たとえばtomcat
、どこにあるかを知る必要がJAVA_HOME
あります...それは、javajdk
インストールにあったのJAVA_HOME
です。
解決策2
すべてを小さな役割に分割します。良さそうですが、役割は互いに独立している必要があります。タスクを分離する方法は見つかりませんでした。それは感覚などのための単一の役割を持つことになるだろうinstall_tomcat
、config_tomcat
と順番に言及した役割を持って脚本を設定しますか?
しかし、ある役割はどのようにして知るのでしょうか。たとえば、次の役割で必要とされるパス名などです。->インストールはパスを設定します、configは知る必要があります。私は役割を独立させることが本当にわかりません。
ソリューション3ソリューションの
種類2.役割のみを含み、できるだけ役割に分割したメインプレイブックを用意します。独立変数名を持っている./roles/vars/main.yml
どういうわけか(?)は、必要var
なすべての定義が適用される、プレイブックの変数の優先順位の高い場所を見つけます。内部的には、変数をロールにパスするか、単にロール変数を無効にします。
たとえば、製品にサービスがある場合、サービス名は通常、のパス名の一部ですtomcat
。tomcat
名前は、サービスに依存してはならないので、そこにあるべきtomcat_install_path
役割でもservice_name
製品と。したがって、製品のプレイブックがサービス名と呼ばれる場合、サービス名は名前の一部でtomcat_install
ある必要があります。これは、完全に異なる展開で呼び出され、サービス名をいじる必要はありません。
私はソリューション3を使用しますが、それを設定する方法をまだ見つけていません。専門家の意見は何ですか、ソリューション3は実行可能ですか、もう1つはより優れていますか、それとも4番目のソリューションがありますか?