From 8f9766814d4ac032887c160cd98528c531a97067 Mon Sep 17 00:00:00 2001 From: James Meyer Date: Wed, 7 Dec 2011 13:26:35 -0600 Subject: func: first build Used by the backend to issue commands on any given system of the cluster. --- abs/core/func/PKGBUILD | 44 ++++++++++++++ abs/core/func/failed_func.sh | 19 ++++++ abs/core/func/fe_restart.py | 35 +++++++++++ abs/core/func/func-0.24.tar.gz | Bin 0 -> 130319 bytes abs/core/func/func-0.25.tar.gz | Bin 0 -> 152871 bytes abs/core/func/func.install | 56 +++++++++++++++++ abs/core/func/minion.conf | 8 +++ abs/core/func/msg.cfg | 6 ++ abs/core/func/msg.py | 135 +++++++++++++++++++++++++++++++++++++++++ abs/core/func/pacman.py | 36 +++++++++++ abs/core/func/power.py | 35 +++++++++++ 11 files changed, 374 insertions(+) create mode 100644 abs/core/func/PKGBUILD create mode 100644 abs/core/func/failed_func.sh create mode 100644 abs/core/func/fe_restart.py create mode 100644 abs/core/func/func-0.24.tar.gz create mode 100644 abs/core/func/func-0.25.tar.gz create mode 100644 abs/core/func/func.install create mode 100644 abs/core/func/minion.conf create mode 100644 abs/core/func/msg.cfg create mode 100644 abs/core/func/msg.py create mode 100644 abs/core/func/pacman.py create mode 100644 abs/core/func/power.py diff --git a/abs/core/func/PKGBUILD b/abs/core/func/PKGBUILD new file mode 100644 index 0000000..b406ab0 --- /dev/null +++ b/abs/core/func/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=func +pkgver=0.25 +pkgrel=1 +pkgdesc="fedora unifed network controller" +url="" +license="gpl" +depends=(pyopenssl certmaster python_aosd) +makedepends=() +conflicts=() +replaces=() +backup=() +moddir="pkg/usr/lib/python2.6/site-packages/func/minion/modules/" +install=func.install +source=($pkgname-$pkgver.tar.gz minion.conf power.py pacman.py failed_func.sh fe_restart.py msg.py msg.cfg) +arch=('i686') + +build() { + cd $startdir/src/$pkgname-${pkgver} + python setup.py build + python setup.py install --prefix=$startdir/pkg/usr + cd $startdir/src + install -m755 -D minion.conf $startdir/pkg/etc/func/minion.conf + install -m755 -D $startdir/src/$pkgname-$pkgver/etc/async_methods.conf $startdir/pkg/etc/func/async_methods.conf + install -m755 -D $startdir/src/$pkgname-${pkgver}/etc/sample.acl $startdir/pkg/etc/func/minion-acl.d/sample.acl + install -m755 -D $startdir/src/$pkgname-${pkgver}/etc/Test.conf $startdir/pkg/etc/func/modules/Test.conf + install -m755 -D $startdir/src/power.py ${startdir}/${moddir}/power.py + install -m755 -D $startdir/src/pacman.py ${startdir}/${moddir}/pacman.py + install -m755 -D $startdir/src/msg.py ${startdir}/${moddir}/msg.py + install -m755 -D $startdir/src/msg.cfg ${startdir}/pkg/usr/MythVantage/etc/msg.cfg + install -m755 -D $startdir/src/fe_restart.py ${startdir}/${moddir}/fe_restart.py + install -m755 -D $startdir/src/failed_func.sh $startdir/pkg/usr/MythVantage/bin/failed_func.sh + mkdir -p $startdir/pkg/var/log/func + + cd $startdir/pkg + find ./ -name "*.pyc" -print | xargs rm -f +} +md5sums=('892252004f122c61bb58bb4607553ffe' + '1e2905074203d5c0557f143a6c50c497' + '1393088fa64823606e0b1c02296041f4' + '65a602524cb85773740840eaa513ce15' + 'f31e494ddc23eb8079650f6c6bae7861' + 'b02a733b7a74569e57521bc3708724a5' + '572bb6737cb03dee7e9d11ed40481bd2' + '4f189262b2a686c5ac9485c6e5134045') diff --git a/abs/core/func/failed_func.sh b/abs/core/func/failed_func.sh new file mode 100644 index 0000000..519265e --- /dev/null +++ b/abs/core/func/failed_func.sh @@ -0,0 +1,19 @@ +. /etc/profile +. /etc/systemconfig + +if [ x$SystemType = "xMaster_backend" -o x$SystemType = "xStandAlone" ] +then + exit 0 +fi +curl -# http://$dbhost/failed_func_hosts|grep -q `hostname` +status=$? +if [ $status = 0 ] +then + echo "removing ca (failed_func.sh)" + rm -f /etc/pki/func/* + echo "restarting func" + sv stop funcd + sleep 3 + sv start funcd +fi + diff --git a/abs/core/func/fe_restart.py b/abs/core/func/fe_restart.py new file mode 100644 index 0000000..a75b0c5 --- /dev/null +++ b/abs/core/func/fe_restart.py @@ -0,0 +1,35 @@ +## +# other modules +import sub_process + +# our modules +import func_module + +# ================================= + +class re_restart(func_module.FuncModule): + + version = "0.0.1" + api_version = "0.0.1" + description = "Restart the frontend" + + def killX (self,flags="restart frontend"): + """ + Restart X + """ + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/sbin/sv %s " % flags,stdout=sub_process.PIPE,shell=True) + data = cmd.communicate()[0] + results = ['Restarted UI'] + return (cmd.returncode, results) + + def killmyth (self,flags="-9 mythfrontend"): + """ + kill the mythfrontend process server + """ + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/usr/bin/killall %s" % flags,stdout=sub_process.PIPE,shell=True) + data = cmd.communicate()[0] + results = ['killed mythfrontend'] + return (cmd.returncode, results) + diff --git a/abs/core/func/func-0.24.tar.gz b/abs/core/func/func-0.24.tar.gz new file mode 100644 index 0000000..baa8eef Binary files /dev/null and b/abs/core/func/func-0.24.tar.gz differ diff --git a/abs/core/func/func-0.25.tar.gz b/abs/core/func/func-0.25.tar.gz new file mode 100644 index 0000000..381e0b6 Binary files /dev/null and b/abs/core/func/func-0.25.tar.gz differ diff --git a/abs/core/func/func.install b/abs/core/func/func.install new file mode 100644 index 0000000..1fcf6b1 --- /dev/null +++ b/abs/core/func/func.install @@ -0,0 +1,56 @@ +# This is a default template for a post-install scriptlet. You can +# remove any functions you don't need (and this header). + +# arg 1: the new package version +pre_install() { +/bin/true +mkdir -p /var/log/func +} + +# arg 1: the new package version +post_install() { + if [ ! -e /etc/cron.tenminutes ] + then + mkdir /etc/cron.tenminutes + fi + if [ ! -e /etc/cron.tenminutes/failed_func ] + then + ln -s /usr/MythVantage/bin/failed_func.sh /etc/cron.tenminutes/failed_func + fi + + if [ ! -e /var/log/func ] + then + mkdir -p /var/log/func + fi + + +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + /bin/true + + + +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install +} + +# arg 1: the old package version +pre_remove() { + /bin/true +} + +# arg 1: the old package version +post_remove() { + /bin/true +} + +op=$1 +shift +$op $* diff --git a/abs/core/func/minion.conf b/abs/core/func/minion.conf new file mode 100644 index 0000000..d1665f1 --- /dev/null +++ b/abs/core/func/minion.conf @@ -0,0 +1,8 @@ +[main] +log_level = INFO +acl_dir = /etc/func/minion-acl.d + +listen_addr = +listen_port = 51234 +minion_name = + diff --git a/abs/core/func/msg.cfg b/abs/core/func/msg.cfg new file mode 100644 index 0000000..b6de8b5 --- /dev/null +++ b/abs/core/func/msg.cfg @@ -0,0 +1,6 @@ +[default] +font_color=green +display_time=5000 +position=5 +font_type=Times New Roman Italic 48 + diff --git a/abs/core/func/msg.py b/abs/core/func/msg.py new file mode 100644 index 0000000..43214f3 --- /dev/null +++ b/abs/core/func/msg.py @@ -0,0 +1,135 @@ +## +# other modules +import sub_process +import sys +import aosd +import ConfigParser + + +# our modules +import func_module + + +# ================================= + +class msg(func_module.FuncModule): + + version = "0.0.1" + api_version = "0.0.1" + description = "Display messages" + +#class msg(): + def scroll(self,osd, width, height, display_time,position): + pos = position + step = 1 + + osd.set_position(pos, width, height) + (x, y, _, _) = osd.get_geometry() + osd.set_position_offset(width, height) + osd.show() + + x -= 1 + y += height - 1; + for i in range(1, height + 1, step): + osd.loop_for(5) + y -= step + osd.set_geometry(x, y, width, i) + + osd.set_position(pos, width, height) + osd.set_position_offset(-1, -1) + (x, y, _, _) = osd.get_geometry() + #time to display + osd.loop_for(display_time) + + for i in range(height, 0, -step): + y += step + osd.set_geometry(x, y, width, i); + osd.loop_for(1); + + osd.hide(); + + def setup(self,font_color,font_type): + osd = aosd.AosdText() + osd.set_transparency(aosd.TRANSPARENCY_COMPOSITE) + if osd.get_transparency() != aosd.TRANSPARENCY_COMPOSITE: + osd.set_transparency(aosd.TRANSPARENCY_NONE) + + osd.geom_x_offset = 10 + osd.geom_y_offset = 0 + + osd.back_color = "white" + osd.back_opacity = 50 + + osd.shadow_color = "black" + osd.shadow_opacity = 127 + osd.shadow_x_offset = 2 + osd.shadow_y_offset = 2 + + osd.fore_color = font_color + osd.fore_opacity = 255 + + osd.set_font(font_type) + osd.wrap = aosd.PANGO_WRAP_WORD_CHAR + osd.alignment = aosd.PANGO_ALIGN_LEFT + osd.set_layout_width(osd.get_screen_wrap_width()) + return osd + + def set_string(self, osd, text): + osd.set_text(text) + return osd.get_text_size() + + def setup_config(self): + module_config = ConfigParser.RawConfigParser() + try: + module_config.read('/usr/MythVantage/etc/msg.cfg') + except: + pass + return module_config + + + + def display (self,flags): + """ + parse the msg for display. + """ + try: + text,config_section=flags.split("|") + if config_section == '': + config_section="default" + except: + text=flags + config_section="default" + + module_config = self.setup_config() + + display_time=5000 + position=6 + font_color="green" + font_type="Times New Roman Italic 36" + try: + display_time = int(module_config.get(config_section,"display_time")) + except: + pass + try: + position = int(module_config.get(config_section,"position")) + except: + pass + try: + font_color = module_config.get(config_section,"font_color") + except: + pass + try: + font_type = module_config.get(config_section,"font_type") + except: + pass + + + cmd = sub_process.Popen("/usr/bin/wall %s" % text,stdout=sub_process.PIPE,shell=True) + data = cmd.communicate()[0] + osd = self.setup(font_color, font_type) + width, height = self.set_string(osd, text) + self.scroll(osd, width, height, display_time, position) + + return ("Message delivered") + + diff --git a/abs/core/func/pacman.py b/abs/core/func/pacman.py new file mode 100644 index 0000000..c8f2e13 --- /dev/null +++ b/abs/core/func/pacman.py @@ -0,0 +1,36 @@ +#!/usr/bin/python + + +# other modules +import sub_process + +# our modules +import func_module + +# ================================= + +class pacman(func_module.FuncModule): + version = "0.0.1" + api_version = "0.0.1" + description = "update the server" + + + def update_system(self,flags): + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/usr/bin/update_system %s" % flags,stdout=sub_process.PIPE,shell=True) + data = cmd.communicate()[0] + results = [] + for x in data.split("\n"): + results.append(x) + return (cmd.returncode, results) + + def pkgversion(self,flags): + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/usr/bin/pacman -Q %s | grep -v error" % flags,stdout=sub_process.PIPE,shell=True) + data = cmd.communicate()[0] + results = [] + for x in data.split("\n"): + results.append(x) + return (cmd.returncode, results) + + diff --git a/abs/core/func/power.py b/abs/core/func/power.py new file mode 100644 index 0000000..668965a --- /dev/null +++ b/abs/core/func/power.py @@ -0,0 +1,35 @@ +## +# other modules +import sub_process + +# our modules +import func_module + +# ================================= + +class power(func_module.FuncModule): + + version = "0.0.1" + api_version = "0.0.1" + description = "Reboot the server" + + def reboot(self,flags="-q onecheck"): + """ + Reboot the server + """ + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/sbin/reboot") + data = cmd.communicate()[0] + results = ['reboot'] + return (cmd.returncode, results) + + def poweroff (self,flags="-q onecheck"): + """ + Reboot the server + """ + flags.replace(";","") # prevent stupidity + cmd = sub_process.Popen("/sbin/poweroff") + data = cmd.communicate()[0] + results = ['off'] + return (cmd.returncode, results) + -- cgit v0.12