====== openQRM - Z-IP's ====== Ziel ist es, dass die erstellten VM's bzw. Cloud's nicht nur eine NIC mit IP haben, sondern auch noch weitere NIC, von denen jede einzelne an ein anderes physikalisches Netz gebunden ist. In unserem Fall ist die "normale" NIC (eth0:op) mit einer IP konfiguriert, die von openQRM zur allgemeinen Verwaltung vergeben wird. Wir brauchen noch eine Verbindung in das Datenbanknetz und eine Verbindung ins Internet (Loadbalancer). Die Konfiguration dieser beiden NIC's soll von diesem Plugin übernommen werden. Wenn dieses Plugin installiert wurden, müssen die erforderlichen Anpassungen in der DNS-Konfiguration: [[openQRM - DNS]] noch vorgenommen werden, damit die DNS-Einträge für die zusätzlichen IP's auch automatisch beim anlegen der Appliance vorgenommen werden. ===== allgemeines über Plugin's ===== Ein Plugin wird immer erst gestartet, **nach** dem das gewünschte "/"-Dateisystem (aus dem "Image") gemountet ist. Soll eine Aktion **vor** dem mounten ausgeführt werden (also auch dann, wenn die "Appliance" gestoppt wurde), dann muss die Aktion über die entsprechenden HOOK's implementiert werden. Aber **Vorsicht**, die HOOK's gehören zum Basissystem und müssen mit allen möglichen Kombinationen der verschiedenen Plugins ohne Seiteneffekte zusammen arbeiten! Will man ein eigenes Plugin für openQRM bauen, dann geht das wie folgt. In diesem Beispiel wird das TFTP-Plugin als Vorlage verwendet: ===== das Z-IP-Plugin ===== # /usr/share/openqrm/bin/openqrm-create-plugin # /usr/share/openqrm/bin/openqrm-create-plugin tftpd zips # cd /usr/share/openqrm/plugins/zips/ # rm -f web/.running ==== etc/init.d/openqrm-plugin-zips ==== ... function openqrm_plugin_zips_init() { echo "Initializing the openQRM zips-plugin" # linking the web dir ln -sf $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/web $OPENQRM_WEBSERVER_DOCUMENT_ROOT/openqrm/base/plugins/zips # linking the boot-service ln -sf $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/web/boot-service-zips.tgz $OPENQRM_WEBSERVER_DOCUMENT_ROOT/openqrm/boot-service/boot-service-zips.tgz # Kopieraktionen cp $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/bin/zipscfg.sh /usr/share/openqrm/web/boot-service/zipscfg.sh WWWDIR="$(echo "$(cat $(ls $(cat $(apache2 -V | egrep 'HTTPD_ROOT|SERVER_CONFIG_FILE' | awk -F'"' '{print $2}' | tr -s '\n' '/' | sed 's#/$##') | egrep '^Include' | fgrep -v '^$' | sed -e 's#^Include[ ]*##' -e 's#.*/$#&\*#')) | egrep -i 'DocumentRoot' | awk '{print $NF}' | sort | uniq | head -n1)")" CGIBIN="$(cat $(ls $(cat $($(which httpd;which apache2) -V | egrep 'HTTPD_ROOT|SERVER_CONFIG_FILE' | awk -F'"' '{print $2}' | tr -s '\n' '/' | sed 's#/$##') | egrep '^Include' | fgrep -v '^$' | sed -e 's#^Include[ ]*##' -e 's#.*/$#&\*#')) | egrep -v '^#|DirectoryMatch' | egrep '/cgi-bin[/]*$' | sed -e 's#"##g' -e 's#[<>]*##g' | awk '{sub("/$","");print $NF}' | sort | uniq | head -n1)" if [ -d "${CGIBIN}" ] ;then sed -e -i "s#WWWDIR=.*#WWWDIR='${WWWDIR}'#" $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg sed -e -i "s#CGIBIN=.*#CGIBIN='${CGIBIN}'#" $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg cp $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/cgi-bin/zimmer_netzcfg.cgi ${CGIBIN}/ cp $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/cgi-bin/zimmer_ip-machen.cgi ${CGIBIN}/ chmod 0755 ${CGIBIN}/zimmer_netzcfg.cgi fi } ... ==== web/openqrm-zips-resource-hook.php ==== ... function openqrm_zips_resource($cmd, $resource_fields) { global $event; global $OPENQRM_SERVER_BASE_DIR; global $OPENQRM_SERVER_IP_ADDRESS; global $OPENQRM_EXEC_PORT; $resource_id=$resource_fields["resource_id"]; $resource_ip=$resource_fields["resource_ip"]; $resource_mac=$resource_fields["resource_mac"]; $event->log("openqrm_new_resource", $_SERVER['REQUEST_TIME'], 5, "openqrm-zips-resource-hook.php", "Handling $cmd event $resource_id/$resource_ip/$resource_mac", "", "", 0, 0, $resource_id); $mycommand = $OPENQRM_SERVER_BASE_DIR."/openqrm/plugins/montag/bin/zips.sh ".$resource_id." ".$resource_ip." ".$resource_mac; $openqrmserver = new openqrm_server(); $openqrmserver->send_command($mycommand); } ... ==== web/zips-about.php ==== ... function zips_about() { global $OPENQRM_SERVER_BASE_DIR; $disp = "

