Cisco ACI を Ansible 2.4 で設定してみる
Cisco ACI から Ansible を操作する手順については Ansible (ACI) のページに記載がありました。 ですが、Ansible 2.4 以降は ACI 関連モジュールが Ansible に取り込まれた為、現在はこちらのページにアクセスしても以下の表示があるだけです。
THIS REPO HAS BEEN DEPRECATED. ALL MODULES CAN NOW BE FOUND IN ANSIBLE CORE 2.4.
Ansible Core に取り込まれたことにより、ACI 関連モジュールのドキュメントは Docs > Network Modules から参照出来るようになりました。 今回は Ansible を使って Cisco ACI を設定する手順をメモしておこうと思います。
検証環境¶
検証には以下を利用しました。
- Cisco ACI 3.0(1f)
- Ansible 2.4.0
サポートされているモジュール¶
現時点 (Ansible 2.4.0) では以下のモジュールがリリースされていました。
Module | Description |
---|---|
aci_aep | Manage attachable Access Entity Profile (AEP) on Cisco ACI fabrics (infra:AttEntityP) |
aci_ap | Manage top level Application Profile (AP) objects on Cisco ACI fabrics (fv:Ap) |
aci_bd | Manage Bridge Domains (BD) on Cisco ACI Fabrics (fv:BD) |
aci_bd_subnet | Manage Subnets on Cisco ACI fabrics (fv:Subnet) |
aci_bd_to_l3out | Bind Bridge Domain to L3 Out on Cisco ACI fabrics (fv:RsBDToOut) |
aci_config_rollback | Provides rollback and rollback preview functionality for Cisco ACI fabrics (config:ImportP) |
aci_config_snapshot | Manage Config Snapshots on Cisco ACI fabrics (config:Snapshot, config:ExportP) |
aci_contract | Manage contract resources on Cisco ACI fabrics (vz:BrCP) |
aci_contract_subject | Manage initial Contract Subjects on Cisco ACI fabrics (vz:Subj) |
aci_contract_subject_to_filter | Bind Contract Subjects to Filters on Cisco ACI fabrics (vz:RsSubjFiltAtt) |
aci_epg | Manage End Point Groups (EPG) on Cisco ACI fabrics (fv:AEPg) |
aci_epg_monitoring_policy | Manage monitoring policies on Cisco ACI fabrics (mon:EPGPol) |
aci_epg_to_contract | Bind EPGs to Contracts on Cisco ACI fabrics (fv:RsCons and fv:RsProv) |
aci_epg_to_domain | Bind EPGs to Domains on Cisco ACI fabrics (fv:RsDomAtt) |
aci_filter | Manages top level filter objects on Cisco ACI fabrics (vz:Filter) |
aci_filter_entry | Manage filter entries on Cisco ACI fabrics (vz:Entry) |
aci_intf_policy_fc | Manage Fibre Channel interface policies on Cisco ACI fabrics (fc:IfPol) |
aci_intf_policy_l2 | Manage Layer 2 interface policies on Cisco ACI fabrics (l2:IfPol) |
aci_intf_policy_lldp | Manage LLDP interface policies on Cisco ACI fabrics (lldp:IfPol) |
aci_intf_policy_mcp | Manage MCP interface policies on Cisco ACI fabrics (mcp:IfPol) |
aci_intf_policy_port_channel | Manage port channel interface policies on Cisco ACI fabrics (lacp:LagPol) |
aci_intf_policy_port_security | Manage port security on Cisco ACI fabrics (l2:PortSecurityPol) |
aci_l3out_route_tag_policy | Manage route tag policies on Cisco ACI fabrics (l3ext:RouteTagPol) |
aci_rest | Direct access to the Cisco APIC REST API |
aci_taboo_contract | Manage taboo contracts on Cisco ACI fabrics (vz:BrCP) |
aci_tenant | Manage tenants on Cisco ACI fabrics (fv:Tenant) |
aci_tenant_action_rule_profile | Manage action rule profiles on Cisco ACI fabrics (rtctrl:AttrP) |
aci_tenant_ep_retention_policy | Manage End Point (EP) retention protocol policies on Cisco ACI fabrics (fv:EpRetPol) |
aci_tenant_span_dst_group | Manage SPAN destination groups on Cisco ACI fabrics (span:DestGrp) |
aci_tenant_span_src_group | Manage SPAN source groups on Cisco ACI fabrics (span:SrcGrp) |
aci_tenant_span_src_group_to_dst_group | Manage SPAN source group to destination group bindings on Cisco ACI fabrics (span:SpanLbl) |
aci_vrf | Manage VRF (private networks aka. contexts) on Cisco ACI fabrics (fv:Ctx) |
Ansible 2.4 環境を用意する¶
Ansible Core に統合された ACI のネットワークモジュールを利用しますので、何れかの手段で Ansible 2.4 環境を用意します。 「pip
でインストールする」「Docker イメージを使う」等が簡単だと思います。 ソースコードからインストールしても良いですが、少し手間なので今回は省略しました。
- pip でインストールする
- Docker イメージを使う
pip でインストールする¶
pip
が使えるのであれば、殆どの場合は簡単にインストール出来ると思います。 現時点では 2.4.0 がインストールされました。
1 |
|
Docker イメージを使う¶
先日、Ansible 2.4 の Docker イメージを作ったので、これを使います。
1 |
|
Playbook 等を用意する¶
Ansible 2.4 環境が用意出来たら Playbook や hosts
ファイルを用意します。
hosts¶
hosts
ファイルは以下の内容で作成しました。 今回はあくまで検証 なので、ユーザ名とパスワードは平文でべた書きしました。
1 2 3 4 5 6 |
|
Playbook¶
続いて Playbook を用意します。 今回は common
テナントに複数の Filter
を作成する、というサンプルにします。 具体的には以下の Filter
を作成します。 あくまでテストなので「Ansible によって作成された」ことが明確に分かるよう、Filter
名の先頭には「Ansible_」を付与しています。
- Ansible_DNS
- 53/UDP
- Ansible_ICMP
- ICMPv4
- Ansible_SSH
- 22/TCP
- Ansible_WEB
- 80/TCP
- 443/TCP
具体的な Playbook の内容は以下の通りです。 今回は playbook.yml
というファイル名にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|
Playbook を dry-run してみる¶
hosts
と Playbook が用意出来たら (実際の設定変更はせずに) 仮実行してみます。 所謂、dry-run です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
エラーが発生することも無く、完了しました。
Playbook を実行する¶
dry-run が上手くいったので、いよいよ実行 (設定変更) してみます。 以下のように実行します。
1 |
|
実際の実行例は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
作成された Filter¶
作成された Filter を Web UI から確認すると以下のように表示されました。