はじめに
- 当記事は、日常の運用業務(NW機器設定)の自動化により、運用コストの削減 および 運用品質の向上 を目標に
「Ansible」を使用し、様々なNW機器設定を自動化してみようと 試みた記事です。 - Ansibleは、OSS版(AWX)+OSS版(Ansible)を使用しております。
PaloAltoの「Objects-サービスグループ」の登録/変更/削除を実施してみた
事前設定
- Templateを作成し、インベントリーと認証情報を設定する。
- インベントリー:対象機器(ホスト)の接続先を設定。 ※ホストには以下変数で接続先IPを指定
ansible_host: xxx.xxx.xxx.xxx
- 認証情報:対象機器へのログイン情報(ユーザ名/パスワード)を設定。
ユーザ名は 変数:ansible_user に保持される パスワードは 変数:ansible_password に保持される
Playbook作成(YAML)
使用モジュール
- paloaltonetworks.panos.panos_service_group を使用。
※参考ページ:
Ansible Galaxy
接続情報(provider)の設定
- providerには、ip_address/username/password の指定が必要。
vars: provider: ip_address: '{{ ansible_host }}' ← インベントリーのホストで設定 username: '{{ ansible_user }}' ← 認証情報で設定 password: '{{ ansible_password }}' ← 認証情報で設定
Objects-サービスグループの登録 ※サービスグループの新規作成の場合
- 接続情報と サービスグループとサービスの関連付け を指定して登録(state: ‘present’)を行う。
- name: Present ServiceGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' ← サービスグループ value: 'test_service001' ← サービスグループに関連付けするサービス state: 'present' register: wk_result
- 実行結果:対象のサービスグループが登録された。 ※Ansibleの実行結果(diff)を抜粋
"before": "", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service001</member>\n\t</members>\n</entry>\n"
Objects-サービスグループの登録 ※サービスグループが既に存在する場合
-
- 接続情報と サービスグループとサービスの関連付け を指定して登録(state: ‘present’)を行う。 ※サービスグループが既に存在する場合は、既存設定の置き換えとなる(state: ‘replaced’と同様)
- name: Present AddressGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' ← サービスグループ value: 'test_service002' ← サービスグループに関連付けするサービス state: 'present' register: wk_result
実行結果:既存のサービスグループが上書き更新された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service001</member>\n\t</members>\n</entry>\n", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service002</member>\n\t</members>\n</entry>\n"
- 接続情報と サービスグループとサービスの関連付け を指定して登録(state: ‘present’)を行う。 ※サービスグループが既に存在する場合は、既存設定の置き換えとなる(state: ‘replaced’と同様)
Objects-サービスグループの変更 ※登録のつづき(新たなサービスを関連付けする)
- 接続情報と サービスグループとサービスの関連付け を指定して、サービスグループの変更(state: ‘replaced’)を行う。 ※replacedの場合は、既存設定の置き換えとなる (注意:関連付け後の状態を指定すること!!)
- name: Replaced AddressGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' value: ['test_service001','test_service003'] ← 関連付け後の状態を指定すること!! state: 'replaced' register: wk_result
- 実行結果:既存のサービスグループが上書き更新された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service002</member>\n\t</members>\n</entry>\n", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service001</member>\n\t\t<member>test_service003</member>\n\t</members>\n</entry>\n"
- 接続情報と サービスグループとサービスの関連付け を指定して、サービスグループの変更(state: ‘merged’)を行う。 ※mergedの場合は、既存設定を維持した更新(Append)となる。その為、特定サービスの関連付け解除はできない (注意:サービスの関連付け解除をしたい場合は state: ‘replaced’ を使用する必要がある!!)
- name: Merged AddressGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' value: 'test_service003' ← 関連付けしたいサービスのみ指定すること!! state: 'merged' register: wk_result
- 実行結果:既存のサービスグループが更新(Append)された。既存設定が維持されていることを確認。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service002</member>\n\t</members>\n</entry>\n", "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service002</member>\n\t\t<member>test_service003</member>\n\t</members>\n</entry>\n"
Objects-サービスグループの情報収集 ※変更のつづき
- 接続情報と サービスグループ を指定して情報収集(state: ‘gathered’)を行う。
- name: gathered AddressGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' state: 'gathered' register: wk_result
- 実行結果:対象サービスグループの情報が取得できた。 ※Ansibleの実行結果(gathered_xml)を抜粋
"gathered_xml": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service001</member>\n\t\t<member>test_service003</member>\n\t</members>\n</entry>\n"
Objects-サービスグループの削除 ※変更のつづき
- 接続情報と サービスグループと関連付いているサービス を指定して、削除(state: ‘absent’)を行う。 (注意:関連付いているサービスが削除されるのではなく、サービスグループが削除される!!)
- name: Absent AddressGroup1 paloaltonetworks.panos.panos_service_group: provider: '{{ provider }}' name: 'test_servicegroup001' ← サービスグループ ※サービスグループが削除される value: 'test_service003' ← サービスグループに関連付いているサービス ※指定の必要なし state: 'absent' register: wk_result
実行結果:対象のサービスグループが削除された。 ※Ansibleの実行結果(diff)を抜粋
"before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_servicegroup001\">\n\t<members>\n\t\t<member>test_service001</member>\n\t\t<member>test_service003</member>\n\t</members>\n</entry>\n", "after" : ""
最後に
- 「Ansible」の「paloaltonetworks.panos.panos_service_group」を使用し、「Objects-サービスグループ」の登録/変更/削除 および 情報収集ができたことは良かった。何らかの変更申請の仕組みと連携することで、より 設定変更の自動化 が活用できるようになると考える。
- 現状 設定情報がベタ書きで使い勝手が悪いので、今後 設定内容をINPUTする仕組みを試みたいと思います。
また、引続き 他にも様々なNW機器設定を自動化してみようと思います。