Tftpd plugin

"; $disp = $disp."
"; $disp = $disp."Ziel ist es, dass die erstellten VM's bzw. Cloud's nicht nur eine NIC mit IP haben, sondern auch noch weitere NIC, von denen jede einzelne an ein anderes physikalisches Netz gebunden ist." $disp = $disp."
" $disp = $disp."In unserem Fall ist die „normale“ NIC (eth0:op) mit einer IP konfiguriert, die von openQRM zur allgemeinen Verwaltung vergeben wird. Wir brauchen noch eine Verbindung in das Datenbanknetz und eine Verbindung ins Internet (Loadbalancer). Die Konfiguration dieser beiden NIC's soll von diesem Plugin übernommen werden." $disp = $disp."
" $disp = $disp."Wenn dieses Plugin installiert wurden, müssen die erforderlichen Anpassungen in der DNS-Konfiguration noch vorgenommen werden, damit die DNS-Einträge für die zusätzlichen IP's auch automatisch beim anlegen der Appliance vorgenommen werden:" $disp = $disp."
"; $disp = $disp."siehe http://10.10.2.222/wiki/doku.php?id=openqrm_-_dns"; $disp = $disp."
"; $disp = $disp."Es ist geplant, dass diese Anpassungen auch diesem Plugin vorgenommen werden."; $disp = $disp."
"; $disp = $disp."
"; $disp = $disp."How to use :"; $disp = $disp."
"; $disp = $disp."
"; $disp = $disp."No manual configuration is needed for the zips-plugin. It automatically starts up the zips-service during start-up of the plugin."; $disp = $disp."
"; $disp = $disp."
"; $disp = $disp."
"; return $disp; } ... ==== etc/zips.cfg ==== Hier werden die Tabellennamen für die Gruppentabelle und für die IP-Tabelle sowie die Sortierreihenfolge der Anzeigen festgelegt. . /usr/share/openqrm/etc/openqrm-server.conf DATABASENET='10.4.' EXTERNNET='10.7.' WWWDIR='/var/www' CGIBIN='/usr/lib/cgi-bin/' ZIPGROUPS="zimmer_ipgroups" ZIPTABLES="zimmer_iptables" ZIPGORDER="ig_id" #ZIPGORDER="ig_name" ZIPTORDER="INET_ATON(ip_address)" ### Tabellen anlegen, wenn nicht schon vorhanden! echo " CREATE DATABASE IF NOT EXISTS ${OPENQRM_DATABASE_NAME}; USE ${OPENQRM_DATABASE_NAME}; CREATE TABLE IF NOT EXISTS ${ZIPGROUPS} ( ig_id int(5) NOT NULL, ig_name varchar(50) NOT NULL, ig_domain varchar(50) default NULL, PRIMARY KEY (ig_id), KEY (ig_name) ) TYPE=MyISAM; CREATE TABLE IF NOT EXISTS ${ZIPTABLES} ( ip_ig_id int(5) NOT NULL, ip_eth varchar(8) default 'eth1', ip_hostname varchar(50), ip_domain varchar(50) NOT NULL, ip_address varchar(15) NOT NULL, ip_subnet varchar(15), ip_gateway varchar(15), ip_dns1 varchar(15), ip_dns2 varchar(15), PRIMARY KEY (ip_address) ) TYPE=MyISAM; " | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} ==== bin/zipscfg.sh ==== Dieses Script wird vom Clienten ausgeführt, um die zusätzliche Netzwerkkonfiguration durchzuführen. #!/bin/bash aptitude -y install links ethtool LINKS="$(which links)" if [ -n "${LINKS}" ] ; then . /var/openqrm/openqrm-resource.conf IFS="|" ${LINKS} -dump http://${resource_openqrmserver}/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=$(hostname) | egrep -v '[\+\|]---------' | while read ANFANG ip_eth ip_hostname ip_domain ip_address ip_subnet ip_gateway ip_dns1 ip_dns2 ENDE do ip_eth="$(echo "${ip_eth}" | awk '{print $1}')" ip_hostname="$(echo "${ip_hostname}" | awk '{print $1}')" ip_domain="$(echo "${ip_domain}" | awk '{print $1}')" ip_address="$(echo "${ip_address}" | awk '{print $1}')" ip_subnet="$(echo "${ip_subnet}" | sed 's/%22//g' | awk '{print $1}')" ip_gateway="$(echo "${ip_gateway}" | sed 's/%22//g' | awk '{print $1}')" ip_dns1="$(echo "${ip_dns1}" | sed 's/%22//g' | awk '{print $1}')" ip_dns2="$(echo "${ip_dns2}" | sed 's/%22//g' | awk '{print $1}')" if [ -z "${1}" ] ; then if [ -n "${ip_address}" -a -n "${ip_eth}" -a "${ip_address}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then echo "ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth}" ip addr add ${ip_address}/${ip_subnet} dev ${ip_eth} echo "ip link set ${ip_eth} up" ip link set ${ip_eth} up fi if [ -n "${ip_gateway}" -a -n "${ip_eth}" -a "${ip_gateway}" != "NULL" -a "${ip_eth}" != "NULL" ] ; then if $(ip route | egrep ^default > /dev/null) ; then echo "ip route add ${ip_gateway} dev ${ip_eth}" ip route add ${ip_gateway} dev ${ip_eth} else echo "ip route add default via ${ip_gateway} dev ${ip_eth}" ip route add default via ${ip_gateway} dev ${ip_eth} fi fi if [ -n "${ip_domain}" -o -n "${ip_dns1}" -o -n "${ip_dns2}" -a "${ip_domain}" != "NULL" -a "${ip_dns1}" != "NULL" -a "${ip_dns2}" != "NULL" ] ; then echo "search idstein.alphatel.de victorvox.net med.alphatel.de alphatel.de database extern" \ # | tee /etc/resolv.conf fi if [ -n "${ip_domain}" -a "${ip_domain}" != "NULL" ] ; then echo "domain ${ip_domain}" \ # | tee -a /etc/resolv.conf fi if [ -n "${ip_dns1}" -a "${ip_dns1}" != "NULL" ] ; then echo "nameserver ${ip_dns1}" \ # | tee -a /etc/resolv.conf fi if [ -n "${ip_dns2}" -a "${ip_dns2}" != "NULL" ] ; then echo "nameserver ${ip_dns2}" \ # | tee -a /etc/resolv.conf fi else echo " ANFANG='${ANFANG}' ip_eth='${ip_eth}' ip_hostname='${ip_hostname}' ip_domain='${ip_domain}' ip_address='${ip_address}' ip_subnet='${ip_subnet}' ip_gateway='${ip_gateway}' ip_dns1='${ip_dns1}' ip_dns2='${ip_dns2}' ENDE='${ENDE}' " fi done else echo "links konnte nicht installiert werden" fi ==== /usr/share/openqrm/web/base/top.php ==== Hier ist die Zeile mit **/cgi-bin/zimmer_ip-machen.cgi** eingefühgt worden: ...
Error(s) Support Documentation Remote-Consolen-IP's QRM-Info Zimmer-IP-Gruppen Wiki
 
