Rollback in Cisco IOS XR
Все, кто хоть раз сталкивался с необходимостью внести изменения в конфигурацию оборудования Cisco под управлением IOS XR, знают, что в отличии от обычного IOS, IOS-XR требует производить коммит для применения конфигурации. Но как закоммитить конфиг, думаю, что знают все, кто хоть раз в жизни щупал IOS XR. А вот как откатить конфиг назад? На JunOS все легко и понятно, чего не скажешь об IOS XR. До определенного времени и я этого не знал, но в одну из ночей у меня было всего 5 минут, чтобы этому научиться, откатить конфиг и не получить аварию. В сети ничего, кроме мануала самой Циски на английском я не нашел, поэтому решил написать небольшой ликбез по данной теме, авось кому то пригодится.
Итак, поехали…
Примечание: хоть статья и рассчитана на начинающих инженеров, но может быть полезна и инженерам, не понаслышке знакомых с IOS XR. Как говорится, век живи-век учись.
Для начала — в качестве введения — кратко опишу процесс применения конфигурации на IOS XR для тех, кто с ним (IOS XR) еще не знаком. Предположим, что мы хотим добавить в конфиг например дескрипшн:
RP/0/0/CPU0:RZN-PE4(config)#interface gigabitEthernet 0/0/0/5 description "link to RZN-CE4-SW5"
RP/0/0/CPU0:RZN-PE4(config)#show
Sun Dec 11 17:11:11.950 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/5
description "link to RZN-CE4-SW5"
!
end
На обычном IOS все просто — добавили что то в конфиг — изменения сразу применялись. На IOS XR пока мы не сделаем коммит, изменения не применятся:
RP/0/0/CPU0:RZN-PE4(config)#do sh run int gi0/0/0/5 description
Sun Dec 11 17:12:09.346 UTC
% No such configuration item(s)
Делаем коммит:
RP/0/0/CPU0:RZN-PE4(config)#commit comment add desc int ge0/0/0/5
Sun Dec 11 17:12:43.443 UTC
Теперь все в порядке, конфигурационные изменения применились:
RP/0/0/CPU0:RZN-PE4(config)#do sh run int gi0/0/0/5 description
Sun Dec 11 17:12:48.353 UTC
interface GigabitEthernet0/0/0/5
description "link to RZN-CE4-SW5"
!
end
Как видно из представленных выше выводов я сделал комментарий к коммиту. Это очень помогает при поиске конфигурации на которую надо откатиться.
Теперь перейдем непосредственно к самим ролбэкам. Чтобы выполнить откат конфигурации, можно использовать следующую команду:
RP/0/0/CPU0:RZN-PE4#rollback configuration ?
last Rollback last commits made
to Rollback up to (and including) a specific commit
to-exclude Rollback up to (and excluding) a specific commit
1000000037 Commit ID
1000000036 Commit ID
1000000035 Commit ID
1000000034 Commit ID
1000000033 Commit ID
1000000032 Commit ID
1000000031 Commit ID
1000000030 Commit ID
1000000029 Commit ID
1000000028 Commit ID
1000000027 Commit ID
1000000026 Commit ID
1000000025 Commit ID
1000000024 Commit ID
1000000023 Commit ID
1000000022 Commit ID
1000000021 Commit ID
1000000020 Commit ID
1000000019 Commit ID
1000000018 Commit ID
Как видите, маршрутизатор вывалил нам кучу Commit ID. В отличии от Juniper, в котором список коммитов начинается с 0 и нулевой коммит — это текущий конфиг, на IOS XR ID коммита увеличивается при каждом коммите, и текущий коммит — тот который имеет наибольший ID из представленного списка. В нашем случае 1000000037 — это текущая конфигурация. Если сравнивать с JunOS — то это коммит с ID 0.
Если нам надо откатиться всего на один коммит — то есть на конфигурацию с ID 1000000036, то тут все просто, можно сделать так:
RP/0/0/CPU0:RZN-PE4#rollback configuration last 1
И в итоге мы откатимся на конфигурацию с ID 1000000036.
Но если вы сделали не один коммит, или вам в ходе работ надо откатиться на определенную конфигурацию. Как быть тут? Для этого нужно посмотреть кто и когда делал коммиты и найти нужный:
RP/0/0/CPU0:RZN-PE4#sh configuration commit list 10
Sun Dec 11 17:17:39.113 UTC
SNo. Label/ID User Line Client Time Stamp
~~~~ ~~~~~~~~ ~~~~ ~~~~ ~~~~~~ ~~~~~~~~~~
1 1000000037 bormoglot con0_0_CPU0 CLI Sun Dec 11 17:12:43 2016
2 1000000036 bormoglot con0_0_CPU0 CLI Sun Dec 11 16:55:22 2016
3 1000000035 bormoglot con0_0_CPU0 CLI Sun Dec 11 16:55:07 2016
4 1000000034 bormoglot con0_0_CPU0 CLI Sun Dec 11 16:54:56 2016
5 1000000033 bormoglot con0_0_CPU0 Rollback Sun Dec 11 16:34:08 2016
6 1000000032 bormoglot con0_0_CPU0 CLI Sun Dec 11 16:23:18 2016
7 1000000031 bormoglot con0_0_CPU0 Rollback Sun Dec 11 15:48:11 2016
8 1000000030 bormoglot con0_0_CPU0 CLI Sun Dec 11 15:43:43 2016
9 1000000029 bormoglot con0_0_CPU0 CLI Sun Dec 11 15:32:44 2016
10 1000000028 bormoglot con0_0_CPU0 CLI Sun Dec 11 09:26:59 2016
Примечание: цифра 10 означает сколько коммитов выводить, в противном случае Циска вывалит вам все коммиты, что будет являться избыточной информацией (вряд ли вы сделали 40–50 коммитов за раз, хотя кто знает…). В отличии от JunOS, IOS XR сохраняет 100 последних коммитов.
Но в моем случае представленный выше вывод не особо помог в поиске нужного коммита. Мало того что коммиты делал только я, так еще невозможно сориентироваться по времени на какой коммит мне надо вернуться. А вот тут нам помогут комментарии к коммитам:
RP/0/0/CPU0:RZN-PE4#sh configuration commit list 5 detail
Sun Dec 11 17:20:19.682 UTC
1) CommitId: 1000000037 Label: NONE
UserId: bormoglotx Line: con0_0_CPU0
Client: CLI Time: Sun Dec 11 17:12:43 2016
Comment: add desc int ge0/0/0/5
2) CommitId: 1000000036 Label: NONE
UserId: bormoglotx Line: con0_0_CPU0
Client: CLI Time: Sun Dec 11 16:55:22 2016
Comment: "descr gi0/0/0/4"
3) CommitId: 1000000035 Label: NONE
UserId: bormoglotx Line: con0_0_CPU0
Client: CLI Time: Sun Dec 11 16:55:07 2016
Comment: "descr gi0/0/0/3"
4) CommitId: 1000000034 Label: NONE
UserId: bormoglotx Line: con0_0_CPU0
Client: CLI Time: Sun Dec 11 16:54:56 2016
Comment: "descr gi0/0/0/2"
5) CommitId: 1000000033 Label: NONE
UserId: bormoglotx Line: con0_0_CPU0
Client: Rollback Time: Sun Dec 11 16:34:08 2016
Comment: no evi2
Теперь проще, я вижу свои комментарии к коммитам и примерно могу понять, что я добавлял в каждом из коммитов. Но не всегда комментарий отражает все изменения в конфигурации. А уж если он написан не вами, то тогда вообще непонятно, что скрывается под описанным дескрипшеном. Чтобы понять, что именно менялось в конфиге, нужно воспользоваться следующей командой:
RP/0/0/CPU0:RZN-PE4#show configuration commit changes 1000000037
Sun Dec 11 17:22:05.485 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/5
description "link to RZN-CE4-SW5"
!
end
Данная команда выводит, что именно было добавлено или удалено в конфигурацию в указанном коммите.
Примечание: помимо ID коммита, есть и номер коммита по порядку, который указан в детальном выводе:1) CommitId: 1000000037 Label: NONE UserId: bormoglotx Line: con0_0_CPU0 Client: CLI Time: Sun Dec 11 17:12:43 2016 Comment: add desc int ge0/0/0/5
1- это номер коммита, а 1000000037 — его ID. Смотреть конфигурационные изменения или откатываться можно и по номеру коммита, например:RP/0/0/CPU0:RZN-PE4#show configuration commit changes last 1 Sun Dec 11 17:24:19.616 UTC Building configuration... !! IOS XR Configuration 5.3.3 interface GigabitEthernet0/0/0/5 description "link to RZN-CE4-SW5" ! end
После last указываете число коммитов до нужного (число равно номеру коммита). В отличии от ID, номер коммита постоянно меняется (думаю что ясно, что номер коммита инкрементируется с каждым выполнением коммита)
Но особенность данной команды в том, что она показывает нам именно те изменения, который были применены в указанном коммите. Для примера посмотрим что менялось в конфигурации при произведении коммита 1000000036:
RP/0/0/CPU0:RZN-PE4#
RP/0/0/CPU0:RZN-PE4#show configuration commit changes 1000000036
Sun Dec 11 17:25:21.772 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/4
description "link to RZN-CE4-SW4"
!
end
По сути этот вывод показывает нам, что изменилось в коммите 1000000036 по сравнению с предыдущим коммитом 1000000035. То есть в мире JunOS аналог данной команды show system rollback 2 compare 3 (первая цифра — это конфигурация, которая будет выводится, вторая цифра, это конфигурация, с которой будет производится сравнение). Точно так же работает и следующая команда, но выводит информацию так сказать «со своей колокольни»:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes 1000000036
Sun Dec 11 17:27:34.912 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/4
no description "link to RZN-CE4-SW4"
!
end
Команда показывает, что мы отменим, если сделаем роллбэк на данный коммит, но показывает изменения в рамках только указанного коммита, а не всей конфигурации в целом. Например мы сделали 5 коммитов и теперь откатываемся на все 5 коммитов. Данная команда нам покажет не результирующие изменения при ролбэке на 5 коммитов, то только те изменения, которые будут отменены в рамках указанного commit ID, не принимая во внимание все промежуточные коммиты. Но ведь результатом применения ролбэка будет отмена не только указанного коммита, но и всех промежуточных изменений, то есть нам нужно видеть сравнение текущей конфигурации с конфигурацией, которая была на момент выполнения коммита, указанного в команде. То есть, если снова провести аналогию с миром JunOS, то нужен вывод команды show system rollback 5 compare 0. Для этого необходимо использовать команду show configuration commit changes, но с ключевым словом to или to-exclude:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes ?
last Changes for rolling back last commits
to Changes up to (and including) a specific commit
to-exclude Changes up to (and excluding) a specific commit
Примечание: ключевое слово to-exclude появилось в 5-ой ветке IOS XR, и то не на всех версиях. Во всяком случае на версии 5.1.3 такой команды еще нет, а в 5.3.3 уже есть.
С ключевым словом to команда выведет вам все изменения, которые будут внесены в конфиг в результате применения ролбэка, включая указанный в команде коммит и все промежуточные изменения конфигурации. Смотрим как это работает:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes to 1000000035
Sun Dec 11 17:32:21.933 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
no description "link to RZN-CE4-SW3"
!
interface GigabitEthernet0/0/0/4
no description "link to RZN-CE4-SW4"
!
interface GigabitEthernet0/0/0/5
no description "link to RZN-CE4-SW5"
!
end
То есть, если мы применим этот ролбэк, то отменяются все изменения включая и изменения, примененные в коммите 1000000035. По сути мы откатимся на конфигурацию, которая была до применения 1000000035 коммита, то есть на конфигурацию с commit ID 1000000034. Это становится понятно после просмотра внесенных в коммите 1000000035 изменений в конфигурацию:
RP/0/0/CPU0:RZN-PE4#show configuration commit changes 1000000035
Sun Dec 11 17:34:23.184 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
description "link to RZN-CE4-SW3"
!
end
В данном коммите был добавлен дескрипшен на интерфейс GigabitEthernet0/0/0/3. В выводе команды show configuration rollback changes to 1000000035 показано, что этот дескрипшен будет удален и мы откатимся на конфигурацию, которая была добавлена коммитом 1000000034. Да, это немного отличается от JunOS-кого коммита. В JunOS мы прыгаем на указанную нами конфигурацию, а вот на IOS XR при использовании указанной команды мы прыгаем на конфигурацию, который была до применения указанного коммита, отменяя и изменения указанного в команде коммита. Обращаю внимание, что в версиях до 5.3.Х присутствует только такая команда.
При использовании команды с ключевым словом to-exclude, работы команды будет похожа на ролбэк в JunOS — будет выполнен откат на конфигурацию, которая была применена в указанном коммите:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes to-exclude 1000000035
Sun Dec 11 17:37:17.183 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/4
no description "link to RZN-CE4-SW4"
!
interface GigabitEthernet0/0/0/5
no description "link to RZN-CE4-SW5"
!
end
Если сравнить с выводом, который был представлен при разборе команды с ключевым словом to, вы увидите различия — те изменения, которые были внесены при выполнении коммита 1000000035 не отменяются. Лично мне этот способ больше по душе, но, как я написал ранее, доступна данная команда только с версии 5.3.х.
Примечание: команда show configuration commit changes тоже может показать все изменения, которые вносились начиная от текущей конфигурации до указанного коммита (беря во внимание все промежуточные изменения конфигураций). Для этого надо использовать ключевое слово since и указать ID коммита или ключевым словом last и указать порядковый номер коммита:RP/0/0/CPU0:RZN-PE4#sh configuration commit changes 1000000035 Sun Dec 11 18:01:33.533 UTC Building configuration... !! IOS XR Configuration 5.3.3 interface GigabitEthernet0/0/0/3 description "link to RZN-CE4-SW3" ! end
RP/0/0/CPU0:RZN-PE4#sh configuration commit changes since 1000000035 Sun Dec 11 18:01:38.212 UTC Building configuration... !! IOS XR Configuration 5.3.3 interface GigabitEthernet0/0/0/3 description "link to RZN-CE4-SW3" ! interface GigabitEthernet0/0/0/4 description "link to RZN-CE4-SW4" ! interface GigabitEthernet0/0/0/5 description "link to RZN-CE4-SW5" ! end
Но повторюсь, не забывайте, что данная команда показывает все, что добавлено в конфигурацию начиная от указанного коммита и заканчивая текущим, и своим ролбэком вы все эти изменения откатите!
После JunOS немного сложно понять первый вариант ролбэка. Но двигаемся дальше.
В отличии от JunOS, Cisco при ролбэке не просто загружает конфигурацию, а сразу ее применяет, даже не спрашивая администратора. Это очень существенное отличие, особенно после JunOS, который загружает конфигурацию, дает ее отредактировать (если надо), проверить и закоммитить. Но не все так плохо, IOS XR тоже умеет загружать конфиг без автоматического коммита, но об этом чуть позже.
Посмотреть, что будет менять в конфигурации при ролбэке помимо указанных выше команд можно и другим способом, который придется по душе любителям JunOS. Надо воспользоваться указанными ранее командами, но с ключевым словом diff. Вот пример вывода конфигурационных изменений в обычной форме:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes to 1000000025
Sun Dec 11 17:42:44.450 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/1
shutdown
!
interface GigabitEthernet0/0/0/1.777 l2transport
!
interface GigabitEthernet0/0/0/2
no description "link to RZN-CE4-SW2"
!
interface GigabitEthernet0/0/0/3
no description "link to RZN-CE4-SW3"
!
interface GigabitEthernet0/0/0/4
no description "link to RZN-CE4-SW4"
!
interface GigabitEthernet0/0/0/5
no description "link to RZN-CE4-SW5"
!
no interface BVI777
interface BVI777
ipv4 address 10.0.0.254 255.255.255.0
no mac-address 200.0.4777
mac-address 200.0.4777
!
router bgp 6262
vrf VRF_EVPN
no address-family ipv4 unicast
!
!
evpn
!
end
А вот с использованием ключевого слова diff. Думаю, что вывод ниже читается проще, так как указано что добавляется, а что удаляется из конфигурации:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes to 1000000025 diff
Sun Dec 11 17:42:50.580 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
# interface GigabitEthernet0/0/0/1
+ shutdown
+ !
# interface GigabitEthernet0/0/0/1.777 l2transport
# !
- interface GigabitEthernet0/0/0/2
- description "link to RZN-CE4-SW2"
- !
- interface GigabitEthernet0/0/0/3
- description "link to RZN-CE4-SW3"
- !
- interface GigabitEthernet0/0/0/4
- description "link to RZN-CE4-SW4"
- !
- interface GigabitEthernet0/0/0/5
- description "link to RZN-CE4-SW5"
- !
- interface BVI777
+ interface BVI777
- vrf VRF_EVPN
- ipv4 address 10.0.0.254 255.255.255.0
+ ipv4 address 10.0.0.254 255.255.255.0
- mac-address 200.0.4777
+ mac-address 200.0.4777
+ !
# router bgp 6262
# vrf VRF_EVPN
- address-family ipv4 unicast
- label mode per-vrf
- redistribute connected
- redistribute static
- !
- !
- !
# evpn
# !
end
Правда выводятся конфигурационные изменения несколько странно, к примеру вот эти строки ни к чему:
- ipv4 address 10.0.0.254 255.255.255.0
+ ipv4 address 10.0.0.254 255.255.255.0
- mac-address 200.0.4777
+ mac-address 200.0.4777
Зачем это сделано — мне не ясно. Но приходится с этим мириться.
Теперь рассмотрим еще одну очень полезную функцию — это загрузка конфигурации без ее автоматического коммита. Это делается уже из конфигурационного режима. Тут все действия такие же как и описано выше и действуют те же правила (to и to-exclude), но конфигурация не коммитится автоматом. Рассмотрим пример:
Если мы сделаем ролбэк, то удалится вот такая часть конфигурации:
RP/0/0/CPU0:RZN-PE4#show configuration rollback changes to 1000000035
Sun Dec 11 17:50:53.187 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
no description "link to RZN-CE4-SW3"
!
interface GigabitEthernet0/0/0/4
no description "link to RZN-CE4-SW4"
!
interface GigabitEthernet0/0/0/5
no description "link to RZN-CE4-SW5"
!
end
Заходим в режим конфигурации и загружаем изменения:
RP/0/0/CPU0:RZN-PE4(config)#load rollback changes to 1000000035
Building configuration...
Loading.
254 bytes parsed in 1 sec (249)bytes/sec
Примечание: в выводе указано ключевое слово to, поэтому загружаются не только изменения, примененные в указанном коммите, но и все промежуточные коммиты. Если бы команда была бы без to: load rollback changes 1000000035, то загрузились бы только изменения, которые были сделаны при данном коммите, а с ключевым словом to-exclude загрузятся все изменения до коммита 1000000035, не включая изменения, примененные в самом коммите 1000000035.
При простом ролбэке конфигурация автоматически бы закоммитилась и у нас бы были удалены дескрипшены с трех интерфейсов. В нашем случае все дескрипшены на месте:
RP/0/0/CPU0:RZN-PE4(config)#do show int description | i 0/0/0/[3-5]
Sun Dec 11 17:49:31.632 UTC
Gi0/0/0/3 admin-down admin-down "link to RZN-CE4-SW3"
Gi0/0/0/4 admin-down admin-down "link to RZN-CE4-SW4"
Gi0/0/0/5 admin-down admin-down "link to RZN-CE4-SW5"
А вот если посмотреть конфигурацию, то мы видим, что изменения загружены, но не применены — можете их изменять (хотя это не так уж и просто, ибо часть конфига будет удалена — как видите вместо дескрипшена указана команда no description) и коммитить:
RP/0/0/CPU0:RZN-PE4(config)#show
Sun Dec 11 17:49:33.962 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
no description
!
interface GigabitEthernet0/0/0/4
no description
!
interface GigabitEthernet0/0/0/5
no description
!
end
Если передумали коммитить, то проще всего использовать следующую команду:
RP/0/0/CPU0:RZN-PE4(config)#abort
RP/0/0/CPU0:RZN-PE4#
Вас просто выкинет из режима конфигурации и все незакоммиченные изменения будут удалены. Если ввести end или exit, то Cisco спросит, что вы хотите сделать с незакомиченной конфигурацией:
RP/0/0/CPU0:RZN-PE-4(config)#end
Uncommitted changes found, commit them before exiting(yes/no/cancel)? [cancel]:n
RP/0/0/CPU0:RZN-PE-4#
RP/0/0/CPU0:RZN-PE-4(config)#exit
Uncommitted changes found, commit them before exiting(yes/no/cancel)? [cancel]:n
RP/0/0/CPU0:RZN-PE-4#
К одной из очень полезных функций можно причислить добавление метки к коммиту или ролбэку:
RP/0/0/CPU0:RZN-PE-4#rollback configuration to 1000000003 label bormoglotx
RP/0/0/CPU0:RZN-PE-4#show configuration commit list
Sun Dec 11 18:42:50.333 UTC
SNo. Label/ID User Line Client Time Stamp
~~~~ ~~~~~~~~ ~~~~ ~~~~ ~~~~~~ ~~~~~~~~~~
1 bormoglotx bormoglot con0_0_CPU0 Rollback Sun Dec 11 18:42:40 2016
2 1000000004 bormoglot con0_0_CPU0 Rollback Sun Dec 11 18:33:34 2016
3 1000000003 bormoglot con0_0_CPU0 CLI Sun Dec 11 18:31:38 2016
4 1000000002 bormoglot con0_0_CPU0 CLI Sun Dec 11 18:31:25 2016
5 1000000001 bormoglot con0_0_CPU0 CLI Sun Dec 11 18:30:57 2016
Теперь вместо ID указано то, что вы напишите.
Примечание: сам же ID все равно назначается и указывается или в детальном выводе или при выборе ID коммита:RP/0/0/CPU0:RZN-PE-4#show configuration rollback changes ? bormoglotx 1000000005 bormoglotx-1 1000000006
На мой взгляд удобно. Две одинаковых метки указать не получится, получите вот такую ошибку:
RP/0/0/CPU0:RZN-PE-4#rollback configuration to 1000000004 label bormoglotx
Sun Dec 11 18:47:24.214 UTC
Loading Rollback Changes.
Loaded Rollback Changes in 1 sec
Committing.
Rollback operation failed due to -
'CfgMgr' detected the 'warning' condition 'The specified label already exists in commit database.'
Running configuration has not been modified.
Еще одной полезной командой будет commit show-error, которая сразу указывает на ошибку (как это делает JunOS). Например коммит, который приведет к ошибке:
RP/0/0/CPU0:RZN-PE-4(config)#commit
Sun Dec 11 18:58:40.048 UTC
% Failed to commit one or more configuration items during a pseudo-atomic operation. All changes made have been reverted. Please issue 'show configuration failed [inheritance]' from this session to view the errors
Теперь нам надо дать команду show configuration failed что бы увидеть проблему в конфиге. Но можно сразу дать команду commit show-error и если конфиг Циске не понравится, то в консоль сразу вывалится указание на ошибку:
RP/0/0/CPU0:RZN-PE-4(config)#commit show-error
Sun Dec 11 18:59:44.254 UTC
% Failed to commit one or more configuration items during a pseudo-atomic operation. All changes made have been reverted.
!! SEMANTIC ERRORS: This configuration was rejected by
!! the system due to semantic errors. The individual
!! errors with each failed configuration command can be
!! found below.
interface BVI777
vrf VRF-TEST
!!% 'RSI' detected the 'fatal' condition 'The interface's numbered and unnumbered IPv4/IPv6 addresses must be removed prior to changing or deleting the VRF'
!
end
RP/0/0/CPU0:RZN-PE-4(config)#
В выводе сразу показан кусок конфига с ошибкой.
Так же хотел обратить внимание на функцию commit commit best-effort. Данное ключевое слово при коммите применит все строки, которые верны, а неверные будут проигнорированы. Возможно кому то данная функция будет нужна. Лично я ни разу ей не пользовался.
При необходимости весь коммит лист можно очистить (например при свопе или переиспользовании оборудования в качестве нового узла). Для этого нужно воспользоваться следующей командой:
RP/0/0/CPU0:RZN-PE-4#clear configuration commits oldest 43
Sun Dec 11 18:26:58.078 UTC
Deleting 43 rollback points '1000000001' to '1000000043'
48 KB of disk space will be freed. Continue with deletion?[confirm]
RP/0/0/CPU0:RZN-PE-4#show configuration commit list
Sun Dec 11 18:27:18.977 UTC
The commit database is empty.
Правда информация о всех коммитах все равно сохранится, правда в другом месте:
RP/0/0/CPU0:RZN-PE-4#show configuration history
Sun Dec 11 22:15:04.042 UTC
Sno. Event Info Time Stamp
~~~~ ~~~~~ ~~~~ ~~~~~~~~~~
1 startup configuration applied Sun Dec 11 07:00:27 2016
2 commit id 1000000001 Sun Dec 11 07:01:28 2016
3 commit id 1000000002 Sun Dec 11 07:07:19 2016
4 commit id 1000000003 Sun Dec 11 07:17:26 2016
Но на указанные в данном выводе ID нельзя ориентироваться, так как при сбросе нумерация начинается сначала, для примера, после 43 идет снова 1:
RP/0/0/CPU0:RZN-PE-4#show configuration history | b ^52
Sun Dec 11 22:16:57.924 UTC
52 commit id 1000000043 Sun Dec 11 18:24:28 2016
53 commit id 1000000001 Sun Dec 11 18:28:53 2016
54 commit id 1000000001 Sun Dec 11 18:30:57 2016
Ну и не стоит забывать о такой важной и полезной команде, как commit confirmed, может существенно упростить жизнь и сберечь кучу нервов. Думаю, что представлять ее нет смысла.
В заключении хотел описать грабли, на которые я однажды наступил. Надо быть внимательным с командой rollback, если вы вместо rollback configuration to 1000000020 укажите rollback configuration 1000000020, то изменения в текущей конфигурации ограничатся теми изменениями, которые были произведены в указанном вами commit ID. Продемонстрирую это на примере.
Я делаю последовательно три коммита, добавляя по одному дескрипшену. Первый коммит:
RP/0/0/CPU0:RZN-PE-4(config)#interface gigabitEthernet 0/0/0/3 description 111111
RP/0/0/CPU0:RZN-PE-4(config)#commit comment add 11111
Tue Dec 13 08:21:15.328 UTC
RP/0/0/CPU0:RZN-PE-4(config)#
Второй коммит:
RP/0/0/CPU0:RZN-PE-4(config)#interface gigabitEthernet 0/0/0/4 description 22222
RP/0/0/CPU0:RZN-PE-4(config)#commit comment add 22222
Tue Dec 13 08:21:33.627 UTC
RP/0/0/CPU0:RZN-PE-4(config)#
Третий коммит:
RP/0/0/CPU0:RZN-PE-4(config)#interface gigabitEthernet 0/0/0/5 description 33333
RP/0/0/CPU0:RZN-PE-4(config)#commit comment add 33333
Tue Dec 13 08:21:54.856 UTC
RP/0/0/CPU0:RZN-PE-4(config)#
Смотрим ID наших коммитов:
RP/0/0/CPU0:RZN-PE-4#show configuration commit list 5
Tue Dec 13 08:22:04.915 UTC
SNo. Label/ID User Line Client Time Stamp
~~~~ ~~~~~~~~ ~~~~ ~~~~ ~~~~~~ ~~~~~~~~~~
1 1000000022 bormoglot con0_0_CPU0 CLI Tue Dec 13 08:21:54 2016
2 1000000021 bormoglot con0_0_CPU0 CLI Tue Dec 13 08:21:33 2016
3 1000000020 bormoglot con0_0_CPU0 CLI Tue Dec 13 08:21:15 2016
4 1000000019 bormoglot con0_0_CPU0 Rollback Tue Dec 13 08:20:20 2016
5 1000000018 bormoglot con0_0_CPU0 CLI Tue Dec 13 08:16:26 2016
Теперь посмотрим, какие изменения вносились в коммиты (действительно ли это наши коммиты). Первый ролбэк:
RP/0/0/CPU0:RZN-PE-4#show configuration rollback changes 1000000022
Tue Dec 13 08:22:23.474 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/5
no description 33333
!
end
Второй ролбэк:
RP/0/0/CPU0:RZN-PE-4#show configuration rollback changes 1000000021
Tue Dec 13 08:22:27.184 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/4
no description 22222
!
end
И третий ролбэк:
RP/0/0/CPU0:RZN-PE-4#show configuration rollback changes 1000000020
Tue Dec 13 08:22:30.373 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
no description 111111
!
end
Предположим, что мне надо откатить все изменения и вернуться на конфигурацию, которая была при коммите 1000000019. Смотрим, что изменится при ролбэке:
RP/0/0/CPU0:RZN-PE-4#show configuration rollback changes to 1000000020
Tue Dec 13 08:22:34.553 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
interface GigabitEthernet0/0/0/3
no description 111111
!
interface GigabitEthernet0/0/0/4
no description 22222
!
interface GigabitEthernet0/0/0/5
no description 33333
!
end
А теперь делая ролбэк, допускаем ошибку, пропуская ключевое слово to:
RP/0/0/CPU0:RZN-PE-4#rollback configuration 1000000020
Tue Dec 13 08:22:49.342 UTC
Loading Rollback Changes.
Loaded Rollback Changes in 1 sec
Committing.
2 items committed in 1 sec (1)items/sec
Updating.
Updated Commit database in 1 sec
Configuration successfully rolled back commit '1000000020'.
Конфиг откатился, вроде все отлично. Но результат не тот, который мы ожидали. Смотрим конфиг:
RP/0/0/CPU0:RZN-PE-4#show running-config
Tue Dec 13 08:22:56.432 UTC
Building configuration...
!! IOS XR Configuration 5.3.3
!! Last configuration change at Tue Dec 13 08:22:50 2016 by bormoglotx
!
hostname RZN-PE-4
interface MgmtEth0/0/CPU0/0
shutdown
!
interface GigabitEthernet0/0/0/0
description link to core
!
interface GigabitEthernet0/0/0/1
description link to SW1
!
interface GigabitEthernet0/0/0/2
shutdown
!
interface GigabitEthernet0/0/0/3
shutdown
!
interface GigabitEthernet0/0/0/4
description 22222
shutdown
!
interface GigabitEthernet0/0/0/5
description 33333
shutdown
!
#остальная часть конфига удалена для сокращения статьи
Удалился только дескрипшен с интерфейса interface GigabitEthernet0/0/0/3, который я навесил, делая коммит 1000000020, а изменения, которые были в коммитах 1000000021 и 1000000022 не отменились. Так что не пропускайте to или to-exclude при откате конфига, больше чем на 1 коммит.
Надеюсь описанное выше будет кому то полезно. Спасибо за внимание.