1

不可能な世界では、在庫を処理する方法が多すぎるようで、私たちは厳しい質問に直面していたようです。スケーラブルで柔軟な方法で複数の環境で在庫を管理するにはどうすればよいですか?

現在、プロダクション、ステージング、テスト、ローカル(ローカルホスト)の4つの公式のターゲット環境があります。これは、ルートにある単一のinventory.ini内のすべてのホストのグループです。

ほとんどすべてのインフラストラクチャがAWS上で実行されていますが、唯一の例外は、ローカルホストまたはローカルVM上でローカル環境を実行している開発者がいることです。それでも、他のすべての非個人環境はAWS上にあります。

一部のスタッフは、一度にすべてを偶発的に実行することを避けるため、これを環境ごとに異なるインベントリに分割したいと考えているスタッフもいます。私はこれがメンテナンスコストを増加させ、おそらくAnsible Tower、SemamphoreまたはRunDeckのようなツールで作業するのが難しくなると少しは心配しています。私はまた、ec2のダイナミックな在庫に切り替えることで、分割を少なくします。

  • どのように私は、特定の環境に向けた具体的なコンポーネントをデプロイします:ここで

    は、最適な設定でaddresedする必要があるいくつかの質問がありますか?

  • プロダクションやステージングに影響を与えずにプレイブックをテストするにはどうすればよいですか?
  • 彼は「ホスト:値」としてどのようなデフォルト値を維持する必要があり、我々はどのように我々はでインフラストラクチャ全体(複数のインベントリに対して何かを展開することができ、複数のファイル
  • を使用する場合は、デフォルトの在庫がどうあるべきか私たちのプレイブック
  • 内部同じ時間)
+1

私の答えにかかわらず、私はターゲット環境は何もプレイブックに関連しないと思う。それは常にあなたがexpliciteを提供すべき付加的な情報でなければなりません。 –

答えて

1

私はそれが動的な在庫の時間だと思います。同様の問題に直面しました.3つの環境と1つのインベントリファイルを展開する環境がありました。データベース(MongoDBの場合)にすべてのホストを格納し、動的リストを作成してホストリストを作成することで解決しました。環境の選択は、誰かが実稼働環境(uid/gidベース)に配備されるのを避けるため、在庫の中に少しの論理がありました(uid/gidベース)のようなものを呼び出す前にenv変数を追加することによって行いました 質問に答えるには:あなたはグループがこれは完全にあなたが管理することを選択した方法によって異なり

  • (prod|dev|staging)_<hostgroup>
  • 、これを行うのenv変数とダイナミックな在庫を使用し、別のインベントリファイル、または単一のインベントリを使用して名前を付けるには、いくつかの方法を使用することができます

    • インベントリ
    • - hosts:のデフォルト値はありません。あなたは正しい目録から必要です。
    • デフォルトはあなたが決めるものに依存しますが、デフォルトではプロダクションを使用しないと言います。最も安全なものではなく、おそらくデフォルトとしてdevを使用しますか?
    • ちょうど-i inventory_dir/を使用してください。 -iにディレクトリを渡すことができます。誰でもすべてのファイルを読み込み、すべての-xファイルを実行します。
    +0

    ありがとうございました。それでも、私が完全に理解していないことはほとんどありません。環境変数を使用するときに異なるインベントリを持つ理由は何ですか?インベントリ自体の内部でグループを介して環境を割り当てるのはなぜですか?プレイブック内のホストのデフォルト値については、ちょっと奇妙なことに、私の本能は、そこにグループを指定するように指示します。このグループは、このプレイブックが適用されるすべてのホストを含​​みます。私は本当に、誰がどのホストに適用するかを知っている人間によって実行可能であると仮定する考え方が嫌いです、これはファイルの中にあるべきです。 – sorin

    +0

    すみませんでした。私は動的インベントリでenv変数を使用しましたが、私の場合、env varを読み込み、それに基づいてデータベースからホストを選択するPythonスクリプト(もちろんホストグループ)でした。動的インベントリまたはenv varを使用したくない場合は、複数のインベントリを使用します。私は、あなたがデフォルト値の部分で何を意味するかをかなり得ていませんでした。 – shaps

    1

    あなたがAWS上にいるときは、動的インベントリを使用します。

    AWSなどにはありません。だから私は残念なことに、タグなどで派手なAPIを持っていないこの場合、各環境のインベントリが最適なソリューションです。このインベントリでは、単純なホストグループを使用しています。

    インベントリファイルがsubfoderに格納されています。在庫/ prod.ini

    [mysql] 
    db-server.prod.domain 
    
    [web] 
    app-1-server.prod.domain 
    app-2-server.prod.domain 
    

    プレイブックを基を介して組織化されています。だから、私はすべてのデータベース用のmysql.ymlのプレイブックとウェブサーバー用のweb.ymlのプレイブックを持っています。 main.ymlプレイブックに含まれていて、それらを特定の順序でフル実行するよう調整することができます。

    include mysql.yml 
    include web.yml 
    

    これは最高の解決策ではないかもしれませんが、それは機能し、すべてのチームメンバーに説明するのは簡単です。私は環境変数の考え方が気に入っていますが、私の意見では、単純ではあるが実用的な解決策を取ってはいけません。間違った環境への偶発的なロールアウトがなくても、このスキーマを今月使用しています。

    私は、あなたがantやそれに類するもののようなタスクランナーでこれを包むことができる任意の環境に対して、より多くのマジックや簡単なコマンドが必要です。

    関連する問題