''' /*- * ============LICENSE_START======================================================= * ONAP : APPC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============LICENSE_END========================================================= */ ''' #!/usr/bin/python import pymysql from os import listdir from os.path import isfile, join class mySql(): def __init__(self, myhost, myuser, mypasswd, mydb): self.db = pymysql.connect(host=myhost, user=myuser, passwd=mypasswd, db=mydb) self.cur = self.db.cursor() def Query (self, myquery, val = None): results = None error = None try: if val: self.cur.execute(myquery, val) else: self.cur.execute(myquery) self.db.commit() results = self.cur.fetchall() except Exception, e: error = str (e) return results, error def Close (self): self.db.close() def loadPlaybook (value, version, ext = '.yml'): errorCode = 0 diag = '' # Test if primary key already defined query = "SELECT name FROM playbook WHERE name='" + value +"'" results, error = sqlintf.Query (query) if results: # print "Primary key already defined: Updating playbook" pass else: # print "Primary key not defined: Insert new playbook" query = "INSERT INTO playbook (name) VALUES ('" + value + "')" results, error = sqlintf.Query (query) if error: errorCode = 1 diag = error # Load playbook file = open(playbook_path + value + ext, 'r') load_file = file.read() # Load playbook if not errorCode: sql = "UPDATE playbook SET value=%s, version=%s, type=%s WHERE name=%s" results, error = sqlintf.Query(sql, (load_file, version, ext, value)) if error: # Error loading playbook errorCode = 1 diag = error return errorCode, diag def loadCredentials (hostgroup, hostname, cred): errorCode = 0 diag = '' # Load credentials query = "SELECT hostname,hostgroup FROM inventory WHERE hostname='" + hostname +"'" results = sqlintf.Query (query) print '==>', results if hostname in str(results): results_hostgroups = results[0][0][1] # print "Record already defined: Updating inventory" if hostgroup in results_hostgroups.split(','): query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\ cred +\ "' WHERE hostname='" + hostname + "'" else: results_hostgroups = results_hostgroups + ',' + hostgroup query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\ cred + "',hostgroup='" + results_hostgroups + \ "' WHERE hostname='" + hostname + "'" results, error = sqlintf.Query (query) else: query = "INSERT INTO inventory (hostgroup, hostname, credentials) VALUES ('" + \ hostgroup + "','" + hostname + "','" + cred + "')" results, error = sqlintf.Query (query) if error: # Error loading credentials errorCode = 1 diag = results return errorCode, diag if __name__ == '__main__': ################################################################ # Change below ################################################################ host="localhost" # your host, usually localhost user="mysql_user_id" # your username passwd="password_4_mysql_user_id" # your password db="ansible" # name of the data base playbook_path = "/home/ubuntu/RestServerOpenSource/" inventory = "/home/ubuntu/RestServerOpenSource/Ansible_inventory" ################################################################ onlyfiles = [f for f in listdir(playbook_path) if isfile(join(playbook_path, f))] sqlintf = mySql (host, user, passwd, db) # Load playbooks print "Loading playbooks" for file in onlyfiles: if "yml" in file: name = file.split (".yml")[0] print " Loading:", name version = name.split("@")[1] errorCode, diag = loadPlaybook (name, version) if errorCode: print " Results: Failed - ", diag else: print " Results: Success" if "tar.gz" in file: name = file.split (".tar.gz")[0] print " Loading:", name version = name.split("@")[1] errorCode, diag = loadPlaybook (name, version, ".tar.gz") print "\nLoading inventory" # Load inventory hostgroup = None inv = {} file = open(inventory, 'r') for line in file: if '[' in line and ']' in line: hostgroup = line.strip().replace('[','').replace(']','') inv[hostgroup] = {} elif hostgroup and len(line.strip())>0: host = line.strip().split(" ")[0] credentials = line.replace(host,"") inv[hostgroup][host] = credentials file.close() for hostgroup in inv: print " Loading:", hostgroup hostfqdn = '' cred = '' for hostname in inv[hostgroup]: cred = inv[hostgroup][hostname] errorCode, diag = loadCredentials (hostgroup, hostname, cred) if errorCode: print " Results: Failed - ", diag else: print " Results: Success" sqlintf.Close()