AnsibleでCiscoのIOSへの設定サンプル
必要なもの
- Ansibleがインストールされている管理サーバ(ここではubuntu)
- ネットワーク接続が可能なCisco IOS機器
- SSH経由でCisco機器にアクセスするための認証情報
Cisco機器の設定(SSHパスワード認証の場合)
Cisco機器にAnsibleユーザを追加/確認
TestRouter(config)#username miwapinn privilege 15 secret miwapinn
TestRouter(config)#line vty 0 15
TestRouter(config-line)#transport input ssh
TestRouter#sh run | i user
miwapinn privilege 15 secret 5 $1$xxxxxx5z9FrlrhBLHCxxxxxxxxx
TestRouter#
Ansible管理ノードの設定
インベントリファイルの作成: Cisco機器のIPアドレスや接続情報を記載したインベントリファイルを作成する。
inventory.ini
[cisco_devices]
cisco_router ansible_host=192.168.0.150 ansible_user=miwapinn ansible_ssh_pass=xxxx ansible_network_os=ios ansible_connection=network_cli
Playbookの作成: Cisco機器の設定バックアップを取得し、特定の設定を変更するためのPlaybookを作成する。
cisco_backup_and_configure.yml
---
- name: Backup and Configure Cisco IOS
hosts: cisco_devices
gather_facts: no
tasks:
- name: Backup Cisco Config
ios_config:
backup: yes
register: backup_cisco_config
- name: Print the backup file location
debug:
msg: "The backup file is located at {{ backup_cisco_config.backup_path }}"
- name: Configure Cisco device
ios_config:
lines:
- no ip http server
- no ip http secure-server
save_when: changed
このPlaybookは、最初にCisco機器の現在の設定をバックアップし、次にHTTPサーバーとHTTPSサーバーを無効にする設定を適用するシナリオ。変更があった場合には設定を保存する。
Playbookの実行
Playbookを実行
ansible-playbook -i inventory.ini cisco_backup_and_configure.yml
このコマンドは、inventory.ini
に記載されたCisco機器に対してcisco_backup_and_configure.yml
Playbookを実行する。
Ansibleノードディレクトリ構成の例
ガイドラインによると、一般的に以下のような構成で作成することで拡張性を保つ
ディレクトリ構成例
ansible-project/
├── inventory/
│ ├── production.ini
│ └── staging.ini
├── group_vars/
│ ├── group1.yml
│ └── group2.yml
├── host_vars/
│ ├── hostname1.yml
│ └── hostname2.yml
├── roles/
│ ├── common/
│ │ ├── tasks/
│ │ ├── handlers/
│ │ ├── templates/
│ │ ├── files/
│ │ ├── vars/
│ │ └── defaults/
│ ├── role1/
│ └── role2/
├── playbooks/
│ ├── setup.yml
│ └── deploy.yml
└── ansible.cfg
-
inventory/: 環境ごとのインベントリファイル、例えば
production.ini
やstaging.ini
など、異なる環境でのデプロイを区別するために使用 -
group_vars/: グループごとの変数を定義するファイル
-
host_vars/: ホストごとの変数を定義するファイル
-
roles/: 再利用可能な単位である役割。各ロールは特定のタスクを実行
- tasks/: ロールによって実行されるタスク
- handlers/: タスクの実行によってトリガーされるハンドラー(例: サービスの再起動など)
- templates/: Jinja2テンプレートファイルを保持、設定ファイルなどを動的に生成する。
- files/: タスクで使用される静的ファイル
- vars/: ロール内で使用される変数を定義
- defaults/: ロールのデフォルト変数を定義
-
playbooks/: 実行ファイル
-
ansible.cfg: Ansibleの設定ファイルで、デフォルトの設定を上書きし、固有の設定を定義する