... ==== /usr/lib/cgi-bin/zimmer_ip-machen.cgi ==== Dieses Script ist das Herzstück, hier werden alle wichtigen Aktionen mit realisiert. #!/bin/sh DATENDATEI="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" ### POST-Daten werden in eine Datei geschrieben echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | tr -d '"' > ${DATENDATEI} 2>&1 . ${DATENDATEI} . /usr/share/openqrm/etc/openqrm-server.conf . $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg ### GET AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')" WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}')" ### Achtung! # "action" englisch und klein geschrieben, ist die Variable aus dem POST-Datenstrom; # "AKTION" deutsch und groß geschrieben, ist aus der GET-Zeile if [ -n "${1}" -a -z "${AKTION}" ] ; then AKTION="$(echo "${1}" | awk -F'=' '{print $1}')" WERT="$(echo "${1}" | awk -F'=' '{print $2}')" fi ### mit dem richtigen "action"-Eintrag wird eine neue Gruppe erstelt if [ "${action}" = "angelegt" ] ; then #------------------------------------------------------------------------------# ### den neuen Wert für ig_id bestimmen ZAHLEN1="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" ZAHLEN2="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" igidmax="$(echo "SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} DESC LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" echo "$(seq 1 ${igidmax})" > ${ZAHLEN1} echo " SELECT ig_id FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} ASC; "|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | egrep -v '^$' > ${ZAHLEN2} ig_id="$(sdiff ${ZAHLEN1} ${ZAHLEN2} | fgrep '<' | awk '{print $1}' | head -n1)" if [ -z "${ig_id}" -o "${ig_id}" = "0" ] ; then ig_id="$((${igidmax}+1))" fi rm -f ${ZAHLEN1} ${ZAHLEN2} ### der "action"-Eintrag wird entfernt sed -i -e 's/action=angelegt//' -e 's/ip_adressen=.*//' -e 's/ig_name=.*//' ${DATENDATEI} ### die neue Gruppe wird erstelt (echo "INSERT INTO ${ZIPGROUPS} (ig_id,ig_name,ig_domain) VALUES ('${ig_id}','${ig_name}','${ip_domain}');" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 ### IPs in die Tabelle eintragen echo "${ip_adressen}" | sed -e 's#%0D%0A#\n#g' | egrep -v '^$' | while read ADRESSE do echo "INSERT INTO ${ZIPTABLES} (ip_ig_id,ip_address,$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ('${ig_id}','${ADRESSE}',$(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/',$/'/"));" done) | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 ### und noch ein schöner Gruß ${CGIBIN}/zimmer_ip-machen.cgi elif [ "${action}" = "aendern" ] ; then sed -i -e 's/action=aendern//' ${DATENDATEI} echo 'Content-type: text/html
 
