Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions b2bmgr/b2bmgr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/usr/bin/python
import argparse
import os
from datetime import datetime



class B2BManager(object):
def __init__(self, args):
self.args = args
self.now = datetime.now().strftime("%Y%m%d%H%M%S")
self.action = args.action.lower()
self.installdir = args.installdir
self.backupdir = args.backupdir
self.imcldir = args.imcldir
self.responsefilepath = args.responsefilepath
self.appdatadir = args.appdatadir
self.ibmimsharedpath = args.ibmimsharedpath
self.IBM = args.IBM
self.ibm = args.ibm
self.uiupdatescript = args.uiupdatescript
self.jar = args.jar
self.log = args.log
self.backuptime = args.backuptime
self.hostname = os.environ.get('HOSTNAME')
self.homedir = os.environ.get('HOME')
self.swtype = args.swtype

def run(self):
app = None
module = __import__(self.swtype, fromlist=[self.swtype])
klass = getattr(module, self.swtype)
app = klass(self.now, self.args)
if app and self.action:
if self.action == 'start':
app.start()
elif self.action == 'stop':
app.stop()
elif self.action == 'backup':
app.backup()
elif self.action == 'upgrade':
app.upgrade()
elif self.action == 'restore':
app.restore_with_cleanup_timestamp()
elif self.action == 'run':
app.run()
else:
print("Invalid action. Please verify!")
return

if __name__ == "__main__":
parser = argparse.ArgumentParser(description='This is a script to upgrade GM/B2Bi.')
parser.add_argument('-action', help='Action to be performed')
parser.add_argument('-swtype', help='Software type')

parser.add_argument('-installdir', help='The installation directory of the B2B product')
parser.add_argument('-backupdir', help='The directory where the backup files are located')
parser.add_argument('-imcldir', help='The path to the Installation Manager')
parser.add_argument('-responsefilepath', help='The path to the response file')
parser.add_argument('-appdatadir', help='The path to the appData directory')
parser.add_argument("-ibmimsharedpath", type=str, help="IBMIMSHARED Path")
parser.add_argument("-IBM", type=str, help="IBM Path")
parser.add_argument("-ibm", type=str, help="ibm Path")
parser.add_argument("-uiupdatescript", help="SFG UI Update Script")
parser.add_argument('-backuptime', help='Time of backup for restoring backup files')
parser.add_argument('-log', help='The path to the log file')
parser.add_argument('-jar', help='The path to the jar file')

print("B2B Manager started.")
args = parser.parse_args()
b2bmgr = B2BManager(args)
if b2bmgr.swtype and b2bmgr.action:
print('Running Service: {} with Action: {}'.format(b2bmgr.swtype.upper(), b2bmgr.action))
b2bmgr.run()
else:
print('Invalid Service or Action. Please verify!')
print("B2B Manager stopped.")
124 changes: 124 additions & 0 deletions b2bmgr/gm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#!/usr/bin/python
import os
import subprocess
from datetime import datetime
import shutil
import logging
import argparse
import tarfile

