Ansibleを使用してNW機器設定を自動化する(PaloAlto-アドレスグループ編①)

はじめに

  • 当記事は、日常の運用業務(NW機器設定)の自動化により、運用コストの削減 および 運用品質の向上 を目標に
    「Ansible」を使用し、様々なNW機器設定を自動化してみようと 試みた記事です。
  • Ansibleは、OSS版(AWX)+OSS版(Ansible)を使用しております。

 

PaloAltoの「Objects-アドレスグループ」の登録/変更/削除を実施してみた

事前設定

  • Templateを作成し、インベントリーと認証情報を設定する。
  • インベントリー:対象機器(ホスト)の接続先を設定。 ※ホストには以下変数で接続先IPを指定
    ansible_host: xxx.xxx.xxx.xxx
  • 認証情報:対象機器へのログイン情報(ユーザ名/パスワード)を設定。
    ユーザ名は  変数:ansible_user   に保持される
    パスワードは 変数:ansible_password に保持される

 

Playbook作成(YAML)

使用モジュール

 

接続情報(provider)の設定
  • providerには、ip_address/username/password の指定が必要。
    vars:
      provider:
        ip_address: '{{ ansible_host }}'   ← インベントリーのホストで設定
        username: '{{ ansible_user }}'    ← 認証情報で設定
        password: '{{ ansible_password }}'  ← 認証情報で設定

 

Objects-アドレスグループの登録 ※アドレスグループの新規作成の場合
  • 接続情報と アドレスグループとアドレスの関連付け を指定して登録(state: ‘present’)を行う。
    - name: Present AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'   ← アドレスグループ
        static_value: 'test_address001'  ← アドレスグループに関連付けするアドレス
        state: 'present'
      register: wk_result
  • 実行結果:対象のアドレスグループが登録された。 ※Ansibleの実行結果(diff)を抜粋
    "before": "",
    "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address001</member>\n\t</static>\n</entry>\n"
 
Objects-アドレスグループの登録 ※アドレスグループが既に存在する場合
  • 接続情報と アドレスグループとアドレスの関連付け を指定して登録(state: ‘present’)を行う。 ※アドレスグループが既に存在する場合は、既存設定の置き換えとなる(state: ‘replaced’と同様) 
    - name: Present AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'   ← アドレスグループ
        static_value: 'test_address002'  ← アドレスグループに関連付けするアドレス
        state: 'present'
      register: wk_result
  • 実行結果:既存のアドレスグループが上書き更新された。 ※Ansibleの実行結果(diff)を抜粋
    "before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address001</member>\n\t</static>\n</entry>\n",
    "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address002</member>\n\t</static>\n</entry>\n"

 

Objects-アドレスグループの変更 ※登録のつづき(新たなアドレスを関連付けする)
  • 接続情報と アドレスグループとアドレスの関連付け を指定して、アドレスグループの変更(state: ‘replaced’)を行う。 ※replacedの場合は、既存設定の置き換えとなる (注意:関連付け後の状態を指定すること!!)
    - name: Replaced AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'
        static_value: ['test_address001','test_address003'] ← 関連付け後の状態を指定すること!!
        state: 'replaced'
      register: wk_result
  • 実行結果:既存のアドレスグループが上書き更新された。 ※Ansibleの実行結果(diff)を抜粋
    "before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address002</member>\n\t</static>\n</entry>\n",
    "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address001</member>\n\t\t<member>test_address003</member>\n\t</static>\n</entry>\n"
 
  • 接続情報と アドレスグループとアドレスの関連付け を指定して、アドレスグループの変更(state: ‘merged’)を行う。 ※mergedの場合は、既存設定を維持した更新(Append)となる。その為、特定アドレスの関連付け解除はできない (注意:アドレスの関連付け解除をしたい場合は state: ‘replaced’ を使用する必要がある!!) 
    - name: Merged AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'
        static_value: 'test_address003' ← 関連付けしたいアドレスのみ指定すること!!
        state: 'merged'
      register: wk_result
  • 実行結果:既存のアドレスグループが更新(Append)された。既存設定が維持されていることを確認。 ※Ansibleの実行結果(diff)を抜粋
    "before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address002</member>\n\t</static>\n</entry>\n",
    "after" : "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address002</member>\n\t\t<member>test_address003</member>\n\t</static>\n</entry>\n"
 
Objects-アドレスグループの情報収集 ※変更のつづき
  • 接続情報と アドレスグループ を指定して情報収集(state: ‘gathered’)を行う。
    - name: gathered AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'
        state: 'gathered'
      register: wk_result
  • 実行結果:対象アドレスグループの情報が取得できた。 ※Ansibleの実行結果(gathered_xml)を抜粋
    "gathered_xml": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address001</member>\n\t\t<member>test_address003</member>\n\t</static>\n</entry>\n"

 

Objects-アドレスグループの削除 ※変更のつづき
  • 接続情報と アドレスグループと関連付いているアドレス を指定して、削除(state: ‘absent’)を行う。 (注意:関連付いているアドレスが削除されるのではなく、アドレスグループが削除される!!) 
    - name: Absent AddressGroup1
      paloaltonetworks.panos.panos_address_group:
        provider: '{{ provider }}'
        name: 'test_addressgroup001'   ← アドレスグループ ※アドレスグループが削除される
        static_value: 'test_address003'  ← アドレスグループに関連付いているアドレス ※指定の必要なし
        state: 'absent'
      register: wk_result
  • 実行結果:対象のアドレスグループが削除された。 ※Ansibleの実行結果(diff)を抜粋
    "before": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<entry name=\"test_addressgroup001\">\n\t<static>\n\t\t<member>test_address001</member>\n\t\t<member>test_address003</member>\n\t</static>\n</entry>\n",
    "after" : ""
 

最後に

  • 「Ansible」の「paloaltonetworks.panos.panos_address_group」を使用し、「Objects-アドレスグループ」の登録/変更/削除 および 情報収集ができたことは良かった。何らかの変更申請の仕組みと連携することで、より 設定変更の自動化 が活用できるようになると考える。
  • 現状 設定情報がベタ書きで使い勝手が悪いので、今後 設定内容をINPUTする仕組みを試みたいと思います。
    また、引続き 他にも様々なNW機器設定を自動化してみようと思います。
タイトルとURLをコピーしました