AnsibleでのFortigate操作について、fortios_factsモジュールの出力について書いておきます。
Ansible関連の実践記事一覧はこちら。
目的
唯一の情報取得用のモジュールであるfortios_factsが出力できる内容を確認するため
環境
- ansible: 2.9.0
- Fortios: 6.0.6
- ansibleのコネクションプラグイン: local(fortiosapiライブラリ利用)
サンプルPlaybook
別のエントリにも書いてありますが、以下のように記載します。
---
- hosts: localhost
gather_facts: false
vars:
host: "10.254.254.254"
username: "admin"
password: "password"
vdom: "root"
ssl_verify: "no"
tasks:
- name: Get Facts.
fortios_facts:
host: "{{ host }}"
username: "{{ username }}"
password: "{{ password }}"
vdom: "{{ vdom }}"
ssl_verify: "{{ ssl_verify }}"
https: "yes"
gather_subset:
- fact: 'system_status_select'
register: getfact_result
- name: Debug
debug:
var: getfact_result
fortios_factsで利用可能な要素
利用可能な要素とその概要は以下の通りです。
要素名 |
概要 |
system_current-admins_select |
管理者ユーザがログインしたイベントのログ |
system_firmware_select |
利用可能なファームウェアの表示【未確認】 |
system_fortimanager_status |
fortimanagerとの接続ステータス【未確認】 |
system_ha-checksums_select |
HAのConfigチェックサム状態の表示【未確認】 |
system_interface_select |
インターフェースの状態やカウンタの表示 |
system_status_select |
用途不明… 【未確認】 |
system_time_select |
FW本体の時刻情報の取得 |
なにかしら変な値を入れたりすると、以下のようなエラーメッセージが表示され、利用できるのが以下の要素だというのがわかります。(公式のモジュール群説明にも、ソースにも書いてあります)
TASK [Get Facts.] ***********************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Subset must be one of [system_current-admins_select, system_firmware_select, system_fortimanager_status, system_ha-checksums_select, system_interface_select, system_status_select, system_time_select], got system_ha_select"}
system_current-admins_select
以下のように、unixtimeでイベントの発生タイミングとログインユーザ、現在のログイン状態などが表示されます。
実際のログはクリックして展開
ok: [localhost] => {
"getfact_result": {
"ansible_facts": {
"ansible_net_gather_network_resources": [],
"ansible_net_gather_subset": [],
"ansible_network_resources": {
"system_current-admins_select": {
"action": "select",
"build": 272,
"http_method": "GET",
"name": "current-admins",
"path": "system",
"results": [
{
"admin": "admin",
"disconnect_enabled": true,
"id": 31,
"is_current": false,
"method": "https",
"profile": "super_admin",
"srcaddr": "10.254.254.1",
"time": 1572681512
},
{
"admin": "admin",
"disconnect_enabled": true,
"id": 43,
"is_current": false,
"method": "http",
"profile": "super_admin",
"srcaddr": "10.254.254.1",
"time": 1572682842
},
(略)
],
"serial": "FGTxxxxxxxxxxxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
}
}
},
"changed": false,
"failed": false
}
}
インターネットから切り離して検証しているのですが、おそらくavailableというところに、オンラインでアップデート可能なファームの情報が出てくるのだと思います。
【12/22追記】別記事で実際にオンラインにしてファーム情報を取得してきましたので、そちらもご参照ください!
実際のログはクリックして展開
(冒頭は省略)
"system_firmware_select": {
"action": "select",
"build": 272,
"http_method": "GET",
"name": "firmware",
"path": "system",
"results": {
"available": [],
"current": {
"branch-point": 272,
"build": 272,
"id": "current",
"major": 6,
"minor": 0,
"name": "FortiOS",
"notes": "http://docs.fortinet.com/d/fortios-6.0.6-release-notes/download",
"patch": 6,
"platform-id": "FGT60D",
"release-type": "GA",
"source": "current",
"version": "v6.0.6"
}
},
"serial": "FGxxxxxxxxxxxxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
}
system_fortimanager_status
fortimanager使ってないのでどんな情報が出るのが正しいのかわかりません…
実際のログはクリックして展開
"system_fortimanager_status": {
"action": "status",
"build": 272,
"http_method": "GET",
"name": "fortimanager",
"path": "system",
"results": {}, # ここに何か出てくるはず…
"serial": "FGxxxxxxxxxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
},
system_ha-checksums_select
おそらく、HAを組んでいればHAを組んだ対抗同士の設定情報のリビジョン番号などが出るのかなと思いますが、1台しかないので確認できず…
【12/22追記】取得してみました。各パーティション毎の、自分自身と対抗側のチェックサムを表示してくれるようですね。
実際のログはクリックして展開
"system_ha-checksums_select": {
"action": "select",
"build": 303,
"http_method": "GET",
"name": "ha-checksums",
"path": "system",
"results": [
{
"checksum": {
"all": "8d840039e887d0ae71395107a396adb7",
"global": "2bdb9a96e1e3afe9870b15d4339c20b7",
"root": "a0f21470df97822589f0a2801dd9c915"
},
"is_manage_master": 1,
"is_root_master": 1,
"serial_no": "FGT60*******"
},
{
"checksum": {
"all": "8d840039e887d0ae71395107a396adb7",
"global": "2bdb9a96e1e3afe9870b15d4339c20b7",
"root": "a0f21470df97822589f0a2801dd9c915"
},
"is_manage_master": 0,
"is_root_master": 0,
"serial_no": "FGT60*******"
}
],
"revision": "149586697367309",
"serial": "FGT60D******", #アクセスした側のホストのSerial
"status": "success",
"vdom": "root",
"version": "v6.0.8"
}
system_interface_select
インターフェースのカウンタなどが表示されます。
…あれ?今気が付きましたが、スイッチモードになってるinternalのは表示されてませんね。インターフェース分離すれば個別のインターフェースになって表示されるんでしょうか…
実際のログはクリックして展開
"system_interface_select": {
"action": "select",
"build": 272,
"http_method": "GET",
"name": "interface",
"path": "system",
"results": {
"dmz": {
"alias": "",
"duplex": 1,
"id": "dmz",
"ip": "10.10.10.1",
"link": true,
"mac": "00:00:00:00:00:00",
"mask": 24,
"name": "dmz",
"rx_bytes": 3112840,
"rx_errors": 0,
"rx_packets": 5276,
"speed": 1000.0,
"tx_bytes": 240,
"tx_errors": 0,
"tx_packets": 4
},
"modem": {
(略)
},
"wan1": {
(略)
},
"wan2": {
(略)
}
},
"revision": "1572684445.19228",
"serial": "FGTxxxxxxxxxxxxxxxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
},
system_status_select
何が出るんだろう…
【12/22追記】HA組んでも表示されるものは変わりませんでした。うーん?
実際のログはクリックして展開
"system_status_select": {
"action": "select",
"build": 272,
"http_method": "GET",
"name": "status",
"path": "system",
"results": {}, #ここになにかでるはず…
"serial": "FGxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
},
system_time_select
本体の時刻の情報がUnixtime形式で取得できるようです。
実際のログはクリックして展開
"system_time_select": {
"action": "select",
"build": 272,
"http_method": "GET",
"name": "time",
"path": "system",
"results": {
"time": 1572684445
},
"serial": "FGTxxxxxx",
"status": "success",
"vdom": "root",
"version": "v6.0.6"
}
他の使いかた
複数要素を同時に出力させ、フィルターをかけることで該当する要素(ポート指定だけとか)もできるようです。
2019/11/6時点では未確認です。
感想
これだけしか取れないか‥‥という感想です(T_T)
現在の設定情報(アドレスオブジェクトやユーザオブジェクト、ポリシーなど)が取れないかと期待もしたのですが…
「現状の設定を確認」→「想定通りでなければ設定」のような処理を実装しようと思うと、fortiosモジュール単体では実現できず、自分で処理をくみ上げる必要がある、ということだと理解しました。
むう、実用化への道のりは長い…か…?