' IGID="$(echo "SELECT ip_ig_id FROM ${ZIPTABLES} WHERE ip_address='${ip_address}' LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" echo "
alle Zimmer IP-Gruppen anzeigen
alle Zimmer IPs zeigen
alle Zimmer IP's der Gruppe '${IGID}' anzeigen " echo "UPDATE ${ZIPTABLES} SET $(cat ${DATENDATEI} | fgrep -v ip_address | sed -e "s#=#='#" -e "s#.*#&'#" -e "s#^'##" | tr -s '\n' ',' | sed -e 's#,$##') WHERE ip_address='${ip_address}'; SELECT * FROM ${ZIPTABLES} WHERE ip_address='${ip_address}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | tr -s '\n' ' ' \ | sed -e 's#> <#><#g' -e 's#> <#>\n<#g' -e 's# #\n#g' | while read HTMLZEILE do SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^$')" if [ -n "${SPALTENANFANG}" ] ; then SPALTENZAHL="0" fi SPALTENZAHL="$((${SPALTENZAHL}+1))" TH="$(echo "${HTMLZEILE}" | egrep '^')" if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" echo "${ZELLENWERT}" elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" #echo "${ZELLENWERT}" echo "löschen ändern ${ZELLENWERT}" else echo "${HTMLZEILE}" fi done elif [ "${AKTION}" = "liste" ] ; then AKTION="" #------------------------------------------------------------------------------# echo 'Content-type: text/html
 
alle Zimmer IP-Gruppen anzeigen
alle Zimmer IPs zeigen
neue Zimmer IP-Gruppe anlegen

' echo "SELECT * FROM ${ZIPTABLES} ORDER BY ${ZIPTORDER} ; " | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | tr -s '\n' ' ' \ | sed -e 's#> <#><#g' -e 's#> <#>\n<#g' -e 's# #\n#g' | while read HTMLZEILE do SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^$')" if [ -n "${SPALTENANFANG}" ] ; then SPALTENZAHL="0" fi SPALTENZAHL="$((${SPALTENZAHL}+1))" TH="$(echo "${HTMLZEILE}" | egrep '^')" if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" echo "${ZELLENWERT}" elif [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" echo "${ZELLENWERT}" elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" #echo "${ZELLENWERT}" echo "löschen ändern ${ZELLENWERT}" else echo "${HTMLZEILE}" fi done elif [ "${AKTION}" = "loeschen" ] ; then AKTION="" echo 'Content-type: text/html
 
