Ansibleでデプロイメントを構築する3つのソリューション?


7

私は現在新製品を展開しており、プレイブックとロールを構成するためにいくつかの問題に遭遇しました。私は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_tomcatconfig_tomcatと順番に言及した役割を持って脚本を設定しますか?

しかし、ある役割はどのようにして知るのでしょうか。たとえば、次の役割で必要とされるパス名などです。->インストールはパスを設定します、configは知る必要があります。私は役割を独立させることが本当にわかりません。


ソリューション3ソリューションの 種類2.役割のみを含み、できるだけ役割に分割したメインプレイブックを用意します。独立変数名を持っている./roles/vars/main.yml

どういうわけか(?)は、必要varなすべての定義が適用される、プレイブックの変数の優先順位の高い場所を見つけます。内部的には、変数をロールにパスするか、単にロール変数を無効にします。

たとえば、製品にサービスがある場合、サービス名は通常、のパス名の一部ですtomcattomcat名前は、サービスに依存してはならないので、そこにあるべきtomcat_install_path役割でもservice_name製品と。したがって、製品のプレイブックがサービス名と呼ばれる場合、サービス名は名前の一部でtomcat_installある必要があります。これは、完全に異なる展開で呼び出され、サービス名をいじる必要はありません。


私はソリューション3を使用しますが、それを設定する方法をまだ見つけていません。専門家の意見は何ですか、ソリューション3は実行可能ですか、もう1つはより優れていますか、それとも4番目のソリューションがありますか?

回答:


3

Ansibleベストプラクティスドキュメントで定義されいるコードを構造化することをお勧めします

ここに画像の説明を入力してください

そして、geerlingguyのように、ansible galaxyプラットフォームへの主要な貢献者が使用している構造に従ってください

大きく異なる構造に従うと、将来、Ansible Galaxyコミュニティの役割を再利用することは非常に難しくなり、車輪を再発明する必要があります。


ありがとう。そして、私の質問に関して具体的に:たとえばjavajdkインストールを分離して再利用し、tomcatインストールでそれを再利用する方法は?それらが変数よりも分離されている場合、例えばpatからjavaddkはロールに「含まれる」必要があります。どこでも変数を変更せずに、tomcatインストールでこれをどのように処理しますか?変数の優先順位を使用するための共通の概念はありますか?そうですか?
MBushveld 2017年

私はansible galaxyをチェックし、jdkおよびtomcatロールをインストールします。使用できない場合を除き、自分でロールを作成することはありません。たとえば、github.com / silpion / ansibleansiblebit.oracle-java
030

Tomcatロールはテストしなかったことに注意してください。ローカルでtomcatロールをテストできます。それが機能しない場合は、galaxyの別のtomcatロールを使用できます。
030

1

短い答え:ここでプログラミングを行います。「機能別パッケージ」のようなプログラミング標準(クリーンコード)を検討し、再利用可能で役割の理由を表す役割を作成します。例えば

roles:
  - role: jdk
  - role: tomcat  
      (contains tasks with 'install tomcat', 'configure tomcat' ) 
      (requires jdk)
  - role: the_wepapp 
      (requires tomcat)

さらに:基になる役割、たとえばjdkはtomcatの役割などについて知ってはならない...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.