Browse Source

created folder structure, added remote live capture batch file

master
Sebastian Rieger 6 years ago
parent
commit
ad5da47efa
  1. 18
      capture-from-socket.bat
  2. 152
      create-arista-veos-image/create-arista-veos-image.sh
  3. 22
      create-arista-veos-image/dynamic-subtype-vEOS.json
  4. 28
      create-arista-veos-image/minimal-config-vEOS.txt

18
capture-from-socket.bat

@ -0,0 +1,18 @@
@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 -"

152
create-arista-veos-image/create-arista-veos-image.sh

@ -0,0 +1,152 @@
#!/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

22
create-arista-veos-image/dynamic-subtype-vEOS.json

@ -0,0 +1,22 @@
{
"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
}
]
}

28
create-arista-veos-image/minimal-config-vEOS.txt

@ -0,0 +1,28 @@
! 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
Loading…
Cancel
Save