Ansible もくもく会に参加してきた。
今年の1月に開催された Network Automation with Ansibleの場や、
他の勉強会の時に、もくもく会はそこまでハードルは高くないと伺い、もくもく会への参加を決意。
自分と同じように行きづらい雰囲気を感じている人がいるのなら、
少しでもハードルを下げられる記事になれればと思います。
会場は、AP Communicationsさん。
こんな感じでした。
"Engineer Driven"、かっこいい。
Ansibleもくもく会とは
自分のペースでAnsibleに触れる場。
もくもくする前に自問してみた
▶︎ 今回、もくもく会で得たい事
・Ansibleの環境構築含め、やりたい事が実現できるようにスキルを身につけたい。
・自社の業務環境でAnsible使って、改善できないかな。(むしろ、やってやる。)
・上記の環境構築の相談ができたらしたい。
もくもく開始前のアナウンス
▶︎ アップデート
Ansibleユーザ会が1年前に比べ、約1,000人くらい増加。
ユーザ会では、経験談などをシェアできる場も提供している。
TrelloでAnsibleの持ち込み企画も募集している。
▶︎ 直近のイベント
・5/31 Ansible night in Osaka
・6/13 Ansibleもくもく会 in Red Hat
もくもくしてみた
Gitに上げられた教材を使っても良いし、他にやりたい事があればそっちをやっても良い。
https://github.com/network-automation/linklight/blob/master/exercises/networking_v2/README.ja.md
▶︎ 構成情報

▶︎ 教材

