How to verify boot statement for ALL member switches in stacked switch?

When i use below command, it automatically copies image to ALL member switches and sets boot statement by itself.

archive download-sw /leave-old-sw ftp://username:password@10.4.1.104/c2960x-universalk9-tar.154-4.E4.tar

I need to write a script to verify that boot statement is automatically set in ALL member switches of a stacked switch after this copying. But problem is i can easily write it when the boot statement is only 1 line. But when it is in multiple lines as below (3 boot statement for 3 member switches), thenhow can i verify that’flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin’ exists on every line and not just in 1 or 2 lines?

SWITCH#sh boot | i BOOT path-list

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

you can use regex to match and pipe length – that should be equal to 3

regex_findall(“flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin”) | length

Hi Pushparaj,

Thanks for above config. But i feel above command may partially only solve my issue feel. I feel i didn’t frame the question properly to get the correct response.

I need to write a script to verify that boot statement is automatically set in ALL member switches of a stacked switch when doing post-copying verification.

But the problem is the script i know checks if boot statement for new image is set or not. It DOESN’T check if the boot statement is set for ALL member switches or not.

In other words, in below output, in case if new image is missing for 1 of the 3 member switches, how can i identify it using a script? Each switch may contain different number of stacked switch, so i may not be able to use pipe length parameter unles i included some conditional (which may make the script very lengthy)

SWITCH#sh boot | i BOOT path-list

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

BOOT path-list : flash:/c2960x-universalk9-mz.152-4.E7/c2960x-universalk9-mz.154-4.E4.bin

You can use length of stacked serial number in facts so that you can know how many switch the stack has and you can compare length of boot path regex

ansible_net_stacked_models
list / elements=string
when multiple devices are configured in a stack
The model names of each device in the stack

ansible_net_stacked_serialnums
list / elements=string
when multiple devices are configured in a stack
The serial numbers of each device in the stack

Hi Pushparaj,

I made a small modification to your suggestion and wrote the playbook in such a way that the number of boot statements set must match with numbr of stacked switches. This is to ensure that all stacked switches have boot statemtn set. However i am not getting the desired output. What am i doing wrong?

connection: network_cli
vars:
ansible_network_os: ios

tasks:

  • ios_command:
    commands: “show switch”
    register: show_switch

  • debug:
    msg: “{{ ‘show_switch’ | regex_findall(‘Switch’) | length }}”

  • ios_command:
    commands: “sh boot”
    register: show_boot

  • debug:
    msg: “{{ ‘show_boot’ | regex_findall(‘flash:/c2960x-universalk9-mz.154-4.E4.bin’) | length }}”

  • name: END THIS PLAYBOOK WHEN NO. OF BOOT STATEMENT DO NOT MATCH WITH NO. OF SWITCHES
    meta: end_host
    when: "{{ ‘show_switch’ | regex_findall(‘Switch’) | length }} != “{{ ‘show_boot’ | regex_findall(‘flash:/c2960x-universalk9-mz.154-4.E4.bin’) | length }}”

Thanks,

Vikram