From 750d72fe7981aa6012464a05b622f46b1e0474c8 Mon Sep 17 00:00:00 2001 From: Jonathan Mainguy Date: Sat, 19 Oct 2013 11:17:31 -0400 Subject: [PATCH] Added all_databases option which works like all-databases optin in mysqldump, and works in import by not naming a database to import as --- database/mysql_db | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/database/mysql_db b/database/mysql_db index e33dba4caac..360bd1fcdd3 100644 --- a/database/mysql_db +++ b/database/mysql_db @@ -64,6 +64,15 @@ options: required: false default: present choices: [ "present", "absent", "dump", "import" ] + all_databases: + description: + - May only be provided if I(state) is C(dump) or C(import). (added in Ansible 1.4) + - Requires I(name) = a valid database name. + - Uses --all-databases option for mysqldump. + - When used for import, works similiar to mysql -u -p < target.sql + required: no + default: false + choices: [ "yes", "no", "true", "false", "0", "1" ] collation: description: - Collation mode @@ -92,6 +101,10 @@ author: Mark Theunissen EXAMPLES = ''' # Create a new database with name 'bobdata' - mysql_db: name=bobdata state=present +# Dumps all databases to hostname.sql +- mysql_db: name=bobdata state=dump all_databases=true target=/tmp/{{ inventory_hostname }}.sql +# Imports file.sql similiar to mysql -u -p < hostname.sql +- mysql_db: name=bobdata state=import all_databases=true target=/tmp/{{ inventory_hostname }}.sql ''' import ConfigParser @@ -116,16 +129,24 @@ def db_delete(cursor, db): cursor.execute(query) return True -def db_dump(host, user, password, db_name, target): - res = os.system("/usr/bin/mysqldump -q -h "+host+" -u "+user+ " --password="+password+" " - +db_name+" > " - +target) +def db_dump(host, user, password, db_name, target, all_databases): + if all_databases: + res = os.system("/usr/bin/mysqldump -q -h "+host+" -u "+user+ " --password="+password+" --all-databases > " + +target) + else: + res = os.system("/usr/bin/mysqldump -q -h "+host+" -u "+user+ " --password="+password+" " + +db_name+" > " + +target) return (res == 0) -def db_import(host, user, password, db_name, target): - res = os.system("/usr/bin/mysql -h "+host+" -u "+user+" --password="+password+" " - +db_name+" < " - +target) +def db_import(host, user, password, db_name, target, all_databases): + if all_databases: + res = os.system("/usr/bin/mysql -h "+host+" -u "+user+" --password="+password+" < " + +target) + else: + res = os.system("/usr/bin/mysql -h "+host+" -u "+user+" --password="+password+" " + +db_name+" < " + +target) return (res == 0) def db_create(cursor, db, encoding, collation): @@ -207,6 +228,7 @@ def main(): db=dict(required=True, aliases=['name']), encoding=dict(default=""), collation=dict(default=""), + all_databases=dict(default="no", choices=BOOLEANS, type='bool'), target=dict(default=None), state=dict(default="present", choices=["absent", "present","dump", "import"]), ) @@ -216,6 +238,7 @@ def main(): module.fail_json(msg="the python mysqldb module is required") db = module.params["db"] + all_databases = module.params["all_databases"] encoding = module.params["encoding"] collation = module.params["collation"] state = module.params["state"] @@ -258,11 +281,11 @@ def main(): if state == "absent": changed = db_delete(cursor, db) elif state == "dump": - changed = db_dump(login_host, login_user, login_password, db, target) + changed = db_dump(login_host, login_user, login_password, db, target, all_databases) if not changed: module.fail_json(msg="dump failed!") elif state == "import": - changed = db_import(login_host, login_user, login_password, db, target) + changed = db_import(login_host, login_user, login_password, db, target, all_databases) if not changed: module.fail_json(msg="import failed!") else: