pierky.arouteserver
ansible-role-arouteserver
ARouteServerをインストールし、設定するための役割。
説明
この役割は...
ARouteServerとbgpq4をインストールします。
ローカルの一般ポリシー定義ファイル(
general.yml
ファイル)をコピーするか、ベストプラクティスと提案に基づいてファイルを構築します。ローカルのクライアントリスト(
clients.yml
ファイル)をコピーするか、IX-F メンバーエクスポートJSONファイルからインポートします(IXP-Managerによってエクスポートされたファイルなど)。最終的に実際のルートサーバーにプッシュできるルートサーバー設定ファイルを構築します。
注意してください:これは実際のルートサーバーホストを設定するものではなく、ARouteServerが実行されるホストのみを設定します。
実際のルートサーバーホストは、役割がそれらを見つけることができるように、arouteserver_managed_routeservers
グループの一部である必要があります。
この役割のほとんどの動作は、以下に文書化されている変数を使用して設定できます。
インストール
ARouteServerは、制御マシン上でPyPIからpip
を使用してインストールされます。ansible変数arouteserver_upgrade
がtrue
に設定されている場合(デフォルトはfalse
)、pip
に--upgrade
引数が渡され、インストールのアップグレードが可能です。
役割のtemplates/config
ディレクトリ内のローカルファイルは、ARouteServerのディレクトリにコピーされます(Jinja2テンプレートがサポートされています)。
一般ポリシー(general.yml
)
一般ポリシーはローカルファイルからコピーすることもできます(Jinja2テンプレートがサポートされています)し、ベストプラクティスと提案に基づいて構築することもできます。
各ルートサーバーホストのためにgeneral.yml
ファイルが作成されます。ルートサーバーの詳細(ASN、ルーターID、BGPデーモン)はホスト自体の変数から収集されます。
クライアントリスト(clients.yml
)
クライアントのリストは、ローカルファイルからコピーすることも、HTTP/HTTPS経由でフェッチできるIX-FメンバーエクスポートJSONファイルからインポートすることもできます。
変更があった場合、ルートサーバーの設定ファイルの構築もトリガーされます。
ルートサーバー設定ファイルの構築
ルートサーバー設定ファイルはARouteServerのディレクトリに保存されます。その名前は次のスキーマに従っています:<hostname>-[bird4|bird6|openbgpd].cfg
。
設定ファイルが変更されると、外部ハンドラが通知されます(設定されている場合)。
タグ
configure_policy
:設定されている場合、一般ポリシー定義ファイル(general.yml
)のみが構築されます。configure_clients
:設定されている場合、クライアントのリストのみが更新されます。変更があった場合、設定ファイルの構築もトリガーされます。build_rs_config
:設定されている場合、ルートサーバー設定ファイルのみが構築されます。
要件
特に要件はありません。
役割の変数
この役割で使用される変数は、トピックごとにグループ化されて以下にリストされています。
パッケージのインストール
(オプション)
arouteserver_local_package_file
:設定されている場合、指定したローカルパスのパッケージを使用してARouteServerをインストールします。そうでない場合、PyPIから最新バージョンが取得されてインストールされます(デフォルト)。(オプション)
arouteserver_upgrade
:true
に設定されると、PIPに--upgrade
を渡し、arouteserver
Pythonパッケージの選択的なアップグレードを有効にします。
ルートサーバー設定:一般ポリシー(general.yml
)
- (オプション)
arouteserver_general_cfg_file
:ARouteServerを設定するために使用されるgeneral.yml
ファイルのローカルパスをこの変数に設定します(Jinja2テンプレートを使用することもできます)。設定されていない場合は、configure
コマンドを使用して、ベストプラクティスと推奨設定を利用してポリシー定義ファイルを設定します(デフォルト)。
ルートサーバー設定:クライアントリスト(clients.yml
)
次の3つの変数のいずれかが必要です:
arouteserver_clients_cfg_file
:clients.yml
ファイルのローカルパス。arouteserver_clients_from_euroix_file
:ルートサーバークライアントのリストをインポートするために使用されるEuro-IXメンバーリストファイルのローカルパス。arouteserver_clients_from_euroix_url
:ルートサーバークライアントのリストをインポートするために使用されるEuro-IXメンバーリストのURL。このURLを使用してIXP-ManagerとARouteServerを統合し、クライアントリストを取得できます。(Euro-IXインポートを使用する場合は必須)
arouteserver_clients_from_euroix_ixp_id
:Euro-IXメンバーリストファイル内で参照されるIXPのID。(オプション)
arouteserver_clients_from_euroix_extra_args
:clients-from-euroix
コマンドで使用される追加の引数。例:--merge-from-peeringdb as-set max-prefix --vlan-id 123
。
ルートサーバーのカスタマイズ:サイト固有のカスタム設定ファイル
変数arouteserver_local_files_dir
とarouteserver_use_local_files
を設定して、ARouteServerにローカルカスタムファイルへのポインタを渡すことができます。これは--use-local-files
コマンドラインオプションを通じて行われます。
ルートサーバー操作:RFC8326による優雅なシャットダウン
変数arouteserver_perform_graceful_shutdown
が設定されている場合、ARouteServerは優雅なシャットダウンオプションを有効にした次の設定を構築します。これにより、メンテナンスイベント中に一時的にトラフィックを排出します。
優雅なシャットダウン操作の性質上、この変数を永続的にtrue
に設定するのではなく、メンテナンスを行う際のみにランタイム時に渡すことが推奨されます。
他の役割との統合
- (オプション)
arouteserver_notify_on_rs_change
:設定されている場合、ルートサーバーの設定ファイルが更新されたときにこのハンドラに通知します。
ディレクトリ構成
役割のコンポーネントをインストールするために使用されるディレクトリとパス。デフォルト値は以下の通り:
arouteserver_venv_dir
:~/.virtualenvs/arouteserver
。arouteserver_bin
:{{arouteserver_venv_dir}}/bin/arouteserver
。arouteserver_dir
:~/arouteserver
。arouteserver_var
:~/arouteserver_var
。bgpq4_dir
:~/bgpq4
。
ホスト変数名
以下の変数は、ルートサーバーホストからの情報を収集するために使用されるホスト変数の名前を定義します。
例えば、arouteserver_varname_rs_asn
(デフォルトでrs_asn
)で参照される変数は、ルートサーバーホストで定義され、ルートサーバーのASNを含んでいる必要があります。
arouteserver_varname_rs_asn
:rs_asn
、ルートサーバーのASN。例:64496
。arouteserver_varname_daemon
:daemon
、ホストで使用されるBGPデーモン。bird
またはopenbgpd
のいずれか。arouteserver_varname_daemon_version
:daemon_version
、BGPデーモンのバージョン。例:1.6.3
。arouteserver_varname_router_id
:router_id
、ホストのルーターID。例:192.0.2.1
。arouteserver_varname_local_networks
:local_networks
、IXPによって使用されるローカルネットワークのカンマ区切りリスト(ルートサーバーがIXPの自身のプレフィックスに対するアナウンスを拒否できるようにフィルタを構築するために必要)。例:192.0.2.0/24,2001:db8::/32
。
arouteserver_varname_daemon
とarouteserver_varname_daemon_version
で参照される変数(デフォルトではそれぞれdaemon
とdaemon_version
)に設定される値は、ARouteServerでサポートされているデーモンとそのバージョンのいずれかで設定する必要があります。
これらは、ツールを実行する際のメインコマンドと--target-version
引数を設定するために使用されます:
arouteserver <daemon> --target-version <daemon_version>
ヘルプコマンドarouteserver --help
およびarouteserver <daemon> --help
を使用して、現在サポートされている値のリストを取得できます。
依存関係
ルートサーバーを表すホストは、arouteserver_managed_routeservers
グループの一部である必要があります。
ホスト変数名セクションで報告された名前で参照される変数は、各ルートサーバーホストで設定される必要があります(またはgroup_var
から継承)。
Example Playbookセクションを参考にしてください。
例プレイブック
hostsファイル:
[arouteserver_hosts]
172.17.0.2 # ARouteServerをインストールし
# ルートサーバー設定ファイルを構築するホスト。
[arouteserver_managed_routeservers]
rs1 # ルートサーバーが実行されるホスト。
rs2
group_vars/arouteserver_managed_routeserversファイル:
rs_asn: 64496
local_networks:
- 192.0.2.0/24
- 2001:db8::/32
host_vars/rs1ファイル:
daemon: bird
daemon_version: 1.6.3
router_id: 192.0.2.1
host_vars/rs2ファイル:
daemon: openbgpd
daemon_version: 6.2
router_id: 192.0.2.2
site.ymlファイル:
---
- hosts: arouteserver_hosts
gather_facts: False
vars:
arouteserver_clients_from_euroix_url: "http://ixp-manager.example.com/api/v4/member-export/ixf/0.6?apikey=123456"
routeserver_clients_from_euroix_ixp_id: 1
roles:
- ansible-role-arouteserver
$ ansible-playbook -i hosts site.yml
ライセンス
GPLv3
著者情報
Pier Carlo Chiodi - https://pierky.com
ブログ: https://blog.pierky.com Twitter: @pierky
An Ansible role for installing ARouteServer.
ansible-galaxy install pierky.arouteserver