class gm:
def __init__(self, now, args):
self.now = now
self.args = args
self.action = args.action.lower()
self.swtype = args.swtype
self.backupdir = args.backupdir
self.imcldir = args.imcldir
self.backuptime = args.backuptime
self.responsefilepath = args.responsefilepath
self.appdatadir = args.appdatadir
self.ibmimsharedpath = args.ibmimsharedpath
self.installation_dir = args.installdir
self.log = args.log
self.hostname = os.environ.get('HOSTNAME')
self.homedir = os.environ.get('HOME')
log_filename = os.path.join(self.backupdir, 'b2bmgr_{}_{}_{}.log'.format(self.swtype, self.action, self.now))
logging.basicConfig(filename=log_filename, filemode='w', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

def run(self, args):
logging.info('Starting Upgrade of {} at:{}'.format(self.swtype, self.now))
logging.info('Installation Directory:{}'.format(self.installation_dir))
logging.info('Backup Directory:{}'.format(self.backupdir))


logging.info("About to stop {}".format(self.swtype))
self.stop()
logging.info("Completed {} stop".format(self.swtype))

logging.info("About to start backup process of {}".format(self.swtype))
self.backup()
logging.info("Completed {} backup process".format(self.swtype))

logging.info("About to start upgrade process of {}".format(self.swtype))
self.upgrade()
logging.info("Completed {} upgrade process".format(self.swtype))

logging.info("About to start restore process of {}".format(self.swtype))
self.restore_with_cleanup_timestamp()
logging.info("Completed {} restore process".format(self.swtype))

logging.info("About to start {}".format(self.swtype))
self.start()
logging.info("Completed {} start".format(self.swtype))

def stop(self):
subprocess.call(["amf", "stop", "gm"])

def tar_and_copy_folder(self, source_folder, destination_folder, tar_filename):
with tarfile.open('{}'.format(os.path.join(destination_folder,tar_filename+'.tar.gz')), "w:gz") as tar:
tar.add(source_folder, arcname=".")

def backup(self):
reaper_conf_dir = os.path.join(self.installation_dir, "apache-cassandra", "reaper", "conf")

logging.info("Backup of {} is getting created in {} as {}".format(os.path.join(reaper_conf_dir, "cassandra-reaper.yaml"), self.backupdir, "cassandra-reaper.yaml_{}.bkp".format(self.now)))
shutil.copy2(os.path.join(reaper_conf_dir, "cassandra-reaper.yaml"), os.path.join(self.backupdir, "cassandra-reaper.yaml_{}.bkp".format(self.now)))

netstat_output = subprocess.check_output("netstat -an | grep 2181 | grep TIME_WAIT | wc -l", shell=True)
netstat_output = netstat_output.decode('utf-8')

while netstat_output != "0\n":
zerocountflag = False
time.sleep(5)
netstat_output = subprocess.check_output("netstat -an | grep 2181 | grep TIME_WAIT | wc -l", shell=True)
netstat_output = netstat_output.decode('utf-8')

if netstat_output == "0\n":
zerocountflag = True

if zerocountflag:
for directory in ["ZOO", "CAS"]:
logging.info("Backup of {} is getting created in {} as {}".format(os.path.join(self.installation_dir, directory), self.backupdir, '{}_{}'.format(directory, self.now)))
self.tar_and_copy_folder(os.path.join(self.installation_dir, directory), self.backupdir, '{}_{}'.format(directory, self.now))

logging.info("Backup of {} is getting created in {} as {}".format(self.appdatadir, self.backupdir, '{}_{}'.format("appData", self.now)))
self.tar_and_copy_folder(self.appdatadir, self.backupdir, '{}_{}'.format("appData", self.now))

logging.info("Backup of {} is getting created in {} as {}".format(self.ibmimsharedpath, self.backupdir, '{}_{}'.format("IBMIMShared", self.now)))
self.tar_and_copy_folder(self.ibmimsharedpath, self.backupdir, '{}_{}'.format("IBMIMShared", self.now))

logging.info("Backup of {} is getting created in {} as {}".format(self.installation_dir, self.backupdir, '{}_{}'.format("gm", self.now)))
self.tar_and_copy_folder(self.installation_dir, self.backupdir, '{}_{}'.format("gm", self.now))

def upgrade(self):
os.chdir(self.imcldir)
subprocess.call(["./imcl", "listInstalledPackages", "-verbose"])
subprocess.call([
"./imcl",
"-input", self.responsefilepath,
"-dataLocation", self.appdatadir,
"-log", self.log,
"-acceptLicense"
])
subprocess.call(["./imcl", "listInstalledPackages", "-verbose"])


def restore_with_cleanup_timestamp(self):
reaper_conf_dir = os.path.join(self.installation_dir, "apache-cassandra", "reaper", "conf")

logging.info("Backup of {} is getting created in {} as patchfile {}".format(os.path.join(reaper_conf_dir, "cassandra-reaper.yaml"), reaper_conf_dir, "cassandra-reaper.yaml_{}_patchfile.bkp".format(self.now)))
shutil.copy2(os.path.join(reaper_conf_dir, "cassandra-reaper.yaml"), os.path.join(reaper_conf_dir, "cassandra-reaper.yaml_{}_patchfile.bkp".format(self.now)))

if self.action == run:
+ source_file_name = os.path.join(self.backupdir, "cassandra-reaper.yaml_{}.bkp".format(self.now))
+
+ else:
+ source_file_name = os.path.join(self.backupdir, "cassandra-reaper.yaml_{}.bkp".format(self.backuptime))

logging.info("Restoring {} to {} as {}".format(source_file_name, reaper_conf_dir, "cassandra-reaper.yaml"))
shutil.copy2(source_file_name, os.path.join(reaper_conf_dir, "cassandra-reaper.yaml"))

def start(self):
subprocess.call(["amf", "start", "gm"])

52 changes: 52 additions & 0 deletions b2bmgr/readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
START/STOP
./b2bmgr.py -swtype sfg/gm -action <start/stop>

BACKUP

FOR GM

./b2bmgr.py -swtype gm -action backup -installdir <GMINSTALLDIR> -backupdir <BACKUPDIR> -appdatadir <APPDATADIR> -ibmimsharedpath <IBMIMSHAREDPATH>

./b2bmgr.py -swtype gm -action backup -installdir /apps/ibm/gm -backupdir /apps/ibm/backup -appdatadir /apps/ibm/data -ibmimsharedpath /apps/ibm/im

FOR SFG

./b2bmgr.py -swtype sfg -action backup -installdir <SFGINSTALLDIR> -backupdir <BACKUPDIR> -appdatadir <APPDATADIR> -ibmimsharedpath <IBMIMSHAREDPATH> -IBM <IBMPATH> -ibm <ibmPATH>

./b2bmgr.py -swtype sfg -action backup -installdir /apps/ibm/sfg -backupdir /apps/ibm/backup -appdatadir /apps/ibm/data -ibmimsharedpath /apps/ibm/im -IBM /home/mftadmin/IBM -ibm /home/mftadmin/var/ibm


UPGRADE

FOR GM

./b2bmgr.py -swtype gm -action upgrade -installdir <GMINSTALLDIR> -imcldir <imcl PATH> -responsefilepath <RESPONSEFILEPATH> -appdatadir <APPDATADIR> -log <LOG>

./b2bmgr.py -swtype gm -action upgrade -installdir /apps/ibm/gm -imcldir apps/ibm/sw/sourcefiles/SFG/InstallationManager/IM_Linux/tools -responsefilepath /apps/ibm/sw/sourcefiles/CASS_RES.xml -appdatadir /apps/ibm/data -log /apps/ibm/backup

FOR SFG

./b2bmgr.py -swtype sfg -action upgrade -installdir <SFGINSTALLDIR> -imcldir <imcl PATH> -responsefilepath <RESPONSEFILEPATH> -appdatadir <APPDATADIR> -jar <B2BAPIJARPATH> -log <LOG>

./b2bmgr.py -swtype sfg -action upgrade -installdir /apps/ibm/sfg -imcldir /apps/ibm/sw/sourcefiles/SFG/InstallationManager/IM_Linux/tools -responsefilepath /apps/ibm/sw/sourcefiles/SFG_RES.xml -appdatadir /apps/ibm/data -jar /apps/ibm/sw/SFG/packages/ -log /apps/ibm/backup


RESTORE

FOR GM

./b2bmgr.py -swtype gm -action restore -installdir <GMINSTALLDIR> -backupdir <BACKUPDIR> -backuptime <TIMEOFBACKUPFORRESTORING>

./b2bmgr.py -swtype gm -action restore -installdir /apps/ibm/gm -backupdir /apps/ibm/backup -backuptime <TIMEOFBACKUPFORRESTORING>

FOR SFG

./b2bmgr.py -swtype sfg -action restore -installdir <SFGINSTALLDIR> -backupdir <BACKUPDIR> -backuptime <TIMEOFBACKUPFORRESTORING> -uiupdatescript <UIUPDATESCRIPT>

./b2bmgr.py -swtype sfg -action restore -installdir /apps/ibm/sfg -backupdir /apps/ibm/backup -backuptime 20240309160549 -uiupdatescript /opt/B2B_Shared/c7r7ff/IMA/modifySFG-UI.sh

RUN

FOR GM

./b2bmgr.py -swtype gm -action run -installdir <GMINSTALLDIR> -backupdir <BACKUPDIR> -imcldir <imcl PATH> -responsefilepath <RESPONSEFILEPATH> -appdatadir <APPDATADIR> -ibmimsharedpath <IBMIMSHAREDPATH> -log <LOG>
Loading