lae.netbox
以下は、あなたが提供したテキストの日本語翻訳です。
:role-author: lae :role-name: netbox :role: {role-author}.{role-name} :gh-name: {role-author}/ansible-role-{role-name} :netbox-version: 3.7.3 = {role} :toc: :toc-placement: preamble ifdef::env-github[] :tip-caption: :bulb: :warning-caption: :warning: endif::[]
ifdef::env-github[] image:https://img.shields.io/badge/role-{role}-blue?style=for-the-badge[Ansible Galaxy Role, link=https://galaxy.ansible.com/{role-author}/{role-name}] endif::env-github[]
この役割は、IPアドレス管理 (IPAM) とデータセンターインフラストラクチャ管理 (DCIM) ツールである https://github.com/netbox-community/netbox[NetBox] を展開し、設定します。
この役割は、リリースターボールまたはGitを使用して、アプリケーションサーバーとしてuWSGIを利用してNetBoxを独自の仮想環境内に展開します。
CentOS 7,8 / RHEL 9 / Debian 9,10,11,12 / Ubuntu 16, 18, 20 および 22をサポートしています。
この役割は、NetBoxのドキュメントのインストール手順とは若干異なります。主な違いは以下の通りです。
- supervisordの代わりにディストリビューション提供のsystemdを使用
- gunicornの代わりにuWSGIをアプリケーションサーバーとして使用
- NetBox/uWSGIサービスを強化(
templates/netbox.service.j2
を参照) - アップグレードや設定変更時にホットリロードが行われる
== クイックスタート
Ansibleがインストールされていて、デフォルト設定を使用している場合:
[source, bash, subs="attributes"]
ansible-galaxy install geerlingguy.postgresql davidwittman.redis {role} ansible-galaxy collection install community.postgresql ansible-playbook -i your.server.fqdn, ~/.ansible/roles/{role}/examples/playbook_single_host_deploy.yml -K
これにより、your.server.fqdn
にNetBoxとPostgreSQLが展開されます。完了するとポート80でアクセス可能になります。必要に応じて修正してください。詳細は下記をお読みください。
Vagrantを使用して、localhost:8080
でNetBoxを起動することもできます。
[source, bash, subs="attributes"]
ansible-galaxy install geerlingguy.postgresql davidwittman.redis {role} ansible-galaxy collection install community.postgresql cd ~/.ansible/roles/{role}/ vagrant up
== サポート・貢献
この役割に貢献したい場合は、DEVELOPING.md
を読んで、このリポジトリのワークフローと開発環境の設定に関する(任意の)指示を確認してください。この役割は、Travis CIでテストする際にlae.travis-lxc
役割を使用します。この定義はtests/
ディレクトリにあります。
ifeval::["{role-author}" == "lae"] サポートが必要な場合や、この役割に貢献したいが指導を求めたい場合は、@laeのDiscordサーバーで聞いてください:https://discord.gg/cjqr6Fg endif::[]
== 前提条件
=== PostgreSQL
この役割はPostgreSQLサーバーをセットアップしません(必要に応じてデータベースは作成します)。したがって、別途PostgreSQLサーバーをセットアップし、データベースユーザーを作成する必要があります。 「例のプレイブック」セクションを確認してください。
さらに、Ansible 2.10以上では、community.postgresql
コレクションをインストールする必要があるかもしれません。
これをプレイブックのrequirements.yml
ファイルに指定することをお勧めします。
例:
[source, yaml]
collections:
- name: community.postgresql version: 3.4.0
警告:NetBox v2.2.0以上は、最低でもPostgreSQL 9.4が必要ですが、これはあなたのディストリビューションのリポジトリにはないかもしれません。 このための役割を使用した方が良いでしょう。
=== Redis
この役割はRedisインスタンスを設定または管理しません。プレイブック内のpre_tasks
のタスクを介してredis-server
をインストールするか、
https://galaxy.ansible.com/davidwittman/redis[DavidWittman.redis]のようなRedisインストール役割を使用することをお勧めします。
警告:NetBox v2.9.0以上は、最低でもRedis 4.0が必要です。上記で提案された役割はデフォルトで2.8バージョンになるため、 役割変数内で新しいバージョンを指定するか、別の方法でRedis 4.0以上をデプロイしてください。
== 役割変数
ヒント:examples/
で、さまざまなシナリオのために作成できるプレイブックの例を確認してください。
警告:数個の役割変数は必須です。以下の太字の required を確認してください。
[source, yaml]
netbox_stable: false netbox_git: false
上記の変数のいずれかをtrue
に設定する必要があります。netbox_stable
は、GitHubからtarballリリースを抽出してデプロイするように役割に指示し、netbox_git
はNetBoxのgitリポジトリをクローンするように指示します - これらは相互排他的です。
[source, yaml, subs="attributes"]
netbox_stable_version: {netbox-version} netbox_stable_uri: "https://github.com/netbox-community/netbox/archive/v{{ netbox_stable_version }}.tar.gz"
これらは、特定のバージョンを指定(例えば、インクリメントすることでアップグレードをトリガー)したり、別の場所にあるtarballを使用してデプロイするように構成できます。 リリース内の何かを修正する必要がある場合や、ファイアウォールの背後でローカルにデプロイする場合に便利です。
[source, yaml]
netbox_git_version: develop netbox_git_uri: "https://github.com/netbox-community/netbox.git"
netbox_git_version
はgitリポジトリ内の有効なリファレンスのいずれかで指定できます。
netbox_git_uri
はオンプレミスのリポジトリやフォークに指向できます。
[source, yaml]
netbox_superuser_enabled: true netbox_superuser_username: admin #netbox_superuser_password: changeme netbox_superuser_email: admin@localhost netbox_superuser_create_token: false
これらの変数は、ローカルのスーパーユーザーアカウントを構成するために使用されます。作成したくない場合は無効にしてください(例えばLDAPを使用している場合 - ただし、この場合でもローカルのスーパーユーザーを持つことが有益な場合があります)。
有効にする場合は、スーパーユーザーのパスワードを設定することが必須です。この役割は、ユーザーが存在しない場合は新しいスーパーユーザーを作成し、スーパーユーザーでない場合や異なるメールまたはパスワードを持っている場合は既存のユーザーを変更します。(はい、パスワードを忘れた場合にスーパーユーザーのパスワードをリセットするためにこれを使用できます。)netbox_superuser_create_token
を使用して、
必要に応じてスーパーユーザー用のランダムなAPIトークンを生成できます。
[source, yaml]
netbox_database: netbox netbox_database_user: netbox #netbox_database_password: changeme #netbox_database_host: localhost netbox_database_port: 5432 #netbox_database_socket: /var/run/postgresql
UNIXソケットを介して通信するためにソケットディレクトリを設定するか、ホスト/パスワードを設定することが必須です(TCP/IPを使用するため)。 データベースを構成する際の詳細については、「例のプレイブック」セクションを参照してください。
これらはconfiguration.py
内のDATABASE
を構成するために使用されます。
[source, yaml]
netbox_database_conn_age: 300
データベース接続を単一のリクエストより長くオープンに保つために、netbox_database_conn_age
を好みの最大接続年齢(秒単位)に設定します。
通常、300秒(5分)がスタートするのに良い数字です。
[source, yaml]
netbox_database_maintenance: postgres
Postgresデータベースが、Netboxで設定されたユーザーに特定のテーブルへのアクセスのみを許可するように構成されている場合、接続確認に使用されるデフォルトデータベースを、デフォルトのpostgres
以外の異なるテーブルに置き換えるために、netbox_database_maintenance
を設定できます。
これは、デフォルトではすべてのpostgresデータベースに空のテーブルですが、一部の構成ではこのテーブルへのアクセスがブロックされることがあるため、別のテーブル(例えばnetbox_prod
)を代わりに使用します。
[source, yaml]
例の使用法、デフォルトは空の辞書
netbox_database_options: sslmode: require isolation_level: 3
他のPostgreSQLパラメータのキーワードを設定する必要がある場合は、ここでそれを行うことができます。
例えば、https://docs.djangoproject.com/en/3.1/ref/databases/#isolation-level[隔離レベル]などのケースでは、数値値を使用する必要があります:
psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE
の代わりに3
を使用します。
自分が本当に何をしているかわかっている場合のみ、ここに追加してください。
[source, yaml]
netbox_redis_host: 127.0.0.1 netbox_redis_port: 6379 netbox_redis_password: '' netbox_redis_database: 0 netbox_redis_default_timeout: 300 netbox_redis_ssl_enabled: false netbox_redis_insecure_skip_tls_verify: false
netbox_redis_cache_host: "{{ netbox_redis_host }}" netbox_redis_cache_port: "{{ netbox_redis_port }}" netbox_redis_cache_database: 1 netbox_redis_cache_password: "{{ netbox_redis_password }}" netbox_redis_cache_default_timeout: "{{ netbox_redis_default_timeout }}" netbox_redis_cache_ssl_enabled: "{{ netbox_redis_ssl_enabled }}" netbox_redis_cache_insecure_skip_tls_verify: "{{ netbox_redis_insecure_skip_tls_verify }}"
これは、configuration.py
内のREDIS
設定辞書を設定します。キャッシュデータベースをウェブフックデータベースから分けたい場合は、2番目の変数セットを使用してください。
[source, yaml]
netbox_redis_sentinels:
- { host: '192.168.0.1', port: '5000' },
- { host: '192.168.0.2', port: '5000' } netbox_redis_sentinel_service: 'netbox' netbox_redis_password: '' netbox_redis_database: 0 netbox_redis_default_timeout: 300 netbox_redis_ssl_enabled: false
netbox_redis_cache_sentinels: "{{ netbox_redis_sentinels }}" netbox_redis_cache_sentinel_service: "{{ netbox_redis_sentinel_service }}" netbox_redis_cache_database: 1 netbox_redis_cache_password: "{{ netbox_redis_password }}" netbox_redis_cache_default_timeout: "{{ netbox_redis_default_timeout }}" netbox_redis_cache_ssl_enabled: "{{ netbox_redis_ssl_enabled }}"
これを、複数のノードを持つセントラルアーキテクチャでRedisがインストールされている場合に使用します。キャッシュデータベースをウェブフックデータベースから分けたい場合は、2番目の変数セットを使用してください。
[source, yaml]
netbox_rqworker_processes: 1
システムdサービスによって開始されるリクエストキューのワーカー数を指定します。 デフォルトの1のままにしておくことができますが、大量のレポートやスクリプト、その他のバックグラウンドタスクがある場合は増やすことを検討してください。
[source, yaml]
netbox_config: #SECRET_KEY: ALLOWED_HOSTS: - localhost - 127.0.0.1 #NAPALM_USERNAME: #NAPALM_PASSWORD: MEDIA_ROOT: "{{ netbox_shared_path }}/media" REPORTS_ROOT: "{{ netbox_shared_path }}/reports" SCRIPTS_ROOT: "{{ netbox_shared_path }}/scripts"
これは、NetBoxのconfiguration.py
をテンプレート化するために使用される設定の辞書です。
http://netbox.readthedocs.io/en/stable/configuration/mandatory-settings/[必須設定]
および http://netbox.readthedocs.io/en/stable/configuration/optional-settings/[オプション設定]
NetBoxのドキュメントから詳細を確認し、このリポジトリ内のexamples/netbox_config.yml
もご覧ください。
ここでSECRET_KEY
を定義する必要はありません。この役割は、自動的に{{ netbox_shared_path }}/generated_secret_key
に1つを作成します。
その後、このファイルからSECRET_KEY
が読み取られ、次回の実行時まで保持されます。後でプレイブックでこれを設定することはできます。複数のNetBoxインスタンスを1つのロードバランサーの背後にデプロイする場合は、SECRET_KEY
を定義する必要があります。
この役割でNAPALM統合を有効にした場合も、ここでNAPALMの資格情報を設定する必要があります。
MEDIA_ROOT
/REPORTS_ROOT
/SCRIPTS_ROOT
は、NetBoxドキュメントでは必須ではありませんが、この役割では、アップグレード時にこれらのファイルが失われるのを防ぐために必須です(この役割はNetBoxをインプレースでアップグレードしません)。恒久的で、アップグレード時に失われないディレクトリに設定する必要があります(上記のデフォルトは問題なく使用できます)。この役割は、これらのディレクトリを作成し、netbox_user
で設定されたものへの所有権を変更しようとします。
[source, yaml]
netbox_scripts: [] netbox_reports: []
https://netbox.readthedocs.io/en/stable/additional-features/custom-scripts/[スクリプト]
および https://netbox.readthedocs.io/en/stable/additional-features/reports/[レポート]
NetBox内で使用するためにアップロードします。これらはsrc
属性を持つ辞書のリストで、スクリプトまたはレポートのローカルパスを指定し、name
属性でモジュール名(スクリプト/レポート名)を指定します。例:
[source, yaml]
例
netbox_scripts:
- src: netbox_scripts/migrate_application.py name: migrate_application netbox_reports:
- src: netbox_reports/devices.py name: devices
これにより、プレイブックディレクトリのnetbox_scripts/migrate_application.py
が{{ netbox_config.SCRIPTS_ROOT }}/migrate_application.py
にコピーされ、
netbox_reports/devices.py
は{{ netbox.config.REPORTS_ROOT }}/devices.py
にコピーされます。
[source, yaml]
netbox_pip_packages: []
例:
netbox_pip_packages:
- https://github.com/steffann/netbox-example-plugin.git
- netbox-topology-views
これは、NetBoxの仮想環境内にpip
でインストールする追加のパッケージのリストです。
pip
が理解できる有効なアーティファクトを指定できます。
ここにプラグインをリストする場合は、適切なプラグイン設定もnetbox_config
役割変数内に含めてください。詳細については、https://netbox.readthedocs.io/en/stable/plugins/[プラグイン]をお読みください。
[source, yaml]
netbox_user: netbox netbox_group: netbox netbox_home: /srv/netbox netbox_releases_path: "{{ netbox_home }}/releases" netbox_git_repo_path: "{{ netbox_releases_path }}/git-repo" netbox_git_deploy_path: "{{ netbox_releases_path }}/git-deploy" netbox_stable_path: "{{ netbox_releases_path }}/netbox-{{ netbox_stable_version }}" netbox_current_path: "{{ netbox_home }}/current" netbox_shared_path: "{{ netbox_home }}/shared"
これらは、アプリケーションユーザーおよびアプリケーションストレージの場所を変更するために変更できるすべてのデプロイメント詳細です。netbox_releases_path
は、これまでにデプロイしたすべてのNetBoxリリースを保存します。netbox_git_repo_path
はGitリポジトリがクローンされる場所で、触らない状態にする必要があります - netbox_git_deploy_path
は、netbox_git_version
を使用してgit archive
が抽出される場所です。
netbox_stable_path
はリリースターボールから抽出されたフォルダーです。netbox_current_path
は選択されたリリースにシンボリックリンクされ、NetBoxがインストールされている場所としてサービス/設定ファイルで使用されます。netbox_shared_path
は、設定ファイルやログなどの「共有」コンテンツを保存することを目的としています。
[source, yaml]
netbox_socket: "127.0.0.1:8000" netbox_protocol: http netbox_processes: "{{ ansible_processor_vcpus }}"
netbox_socket
は、uWSGIサービスがバインドするアドレスを定義し、有効な https://www.freedesktop.org/software/systemd/man/systemd.socket.html#ListenStream=[ListenStream]アドレスとして設定できます(systemdソケット)。`netbox_protocol`を`uwsgi`に設定すると、uWSGIがWSGIと通信します(たとえば、nginxをロードバランサーとして使用する場合)。`netbox_processes`は、uWSGIが要求を処理するために立ち上げるNetBoxワーカーの数を定義します。
[source, yaml]
netbox_application_log: "file:{{ netbox_shared_path }}/application.log" netbox_requests_log: "file:{{ netbox_shared_path }}/requests.log"
これにより、ログがどこに保存されるかが定義されます。外部のロギング機能を使用することも可能ですが、 http://uwsgi-docs.readthedocs.io/en/latest/Logging.html#pluggable-loggers[uWSGIがサポートする限り]。アプリケーションログは`logger`に、リクエストログは`req-logger`に対応します。
[source, yaml]
netbox_ldap_enabled: false netbox_ldap_config_template: netbox_ldap_config.py.j2
netbox_ldap_enabled
をtrue
に設定すると、NetBoxのLDAP認証を設定します。
netbox_ldap_config_template
は、テンプレートのパスで、デフォルトではAnsibleはプレイブックのtemplates/
ディレクトリ内を検索します。
examples/
内に例があります。また、netbox_config.REMOTE_AUTH_BACKEND
をnetbox.authentication.LDAPBackend
に設定する必要があります。
ヒント:デフォルトでは、ローカル(非LDAP)スーパーユーザーはこの役割によって作成されます。これが望ましくない場合は、netbox_superuser_enabled
をオフにすることを検討してください。
[source, yaml]
netbox_napalm_enabled: false netbox_napalm_packages:
- napalm
netbox_napalm_enabled
をオンにすると、NetBoxでNAPALM統合が有効になります。NAPALMを使用するには、netbox_config
変数にNAPALM_USERNAME
とNAPALM_PASSWORD
を定義する必要があります。netbox_napalm_packages
に追加のNAPALM Pythonライブラリをリストすることで追加できます(例:napalm-eos
)。
[source, yaml] netbox_metrics_enabled: false
netbox_metrics_enabled
をtrue
に設定すると、アプリケーションメトリクス(https://github.com/korfuri/django-prometheus[django-prometheusを介して])が有効になります。これにより、正しいメトリクス処理のための関連する設定が追加されます。
(https://netbox.readthedocs.io/en/stable/additional-features/prometheus-metrics/[詳細はこちら])。
[source, yaml]
netbox_metrics_dir: netbox_metrics netbox_metrics_path: "/run/{{ netbox_metrics_dir }}"
メトリクスファイルが保存されるディレクトリ名はnetbox_metrics_dir
で設定できます。ただし、netbox_metrics_path
はデフォルトのまま(上記のもの)にしておく必要があります。これはsystemd
およびRuntimeDirectory
パラメーター(このパラメーターは/run
のみを指す)で機能するためです。
[source, yaml] netbox_keep_uwsgi_updated: false
netbox_keep_uwsgi_updated
をtrue
に設定すると、uWSGIサーバーが最新のリリースであることを保証します。そうでない場合、uWSGIはプレイブックの次回の実行時には更新されません。
[source, yaml] netbox_uwsgi_options: {}
uwsgi.ini
に挿入する追加の設定オプションをここで指定します。これは、キー/バリューの辞書であることが期待されます(例:buffer-size: 65535
)。
[source, yaml] netbox_uwsgi_in_venv: false
netbox_uwsgi_in_venv
をtrue
に設定すると、uwsgi
はNetBoxと同じ仮想環境にインストールされます。
そうでない場合、使用されたPythonバージョンのライブラリパスにシステム全体にインストールされます(正常/レガシーの動作)。
警告:後のバージョンでは、これがデフォルトになる可能性があります(さらなるクロスプラットフォームテストの後に)。詳細は https://github.com/lae/ansible-role-netbox/issues/144[issue #144]で確認してください。
[source, yaml] netbox_install_epel: true
netbox_install_epel
をfalse
に設定すると、この役割がFedora EPELをインストールしないようになります。これは、企業の環境でシステムのリポジトリが企業によって管理/ミラーリングされている場合に便利です。
[source, yaml]
netbox_packages: [] netbox_python_packages: [] netbox_python_binary: /usr/bin/python{{ some version }} netbox_ldap_packages: []
これらの変数は、ターゲットディストリビューションに基づいて動的に生成されます。vars/
ディレクトリの下でこれらのデフォルトを確認できます。これらの変数を使用して、サポートされていないオペレーティングシステムをターゲットにするか(サポートを追加するためにPRをオープンすることもできます!)、デプロイに使用するカスタムPythonインタープリター(たとえば、PyPy)を指定できます。ただし、この役割によるサポートは、代替Pythonインストールに対しては制限される場合があります。
== 例のプレイブック
以下は、PostgreSQLをインストールし、@geerlingguyの堅牢なPostgres役割でユーザーを作成した後、デフォルトのnetboxデータベースユーザーを使用してPostgresサーバーと対話するためにローカルのUNIXソケットでNetBoxを展開および設定するプレイブックの例です。
[source, yaml, subs="attributes"]
- hosts: netbox.idolactiviti.es
become: yes
roles:
- geerlingguy.postgresql
- davidwittman.redis
- {role}
vars:
netbox_stable: true
netbox_database_socket: "{{ postgresql_unix_socket_directories[0] }}"
netbox_superuser_password: netbox
netbox_socket: "0.0.0.0:80"
netbox_config:
ALLOWED_HOSTS:
- netbox.idolactiviti.es MEDIA_ROOT: "{{ netbox_shared_path }}/media" REPORTS_ROOT: "{{ netbox_shared_path }}/reports" SCRIPTS_ROOT: "{{ netbox_shared_path }}/scripts" postgresql_users:
- name: "{{ netbox_database_user }}" role_attr_flags: CREATEDB,NOSUPERUSER redis_bind: 127.0.0.1 redis_version: 6.0.9 redis_checksum: sha256:dc2bdcf81c620e9f09cfd12e85d3bc631c897b2db7a55218fd8a65eaa37f86dd
CREATEDB
属性に注意してください。
netbox_prod_user
というユーザーが作成された状態で、すでに稼働中のPGサーバーがあると仮定し、このユーザーはnetbox_prod
というデータベースを所有し、NetBoxをインストールするホストがTCPで認証できるように許可しています:
[source, yaml, subs="attributes"]
- hosts: netbox.idolactiviti.es
become: yes
roles:
- davidwittman.redis
- {role}
vars:
netbox_stable: true
netbox_superuser_password: netbox
netbox_socket: "0.0.0.0:80"
netbox_config:
ALLOWED_HOSTS:
- "{{ inventory_hostname }}" MEDIA_ROOT: "{{ netbox_shared_path }}/media" REPORTS_ROOT: "{{ netbox_shared_path }}/reports" SCRIPTS_ROOT: "{{ netbox_shared_path }}/scripts" netbox_database_host: pg-netbox.idolactiviti.es netbox_database_port: 15432 netbox_database: netbox_prod netbox_database_user: netbox_prod_user netbox_database_password: "very_secure_password_for_prod" netbox_database_maintenance: netbox_prod redis_bind: 127.0.0.1 redis_version: 6.0.9 redis_checksum: sha256:dc2bdcf81c620e9f09cfd12e85d3bc631c897b2db7a55218fd8a65eaa37f86dd
examples/
ディレクトリを確認してください。
== トラブルシューティング
=== uWSGIによるTCP接続のリセット
netbox_protocol
がhttp
に設定されていると、uWSGIは奇妙な動作を示し、TCP接続をランダムにリセットする可能性があります。これは、APIを使用する際に「接続がリセットされました」といったエラーとして表れることがあります。影響を受ける場合は、netbox_protocol
をuwsgi
に切り替え、ロードバランサーを使用するか、次のようにnetbox_uwsgi_options
を調整してみてください。関連する議論については、https://github.com/lae/ansible-role-netbox/issues/130#issuecomment-847571006[this GitHub issue]を参照してください。
[source, yaml, subs="attributes"]
netbox_uwsgi_options: http-keepalive: "true" http-auto-chunked: "true" add-header: "Connection: Close"
これは、与えられたテキストの日本語へのわかりやすい翻訳です。何か他に知りたいことがあればお知らせください。
Installs and configures NetBox, a DCIM suite, in a production setting.
ansible-galaxy install lae.netbox