' echo "
alle Zimmer IP-Gruppen anzeigen
alle Zimmer IPs zeigen
alle Zimmer IP's der Gruppe '${WERT}' anzeigen (zur Überprüfung) " echo "DELETE FROM ${ZIPTABLES} WHERE ip_ig_id='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 echo "DELETE FROM ${ZIPGROUPS} WHERE ig_id='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 elif [ "${AKTION}" = "aendern" ] ; then #------------------------------------------------------------------------------# if [ -z "${1}" ] ; then echo 'Content-type: text/html
 
Zimmer IP-Gruppen ' fi #------------------------------------------------------------------------------# echo " SELECT * FROM ${ZIPTABLES} WHERE ip_ig_id=${WERT} ORDER BY ${ZIPTORDER} ASC ; " | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | tr -s '\n' ' ' \ | sed -e 's#> <#><#g' -e 's#> <#>\n<#g' -e 's# #\n#g' | while read HTMLZEILE do SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^$')" if [ -n "${SPALTENANFANG}" ] ; then SPALTENZAHL="0" fi SPALTENZAHL="$((${SPALTENZAHL}+1))" TH="$(echo "${HTMLZEILE}" | egrep '^')" if [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" echo "${ZELLENWERT}" elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's###' -e 's###')" echo "löschen ändern ${ZELLENWERT}" else echo "${HTMLZEILE}" fi done echo "
" echo "
" #------------------------------------------------------------------------------# else #------------------------------------------------------------------------------# echo 'Content-type: text/html
 
alle Zimmer IPs zeigen
neue Zimmer IP-Gruppe anlegen

' echo " SELECT * FROM ${ZIPGROUPS} ORDER BY ${ZIPGORDER} ASC ; " | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | tr -s '\n' ' ' \ | sed -e 's#[0-9]*#l\öschen auflisten hinzuf\ügenListe &#g' -e 's#=#=#g' -e 's#>Liste #>#g' -e 's###g' -e 's#> <#>\n<#g' fi rm -f ${DATENDATEI} ${ZAHLEN1} ${ZAHLEN2} echo "

" echo ' ' ==== ${WWWDIR}/zimmer_ipgroup_loeschen.php ====
 

Sind Sie wirklich sicher, dass Sie die Zimmer-IP-Gruppe löschen wollen?

">Zimmer IP-Gruppe löschen

==== ${WWWDIR}/zimmer_ipgroup-machen.php ====
 

neue Zimmer IP-Gruppe erstellen



 
 
 
 
 
 
 
 


 
==== /usr/lib/cgi-bin/zimmer_iptable-aendern.cgi ==== #!/bin/sh DATENDATEI="$(mktemp /tmp/zimmer.XXXXXXXXXXXX)" ### POST-Daten werden in eine Datei geschrieben echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | sed -e 's/=+/=/g' -e 's/+$//g' | tr -d '"' > ${DATENDATEI} 2>&1 . ${DATENDATEI} . /usr/share/openqrm/etc/openqrm-server.conf . $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg ### GET AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')" WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}' | awk -F'&' '{print $1}')" if [ -n "${1}" -a -z "${AKTION}" ] ; then AKTION="$(echo "${1}" | awk -F'=' '{print $1}')" WERT="$(echo "${1}" | awk -F'=' '{print $2}')" fi #------------------------------------------------------------------------------# echo "Content-type: text/html " #------------------------------------------------------------------------------# if [ "${AKTION}" = "aendern" ] ; then echo "
 

Datensatz zur Zimmer-IP '${WERT}' ändern


" echo " SELECT * FROM ${ZIPTABLES} WHERE ip_address='${WERT}' ; " | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | egrep -v '[\+\|]---------' | tr -s '\t' ' ' | sed -e 's#| |#| "" |#g' -e 's#| |#| "" |#g' | nl | while read LFDNR ZEILE do if [ "${LFDNR}" = "1" ] ; then KOPF="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')" else DATEN="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')" echo "${KOPF}" | nl | fgrep -v ip_ig_id | while read SPALTENNR SPALTENNAME do SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNR} | tail -n1 | tr -d '"')" if [ "${SPALTENNAME}" = "ip_address" ] ; then echo "" else echo "
 
" fi done fi done #------------------------------------------------------------------------------# echo '

 
' #------------------------------------------------------------------------------# elif [ "${AKTION}" = "loeschen" ] ; then IGID="$(echo "SELECT ip_ig_id FROM ${ZIPTABLES} WHERE ip_address='${WERT}' LIMIT 1;"|mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" echo "
 

