Cisco IOS-XE(IOS)でコンフィグの世代管理・ロールバックの実行

今更ながらIOS-XE(IOS)でコンフィグの世代管理やロールバックを試してみたので結果をまとめました。
今回はCSR1000V(Cisco IOS XE Software, Version 17.03.02)で動作確認を行なっています。

## 目次

* [概要](#概要)
* [設定方法](#設定方法)
* [archive configの確認方法](#archive-config-の確認方法)
* [ロールバックの実行](#ロールバックの実行)
* [所感](#所感)
* [参考](#参考)

## 概要

archive設定を行うことでコンフィグの世代管理ができるようになります。
最大で14世代までarchive configurationを保存しておくことが可能で、configure replaceコマンドにより任意のarchive configurationの状態にロールバックすることもできるようです。


## 設定方法

■ 変更内容
```
testRT01#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
testRT01(config)#archive
testRT01(config-archive)#path flash:
testRT01(config-archive)#maximum 14
testRT01(config-archive)#write-memory
testRT01(config-archive)#end
```
(補足)
* path \<保存先\>: archive config の保存先。ここでは flash: を指定しました。保存先として外部のサーバを指定することも可能です。
* maximum \<世代数\>: 保存するバックアップコピーの世代数の上限(1-14)
* write-memory: write memory を実行したタイミングでarchive configを作成する設定。


【参考】archive設定で実行可能なコマンド
```
testRT01(config-archive)#?
Archive configuration commands:
  default       Set a command to its defaults
  exit          Exit from archive configuration mode
  log           Logging commands
  maximum       maximum number of backup copies
  no            Negate a command or set its defaults
  path          path for backups
  rollback      Rollback parameters
  time-period   Period of time in minutes to automatically archive the running-config
  write-memory  Enable automatic backup generation during write memory
```
今回は設定しませんでしたが、```time-period 1440``` で24時間おきにsnapshotを取得する等もできるようです。

【参考】 pathの指定先
```
testRT01(config-archive)#path ?
  bootflash:  Write archive on bootflash: file system
  flash:      Write archive on flash: file system
  ftp:        Write archive on ftp: file system
  http:       Write archive on http: file system
  https:      Write archive on https: file system
  pram:       Write archive on pram: file system
  rcp:        Write archive on rcp: file system
  scp:        Write archive on scp: file system
  sftp:       Write archive on sftp: file system
  tftp:       Write archive on tftp: file system
```

【参考】archive config の世代数設定
```
testRT01(config-archive)#maximum ?
  <1-14>  maximum number of backup copies
```


## archive config の確認方法

archive設定を行うことでコンフィグの世代管理ができるようになります。
show archive を実行することで保存されているバックアップコピーの情報を確認できます。

archive設定 有効化前
```
testRT01#show archive                                                              
 Archive feature not enabled
```

archive設定 有効化後
```
testRT01#show archive
The maximum archive configurations allowed is 14.
There are currently 3 archive configurations saved.
The next archive file will be named bootflash:-<timestamp>-3
 Archive #  Name
   1        bootflash:-Feb--6-16-05-40.925-0 
   2        bootflash:-Feb--6-16-10-33.239-1 
   3        bootflash:-Feb--6-16-27-27.278-2 <- Most Recent
   4         
   5         
   6         
   7         
   8         
   9         
   10 
   11 
   12 
   13
   14
```

## ロールバックの実行

```configure replace <ロールバック先>``` コマンドによりロールバックを行うことが可能です。
ここでは設定変更後に戻し対応が必要になったというシナリオで、手順を順に追って確認します。

設定変更前

```
testRT01#show archive
The maximum archive configurations allowed is 14.
There are currently 1 archive configurations saved.
The next archive file will be named bootflash:-<timestamp>-1
 Archive #  Name
   1        bootflash:-Feb--6-16-05-40.925-0 <- Most Recent
   2         
   3         
   4  
(省略)
```

今回は以下のコマンドを投入してループバックインターフェイスを作成して保存してみます。

```
testRT01#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
testRT01(config)#interface loopback 1
testRT01(config-if)#ip address 10.1.1.1 255.255.255.255
testRT01(config-if)#end

testRT01#show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       192.168.3.101   YES NVRAM  up                    up      
GigabitEthernet2       192.168.4.1     YES manual up                    up      
GigabitEthernet3       unassigned      YES unset  administratively down down    
GigabitEthernet4       unassigned      YES NVRAM  administratively down down    
Loopback1              10.1.1.1        YES manual up                    up    

testRT01#write memory
```

設定変更後にarchive configを確認します。

```
testRT01#show archive
The maximum archive configurations allowed is 14.
There are currently 2 archive configurations saved.
The next archive file will be named bootflash:-<timestamp>-2
 Archive #  Name
   1        bootflash:-Feb--6-16-05-40.925-0 
   2        bootflash:-Feb--6-16-10-33.239-1 <- Most Recent
   3         
   4         
(省略)      
```

ちなみにArchive#1, #2の差分は以下のコマンドで確認可能です。

```
testRT01#show archive config differences bootflash:-Feb--6-16-05-40.925-0 bootflash:-Feb--6-16-10-33.239-1
!Contextual Config Diffs:
+interface Loopback1
 +ip address 10.1.1.1 255.255.255.255
```

ここでArchive#1のコンフィグにロールバックしてみます。設定が完了するまで１分程度かかりました。

```
testRT01#configure replace bootflash:-Feb--6-16-05-40.925-0
This will apply all necessary additions and deletions
to replace the current running configuration with the
contents of the specified configuration file, which is
assumed to be a complete configuration, not a partial
configuration. Enter Y if you are sure you want to proceed. ? [no]: y
The rollback configlet from the last pass is listed below:

(省略)
```

実行後Archive#1のコンフィグがrunning-configに反映されます。

```
testRT01#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       192.168.3.101   YES NVRAM  up                    up      
GigabitEthernet2       192.168.4.1     YES manual up                    up      
GigabitEthernet3       unassigned      YES unset  administratively down down    
GigabitEthernet4       unassigned      YES NVRAM  administratively down down
```

たしかに先ほど追加したLoopback1が削除されていました。
write memoryを行っていないので、```show archive config difference```からロールバックの内容を確認することもできます。

```
testRT01#show archive config differences nvram:startup-config system:running-config
!Contextual Config Diffs:
-interface Loopback1
 -ip address 10.1.1.1 255.255.255.255
```

最後に設定保存を行います。

```
testRT01#write memory
Building configuration...
[OK]
testRT01#show archive
The maximum archive configurations allowed is 14.
There are currently 3 archive configurations saved.
The next archive file will be named bootflash:-<timestamp>-3
 Archive #  Name
   1        bootflash:-Feb--6-16-05-40.925-0 
   2        bootflash:-Feb--6-16-10-33.239-1 
   3        bootflash:-Feb--6-16-27-27.278-2 <- Most Recent
   4        
(省略) 
```

無事に保存されました。
Archive#1, #3 を比較し、たしかにロールバック前の状態と一致していることが確認できました。
```
testRT01#show archive config differences bootflash:-Feb--6-16-05-40.925-0 bootflash:-Feb--6-16-27-27.278-2
!Contextual Config Diffs:
!No changes were found
```

## 所感

archive設定を行うことでコンフィグの世代管理やロールバックを実行できることが確認できました。
これまで本番作業では設定戻し用のコンフィグを準備していたのですが、手動で作成すると手間がかかったり作成ミスも発生しやすいので、ロールバックで対応できると嬉しいですね。
今後はGitとの連携などにも手を出してみたいです。

## 参考

* [Cisco IOS XE - Configuration Replace and Configuration Rollback](https://www.cisco.com/c/en/us/td/docs/ios/ios_xe/fundamentals/configuration/guide/2_xe/cf_xe_book/cf_config-rollback_xe.html)