Ansibleで増加するポート番号を確定的かつ再現可能に割り当てる方法は?


12

Ansibleは初めてですが、特定の環境でセットアップするサービスに対応する一連のプレイブックを維持する必要があります。それらにはポート、証明書などを割り当てる必要があります。これにより、本質的に常に同じ名前のリストとそれらへの割り当てを含む多くのファイルが作成されます。

多くの場合、service_nameを変数として簡単に再利用できると思いますが、IP、ポート、またはその他の数値識別子にマッピングするとき、再現可能な方法でそれらに異なる番号を決定論的に割り当てる方法をまだ理解していません。新しいサービスが追加されても同じです。SQLiteデータベースを使用してサービスを保存し、IDから値を生成することを検討しましたが、Ansibleと統合する方法がわかりません。

増加するポート番号を割り当てることは、まったく新しいことではないと思います。これは、日常的に多くのシステム管理者が行うことなので、そのための方法がいくつか必要です。

編集:次のgroup_vars/all.ymlようにポート番号などを直接追加します。

ports:
    service1:1024
    service2:1025
    service3:1026

追加の刑務所(BSD)を作成し、実行されるロールに依存するため、インベントリは自動的に生成されます。


2
とにかくサービスをインベントリに追加する必要があるので、特定のポート番号を手動で追加するのを止めているのは何ですか?または、インベントリが自動的に生成される場合、おそらくインベントリ生成レベルで問題を解決する必要があります
SztupY

いくつかのAnsibleスニペットを含めますか?group_vars変数を使用しているか、インベントリファイルに直接追加しているかは明確ではありません。また、インベントリがどのように生成されているかも明確ではありません。
ウッドランドハンター

HashiCorpの領事などのサービス検出ツールの使用を検討しましたか?
Foghorn CTO 2017

回答:


5

免責事項:私はAnsibleを使用していません。

私がやろうとしていることは、ランダムな「予測可能な」数を使用することです。Ansible docによると、乱数ジェネレータをシードできます:

Ansibleバージョン2.3以降、シードから乱数ジェネレーターを初期化することもできます。このようにして、ランダムでべき等数を作成できます。

"{{59 | random(seed = inventory_hostname)}} * * * * root / script / from / cron"

したがって、ポート番号の場合(私は特権がないと思います)、次のような変数を使用します。

port="{{ 32767 |random(start=1024,seed=service_name) }}"

最大32767で、クライアントが開始したポートとの衝突を回避します(理由については、一時ポートを参照してください)。


それは私が考えた良い考えですが、それは増加する部分を不可能にします。特定のポート範囲で論理的に関連する特定のサービスを持つことは、おそらく非常に望ましいことです。
2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.