Zimmer-IP '${WERT}' aus der IP-Gruppe '${IGID}' gelöscht


alle Zimmer IP-Gruppen anzeigen
alle Zimmer IP's der Gruppe '${IGID}' anzeigen

" echo " DELETE FROM ${ZIPTABLES} WHERE ip_address='${WERT}' ;" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 elif [ "${AKTION}" = "hinzufuegen" ] ; then echo "
 

zur Zimmer IP-Gruppe '${WERT}' weitere IP's hinzufügen


alle Zimmer IP-Gruppen

" IPGRUPPE="$(echo " SELECT * FROM ${ZIPTABLES} WHERE ip_ig_id='${WERT}' LIMIT 1 ;" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \ | egrep -v '[\+\|]---------' | tr -s '\t' ' ' | sed -e 's#| |#| "" |#g' -e 's#| |#| "" |#g')" KOPF="$(echo "${IPGRUPPE}" | head -n1 | sed -e 's/ //g' -e 's/|/\n/g' | egrep -v '^$')" DATEN="$(echo "${IPGRUPPE}" | tail -n1 | sed -e 's/ //g' -e 's/|/\n/g' | egrep -v '^$')" echo "${KOPF}" | nl | while read SPALTENNUMMER SPALTENNAME do if [ "${SPALTENNAME}" = "ip_address" ] ; then SPALTENWERT="" SPALTENBEZ="${SPALTENNAME}" else SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNUMMER} | tail -n1)" SPALTENBEZ="${SPALTENNAME}" fi echo "
 
" done echo "

 
" elif [ "${action}" = "hinzugefuegt" ] ; then echo "
 

'${ip_address}' wurde zur Zimmer IP-Gruppe '${ip_ig_id}' hinzugefügt


alle Zimmer IP-Gruppen

