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.
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:
# /usr/share/openqrm/bin/openqrm-create-plugin <SOURCE_PLUGIN> <DESTINATION_PLUGIN>
# /usr/share/openqrm/bin/openqrm-create-plugin tftpd zips # cd /usr/share/openqrm/plugins/zips/ # rm -f web/.running
...
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
}
...
...
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);
}
...
...
function zips_about() {
global $OPENQRM_SERVER_BASE_DIR;
$disp = "<h1><img border=0 src=\"/openqrm/base/plugins/zips/img/plugin.png\"> Tftpd plugin</h1>";
$disp = $disp."<br>";
$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."<br>"
$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."<br>"
$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."<br>";
$disp = $disp."siehe http://10.10.2.222/wiki/doku.php?id=openqrm_-_dns";
$disp = $disp."<br>";
$disp = $disp."Es ist geplant, dass diese Anpassungen auch diesem Plugin vorgenommen werden.";
$disp = $disp."<br>";
$disp = $disp."<br>";
$disp = $disp."<b>How to use :</b>";
$disp = $disp."<br>";
$disp = $disp."<br>";
$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."<br>";
$disp = $disp."<br>";
$disp = $disp."<br>";
return $disp;
}
...
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}
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
Hier ist die Zeile mit /cgi-bin/zimmer_ip-machen.cgi eingefühgt worden:
...
<div class="top">
<a id="Event_box" href="server/event/event-overview.php?currenttab=tab1" target="MainFrame">Error(s) <span id="events_critical"></span></a>
<a id="Support_box" href="http://www.openqrm-enterprise.com" target="_BLANK">Support</a>
<a id="Docu_box" href="server/zz_documentation/introduction.php" target="MainFrame">Documentation</a>
<a id="Docu_box" href="/cgi-bin/remconstab_aendern.cgi" target="MainFrame">Remote-Consolen-IP's</a>
<a id="Docu_box" href="/store.php" target="MainFrame">QRM-Info</a>
<a id="Docu_box" href="/cgi-bin/zimmer_ip-machen.cgi" target="MainFrame">Zimmer-IP-Gruppen</a>
<a id="Docu_box" href="http://10.10.2.222/wiki/doku.php" target="MainFrame">Wiki</a>
<a id="Login_box" href="server/user/user.php" target="MainFrame"><?php echo OPENQRM_USER_NAME; ?></a>
<div id="Watch">
<span id="timecontainer"></span>
<script type="text/javascript">
new showLocalTime("timecontainer", "server-php", 0, "xx")
</script>
</div>
<div class="floatbreaker"> </div>
</div>
...
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
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Eintrag</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
'
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 "
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${IGID}">alle Zimmer IP's der Gruppe '${IGID}' anzeigen</a></b>
"
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#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
#echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
elif [ "${AKTION}" = "liste" ] ; then
AKTION=""
#------------------------------------------------------------------------------#
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IPs</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/zimmer_ipgroup-machen.php?action=angelegt">neue Zimmer IP-Gruppe anlegen</a></b>
<br>
<br>
'
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#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
#echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
echo "<TD><a href=/cgi-bin/zimmer_iptable-aendern.cgi?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
elif [ "${AKTION}" = "loeschen" ] ; then
AKTION=""
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">verbliebene Zimmer IP-Gruppen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
'
echo "
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${WERT}">alle Zimmer IP's der Gruppe '${WERT}' anzeigen (zur Überprüfung)</a></b>
"
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
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Gruppe</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">Zimmer IP-Gruppen</a></b>
'
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#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "4" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/zimmer_netzcfg.cgi?ip_hostname=${ZELLENWERT}>${ZELLENWERT}</a></TD>"
elif [ -z "${TH}" -a "${SPALTENZAHL}" = "6" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/zimmer_ip_loeschen.php?loeschen=${ZELLENWERT}>löschen</a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?aendern=${ZELLENWERT}>ändern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
echo "<BR>"
echo "<BR>"
#------------------------------------------------------------------------------#
else
#------------------------------------------------------------------------------#
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Gruppen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?liste=1">alle Zimmer IPs zeigen</a></b>
<br>
<b><a href="/zimmer_ipgroup-machen.php?action=angelegt">neue Zimmer IP-Gruppe anlegen</a></b>
<br>
<br>
'
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#<TR><TD>[0-9]*#<TR><TD><a href=/zimmer_ipgroup_loeschen.php?loeschen=&>l\öschen</a> <a href=/cgi-bin/zimmer_ip-machen.cgi?aendern=&><B>auflisten</B></a> <a href=/cgi-bin/zimmer_iptable-aendern.cgi?hinzufuegen=&>hinzuf\ügen</a>Liste &</B>#g' -e 's#=<TR><TD>#=#g' -e 's#>Liste <TR><TD>#><B>#g' -e 's#</TD></TR></TD></TR>#</TD></TR>#g' -e 's#></#> </#g' -e 's#><#>\n<#g'
fi
rm -f ${DATENDATEI} ${ZAHLEN1} ${ZAHLEN2}
echo "<br>
<BR>
</div>
"
echo '
</body>
</html>
'
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
<div class="htmlobject_tabs">
<ul>
<li class="current"><span><a href="" onclick="this.blur();">Zimmer IP-Liste</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<H1>
Sind Sie wirklich sicher, dass Sie die Zimmer-IP-Gruppe
<?php
echo $_GET["loeschen"];
?>
löschen wollen?
</H1>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?loeschen=
<?php
echo $_GET["loeschen"];
?>
">Zimmer IP-Gruppe
<?php
echo $_GET["loeschen"];
?>
löschen</a></b>
<br>
<br>
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = "block";
document.getElementById("tab_" + id).className = "current";
}
</script>
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">neue Zimmer IP-Gruppe erstellen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src="/cloudipgroups.png">neue Zimmer IP-Gruppe erstellen</h1>
<br>
<br>
<form action=/cgi-bin/zimmer_ip-machen.cgi method=post>
<div class="htmlobject_box input" id="htmlobject_box_ig_name">
<div class="left"><label>Markenname</label></div>
<div class="right"><input title="GruppenName" maxlength="20" name="ig_name" value="GruppenName" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_network">
<div class="left"><label>Domain (ohne "www" davor!)</label></div>
<div class="right"><input title="Domain" maxlength="20" name="ip_domain" value="domain.de" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_subnet">
<div class="left"><label>Netzwerk-Schnittstelle</label></div>
<div class="right"><input title="Netzwerk-Schnittstelle" maxlength="20" name="ip_eth" value="eth2" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_subnet">
<div class="left"><label>Netzwerkmaske</label></div>
<div class="right"><input title="Netzwerkmaske" maxlength="20" name="ip_subnet" value="255.255.255.0" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ig_gateway">
<div class="left"><label>Gateway</label></div>
<div class="right"><input title="Gateway" maxlength="20" name="ip_gateway" value="192.168.1.1" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_dns1">
<div class="left"><label>1. DNS</label></div>
<div class="right"><input title="1. DNS" maxlength="20" name="ip_dns1" value="192.168.1.254" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_dns2">
<div class="left"><label>2. DNS</label></div>
<div class="right"><input title="2. DNS" maxlength="20" name="ip_dns2" value="192.168.1.253" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_ip_adressen">
<div class="left"><label>ip_adressen</label></div>
<div class="right"><textarea name="ip_adressen" cols="15" rows="17">192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
</textarea></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<input type=hidden name="action" value="angelegt">
<br>
<input type=submit value="erstellen">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
#!/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
<link rel='stylesheet' type='text/css' href='/openqrm/base/css/htmlobject.css' />
<link rel='stylesheet' type='text/css' href='/cloud.css' />
<script type='text/javascript'>
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
"
#------------------------------------------------------------------------------#
if [ "${AKTION}" = "aendern" ] ; then
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>neue Zimmer IP-Gruppe erstellen</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>Datensatz zur Zimmer-IP '${WERT}' ändern</h1>
<br>
<form action=/cgi-bin/zimmer_ip-machen.cgi method=post>
"
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 "<input type=\"hidden\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\">"
else
echo "
<div class=\"htmlobject_box input\" id=\"htmlobject_box_${SPALTENNAME}\">
<div class=\"left\"><label for=\"p4c443ec95a81b\">${SPALTENNAME}</label></div>
<div class=\"right\"><input title=\"Name\" id=\"p4c443ec95a81b\" maxlength=\"20\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\" type=\"text\"></div>
<div style=\"line-height:0px;height:0px;clear:both;\" class=\"floatbreaker\"> </div>
</div>
"
fi
done
fi
done
#------------------------------------------------------------------------------#
echo '
<input type=hidden name="action" value="aendern">
<br>
<input type=submit value="ändern">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
'
#------------------------------------------------------------------------------#
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 "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>Zimmer IP gelöscht</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>Zimmer-IP '${WERT}' aus der IP-Gruppe '${IGID}' gelöscht</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen anzeigen</a></b>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi?aendern=${IGID}">alle Zimmer IP's der Gruppe '${IGID}' anzeigen</a></b>
<br>
<br>
"
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 "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>zur Zimmer IP-Gruppe '${WERT}' weitere IP's hinzufügen</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>zur Zimmer IP-Gruppe '${WERT}' weitere IP's hinzufügen</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen</a></b>
<br>
<br>
<form action=/cgi-bin/zimmer_iptable-aendern.cgi method=post>
"
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="<B>${SPALTENNAME}</B>"
else
SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNUMMER} | tail -n1)"
SPALTENBEZ="${SPALTENNAME}"
fi
echo "
<div class='htmlobject_box input' id='htmlobject_box_${SPALTENNAME}'>
<div class='left'><label>${SPALTENBEZ}:</label></div>
<div class='right'><input title='${SPALTENNAME}' maxlength='20' name='${SPALTENNAME}' value='${SPALTENWERT}' type='text'></div>
<div style='line-height:0px;height:0px;clear:both;' class='floatbreaker'> </div>
</div>
"
done
echo "
<input type=hidden name='action' value='hinzugefuegt'>
<br>
<input type=submit value='hinzufügen'>
<br>
</form>
<div style='line-height:0px;clear:both;'> </div>
</div>
"
elif [ "${action}" = "hinzugefuegt" ] ; then
echo "
<div class='htmlobject_tabs' id='p8c889ec95a9d2'>
<ul>
<li id='tab_currenttabtab0' class='current'><span><a href='' onclick='this.blur();'>'${ip_address}' wurde zur Zimmer IP-Gruppe '${ip_ig_id}' hinzugefügt</a></span></li>
</ul>
</div>
<div style='line-height:0px;clear:both;'> </div>
<div class='htmlobject_tab_box' id='currenttabtab0'><style>
.htmlobject_tab_box {
}
</style>
<h1><img border=0 src='/cloudipgroups.png'>'${ip_address}' wurde zur Zimmer IP-Gruppe '${ip_ig_id}' hinzugefügt</h1>
<br>
<b><a href="/cgi-bin/zimmer_ip-machen.cgi">alle Zimmer IP-Gruppen</a></b>
<br>
<br>
"
### 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}
#!/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}
#!/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/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
#!/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
#!/bin/sh
HTMLCODE="$(cat | tr -s "'" '"')"
NA='<h1>New Appliance</h1>'
RE='<h3>Requirements</h3>'
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 "
<div class='htmlobject_box select' id='htmlobject_box_appliance_zipg${NETZWERKKARTE}'>
<div class='left'><label> ${NETZWERKKARTE}</label></div>
<div class='right'>
<select title='${NETZWERKKARTE}' name='appliance_zipg${NETZWERKKARTE}'>
<option value='0'></option>
"
echo "
SELECT ig_id,ig_name,ig_domain
FROM ${ZIPGROUPS}
ORDER BY ${ZIPGORDER} ASC
;" \
| mysql -N -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| egrep -v '[\+\|]---------' | egrep -v '^$' | while read ANFANG ig_id ig_name ig_domain ENDE
do
ig_id="$(echo "${ig_id}" | awk '{print $1}')"
ig_name="$(echo "${ig_name}" | awk '{print $1}')"
ig_domain="$(echo "${ig_domain}" | awk '{print $1}')"
echo "<option value='${ig_id}'>${ig_name} | ${ig_domain}</option>"
done
echo '
</select>
</div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
'
done | tr -s '"' "'")"
#------------------------------------------------------------------------------#
echo "${HTMLCODE}" | while read ZEILE
do
POSITION="$(echo "${ZEILE}" | egrep '<div style="text-align:right;"><input title="save" id=.*name="action" value="save" type="submit"></div>')"
if [ -n "${POSITION}" ] ; then
echo "${ETHPULLDOWN}"
fi
echo "${ZEILE}"
done
#------------------------------------------------------------------------------#
else
#------------------------------------------------------------------------------#
### es ist eine andere Seite
echo "${HTMLCODE}"
#------------------------------------------------------------------------------#
fi
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:
<?php echo htmlobject_tabmenu($output); ?>
Wir ändern das so ab:
<?php
//echo htmlobject_tabmenu($output);
$test = htmlobject_tabmenu($output);
$KOMMANDO="echo"." '".$test."' | /opt/bin/zipgroups_zeigen_html.sh";
echo shell_exec("$KOMMANDO;");
?>
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 "<meta http-equiv=\"refresh\" content=\"0; URL=$url\">";
}
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;");