netbox
はIPアドレスの管理*1やラック、サーバ等を管理*2するソフトウェアです。
環境
# cat /etc/centos-release CentOS Linux release 7.3.1611 (Core) # ansible --version ansible 2.2.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides
Roleのインストール
今回はansible-galaxy
を利用する方法を紹介します。
# ansible-galaxy install geerlingguy.repo-epel # ansible-galaxy install geerlingguy.postgresql # ansible-galaxy install geerlingguy.apache # ansible-galaxy install erkax.netbox
Playbookの編集
netbox-install.yml
- hosts: all become: true vars: netbox_allowed_hosts: "'{{ ansible_fqdn }}'" netbox_db_name: "netbox" netbox_db_user: "netbox" netbox_db_password: "password@netbox_db" netbox_secret_key: "01234567890abcdefghijklmnopqrstuvwxyzABCDEFGXYZ" netbox_from_email: "netbox@example.com" netbox_admin_password: "password@netbox" netbox_admin: "admin" netbox_admin_email: "admin.netbox@example.com" postgresql_databases: - name: netbox state: present postgresql_users: - name: "{{ netbox_db_user }}" password: "{{ netbox_db_password }}" db: "{{ netbox_db_name }}" role_attr_flags: NOSUPERUSER apache_vhosts_version: 2.4 apache_vhosts: - servername: "{{ ansible_fqdn }}" documentroot: "/var/www/html" extra_parameters: | Alias /static /opt/netbox/netbox/static <Directory /opt/netbox/netbox/static> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> ProxyPreserveHost On <Location /static> ProxyPass ! </Location> ProxyPass / http://127.0.0.1:8001/ ProxyPassReverse / http://127.0.0.1:8001/ roles: - { role: geerlingguy.repo-epel } - { role: geerlingguy.postgresql } - { role: geerlingguy.apache } - { role: erkax.netbox }
事前の作業
libsemanage-python
libsemanage-python が必要ですが、こちらのRoleではインストールされません。
事前にインストールします。
# yum install -y libsemanage-python
libsemanage-python
がインストールされていないと、Playbook実行時に以下のエラーが表示されます。
TASK [erkax.netbox : set httpd_can_network_connect selinux boolean] ************ fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "This module requires libsemanage-python support"}
apacheの設定
erkax.netbox
のサンプルに以下の設定を追加しています。
<Directory /opt/netbox/netbox/static> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory>
SELinux
netbox
のRoleでは、seboolean
モジュールのタスクが存在します。このとき、作業対象のホストでSELinux
が無効な状態であるとエラーになります。
以下のような感じで修正することができます。
--- /etc/ansible/roles/erkax.netbox/tasks/security.yml.orig +++ /etc/ansible/roles/erkax.netbox/tasks/security.yml @@ -16,9 +16,14 @@ setype=httpd_sys_rw_content_t tags: install, update #### +- name: selinux status + shell: getenforce + register: is_enabled_selinux + # allow httpd tagged process to connect to another server (proxy in this case) - name: set httpd_can_network_connect selinux boolean seboolean: name=httpd_can_network_connect state=yes persistent=yes + when: is_enabled_selinux == 'Enforcing' tags: install, update
Playbookの実行
# ansible-playbook -i localhost, -c local netbox-install.yml
スクリーンショット
ダッシュボード
ラック
デバイス
Aggregates (1)
Aggregates (2)
Prefix
API
以下のURLでAPIのドキュメントを確認できます。現時点では参照系のAPIが整備されていています。
http://<server>/api/docs/
$ curl http://<server>/api/dcim/manufacturers/ [{"id":1,"name":"APC","slug":"apc"},{"id":6,"name":"Arista","slug":"arista"},{"id":2,"name":"Cisco","slug":"cisco"},{"id":3,"name":"Dell","slug":"dell"},{"id":4,"name":"HP","slug":"hp"},{"id":5,"name":"Juniper","slug":"juniper"},{"id":7,"name":"Opengear","slug":"opengear"},{"id":8,"name":"Super Micro","slug":"super-micro"}]