Dear *, Here you will find enclosed my Func MySQL Module. OK it could be better and smart coded but indeed I am not basically a developer. So Thanks in advance for you indulgence.
The aim of that module is to interact with MySQL databases on minions. For my part I am going to use it to save retrieve data from minions and save it on the database. I am going to develop another module to do that. BTW, some functions are not working correctly for the moment due to minor problems mentionned in my previous post : "How to save options and options in config" FYI, Adian is currently working on it The function which are working for the moment. func "localhost.localdomain" call mysql query "show tables;" func "localhost.localdomain" call mysql query "create table t (col char(1));" func "localhost.localdomain" call mysql simple_query func "*" call mysql show_config Let's hope it is enough as module description. Let's go to the configuration file : /etc/func/modules/Mysql.conf ////////////////////////////////////////////////////////////////////////////// [main] password = user = root server = localhost database = test Rem1 : it use default MySQL credential. Do not remember if the database test is created at the package installation. If not use the "create database test;" Rem2 : For non MySQL DBA -> - yum install mysql - service mysqld start - mysql -u root - mysql promt > show databases - - if no test database - mysql promt > create database test; - mysql promt > quit Let's go to the code : /usr/lib/python2.5/site-packages/func/minion/modules/mysql.py /////////////////////////////////////////////////////////////////////////////////////////////// # # Copyright 2009, Frederic Hornain # Frederic Hornain <[email protected]> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA """ Func MySQL SQL statement module """ __author__ = "Frederic Hornain <[email protected]>" __version__ = "0.0.1" __api_version__ = "0.0.1" __description__ = "Func MySQL SQL statement module" __creation_date__ = "03/12/2009" import func_module import time import sys import service import MySQLdb import exceptions from certmaster.config import read_config from func.commonconfig import FuncdConfig from certmaster.config import BaseConfig, Option, IntOption, FloatOption, BoolOption from func.minion import sub_process class Mysql(func_module.FuncModule): # Update these if need be. version = "0.0.1" api_version = "0.0.1" description = "Func MySQL SQL statement module" cursor = "" connection = "" class Config(BaseConfig): user = Option('') password = Option('') server = Option('') database = Option('') def __mysql_error_code(self,rc): if rc == 0: result = "No Error" elif rc == 1: result = "No MySQL deamon is running on the default MySQL port" elif rc == 2: result = "No MySQL user, password, server, database have been set in /etc/func/modules/Mysql.conf" elif rc == 3: result = "Opening MySQL Connection Failed" elif rc == 4: result = "SQL Statement Failed" elif rc == 5: result = "Closing MySQL Cursor Failed" elif rc == 6: result = "Closing MySQL Connection Failed" elif rc > 6: result = "Unknown Error" return result def __mysql_config(self): if self.options.user == '' or self.options.server == '' or self.options.database == '': return 2 else: return 0 def __mysql_service_status(self): mysql_service = service.Service() deamon_status = mysql_service.status("mysqld") if deamon_status == 0: return 0 else: return 1 def __mysql_open_connection(self,rc): if rc == 0: rc = self.__mysql_service_status() if rc == 0: rc = self.__mysql_config() if rc == 0: try: self.connection = MySQLdb.connect (host = self.options.server, user = self.options.user, passwd = self.options.password, db = self.options.database) except MySQLdb.Error, e: rc = 3 return rc def __mysql_query(self,query,rc): h = 0 i = 0 k = 0 records = [] try: self.cursor = self.connection.cursor() self.cursor.execute(query) while (1): row = self.cursor.fetchone() if row == None: break elementnumber=len(row) k = elementnumber-1 for i in range(elementnumber): if row[i] is None: if i == h : followingelements = row[:k] row = ('none',) + followingelements elif i > h and i < k: previouselements = row[:i] followingelements = row[i:k] row = previouselements + ('none',) + followingelements elif i == k: previouselements = row[:i] row = previouselements + ('none',) records.append(row) except MySQLdb.Error, e: rc = 4 return (records,rc) def __mysql_close_cursor(self,rc): try: self.cursor.close() except MySQLdb.Error, e: rc = 5 return rc def __mysql_close_connection(self,rc): try: self.connection.close() except MySQLdb.Error, e: rc = 6 return rc def show_config(self): """ Returns the options config """ return self.options def change_user(self,changeduser): setattr(self.options,"user",changeduser) self.save_config() return self.options def change_password(self,changedpassword): setattr(self.options,'password',changedpassword) self.save_config() return self.options def change_server(self,changedserver): setattr(self.options,'server',changedserver) self.save_config() return self.options def change_database(self,changeddatabase): setattr(self.options,'database',changeddatabase) self.options.database = changeddatabase self.database = self.options.database self.Config.database = Option(changeddatabase) self.save_config() return self.options def return_database(self): return getattr(self.options, 'database') def clear_config(self): self.options.user = "root" self.options.password = "" self.options.server = "localhost" self.options.database = "test" self.save_config() return self.options def simple_query(self): rc = 0 query="SELECT VERSION();" rc = self.__mysql_open_connection(rc) if rc == 0: result = self.__mysql_query(query,rc) if result[1] == 0: rc = self.__mysql_close_cursor(rc) else: simplequeryresult = self.__mysql_error_code(rc) if rc == 0: rc = self.__mysql_close_connection(rc) if rc == 0: simplequeryresult=result[0] else: simplequeryresult = self.__mysql_error_code(rc) else: simplequeryresult = self.__mysql_error_code(rc) else: simplequeryresult = self.__mysql_error_code(rc) return simplequeryresult def query(self,query): rc = 0 rc = self.__mysql_open_connection(rc) if rc == 0: results = self.__mysql_query(query,rc) if results[1] == 0: rc = self.__mysql_close_cursor(rc) else: queryresults = self.__mysql_error_code(rc) if rc == 0: rc = self.__mysql_close_connection(rc) if rc == 0: queryresults=results[0] else: queryresults = self.__mysql_error_code(rc) else: queryresults = self.__mysql_error_code(rc) else: queryresults = self.__mysql_error_code(rc) return queryresults //////////////////////////////////////////////////////////////////// EOF Feel free to send me your comment. BR Fred ----------------------------------------------------- Fedora-ambassadors-list mailing list [email protected]
mysql.py
Description: Binary data
Mysql.conf
Description: Binary data
_______________________________________________ Func-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/func-list