もくもく会は初参加だった為、ドリル的な感覚で、教材を上から舐めてみた。
下記は実際に自分がやった内容を一部貼り付けています。
教材と内容が重複する形になるので、細かい説明は教材を確認してください。
Section 01 - Ansibleを用いたネットワーク機器からのデータ取集
▶︎ Exercise 1.0 - Anisbleのlab環境を確認してみよう
Ansible.cfgの中身を確認
[student24@ansible networking-workshop]$ cat ~/.ansible.cfg
[defaults]
stdout_callback = yaml
connection = smart
timeout = 60
deprecation_warnings = False
host_key_checking = False
retry_files_enabled = False
inventory = /home/student24/networking-workshop/lab_inventory/hosts
[persistent_connection]
connect_timeout = 60
command_timeout = 60
[student24@ansible networking-workshop]$
Inventoryファイルの中身を確認
- Ansibleで使用する定義を確認する
[student24@ansible networking-workshop]$ cat ~/networking-workshop/lab_inventory/hosts
[all:vars]
ansible_ssh_private_key_file=/home/student24/.ssh/aws-private.pem
[routers:children]
cisco
[cisco]
rtr1 ansible_host=35.172.190.244 private_ip=172.16.172.61
rtr2 ansible_host=54.175.227.150 private_ip=172.17.175.108
rtr3 ansible_host=3.90.179.255 private_ip=172.16.184.46
rtr4 ansible_host=54.82.90.77 private_ip=172.17.55.218
[cisco:vars]
ansible_user=ec2-user
ansible_network_os=ios
ansible_connection=network_cli
[dc1]
rtr1
rtr3
[dc2]
rtr2
rtr4
[hosts]
host1 ansible_host=54.163.12.44 ansible_user=ec2-user private_ip=172.17.153.76
[control]
ansible ansible_host=3.83.231.68 ansible_user=student24 private_ip=172.16.33.116
[student24@ansible networking-workshop]$
▶︎ Exercise 1.1 - 初めてのplaybookを書いてみよう
gather_ios_data.ymlを作成
- ios_factsモジュールを使う
[student24@ansible networking-workshop]$ vim gather_ios_data.yml
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:
作成したPlaybook ”gather_ios_data.yml” 実行
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml
PLAY [GATHER INFORMATION FROM ROUTERS] *****************************************
TASK [GATHER ROUTER FACTS] *****************************************************
ok: [rtr4]
ok: [rtr3]
ok: [rtr1]
ok: [rtr2]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0
[student24@ansible networking-workshop]$
TASKにて全てのルータにて反映された事を確認。
-vをつけてPlaybookを実行する事で、実際の実行結果を確認できる。
今回は、rtr1のみ実行結果を表示。他のルータは省略。
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml -v
Using /home/student24/.ansible.cfg as config file
PLAY [GATHER INFORMATION FROM ROUTERS] *****************************************
TASK [GATHER ROUTER FACTS] *****************************************************
ok: [rtr3] => changed=false
ansible_facts:
ansible_net_all_ipv4_addresses:
- 10.100.100.3
・
・
・
ok: [rtr1] => changed=false
ansible_facts:
ansible_net_all_ipv4_addresses:
- 192.168.35.101
- 172.16.172.61
- 192.168.1.101
- 10.1.1.101
- 10.200.200.1
- 10.100.100.1
- 10.255.0.254
ansible_net_all_ipv6_addresses: []
ansible_net_filesystems:
- 'bootflash:'
ansible_net_filesystems_info:
'bootflash:':
spacefree_kb: 6881148
spacetotal_kb: 7712284
ansible_net_gather_subset:
- hardware
- default
- interfaces
ansible_net_hostname: rtr1
ansible_net_image: boot:packages.conf
ansible_net_interfaces:
GigabitEthernet1:
bandwidth: 1000000
description: null
duplex: Full
ipv4:
- address: 172.16.172.61
subnet: '16'
lineprotocol: 'up '
macaddress: 0ae8.0c21.1954
mediatype: Virtual
mtu: 1500
operstatus: up
type: CSR vNIC
Loopback0:
bandwidth: 8000000
description: null
duplex: null
ipv4:
- address: 192.168.1.101
subnet: '24'
lineprotocol: 'up '
macaddress: null
mediatype: null
mtu: 1514
operstatus: up
type: null
Loopback1:
bandwidth: 8000000
description: null
duplex: null
ipv4:
- address: 10.1.1.101
subnet: '24'
lineprotocol: 'up '
macaddress: null
mediatype: null
mtu: 1514
operstatus: up
type: null
Tunnel0:
bandwidth: 100
description: null
duplex: null
ipv4:
- address: 10.100.100.1
subnet: '24'
lineprotocol: 'up '
macaddress: null
mediatype: null
mtu: 9976
operstatus: up
type: null
Tunnel1:
bandwidth: 100
description: null
duplex: null
ipv4:
- address: 10.200.200.1
subnet: '24'
lineprotocol: 'up '
macaddress: null
mediatype: null
mtu: 9976
operstatus: up
type: null
Tunnel2:
bandwidth: 100
description: null
duplex: null
ipv4:
- address: 10.255.0.254
subnet: '24'
lineprotocol: 'up '
macaddress: null
mediatype: null
mtu: 9972
operstatus: up
type: null
VirtualPortGroup0:
bandwidth: 750000
description: null
duplex: null
ipv4:
- address: 192.168.35.101
subnet: '24'
lineprotocol: 'up '
macaddress: 001e.e6ae.75bd
mediatype: null
mtu: 1500
operstatus: up
type: Virtual Port Group
ansible_net_memfree_mb: 1873821
ansible_net_memtotal_mb: 2169814
ansible_net_model: CSR1000V
ansible_net_serialnum: 9IJ6CG5FV5L
ansible_net_version: 16.10.01b
ok: [rtr2] => changed=false
ansible_facts:
ansible_net_all_ipv4_addresses:
- 192.168.35.101
・
・
・
ok: [rtr4] => changed=false
ansible_facts:
ansible_net_all_ipv4_addresses:
- 10.101.101.4
・
・
・
ansible_net_model: CSR1000V
ansible_net_serialnum: 9VCVJK8PRGW
ansible_net_version: 16.10.01b
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0
[student24@ansible networking-workshop]$
Playbook “gather_ios_data.yml” に2つのタスク(IOSのVersion確認とSerial Nummber確認)と、debugモジュールを追加
[student24@ansible networking-workshop]$ vim gather_ios_data.yml
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:
- name: DISPLAY VERSION
debug:
msg: "The IOS version is: {{ ansible_net_version }}"
- name: DISPLAY SERIAL NUMBER
debug:
msg: "The serial number is:{{ ansible_net_serialnum }}"
Playbook “gather_ios_data.yml” の実行
- オプションの-vを使わず、ネットワーク機器のバージョンとシリアル番号の収集が結果として返ってくる
タスクが3つとも完了している事を確認
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml
PLAY [GATHER INFORMATION FROM ROUTERS] *****************************************
TASK [GATHER ROUTER FACTS] *****************************************************
ok: [rtr1]
ok: [rtr3]
ok: [rtr2]
ok: [rtr4]
TASK [DISPLAY VERSION] *********************************************************
ok: [rtr2] =>
msg: 'The IOS version is: 16.10.01b'
ok: [rtr1] =>
msg: 'The IOS version is: 16.10.01b'
ok: [rtr4] =>
msg: 'The IOS version is: 16.10.01b'
ok: [rtr3] =>
msg: 'The IOS version is: 16.10.01b'
TASK [DISPLAY SERIAL NUMBER] ***************************************************
ok: [rtr3] =>
msg: The serial number is:9S0KV8XIOT8
ok: [rtr1] =>
msg: The serial number is:9IJ6CG5FV5L
ok: [rtr4] =>
msg: The serial number is:9VCVJK8PRGW
ok: [rtr2] =>
msg: The serial number is:9VVVYS8CAML
PLAY RECAP *********************************************************************
rtr1 : ok=3 changed=0 unreachable=0 failed=0
rtr2 : ok=3 changed=0 unreachable=0 failed=0
rtr3 : ok=3 changed=0 unreachable=0 failed=0
rtr4 : ok=3 changed=0 unreachable=0 failed=0
[student24@ansible networking-workshop]$
▶︎ Exercise 1.2 - Moduleのドキュメントの確認方法、 出力結果の登録方法、 tagの使い方
ios_commandモジュールの利用
- 手動オペレーションと同様にshowコマンドの実行結果を取得する事ができる。
・show runからホスト名を取得
・IFのbrief情報を取得
[student24@ansible networking-workshop]$ vim gather_ios_data.yml
---
- name: GATHER INFORMATION FROM ROUTERS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: GATHER ROUTER FACTS
ios_facts:
- name: DISPLAY VERSION
debug:
msg: "The IOS version is: {{ ansible_net_version }}"
- name: DISPLAY SERIAL NUMBER
debug:
msg: "The serial number is:{{ ansible_net_serialnum }}"
- name: COLLECT OUTPUT OF SHOW COMMANDS
ios_command:
commands:
- show run | i hostname
- show ip interface brief
tags: show
再度、Playbook “gather_ios_data.yml” を実行
- タグで限定的に情報を引っ掛けてくることもできる。
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml --tags=show -v
Using /home/student24/.ansible.cfg as config file
PLAY [GATHER INFORMATION FROM ROUTERS] *****************************************
TASK [COLLECT OUTPUT OF SHOW COMMANDS] *****************************************
ok: [rtr2] => changed=false
stdout:
- hostname rtr2
- |-
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.17.175.108 YES DHCP up up
Loopback0 192.168.2.102 YES manual up up
Loopback1 10.2.2.102 YES manual up up
Tunnel0 10.101.101.2 YES manual up up
Tunnel1 10.200.200.2 YES manual up up
VirtualPortGroup0 192.168.35.101 YES TFTP up up
stdout_lines: <omitted>
ok: [rtr1] => changed=false
stdout:
- hostname rtr1
- |-
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.16.172.61 YES DHCP up up
Loopback0 192.168.1.101 YES manual up up
Loopback1 10.1.1.101 YES manual up up
Tunnel0 10.100.100.1 YES manual up up
Tunnel1 10.200.200.1 YES manual up up
Tunnel2 10.255.0.254 YES manual up up
VirtualPortGroup0 192.168.35.101 YES TFTP up up
stdout_lines: <omitted>
ok: [rtr4] => changed=false
stdout:
- hostname rtr4
- |-
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.17.55.218 YES DHCP up up
Loopback0 192.168.4.104 YES manual up up
Loopback1 10.4.4.104 YES manual up up
Tunnel0 10.101.101.4 YES manual up up
VirtualPortGroup0 192.168.35.101 YES TFTP up up
stdout_lines: <omitted>
ok: [rtr3] => changed=false
stdout:
- hostname rtr3
- |-
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.16.184.46 YES DHCP up up
Loopback0 192.168.3.103 YES manual up up
Loopback1 10.3.3.103 YES manual up up
Tunnel0 10.100.100.3 YES manual up up
VirtualPortGroup0 192.168.35.101 YES TFTP up up
stdout_lines: <omitted>
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0
[student24@ansible networking-workshop]$
Section 02 - Ansibleを用いたコンフィグ・バックアップ・リストアの実践
▶︎ Exercise 2.0 - Routerのコンフィグを更新してみよう
今度はPlaybook “router_config.yml” を作成
- ios_configモジュールを使い、以下のconfigを追加するよう記載
・snmp-server community ansible-public RO
・snmp-server community ansible-private RW
[student24@ansible networking-workshop]$ vim router_configs.yml
---
- name: SNMP RO/RW STRING CONFIGURATION
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
Playbook “router_configs.yml” を実行
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml
実際にRouter rtr1のconfigに設定が入った事を確認
rtr1#show running-config | include snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
rtr1#
secure_router.cfgを作成
[student24@ansible networking-workshop]$ vim secure_router.cfg
line con 0
exec-timeout 5 0
line vty 0 4
exec-timeout 5 0
transport input ssh
ip ssh time-out 60
ip ssh authentication-retries 5
service password-encryption
service tcp-keepalives-in
service tcp-keepalives-out
Playbook “router_configs.yml” にHARDEN IOS ROUTERSを追加
[student24@ansible networking-workshop]$ vim router_configs.yml
---
- name: UPDATE THE SNMP RO/RW STRINGS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT
ios_config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
- name: HARDEN IOS ROUTERS
hosts: cisco
gather_facts: no
connection: network_cli
tasks:
- name: ENSURE THAT ROUTERS ARE SECURE
ios_config:
src: secure_router.cfg
Playbook “router_config.yml” 実行前のRouter rtr1 config
rtr1#show running-config | include line
line con 0
line vty 0 4
rtr1#
rtr1#show running-config | include ssh
ip ssh rsa keypair-name ssh-key
ip ssh version 2
ip ssh pubkey-chain
key-hash ssh-rsa 2998C6AEB4C6351B5E0D2A894F084D99 ec2-user
transport input ssh
rtr1#
rtr1#show running-config | include service
service timestamps debug datetime msec
service timestamps log datetime msec
service call-home
rtr1#
Playbok ”router_config.yml” 実行
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml
PLAY [SNMP RO/RW STRING CONFIGURATION] *****************************************
TASK [ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT] ************************
ok: [rtr1]
ok: [rtr3]
ok: [rtr2]
ok: [rtr4]
PLAY [HARDEN IOS ROUTERS] ******************************************************
TASK [ENSURE THAT ROUTERS ARE SECURE] ******************************************
changed: [rtr1]
changed: [rtr3]
changed: [rtr4]
changed: [rtr2]
PLAY RECAP *********************************************************************
rtr1 : ok=2 changed=1 unreachable=0 failed=0
rtr2 : ok=2 changed=1 unreachable=0 failed=0
rtr3 : ok=2 changed=1 unreachable=0 failed=0
rtr4 : ok=2 changed=1 unreachable=0 failed=0
[student24@ansible networking-workshop]$
実行結果をRouter rtr1 にて確認
rtr1#
rtr1#show running-config | include line
line con 0
line vty 0 4
rtr1#show running-config | include service
service tcp-keepalives-in
service tcp-keepalives-out
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
service call-home
rtr1#
rtr1#
rtr1#show running-config | include ssh
ip ssh time-out 60
ip ssh authentication-retries 5
ip ssh rsa keypair-name ssh-key
ip ssh version 2
ip ssh pubkey-chain
key-hash ssh-rsa 2998C6AEB4C6351B5E0D2A894F084D99 ec2-user
transport input ssh
rtr1#
▶︎ Exercise 2.1 - Routerのコンフィグをバックアップしてみよう
Playbook “backup.yml”を作成
- Ciscoルータの設定をバックアップするためのプレイブックを作成。ios_configモジュールを使う。
[student24@ansible networking-workshop]$ vim backup.yml
---
- name: BACKUP ROUTER CONFIGURATIONS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: BACKUP THE CONFIG
ios_config:
backup: yes
register: config_output
Playbook ”backup.yml” を実行
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts backup.yml
PLAY [BACKUP ROUTER CONFIGURATIONS] ********************************************
TASK [BACKUP THE CONFIG] *******************************************************
ok: [rtr2]
ok: [rtr1]
ok: [rtr3]
ok: [rtr4]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0
rtr2 : ok=1 changed=0 unreachable=0 failed=0
rtr3 : ok=1 changed=0 unreachable=0 failed=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0
[student24@ansible networking-workshop]$
backupというディレクトリ作成できた事を確認
[student24@ansible networking-workshop]$ ls -l backup
合計 36
-rw-rw-r--. 1 student24 student24 8801 5月 14 11:35 rtr1_config.2019-05-14@11:35:53
-rw-rw-r--. 1 student24 student24 8083 5月 14 11:35 rtr2_config.2019-05-14@11:35:53
-rw-rw-r--. 1 student24 student24 7536 5月 14 11:35 rtr3_config.2019-05-14@11:35:53
-rw-rw-r--. 1 student24 student24 7544 5月 14 11:35 rtr4_config.2019-05-14@11:35:53
[student24@ansible networking-workshop]$
[student24@ansible networking-workshop]$ ls
README.ja.md backup.yml lab_inventory secure_router.cfg
README.md exercises parsers templates
backup gather_ios_data.yml router_configs.yml
[student24@ansible networking-workshop]$
Playbook ”backup.yml” にcopyモジュールを追加
[student24@ansible networking-workshop]$ vim backup.yml
---
- name: BACKUP ROUTER CONFIGURATIONS
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: BACKUP THE CONFIG
ios_config:
backup: yes
register: config_output
- name: RENAME BACKUP
copy:
src: "{{config_output.backup_path}}"
dest: "./backup/{{inventory_hostname}}.config"
再度Playbook ”backup.yml” を実行
student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts backup.yml
PLAY [BACKUP ROUTER CONFIGURATIONS] ********************************************
TASK [BACKUP THE CONFIG] *******************************************************
ok: [rtr1]
ok: [rtr2]
ok: [rtr3]
ok: [rtr4]
TASK [RENAME BACKUP] ***********************************************************
changed: [rtr3]
changed: [rtr4]
changed: [rtr1]
changed: [rtr2]
PLAY RECAP *********************************************************************
rtr1 : ok=2 changed=1 unreachable=0 failed=0
rtr2 : ok=2 changed=1 unreachable=0 failed=0
rtr3 : ok=2 changed=1 unreachable=0 failed=0
rtr4 : ok=2 changed=1 unreachable=0 failed=0
[student24@ansible networking-workshop]$
別のバックアップされたコンフィグファイルが保存された事を確認
[student24@ansible networking-workshop]$ ls -l backup
合計 72
-rw-rw-r--. 1 student24 student24 8801 5月 14 11:41 rtr1.config
-rw-rw-r--. 1 student24 student24 8801 5月 14 11:41 rtr1_config.2019-05-14@11:41:22
-rw-rw-r--. 1 student24 student24 8083 5月 14 11:41 rtr2.config
-rw-rw-r--. 1 student24 student24 8083 5月 14 11:41 rtr2_config.2019-05-14@11:41:22
-rw-rw-r--. 1 student24 student24 7536 5月 14 11:41 rtr3.config
-rw-rw-r--. 1 student24 student24 7536 5月 14 11:41 rtr3_config.2019-05-14@11:41:22
-rw-rw-r--. 1 student24 student24 7544 5月 14 11:41 rtr4.config
-rw-rw-r--. 1 student24 student24 7544 5月 14 11:41 rtr4_config.2019-05-14@11:41:23
[student24@ansible networking-workshop]$
▶︎ Exercise 2.2 - バックアップしたコンフィグでRouterをリストアしてみよう
バックアップファイルが、backupディレクトリに格納されている事を確認。
[student24@ansible networking-workshop]$ tree backup
backup
├── rtr1.config
├── rtr1_config.2019-05-14@11:45:08
├── rtr2.config
├── rtr2_config.2019-05-14@11:45:08
├── rtr3.config
├── rtr3_config.2019-05-14@11:45:09
├── rtr4.config
└── rtr4_config.2019-05-14@11:45:09
0 directories, 8 files
[student24@ansible networking-workshop]$
ルータrtr1に、loopback 101を作成
rtr1#show running-config interface loopback 101
Building configuration...
Current configuration : 67 bytes
!
interface Loopback101
ip address 169.1.1.1 255.255.255.255
end
rtr1#
Playbook “resore_config.yml”を実行。(一部失敗)
student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts resore_config.yml
PLAY [RESTORE CONFIGURATION] ***************************************************
TASK [COPY RUNNING CONFIG TO ROUTER] *******************************************
changed: [rtr1]
・
・
・
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0
rtr2 : ok=0 changed=0 unreachable=0 failed=1
rtr3 : ok=0 changed=0 unreachable=0 failed=1
rtr4 : ok=0 changed=0 unreachable=0 failed=1
[student24@ansible networking-workshop]$
Router rtr1にてファイルがコピーされた事を確認
rtr1#dir
Directory of bootflash:/
11 drwx 16384 Jan 31 2019 20:11:12 +00:00 lost+found
12 -rw- 407131164 Jan 31 2019 20:12:39 +00:00 csr1000v-mono-universalk9.16.10.01b.SPA.pkg
13 -rw- 41893330 Jan 31 2019 20:12:40 +00:00 csr1000v-rpboot.16.10.01b.SPA.pkg
14 -rw- 1967 Jan 31 2019 20:12:40 +00:00 packages.conf
105665 drwx 4096 May 13 2019 08:54:12 +00:00 .installer
48769 drwx 4096 May 13 2019 08:54:11 +00:00 core
15 -rw- 128 May 13 2019 08:54:04 +00:00 iid_check.log
203201 drwx 4096 May 13 2019 08:54:05 +00:00 .prst_sync
32513 drwx 4096 May 13 2019 08:54:11 +00:00 .rollback_timer
40641 drwx 8192 May 14 2019 11:54:32 +00:00 tracelogs
65025 drwx 4096 May 13 2019 08:55:34 +00:00 .dbpersist
138177 drwx 4096 May 13 2019 08:54:20 +00:00 virtual-instance
16 -rw- 30 May 13 2019 08:55:11 +00:00 throughput_monitor_params
17 -rw- 6078 May 13 2019 08:55:32 +00:00 cvac.log
18 -rw- 1 May 13 2019 08:55:21 +00:00 .cvac_version
19 -rw- 16 May 13 2019 08:55:21 +00:00 ovf-env.xml.md5
20 -rw- 209 May 13 2019 08:55:21 +00:00 csrlxc-cfg.log
170689 drwx 4096 May 13 2019 08:55:21 +00:00 onep
398273 drwx 4096 May 14 2019 10:58:45 +00:00 syslog
414529 drwx 4096 May 13 2019 08:55:48 +00:00 iox
21 -rw- 8740 May 14 2019 11:53:53 +00:00 rtr1.config
7897378816 bytes total (7046279168 bytes free)
rtr1#
rtr1#
rtr1#show clo
*11:57:52.110 UTC Tue May 14 2019
rtr1#
Playbook “resore_config.yml”に新しいTaskを追加
[student24@ansible networking-workshop]$ vim resore_config.yml
---
- name: RESTORE CONFIGURATION
hosts: cisco
connection: network_cli
gather_facts: no
tasks:
- name: COPY RUNNING CONFIG TO ROUTER
command: scp ./backup/{{inventory_hostname}}.config {{inventory_hostname}}:/{{inventory_hostname}}.config
- name: CONFIG REPLACE
ios_command:
commands:
- config replace flash:{{inventory_hostname}}.config force
Playbook “resore_config.yml”を実行(一部実行失敗)
[student24@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts resore_config.yml
PLAY [RESTORE CONFIGURATION] ***************************************************
TASK [COPY RUNNING CONFIG TO ROUTER] *******************************************
changed: [rtr2]
changed: [rtr1]
・
・
・
TASK [CONFIG REPLACE] **********************************************************
ok: [rtr1]
ok: [rtr2]
PLAY RECAP *********************************************************************
rtr1 : ok=2 changed=1 unreachable=0 failed=0
rtr2 : ok=2 changed=1 unreachable=0 failed=0
rtr3 : ok=0 changed=0 unreachable=0 failed=1
rtr4 : ok=0 changed=0 unreachable=0 failed=1
[student24@ansible networking-workshop]$
バックアップファイルを使い、
先ほど、Router rtr1にて作成したloopback 101が削除されている事を確認
rtr1#sh ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.16.172.61 YES DHCP up up
Loopback0 192.168.1.101 YES manual up up
Loopback1 10.1.1.101 YES manual up up
Tunnel0 10.100.100.1 YES manual up up
Tunnel1 10.200.200.1 YES manual up up
Tunnel2 10.255.0.254 YES manual up up
VirtualPortGroup0 192.168.35.101 YES TFTP up up
rtr1#
rtr1#
rtr1#
rtr1#show running-config interface loopback 101
^
% Invalid input detected at '^' marker.
rtr1#
成果共有
1人目 成果共有
Section1.0-3.1までできた。
最近、Ansibleは業務でも使うようになってきた。
最後は時間が余ったので、QAの方でも質問してみた。
SCPの対応がうまくいかず、最後はNWのトラブルシュートをやっていた感じになってしまった。
2人目 成果共有
会社でAnsibleを使い始めて4ヶ月。
あんまり普段はNW機器を触る機会はないが、ミドルウェア的な感覚で簡単に操作できた。
まとめ
・手軽にAnsibleを触れる環境や機会を作っていただき、本当にありがたいです。
・あんまり要領良いやり方ではないが、言われるままに/書かれているままにAnsible触って、見返してを繰り返した感じだったので、正直細かいところまで理解へ結びつける事ができなかった。家に帰ってAnsibleを触ってみる。
また、せっかく現場で質問できる場があるのに、QA対応に参加できなかったので、次回以降はもう少し余裕をもって対応する。
