Last Updated or created 2023-02-02
List Ovirt/RHV VM’s
( curl -s -u admin@internal:secretpassword -k https://ovirt-engine.lab/ovirt-engine/api/vms/ | grep "^ <name>" | cut -f2 -d\> | cut -f1 -d \< | while read; do
echo "$REPLY"
done ) > list
echo "NOT IN BACKUP"
cat list | while read ; do ls vmbackup/$REPLY.ova 2>/dev/null >/dev/null || echo $REPLY ;done
echo ""
ls vmbackup/*ova | while read ; do
host=$( echo $REPLY | cut -f2 -d/ | cut -f1 -d.)
age=$(stat -c %y $REPLY | cut -f1 -d" ")
echo "$age $host"
done
( curl -s -u admin@internal:secretpassword -k https://ovirt-engine.lab/ovirt-engine/api/vms/ | grep "^ <name>" | cut -f2 -d\> | cut -f1 -d \< | while read; do
echo "$REPLY"
done ) > list
echo "NOT IN BACKUP"
cat list | while read ; do ls vmbackup/$REPLY.ova 2>/dev/null >/dev/null || echo $REPLY ;done
echo ""
ls vmbackup/*ova | while read ; do
host=$( echo $REPLY | cut -f2 -d/ | cut -f1 -d.)
age=$(stat -c %y $REPLY | cut -f1 -d" ")
echo "$age $host"
done
( curl -s -u admin@internal:secretpassword -k https://ovirt-engine.lab/ovirt-engine/api/vms/ | grep "^ <name>" | cut -f2 -d\> | cut -f1 -d \< | while read; do echo "$REPLY" done ) > list echo "NOT IN BACKUP" cat list | while read ; do ls vmbackup/$REPLY.ova 2>/dev/null >/dev/null || echo $REPLY ;done echo "" ls vmbackup/*ova | while read ; do host=$( echo $REPLY | cut -f2 -d/ | cut -f1 -d.) age=$(stat -c %y $REPLY | cut -f1 -d" ") echo "$age $host" done
Backup: (UPDATE)
While i made my own backup script for Ovirt, i found this ansible based one.
https://github.com/silverorange/ovirt_ansible_backup
Backup Ovirt Engine using ansible
Usage : ansible-playbook -i ovirt-engine.lab, playbook.yml -u root (-k)
## Playbook
---
- hosts: all
vars:
ovirt_backup_mode: 'backup'
ovirt_backup_archive: '/tmp/engine-backup.gzip'
ovirt_backup_log_file: '/tmp/engine-backup.log'
ovirt_backup_scope: 'all'
ansible_python_interpreter: /usr/bin/python3
roles:
- ovirt-engine-backup
## roles/ovirt-engine-backup/tasks/main.yml
---
- name: run engine-backup
shell: 'engine-backup --mode={{ ovirt_backup_mode }} --file={{ ovirt_backup_archive }} --log={{ ovirt_backup_log_file }} --scope={{ ovirt_backup_scope }}'
tags:
- skip_ansible_lint
register: ovirt_backup_status
- name: download engine backup file
fetch:
src: "{{ ovirt_backup_archive }}"
dest: "{{ ovirt_backup_archive }}"
when: ovirt_backup_status is succeeded
- name: download log file
fetch:
src: "{{ ovirt_log_file }}"
dest: "{{ ovirt_log_file }}"
when: ovirt_backup_status is failed
Usage : ansible-playbook -i ovirt-engine.lab, playbook.yml -u root (-k)
## Playbook
---
- hosts: all
vars:
ovirt_backup_mode: 'backup'
ovirt_backup_archive: '/tmp/engine-backup.gzip'
ovirt_backup_log_file: '/tmp/engine-backup.log'
ovirt_backup_scope: 'all'
ansible_python_interpreter: /usr/bin/python3
roles:
- ovirt-engine-backup
## roles/ovirt-engine-backup/tasks/main.yml
---
- name: run engine-backup
shell: 'engine-backup --mode={{ ovirt_backup_mode }} --file={{ ovirt_backup_archive }} --log={{ ovirt_backup_log_file }} --scope={{ ovirt_backup_scope }}'
tags:
- skip_ansible_lint
register: ovirt_backup_status
- name: download engine backup file
fetch:
src: "{{ ovirt_backup_archive }}"
dest: "{{ ovirt_backup_archive }}"
when: ovirt_backup_status is succeeded
- name: download log file
fetch:
src: "{{ ovirt_log_file }}"
dest: "{{ ovirt_log_file }}"
when: ovirt_backup_status is failed
Usage : ansible-playbook -i ovirt-engine.lab, playbook.yml -u root (-k) ## Playbook --- - hosts: all vars: ovirt_backup_mode: 'backup' ovirt_backup_archive: '/tmp/engine-backup.gzip' ovirt_backup_log_file: '/tmp/engine-backup.log' ovirt_backup_scope: 'all' ansible_python_interpreter: /usr/bin/python3 roles: - ovirt-engine-backup ## roles/ovirt-engine-backup/tasks/main.yml --- - name: run engine-backup shell: 'engine-backup --mode={{ ovirt_backup_mode }} --file={{ ovirt_backup_archive }} --log={{ ovirt_backup_log_file }} --scope={{ ovirt_backup_scope }}' tags: - skip_ansible_lint register: ovirt_backup_status - name: download engine backup file fetch: src: "{{ ovirt_backup_archive }}" dest: "{{ ovirt_backup_archive }}" when: ovirt_backup_status is succeeded - name: download log file fetch: src: "{{ ovirt_log_file }}" dest: "{{ ovirt_log_file }}" when: ovirt_backup_status is failed
Gluster overview
#!/bin/bash
ansible -i inventory all -m shell -a "/sbin/gluster v info" --become -K > output
cat output | grep "^Volume Name" | sort | cut -c14- | sort | uniq
cat output | egrep "^Volume Name|^Brick|^Type" | grep -v Bricks
#!/bin/bash
ansible -i inventory all -m shell -a "/sbin/gluster v info" --become -K > output
cat output | grep "^Volume Name" | sort | cut -c14- | sort | uniq
cat output | egrep "^Volume Name|^Brick|^Type" | grep -v Bricks
#!/bin/bash ansible -i inventory all -m shell -a "/sbin/gluster v info" --become -K > output cat output | grep "^Volume Name" | sort | cut -c14- | sort | uniq cat output | egrep "^Volume Name|^Brick|^Type" | grep -v Bricks
Gluster to grafana using influx
#!/bin/bash
export PATH=$PATH:/sbin
(
# Get short shotname
host=$(echo $HOSTNAME | cut -f1 -d.)
echo "-- vg info --"
# Get vg info - pool nog doen
vgs --units k | egrep "brick|data0" | while read brickinfo ; do
name=$(echo $brickinfo | awk '{ print $1}' )
size=$(echo $brickinfo | awk '{ print $6}' | cut -f1 -d.)
free=$(echo $brickinfo | awk '{ print $7}' | cut -f1 -d. | sed s/k//g)
usage=$(echo $(( $size - $free )))
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
done
echo "-- vg info done --"
echo "-- lv info --"
# Get lv info - these are mountpoints (not bricks)
#lvs --units k | egrep "brick|data0" | grep -v pool | while read volinfo ; do
df | egrep "brick|data0" | while read volinfo ; do
name=$(echo $volinfo | awk '{ print $1}' | rev | cut -f1 -d/ | rev )
size=$(df | grep -v svg |grep "$name" | awk '{ print $2}')
usage=$(df | grep -v svg |grep "$name" | awk '{ print $3}')
free=$(df | grep -v svg |grep "$name" | awk '{ print $4}')
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
done
echo "-- lv info done --"
# Get gluster volumes without gluster command, due to issues running multiple instances
# One volume on one mountpoint ? Then df == volume metrics
: > /tmp/vollist
find /var/lib/glusterd/| grep $HOSTNAME | grep vol$ | while read brickpath ; do
grep brick-path $brickpath | awk '{print $3 }' >> /tmp/vollist
done
mount | egrep "brick|data0" | awk '{print $3 }' | while read mountpoint ; do
count=$(grep $mountpoint /tmp/vollist | wc -l)
if [ $count -lt 2 ] ; then
echo "lv = brick .. df info"
#brick=$(echo $mountpoint)
#volume=$(echo $mountpoint |rev | cut -f1 -d/ | rev)
#size=$(df $mountpoint | grep -v Filesystem | awk '{ print $2 }')
#free=$(df $mountpoint | grep -v Filesystem | awk '{ print $4 }')
#usage=$(df $mountpoint | grep -v Filesystem | awk '{ print $5 }' | sed s/%//g )
dfinfo=$(df $mountpoint | grep -v ^Filesystem)
name=$(echo $dfinfo | awk '{print $1}' | rev | cut -f1 -d/ | rev)
size=$(echo $dfinfo | awk '{print $2}')
usage=$(echo $dfinfo | awk '{print $3}')
free=$(echo $dfinfo | awk '{print $4}')
perc=$(echo $dfinfo | awk '{print $5}' | sed s/%//g)
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
#curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$brick-$volume size=$size,free=$free,usage=$usage"
else
echo "du script draaien voor $mountpoint"
fi
done
echo "-- data% --"
lvs --units k -a -oname,vg_name,size,vgfree,data_percent,pool_lv | grep -v \\[ | egrep "brick|data" | grep -v sysdata | grep -v "^ thin" | while read ; do
vg=$(echo $REPLY | awk '{print $2}')
name=$(echo $REPLY | awk '{print $6"-"$1}')
size=$(echo $REPLY | awk '{ print $3 }' | cut -f1 -d.)
free=$(echo $REPLY | awk '{ print $4 }' | cut -f1 -d. | sed s/k//g)
dataperc=$(echo $REPLY | awk '{ print $5 }' | cut -f1 -d. )
if [ "w$dataperc" == "w" ] ; then dataperc=0 ;fi
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name-$vg size=$size,free=$free,dataperc=$dataperc"
done
) 2> /dev/null >/dev/null
#!/bin/bash
export PATH=$PATH:/sbin
(
# Get short shotname
host=$(echo $HOSTNAME | cut -f1 -d.)
echo "-- vg info --"
# Get vg info - pool nog doen
vgs --units k | egrep "brick|data0" | while read brickinfo ; do
name=$(echo $brickinfo | awk '{ print $1}' )
size=$(echo $brickinfo | awk '{ print $6}' | cut -f1 -d.)
free=$(echo $brickinfo | awk '{ print $7}' | cut -f1 -d. | sed s/k//g)
usage=$(echo $(( $size - $free )))
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
done
echo "-- vg info done --"
echo "-- lv info --"
# Get lv info - these are mountpoints (not bricks)
#lvs --units k | egrep "brick|data0" | grep -v pool | while read volinfo ; do
df | egrep "brick|data0" | while read volinfo ; do
name=$(echo $volinfo | awk '{ print $1}' | rev | cut -f1 -d/ | rev )
size=$(df | grep -v svg |grep "$name" | awk '{ print $2}')
usage=$(df | grep -v svg |grep "$name" | awk '{ print $3}')
free=$(df | grep -v svg |grep "$name" | awk '{ print $4}')
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
done
echo "-- lv info done --"
# Get gluster volumes without gluster command, due to issues running multiple instances
# One volume on one mountpoint ? Then df == volume metrics
: > /tmp/vollist
find /var/lib/glusterd/| grep $HOSTNAME | grep vol$ | while read brickpath ; do
grep brick-path $brickpath | awk '{print $3 }' >> /tmp/vollist
done
mount | egrep "brick|data0" | awk '{print $3 }' | while read mountpoint ; do
count=$(grep $mountpoint /tmp/vollist | wc -l)
if [ $count -lt 2 ] ; then
echo "lv = brick .. df info"
#brick=$(echo $mountpoint)
#volume=$(echo $mountpoint |rev | cut -f1 -d/ | rev)
#size=$(df $mountpoint | grep -v Filesystem | awk '{ print $2 }')
#free=$(df $mountpoint | grep -v Filesystem | awk '{ print $4 }')
#usage=$(df $mountpoint | grep -v Filesystem | awk '{ print $5 }' | sed s/%//g )
dfinfo=$(df $mountpoint | grep -v ^Filesystem)
name=$(echo $dfinfo | awk '{print $1}' | rev | cut -f1 -d/ | rev)
size=$(echo $dfinfo | awk '{print $2}')
usage=$(echo $dfinfo | awk '{print $3}')
free=$(echo $dfinfo | awk '{print $4}')
perc=$(echo $dfinfo | awk '{print $5}' | sed s/%//g)
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage"
#curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$brick-$volume size=$size,free=$free,usage=$usage"
else
echo "du script draaien voor $mountpoint"
fi
done
echo "-- data% --"
lvs --units k -a -oname,vg_name,size,vgfree,data_percent,pool_lv | grep -v \\[ | egrep "brick|data" | grep -v sysdata | grep -v "^ thin" | while read ; do
vg=$(echo $REPLY | awk '{print $2}')
name=$(echo $REPLY | awk '{print $6"-"$1}')
size=$(echo $REPLY | awk '{ print $3 }' | cut -f1 -d.)
free=$(echo $REPLY | awk '{ print $4 }' | cut -f1 -d. | sed s/k//g)
dataperc=$(echo $REPLY | awk '{ print $5 }' | cut -f1 -d. )
if [ "w$dataperc" == "w" ] ; then dataperc=0 ;fi
curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name-$vg size=$size,free=$free,dataperc=$dataperc"
done
) 2> /dev/null >/dev/null
#!/bin/bash export PATH=$PATH:/sbin ( # Get short shotname host=$(echo $HOSTNAME | cut -f1 -d.) echo "-- vg info --" # Get vg info - pool nog doen vgs --units k | egrep "brick|data0" | while read brickinfo ; do name=$(echo $brickinfo | awk '{ print $1}' ) size=$(echo $brickinfo | awk '{ print $6}' | cut -f1 -d.) free=$(echo $brickinfo | awk '{ print $7}' | cut -f1 -d. | sed s/k//g) usage=$(echo $(( $size - $free ))) curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage" done echo "-- vg info done --" echo "-- lv info --" # Get lv info - these are mountpoints (not bricks) #lvs --units k | egrep "brick|data0" | grep -v pool | while read volinfo ; do df | egrep "brick|data0" | while read volinfo ; do name=$(echo $volinfo | awk '{ print $1}' | rev | cut -f1 -d/ | rev ) size=$(df | grep -v svg |grep "$name" | awk '{ print $2}') usage=$(df | grep -v svg |grep "$name" | awk '{ print $3}') free=$(df | grep -v svg |grep "$name" | awk '{ print $4}') curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage" done echo "-- lv info done --" # Get gluster volumes without gluster command, due to issues running multiple instances # One volume on one mountpoint ? Then df == volume metrics : > /tmp/vollist find /var/lib/glusterd/| grep $HOSTNAME | grep vol$ | while read brickpath ; do grep brick-path $brickpath | awk '{print $3 }' >> /tmp/vollist done mount | egrep "brick|data0" | awk '{print $3 }' | while read mountpoint ; do count=$(grep $mountpoint /tmp/vollist | wc -l) if [ $count -lt 2 ] ; then echo "lv = brick .. df info" #brick=$(echo $mountpoint) #volume=$(echo $mountpoint |rev | cut -f1 -d/ | rev) #size=$(df $mountpoint | grep -v Filesystem | awk '{ print $2 }') #free=$(df $mountpoint | grep -v Filesystem | awk '{ print $4 }') #usage=$(df $mountpoint | grep -v Filesystem | awk '{ print $5 }' | sed s/%//g ) dfinfo=$(df $mountpoint | grep -v ^Filesystem) name=$(echo $dfinfo | awk '{print $1}' | rev | cut -f1 -d/ | rev) size=$(echo $dfinfo | awk '{print $2}') usage=$(echo $dfinfo | awk '{print $3}') free=$(echo $dfinfo | awk '{print $4}') perc=$(echo $dfinfo | awk '{print $5}' | sed s/%//g) curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name size=$size,free=$free,usage=$usage" #curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$brick-$volume size=$size,free=$free,usage=$usage" else echo "du script draaien voor $mountpoint" fi done echo "-- data% --" lvs --units k -a -oname,vg_name,size,vgfree,data_percent,pool_lv | grep -v \\[ | egrep "brick|data" | grep -v sysdata | grep -v "^ thin" | while read ; do vg=$(echo $REPLY | awk '{print $2}') name=$(echo $REPLY | awk '{print $6"-"$1}') size=$(echo $REPLY | awk '{ print $3 }' | cut -f1 -d.) free=$(echo $REPLY | awk '{ print $4 }' | cut -f1 -d. | sed s/k//g) dataperc=$(echo $REPLY | awk '{ print $5 }' | cut -f1 -d. ) if [ "w$dataperc" == "w" ] ; then dataperc=0 ;fi curl -i -XPOST 'http://grafanaserver:8086/write?db=gluster' --data-binary "$host-$name-$vg size=$size,free=$free,dataperc=$dataperc" done ) 2> /dev/null >/dev/null
Running Ovirt and want a overview of glustermounts in VMs?
run makeinventory.sh (this creats an list of linux hosts which are UP in RHV/Ovirt)
#!/bin/bash
#ik haal een lijst op van virtual machines die aanstaan en linux draaien
#set -x
mkdir -p tmp
rm -f tmp/linuxup
read -p "Username: " x2
read -s -p "Password: " x1
echo " "
curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms | grep "vm href=" | cut -c37-72 > tmp/vms
cat tmp/vms | while read vm ; do
echo -n "."
curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms/$vm > tmp/$vm
done
echo " "
: > tmp/linuxup
find tmp -type f -mtime 0 | egrep -v "vms$|linuxup" | while read ; do
name=$(cat $REPLY | grep -i "^ <name>"| cut -f2 -d\> | cut -f1 -d \<)
os=$(cat $REPLY | egrep "^ <family>" | egrep -v "svw|SVNT|debian|ubuntu|server|spice|vnc|windows_|native" | cut -f2 -d\> | cut -f1 -d \<)
up=$(cat $REPLY | grep -A1 start_time | tail -1| cut -f2 -d\> | cut -f1 -d \<)
echo $name,$os,$up | grep -v ",," | grep ",up" >> tmp/linuxup
cat tmp/linuxup
echo ""
echo "staat in tmp/linuxup"
done
echo "[all]" > inventory
cat tmp/linuxup | grep "."| grep -i linux | cut -f1 -d, >> inventory
Run get.sh
* ansible on all hosts (inventory) and fetches gluster mounts
* reorders this info
* generates a dot file (graphviz)
* running dot fot a svg/png output for every gluster host
#!/bin/bash
echo "draai eerst makeinventory.sh voor een nieuwe host lijst"
read d
echo "Kijk ook of ansible alle servers kan bereiken"
read d
ansible -i inventory all -m shell -a cat /etc/mtab | grep gluster | while read; do source=$(echo $REPLY | cut -f1 -d" ");dest=$(echo $REPLY | cut -f2 -d" ") ; echo " " ;echo "$source $HOSTNAME:$dest" ;done > gluster
cat gluster | grep ^s | grep : > gluster.grep
cat gluster.grep | cut -f1 -d: | sort | uniq | while read gluster ; do
cat header > $gluster.dot
cat gluster.grep | grep $gluster | cut -f1 -d" "| sort | uniq | while read ; do echo " \"$REPLY\";" ;done >> $gluster.dot
cat middel >> $gluster.dot
cat gluster.grep | grep $gluster| sed s/^/\"/ | sed s/\ /\"\ \-\>\ \"/ | sed s/$/\"\;/ >> $gluster.dot
cat footer >> $gluster.dot
dot $gluster.dot -Tsvg >$gluster.svg
dot -Gsize=9,15\! -Gdpi=100 $gluster.dot -Tpng >$gluster.png
done
A php select page to few them
<form method="post">
<select name="volume">
<?PHP
foreach (glob("*.svg") as $filename) {
echo "<option value=" . $filename .">" . $filename . "</option>";
}
?>
</select>
<input type="submit" value="Submit">
</form>
<?PHP
if (isset($_POST['volume'])){
$image=$_POST['volume'];
echo "<img src=\"$image\">";
}
?>
example below:
run makeinventory.sh (this creats an list of linux hosts which are UP in RHV/Ovirt)
#!/bin/bash
#ik haal een lijst op van virtual machines die aanstaan en linux draaien
#set -x
mkdir -p tmp
rm -f tmp/linuxup
read -p "Username: " x2
read -s -p "Password: " x1
echo " "
curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms | grep "vm href=" | cut -c37-72 > tmp/vms
cat tmp/vms | while read vm ; do
echo -n "."
curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms/$vm > tmp/$vm
done
echo " "
: > tmp/linuxup
find tmp -type f -mtime 0 | egrep -v "vms$|linuxup" | while read ; do
name=$(cat $REPLY | grep -i "^ <name>"| cut -f2 -d\> | cut -f1 -d \<)
os=$(cat $REPLY | egrep "^ <family>" | egrep -v "svw|SVNT|debian|ubuntu|server|spice|vnc|windows_|native" | cut -f2 -d\> | cut -f1 -d \<)
up=$(cat $REPLY | grep -A1 start_time | tail -1| cut -f2 -d\> | cut -f1 -d \<)
echo $name,$os,$up | grep -v ",," | grep ",up" >> tmp/linuxup
cat tmp/linuxup
echo ""
echo "staat in tmp/linuxup"
done
echo "[all]" > inventory
cat tmp/linuxup | grep "."| grep -i linux | cut -f1 -d, >> inventory
Run get.sh
* ansible on all hosts (inventory) and fetches gluster mounts
* reorders this info
* generates a dot file (graphviz)
* running dot fot a svg/png output for every gluster host
#!/bin/bash
echo "draai eerst makeinventory.sh voor een nieuwe host lijst"
read d
echo "Kijk ook of ansible alle servers kan bereiken"
read d
ansible -i inventory all -m shell -a cat /etc/mtab | grep gluster | while read; do source=$(echo $REPLY | cut -f1 -d" ");dest=$(echo $REPLY | cut -f2 -d" ") ; echo " " ;echo "$source $HOSTNAME:$dest" ;done > gluster
cat gluster | grep ^s | grep : > gluster.grep
cat gluster.grep | cut -f1 -d: | sort | uniq | while read gluster ; do
cat header > $gluster.dot
cat gluster.grep | grep $gluster | cut -f1 -d" "| sort | uniq | while read ; do echo " \"$REPLY\";" ;done >> $gluster.dot
cat middel >> $gluster.dot
cat gluster.grep | grep $gluster| sed s/^/\"/ | sed s/\ /\"\ \-\>\ \"/ | sed s/$/\"\;/ >> $gluster.dot
cat footer >> $gluster.dot
dot $gluster.dot -Tsvg >$gluster.svg
dot -Gsize=9,15\! -Gdpi=100 $gluster.dot -Tpng >$gluster.png
done
A php select page to few them
<form method="post">
<select name="volume">
<?PHP
foreach (glob("*.svg") as $filename) {
echo "<option value=" . $filename .">" . $filename . "</option>";
}
?>
</select>
<input type="submit" value="Submit">
</form>
<?PHP
if (isset($_POST['volume'])){
$image=$_POST['volume'];
echo "<img src=\"$image\">";
}
?>
example below:
run makeinventory.sh (this creats an list of linux hosts which are UP in RHV/Ovirt) #!/bin/bash #ik haal een lijst op van virtual machines die aanstaan en linux draaien #set -x mkdir -p tmp rm -f tmp/linuxup read -p "Username: " x2 read -s -p "Password: " x1 echo " " curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms | grep "vm href=" | cut -c37-72 > tmp/vms cat tmp/vms | while read vm ; do echo -n "." curl -s -X GET -H "Accept: application/xml" --insecure -u $x2@radlan:$x1 https://ovirtserver/ovirt-engine/api/vms/$vm > tmp/$vm done echo " " : > tmp/linuxup find tmp -type f -mtime 0 | egrep -v "vms$|linuxup" | while read ; do name=$(cat $REPLY | grep -i "^ <name>"| cut -f2 -d\> | cut -f1 -d \<) os=$(cat $REPLY | egrep "^ <family>" | egrep -v "svw|SVNT|debian|ubuntu|server|spice|vnc|windows_|native" | cut -f2 -d\> | cut -f1 -d \<) up=$(cat $REPLY | grep -A1 start_time | tail -1| cut -f2 -d\> | cut -f1 -d \<) echo $name,$os,$up | grep -v ",," | grep ",up" >> tmp/linuxup cat tmp/linuxup echo "" echo "staat in tmp/linuxup" done echo "[all]" > inventory cat tmp/linuxup | grep "."| grep -i linux | cut -f1 -d, >> inventory Run get.sh * ansible on all hosts (inventory) and fetches gluster mounts * reorders this info * generates a dot file (graphviz) * running dot fot a svg/png output for every gluster host #!/bin/bash echo "draai eerst makeinventory.sh voor een nieuwe host lijst" read d echo "Kijk ook of ansible alle servers kan bereiken" read d ansible -i inventory all -m shell -a cat /etc/mtab | grep gluster | while read; do source=$(echo $REPLY | cut -f1 -d" ");dest=$(echo $REPLY | cut -f2 -d" ") ; echo " " ;echo "$source $HOSTNAME:$dest" ;done > gluster cat gluster | grep ^s | grep : > gluster.grep cat gluster.grep | cut -f1 -d: | sort | uniq | while read gluster ; do cat header > $gluster.dot cat gluster.grep | grep $gluster | cut -f1 -d" "| sort | uniq | while read ; do echo " \"$REPLY\";" ;done >> $gluster.dot cat middel >> $gluster.dot cat gluster.grep | grep $gluster| sed s/^/\"/ | sed s/\ /\"\ \-\>\ \"/ | sed s/$/\"\;/ >> $gluster.dot cat footer >> $gluster.dot dot $gluster.dot -Tsvg >$gluster.svg dot -Gsize=9,15\! -Gdpi=100 $gluster.dot -Tpng >$gluster.png done A php select page to few them <form method="post"> <select name="volume"> <?PHP foreach (glob("*.svg") as $filename) { echo "<option value=" . $filename .">" . $filename . "</option>"; } ?> </select> <input type="submit" value="Submit"> </form> <?PHP if (isset($_POST['volume'])){ $image=$_POST['volume']; echo "<img src=\"$image\">"; } ?> example below:
Get a list of RHV snapshots and descriptions
#!/bin/bash
: > outlist
read -p "Username: " user
read -s -p "Password: " pass
curl -X GET -H "Accept: application/xml" -u $user@internal:$pass -k https://ovirt-engine:443/ovirt-engine/api/vms | egrep "<name>|snapshots" | grep -v " " | sed '$!N;s/\n/ /' > templist
cat templist | cut -f2,3 -d\> | cut -f1,3 -d\< | sed 's/<link href=\"/ /g' | cut -f1 -d\" > templist2
cat templist2 | while read ; do
host=$(echo $REPLY | awk '{ print $1 }')
link=$(echo $REPLY | awk '{ print $2 }')
echo $host >> outlist
curl -X GET -H "Accept: application/xml" -u $user@radlan:$pass -k https://ovirt-engine:443/$link | egrep "description|date" | grep -v ' <' >> outlist ; echo "----" >> outlist
done
cat outlist | awk '/Active VM/ {getline; next} { print }' > /tmp/outlist
grep -B3 date /tmp/outlist |sed -e 's/<[^>]*>//g' > /tmp/snapshots
cat /tmp/snapshots | awk '/----/ {printf "\n%s\n",$0;next} {printf "%s ",$0}' | sed 's/ --*//g' | grep -v '\-\-\-\-' | grep " " > snapshots
Output:
svr04.lab Backup 2019-06-28T07:55:28.909+02:00
svr05.lab upgrade 2019-06-18T14:18:49.745+02:00
svr33.lab pre_ansible 2019-06-18T14:04:43.569+02:00
Somewhere i've got a snapshot age warn script.
This information was posted in Mattermost when sending the "/snapshots" command
#!/bin/bash
: > outlist
read -p "Username: " user
read -s -p "Password: " pass
curl -X GET -H "Accept: application/xml" -u $user@internal:$pass -k https://ovirt-engine:443/ovirt-engine/api/vms | egrep "<name>|snapshots" | grep -v " " | sed '$!N;s/\n/ /' > templist
cat templist | cut -f2,3 -d\> | cut -f1,3 -d\< | sed 's/<link href=\"/ /g' | cut -f1 -d\" > templist2
cat templist2 | while read ; do
host=$(echo $REPLY | awk '{ print $1 }')
link=$(echo $REPLY | awk '{ print $2 }')
echo $host >> outlist
curl -X GET -H "Accept: application/xml" -u $user@radlan:$pass -k https://ovirt-engine:443/$link | egrep "description|date" | grep -v ' <' >> outlist ; echo "----" >> outlist
done
cat outlist | awk '/Active VM/ {getline; next} { print }' > /tmp/outlist
grep -B3 date /tmp/outlist |sed -e 's/<[^>]*>//g' > /tmp/snapshots
cat /tmp/snapshots | awk '/----/ {printf "\n%s\n",$0;next} {printf "%s ",$0}' | sed 's/ --*//g' | grep -v '\-\-\-\-' | grep " " > snapshots
Output:
svr04.lab Backup 2019-06-28T07:55:28.909+02:00
svr05.lab upgrade 2019-06-18T14:18:49.745+02:00
svr33.lab pre_ansible 2019-06-18T14:04:43.569+02:00
Somewhere i've got a snapshot age warn script.
This information was posted in Mattermost when sending the "/snapshots" command
#!/bin/bash : > outlist read -p "Username: " user read -s -p "Password: " pass curl -X GET -H "Accept: application/xml" -u $user@internal:$pass -k https://ovirt-engine:443/ovirt-engine/api/vms | egrep "<name>|snapshots" | grep -v " " | sed '$!N;s/\n/ /' > templist cat templist | cut -f2,3 -d\> | cut -f1,3 -d\< | sed 's/<link href=\"/ /g' | cut -f1 -d\" > templist2 cat templist2 | while read ; do host=$(echo $REPLY | awk '{ print $1 }') link=$(echo $REPLY | awk '{ print $2 }') echo $host >> outlist curl -X GET -H "Accept: application/xml" -u $user@radlan:$pass -k https://ovirt-engine:443/$link | egrep "description|date" | grep -v ' <' >> outlist ; echo "----" >> outlist done cat outlist | awk '/Active VM/ {getline; next} { print }' > /tmp/outlist grep -B3 date /tmp/outlist |sed -e 's/<[^>]*>//g' > /tmp/snapshots cat /tmp/snapshots | awk '/----/ {printf "\n%s\n",$0;next} {printf "%s ",$0}' | sed 's/ --*//g' | grep -v '\-\-\-\-' | grep " " > snapshots Output: svr04.lab Backup 2019-06-28T07:55:28.909+02:00 svr05.lab upgrade 2019-06-18T14:18:49.745+02:00 svr33.lab pre_ansible 2019-06-18T14:04:43.569+02:00 Somewhere i've got a snapshot age warn script. This information was posted in Mattermost when sending the "/snapshots" command
Ansible Playbook to add virtual nics
---
- name: adnic
hosts: localhost
gather_facts: false
become: no
vars_prompt:
- name: "username"
prompt: "IPA username"
private: no
- name: "password"
prompt: "IPA password"
private: yes
- name: "server"
prompt: "server"
private: no
- name: "interface"
prompt: "interface"
private: no
default: 'eth1'
- name: "nicprofile"
prompt: "dmz or other"
private: no
default: 'dmz'
tasks:
- name: Obtain SSO token with using username/password credentials
ovirt_auth:
url: https://ovirt-engine.lab/ovirt-engine/api
username: "{{ username }}@internal"
insecure: yes
password: "{{ password }}"
- ovirt_nics:
auth: "{{ ovirt_auth }}"
vm: "{{ server }}"
state: "present"
name: "{{ interface }}"
network: "{{ nicprofile }}"
profile: "{{ nicprofile }}"
---
- name: adnic
hosts: localhost
gather_facts: false
become: no
vars_prompt:
- name: "username"
prompt: "IPA username"
private: no
- name: "password"
prompt: "IPA password"
private: yes
- name: "server"
prompt: "server"
private: no
- name: "interface"
prompt: "interface"
private: no
default: 'eth1'
- name: "nicprofile"
prompt: "dmz or other"
private: no
default: 'dmz'
tasks:
- name: Obtain SSO token with using username/password credentials
ovirt_auth:
url: https://ovirt-engine.lab/ovirt-engine/api
username: "{{ username }}@internal"
insecure: yes
password: "{{ password }}"
- ovirt_nics:
auth: "{{ ovirt_auth }}"
vm: "{{ server }}"
state: "present"
name: "{{ interface }}"
network: "{{ nicprofile }}"
profile: "{{ nicprofile }}"
--- - name: adnic hosts: localhost gather_facts: false become: no vars_prompt: - name: "username" prompt: "IPA username" private: no - name: "password" prompt: "IPA password" private: yes - name: "server" prompt: "server" private: no - name: "interface" prompt: "interface" private: no default: 'eth1' - name: "nicprofile" prompt: "dmz or other" private: no default: 'dmz' tasks: - name: Obtain SSO token with using username/password credentials ovirt_auth: url: https://ovirt-engine.lab/ovirt-engine/api username: "{{ username }}@internal" insecure: yes password: "{{ password }}" - ovirt_nics: auth: "{{ ovirt_auth }}" vm: "{{ server }}" state: "present" name: "{{ interface }}" network: "{{ nicprofile }}" profile: "{{ nicprofile }}"
Ansible playbook to create snapshots
- name: makesnap
hosts: localhost
gather_facts: false
vars_prompt:
- name: "username"
prompt: "IPA username"
private: no
- name: "password"
prompt: "IPA password"
private: yes
- name: "hostname"
prompt: "hostname"
private: no
- name: "snapshotname"
prompt: "snapshotname"
private: no
tasks:
- name: Make snapshot
ovirt_snapshots:
auth:
username: "{{ username }}@internal"
password: "{{ password }}"
insecure: True
url: https://ovirt-engine.lab/ovirt-engine/api
description: "{{ snapshotname }}"
use_memory: true
state: present
timeout: 600
vm_name: "{{ hostname }}"
- name: makesnap
hosts: localhost
gather_facts: false
vars_prompt:
- name: "username"
prompt: "IPA username"
private: no
- name: "password"
prompt: "IPA password"
private: yes
- name: "hostname"
prompt: "hostname"
private: no
- name: "snapshotname"
prompt: "snapshotname"
private: no
tasks:
- name: Make snapshot
ovirt_snapshots:
auth:
username: "{{ username }}@internal"
password: "{{ password }}"
insecure: True
url: https://ovirt-engine.lab/ovirt-engine/api
description: "{{ snapshotname }}"
use_memory: true
state: present
timeout: 600
vm_name: "{{ hostname }}"
- name: makesnap hosts: localhost gather_facts: false vars_prompt: - name: "username" prompt: "IPA username" private: no - name: "password" prompt: "IPA password" private: yes - name: "hostname" prompt: "hostname" private: no - name: "snapshotname" prompt: "snapshotname" private: no tasks: - name: Make snapshot ovirt_snapshots: auth: username: "{{ username }}@internal" password: "{{ password }}" insecure: True url: https://ovirt-engine.lab/ovirt-engine/api description: "{{ snapshotname }}" use_memory: true state: present timeout: 600 vm_name: "{{ hostname }}"