Skip to content
Snippets Groups Projects
Commit ad5da47e authored by Sebastian Rieger's avatar Sebastian Rieger
Browse files

created folder structure, added remote live capture batch file

parent a0361814
Branches
No related tags found
No related merge requests found
@echo off
REM start a remote capture session using the provided live capture
REM tcp port as defined in UWM
REM adapt path to Wireshark and NetCat (nc.exe) binaries
REM
REM NetCat for Windows can be found, e.g. at: https://nmap.org/ncat/
REM
REM sebastian.rieger@cs.hs-fulda.de
if -%1-==-- echo live capture tcp port not provided, please start as "capture-from-socket.bat <tcp-live-capture-port>" & exit /b
set NETCAT_PATH="C:\Users\Sebastian\Downloads\ncat"
set WIRESHARK_PATH="C:\Program Files\Wireshark\Wireshark.exe"
set VIRL_HOST="192.168.0.100"
set PCAP_PORT="%1"
start cmd /C "echo reading live capture from port %1, close Wireshark, to stop ... & %NETCAT_PATH% %VIRL_HOST% %PCAP_PORT% | %WIRESHARK_PATH% -k -i -"
#!/bin/bash
# create-arista-veos-image.sh V1.1
# HS-Fulda - sebastian.rieger@informatik.hs-fulda.de
#
# changelog:
# V1.1 added injection of config defined in VM Maestro using config-drivex
# usage
if [ ! $# -eq 3 ] ; then
echo -e "usage: $0 <Aboot-veos-serial-version.iso> <vEOS-version.vmdk> <new glance image name>, e.g.:\n"
echo "$0 Aboot-veos-serial-2.0.8.iso vEOS-4.13.4F.vmdk vEOS"
exit -1
fi
# sudo check
if [ ! $UID -eq 0 ] ; then
echo "Insufficient privileges. Please consider using sudo -s."
exit -1
fi
ABOOT_SERIAL_ISO=$1
ABOOT_SERIAL_ISO_BASENAME=$(basename -s .iso $1)
VEOS_VMDK=$2
VEOS_VMDK_BASENAME=$(basename -s .vmdk $2)
GLANCE_IMAGE_NAME=$3
GLANCE_IMAGE_RELEASE=$VEOS_VMDK_BASENAME-$ABOOT_SERIAL_ISO_BASENAME
TMP_NAME="vEOS-$GLANCE_IMAGE_RELEASE"
echo
echo "Creating vEOS image..."
echo "==========================================================="
# create a copy of Aboot bootloader and extend it to 3G
cp $1 $TMP_NAME.raw
truncate -s +3G $TMP_NAME.raw
echo
echo "Extracting partitions from vEOS vmdk..."
echo "==========================================================="
# convert vmdk to raw and extract two partitions in it
qemu-img convert -O raw $2 $VEOS_VMDK_BASENAME.raw
kpartx -av $VEOS_VMDK_BASENAME.raw
dd if=/dev/loop0p1 of=$VEOS_VMDK_BASENAME-p1.raw
dd if=/dev/loop0p2 of=$VEOS_VMDK_BASENAME-p2.raw
kpartx -d $VEOS_VMDK_BASENAME.raw
echo
echo "Injecting rc.eos startup script to get switch config..."
echo "==========================================================="
# inject rc.eos script in first partition of the image, to get switch config defined in VM Maestro (config-drive)
mkdir swi
mount -o loop $VEOS_VMDK_BASENAME-p1.raw swi
cd swi
cat << EOF > rc.eos
#!/bin/sh
#
# startup script to get node configs from VM Maestro
#
echo "Getting switch config from config drive..."
echo "=========================================="
mkdir /config-drive
mount /dev/sdb1 /config-drive
echo "Getting ip address for ma1 via dhcp..."
echo "=========================================="
dhclient -r ma1
dhclient -1 -v ma1 >/mnt/flash/dhclient.log
IP=\$(ip addr show ma1 | grep inet | tr -s ' ' | cut -d ' ' -f 3 | sed s/"\/"/"\\\\\\\\\/"/g)
echo \$IP
sed s/"! ip of ma1 configured on launch"/"ip address \$IP"/g /config-drive/veos_config.txt >/mnt/flash/startup-config.tmp
cat /mnt/flash/startup-config.tmp
echo
echo "Copying switch config from config drive..."
echo "=========================================="
cp /mnt/flash/startup-config.tmp /mnt/flash/startup-config
EOF
chmod 755 rc.eos
cd ..
umount swi
rmdir swi
echo
echo "Injecting new partitions from vEOS vmdk in Aboot image..."
echo "==========================================================="
# calulate size of the two partitions
PART1_START=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw1" | tr -s " " | cut -d ' ' -f 3)
PART1_END=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw1" | tr -s " " | cut -d ' ' -f 4)
PART1_LENGTH=$(expr $PART1_END - $PART1_START)
PART2_START=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw2" | tr -s " " | cut -d ' ' -f 2)
PART2_END=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw2" | tr -s " " | cut -d ' ' -f 3)
PART2_LENGTH=$(expr $PART2_END - $PART2_START)
# append the two partitions from vmdk in the bootloader iso
echo -e "n
p
+$PART1_LENGTH
t
2
c
a
2
n
p
+$PART2_LENGTH
t
3
12
w" | fdisk $TMP_NAME.raw >/dev/null
# copy the partitions from vEOS vmdk to new image
kpartx -av $TMP_NAME.raw
dd if=$VEOS_VMDK_BASENAME-p1.raw of=/dev/loop0p2
dd if=$VEOS_VMDK_BASENAME-p2.raw of=/dev/loop0p3
kpartx -d $TMP_NAME.raw
echo
echo "Convert new image to qcow2..."
echo "==========================================================="
# convert raw to qcow2
qemu-img convert -O qcow2 $TMP_NAME.raw $TMP_NAME.qcow2
echo
echo "Cleaning up..."
echo "==========================================================="
#cleanup
rm $TMP_NAME.raw
rm $VEOS_VMDK_BASENAME-p1.raw
rm $VEOS_VMDK_BASENAME-p2.raw
rm $VEOS_VMDK_BASENAME.raw
echo
echo "Importing image into glance..."
echo "==========================================================="
glance image-create --container-format bare --disk-format qcow2 --is-public true --name $GLANCE_IMAGE_NAME --file $TMP_NAME.qcow2 --property hw_disk_bus=ide --property serial=1 --property hw_vif_model=e1000 --property hw_cdrom_type=ide --property release="$GLANCE_IMAGE_RELEASE" --property subtype=IOSv --property config_disk_type=disk
#testing:
#
# nova boot --image "Arista vEOS Disk" --flavor m1.small veos --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a
#
# using VM Maestro, the image can be chosen as "VM image", e.g., for an IOSv or IOSvL2 node
{
"dynamic-subtypes": [
{
"plugin_name": "vEOS",
"cli_serial": 1,
"plugin_desc": "Arista vEOS",
"cli_protocol": "ssh",
"hw_ram": 1024,
"hw_vm_extra": "",
"interface_wrap": 7,
"baseline_image": "vEOS",
"hw_disk_bus": "ide",
"interface_pattern": "Ethernet{0}",
"config_file": "/veos_config.txt",
"baseline_flavor": "vEOS.small",
"plugin_base": "IOSvL2",
"vnc_available": true,
"interface_management": "Management1",
"interface_range": 7
}
]
}
\ No newline at end of file
! device: veos-1 (vEOS, EOS-4.14.2F)
!
! boot system flash:/vEOS.swi
!
transceiver qsfp default-mode 4x10G
!
hostname veos-1
!
spanning-tree mode mstp
!
no aaa root
!
username admin role network-admin secret 5
$1$93LlZesx$MSqS1D/8NGTSY724FGx1K0
username cisco role network-admin secret 5
$1$rQS0W9wP$ZUzVG2XoGCCZCJopFp1aV/
!
interface Ethernet1
!
interface Ethernet2
!
interface Management1
! ip of ma1 configured on launch
!
no ip routing
!
!
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment