このリポジトリには、Cisco IOSXEスイッチにVLANを安全かつ冪等的に展開するためのAnsible Playbookが含まれています。
- 対象機器: Cisco IOS-XE スイッチ(2台: sw-access-01, sw-access-02)
- 目的: 複数のVLANを一括で追加・管理
- 主な機能:
- 設定の自動バックアップ
- 冪等性の保証(複数回実行しても安全)
- 詳細な検証とログ出力
- エラーハンドリングとロールバック準備
- Check modeによるドライラン対応
ansible-copilot/
├── inventories/
│ └── production/
│ ├── hosts.yml # インベントリファイル
│ └── group_vars/
│ ├── cisco_iosxe.yml # VLAN設定とグループ変数
│ └── vault.yml # 認証情報(暗号化推奨)
├── playbooks/
│ └── deploy_vlans.yml # メインPlaybook
├── backups/ # 設定バックアップ保存先(自動生成)
└── logs/ # ログファイル保存先(自動生成)
ansible-galaxy collection install cisco.iosinventories/production/group_vars/vault.ymlを編集し、実際の認証情報を設定してください:
ansible_user: "your_username"
ansible_password: "your_password"
ansible_become_password: "your_enable_password"ansible-vault encrypt inventories/production/group_vars/vault.ymlinventories/production/group_vars/cisco_iosxe.ymlで追加するVLANを設定:
vlans:
- vlan_id: 100
name: "production"
state: "active"
- vlan_id: 200
name: "development"
state: "active"
- vlan_id: 300
name: "management"
state: "active"inventories/production/hosts.ymlでスイッチのIPアドレスを設定:
sw-access-01:
ansible_host: 192.168.1.101 # 実際のIPアドレスに変更
sw-access-02:
ansible_host: 192.168.1.102 # 実際のIPアドレスに変更変更内容を事前確認するには、--checkフラグを使用します:
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --check --ask-vault-passansible-playbook -i inventories/production playbooks/deploy_vlans.yml --check --diff --ask-vault-passansible-playbook -i inventories/production playbooks/deploy_vlans.yml --ask-vault-pass# バックアップのみ
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --tags backup --ask-vault-pass
# 設定適用のみ(バックアップをスキップ)
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --tags configure --ask-vault-pass
# 検証のみ
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --tags verify --ask-vault-passansible-playbook -i inventories/production playbooks/deploy_vlans.yml --limit sw-access-01 --ask-vault-pass
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --limit sw-access-02 --ask-vault-pass# パスワードファイルを作成(権限に注意)
echo 'your_vault_password' > .vault_pass
chmod 600 .vault_pass
# ファイルを指定して実行
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --vault-password-file .vault_pass| タグ | 説明 |
|---|---|
setup |
事前チェックのみ実行 |
backup |
設定バックアップのみ実行 |
facts |
デバイス情報収集のみ |
configure |
VLAN設定適用のみ |
save |
設定保存のみ |
verify |
検証とログ出力のみ |
report |
最終レポート出力のみ |
- 場所:
./backups/ - 形式:
<ホスト名>_<タイムスタンプ>.cfg - 例:
sw-access-01_20251214T120530.cfg
- 場所:
./logs/ - 検証ログ:
<ホスト名>_vlan_verify_<タイムスタンプ>.log - エラーログ:
<ホスト名>_error_<タイムスタンプ>.log
このPlaybookは冪等性が保証されています。同じ設定で複数回実行しても:
- 初回実行: VLANが作成され、
changedステータスが返される - 2回目以降: VLANが既に存在する場合、変更なし(
okステータス)
確認方法:
# 1回目
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --ask-vault-pass
# 2回目(変更が無いことを確認)
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --ask-vault-pass# 接続テスト
ansible cisco_iosxe -i inventories/production -m ping --ask-vault-pass
# タイムアウトを延長
ansible-playbook -i inventories/production playbooks/deploy_vlans.yml --ask-vault-pass -e "ansible_command_timeout=60"# vault.ymlの内容を確認(復号化)
ansible-vault view inventories/production/group_vars/vault.yml
# vault.ymlを編集
ansible-vault edit inventories/production/group_vars/vault.ymlansible-playbook playbooks/deploy_vlans.yml --syntax-checkansible-lint playbooks/deploy_vlans.yml-
認証情報の保護
vault.ymlは必ず暗号化する.vault_passファイルは.gitignoreに追加- パスワードファイルの権限は
600に設定
-
変更管理
- 本番環境では必ず
--checkで事前確認 - メンテナンス時間内に実行
- バックアップの確認
- 本番環境では必ず
-
アクセス制御
- 最小権限の原則に従う
- enable パスワードを別途管理
問題が発生した場合は、以下を含めて報告してください:
- Ansibleバージョン (
ansible --version) - 実行したコマンド
- エラーメッセージ
- ログファイルの内容
このPlaybookはプロジェクト標準に従って作成されています。