" ### der "action"-Eintrag wird entfernt sed -i -e 's/action=hinzugefuegt//' ${DATENDATEI} ### IP in die Tabelle eintragen echo "INSERT INTO ${ZIPTABLES} ($(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ($(cat ${DATENDATEI}|egrep -v '^$'|awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/',$/'/"));" \ | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1 /usr/lib/cgi-bin/zimmer_ip-machen.cgi aendern=${ip_ig_id} fi rm -f ${DATENDATEI} ==== /opt/bin/ziptables_zeigen.sh ==== #!/bin/sh . /usr/share/openqrm/etc/openqrm-server.conf . $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg #SELECT ip_eth,ip_hostname,ip_domain,ip_address,ip_subnet,ip_gateway,ip_dns1,ip_dns2 echo " SELECT * FROM ${ZIPTABLES} ORDER BY ${ZIPTORDER} ASC ; " | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} ==== /opt/bin/in_zipgroups_eintragen.sh ==== #!/bin/sh ZID="${1}" ZNETIF="${2}" ZHOSTNAME="${3}" if [ -n "${3}" ] ; then . /usr/share/openqrm/etc/openqrm-server.conf . $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg ZIPADRESSE="$(echo " SELECT ip_address FROM ${ZIPTABLES} WHERE ip_ig_id='${ZID}' AND (ip_hostname IS NULL OR ip_hostname = 'NULL' OR ip_hostname = '') ORDER BY ${ZIPTORDER} ASC LIMIT 1 ;" \ | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" KONFLIKT="$(echo " SELECT ip_hostname FROM ${ZIPTABLES} WHERE ip_ig_id='${ZID}' AND ip_hostname='${ZHOSTNAME}' ORDER BY ${ZIPTORDER} ASC LIMIT 1 ;" \ | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" ZDOMAIN="$(echo " SELECT ip_domain FROM ${ZIPTABLES} WHERE ip_ig_id='${ZID}' ORDER BY ${ZIPTORDER} ASC LIMIT 1 ;" \ | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})" if [ -z "${KONFLIKT}" ] ; then if [ -n "${ZIPADRESSE}" ] ; then echo "UPDATE ${ZIPTABLES} SET ip_eth='${ZNETIF}',ip_hostname='${ZHOSTNAME}' WHERE ip_address='${ZIPADRESSE}';" \ | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} if [ -n "$(echo "${ZIPADRESSE}"|fgrep "${DATABASENET}")" ] ; then DNSDATEI="/usr/share/openqrm/plugins/dns/etc/bind/zones/database.db" elif [ -n "$(echo "${ZIPADRESSE}"|fgrep "${EXTERNNET}")" ] ; then DNSDATEI="/usr/share/openqrm/plugins/dns/etc/bind/zones/extern.db" else echo "${ZHOSTNAME}: NIC ${ZNETIF} wurde nicht gesetzt, ABBRUCH" exit 1 fi awk '/; serial$/ {sub(";"," ");print $1,$1+1}' ${DNSDATEI} | while read ASERIAL NSERIAL do ### neuer DNS-Eintrag rein echo "${ZHOSTNAME} IN A ${ZIPADRESSE}" >> ${DNSDATEI} sed -i -e "s/${ASERIAL}/${NSERIAL}/" -e '/^$/d' ${DNSDATEI} fgrep -i serial ${DNSDATEI} done else echo "Es gibt in der Gruppe '${ZID}'/'${ZDOMAIN}' keine freie IP mehr!" fi else echo "Es gibt in der Gruppe '${ZID}'/'${ZDOMAIN}' schon den Hostnamen '${KONFLIKT}'!" fi sudo /etc/init.d/bind9 reload else echo "${0} [ig_id] [net_if] [hostname]" fi ==== bin/aus_zipgroups_austragen.sh ==== #!/bin/sh HOSTNAME="${1}" if [ -n "${1}" ] ; then . /usr/share/openqrm/etc/openqrm-server.conf . $OPENQRM_SERVER_BASE_DIR/openqrm/plugins/zips/etc/zips.cfg echo "UPDATE ${ZIPTABLES} SET ip_hostname='' WHERE ip_hostname='${HOSTNAME}';" \ | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} ### eth1 und eth2 ls /usr/share/openqrm/plugins/dns/etc/bind/zones/database.db /usr/share/openqrm/plugins/dns/etc/bind/zones/extern.db | awk -F':' '{print $1}' | sort | uniq | while read DNSDATEI do awk '/; serial$/ {sub(";"," ");print $1,$1+1}' ${DNSDATEI} | while read ASERIAL NSERIAL do ### alten DNS-Eintrag raus sed -i -e "s/${ASERIAL}/${NSERIAL}/" -e "s/${HOSTNAME}[ ]*IN[ ]*A[ ]*.*//" -e '/^$/d' ${DNSDATEI} fgrep -i serial ${DNSDATEI} done done sudo /etc/init.d/bind9 reload else echo "${0} [hostname]" fi ==== /opt/bin/zipgroups_managen.sh ==== #!/bin/sh # TEMP-Datei erzeugen DATENDATEI="$(mktemp /tmp/zipgroups.XXXXXXXXXXXX)" # TEMP-Datei füllen echo " ${1} ${2} ${3} ${4} " > ${DATENDATEI} # TEMP-Datei in die Umgebung einlesen . ${DATENDATEI} # TEMP-Datei löschen rm -f ${DATENDATEI} #------------------------------------------------------------------------------# ### GET-Daten zum eintragen # step_2=1 # appliance_name=vm-hellomobil02 # appliance_zipgeth1=1 # appliance_zipgeth2=2 ### eintragen # /opt/bin/in_zipgroups_eintragen.sh [ig_id] [net_if] [hostname] #------------------------------------------------------------------------------# ### austragen # /opt/bin/aus_zipgroups_austragen.sh [hostname] ### remove # action=remove # identifier=4,5,6,9, #------------------------------------------------------------------------------# # nur wenn es die richtige Seite war ( if [ "${step_2}" = "1" ] ; then date +'%F %T' # nur wenn der Hostname gesetzt wurde if [ -n "${appliance_name}" ] ; then # Eintrag für eth1 if [ -n "${appliance_zipgeth1}" ] ; then echo "sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth1} eth1 ${appliance_name}" sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth1} eth1 ${appliance_name} fi # Eintrag für eth2 if [ -n "${appliance_zipgeth2}" ] ; then echo "sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth2} eth2 ${appliance_name}" sudo /opt/bin/in_zipgroups_eintragen.sh ${appliance_zipgeth2} eth2 ${appliance_name} fi fi elif [ "${action}" = "remove" ] ; then date +'%F %T' . /opt/etc/zimmer_ip.cfg for IDENTIFIER in $(echo "${identifier}" | sed 's/,/ /g') do for HOSTNAME in $(echo "SELECT appliance_name FROM appliance_info WHERE appliance_id='${IDENTIFIER}' ;" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}) do # hier werden die ZIMMER-IP's wieder frei gegeben echo "/opt/bin/aus_zipgroups_austragen.sh ${HOSTNAME}" /opt/bin/aus_zipgroups_austragen.sh ${HOSTNAME} # hier wird die Nagios-Konfiguration gelöscht rm -vf /etc/nagios3/conf.d/${HOSTNAME}*.cfg done /etc/init.d/nagios3 reload done fi ) 2>&1 | logger ==== /opt/bin/zipgroups_zeigen_html.sh ==== #!/bin/sh HTMLCODE="$(cat | tr -s "'" '"')" NA='

New Appliance

' RE='

Requirements

' if [ "$(echo "${HTMLCODE}" | fgrep "${NA}" > /dev/null ; echo "$?")" = "0" -a "$(echo "${HTMLCODE}" | fgrep "${RE}" > /dev/null ; echo "$?")" = "0" ] ; then #------------------------------------------------------------------------------# ### es ist genau die richtige Seite ETHPULLDOWN="$( . /opt/etc/zimmer_ip.cfg IFS="|" echo " eth1 eth2 " | egrep -v '^$' | while read NETZWERKKARTE do echo "
 
' done | tr -s '"' "'")" #------------------------------------------------------------------------------# echo "${HTMLCODE}" | while read ZEILE do POSITION="$(echo "${ZEILE}" | egrep '
')" if [ -n "${POSITION}" ] ; then echo "${ETHPULLDOWN}" fi echo "${ZEILE}" done #------------------------------------------------------------------------------# else #------------------------------------------------------------------------------# ### es ist eine andere Seite echo "${HTMLCODE}" #------------------------------------------------------------------------------# fi ==== /usr/share/openqrm/web/base/server/appliance/appliance-new.php ==== Ganz oben kommen zwei Zeilen rein ($KOMMANDO), die die Auswertung der GET-Daten vornehmen, in die PHP-Datei. Diese Zeilen gibt es schon: $thisfile = basename($_SERVER['PHP_SELF']); $RootDir = $_SERVER["DOCUMENT_ROOT"].'/openqrm/base/'; require_once "$RootDir/include/user.inc.php"; require_once "$RootDir/class/image.class.php"; require_once "$RootDir/class/resource.class.php"; require_once "$RootDir/class/appliance.class.php"; require_once "$RootDir/class/kernel.class.php"; require_once "$RootDir/class/virtualization.class.php"; require_once "$RootDir/class/openqrm_server.class.php"; require_once "$RootDir/include/htmlobject.inc.php"; if(strtolower(OPENQRM_USER_ROLE_NAME) != 'administrator') { echo 'Access denied'; exit; } Wir setzen unsere beiden Zeilen direkt dhinter: $KOMMANDO = "/opt/bin/zipgroups_managen.sh"." step_2=".$_GET["step_2"]." appliance_name=".$_GET["appliance_name"]." appliance_zipgeth1=".$_GET["appliance_zipgeth1"]." appliance_zipgeth2=".$_GET["appliance_zipgeth2"]; echo shell_exec("$KOMMANDO;"); Ganz unten wird der durch PHP generierte HTML-Code ausgegeben. Hier wird die Originalzeile "echo htmlobject_tabmenu($output);" deaktiviert und dafür drei neue Zeilen eingefühgt. An dieser Stelle muss unser Filterscript (/opt/bin/zipgroups_zeigen_html.sh) zwischen geschaltet werden, damit die zwei Pull-Down-Menüs für die Zuweisung zu den Z-IP-Gruppen je "eth" erscheinen. So sieht das Ende im Original aus: Wir ändern das so ab: ==== /usr/share/openqrm/web/base/server/appliance/appliance-index.php ==== Damit die Einträge zu einer Appliance beim löschen auch aus der Z-IP-Tabelle entfernt werden, müssen wir hier noch einen Eintrag vornehmen. Diese Funktion gibt es schon: function redirect($strMsg, $currenttab = 'tab0', $url = '') { global $thisfile; if($url == '') { $url = $thisfile.'?strMsg='.urlencode($strMsg).'¤ttab='.$currenttab; } // using meta refresh here because the appliance and resourc class pre-sending header output echo ""; } Unseren Eintrag setzen wir direkt dahinter: foreach ($_GET["identifier"] as $key => $value) { $ids .= $value.","; }; $KOMMANDO = "/opt/bin/zipgroups_managen.sh"." action=".$_GET["action"]." identifier=".$ids; echo shell_exec("$KOMMANDO;"); FIXME