def refreshHost(host): print "Starting refresh " + host + " at "+time.strftime("%H:%M:%S", time.gmtime()) if MarkLogicEC2Config.isWindows(): MarkLogicEC2Lib.sys("Reinstalling for "+host,"powershell -file " + reinstallFileName(host)) elif MarkLogicEC2Config.isRedHat(): refreshRedHatHost(host) print "Finishing refresh " + host + " at "+time.strftime("%H:%M:%S", time.gmtime())
def setupHost(host): print "Setting up "+host if MarkLogicEC2Config.isWindows(): setupWindowsHost(host) MarkLogicEC2Lib.sys("Setting up "+host,"powershell -file pws\server-setup.ps1") elif MarkLogicEC2Config.isRedHat(): setupRedHatHost(host)
def cleanHost(host): print "Terminating host "+host dns_name = getInstance(host).public_dns_name volumes_for_deletion = [] # Get attached volumes before terminating - you can't get them after for volume in ec2.get_all_volumes(): # print "Volume is "+volume.id if volume.attach_data.instance_id == host: # print "Adding "+volume.id volumes_for_deletion.append(volume.id) getInstance(host).terminate() waitForTerminatedState(host) # Now delete un-deleted volumes - problem with Red Hat instances is that they're not auto-deleted for volume in ec2.get_all_volumes(): for volume_for_deletion in volumes_for_deletion: if volume.id == volume_for_deletion: print "Removing volume " + volume.id volume.delete() if(MarkLogicEC2Config.USE_ELASTIC_IP): if getElasticIP(host): print "Removing elastic ip "+str(getElasticIP(host)) getElasticIP(host).release() for file in (adminFileName(host),sessionFileName(host),reinstallFileName(host),RDPFileName(host),sshFileName(host)): removeFile(file) if(MarkLogicEC2Config.isRedHat()): MarkLogicEC2Lib.sys("Remove from known hosts file","ssh-keygen -R "+dns_name)
def setupRedHatHost(host): instance = getInstance(host) dns_name = instance.public_dns_name print "Starting "+dns_name+" setup at "+time.strftime("%H:%M:%S", time.gmtime()) ssh_cmd = sshToBoxString(dns_name) MarkLogicEC2Lib.sys("Sort out device mapping ...",ssh_cmd + "'" + lnCommand() + "'") MarkLogicEC2Lib.sys("Remove host firewall",ssh_cmd+"'service iptables save ; service iptables stop ; chkconfig iptables off'") MarkLogicEC2Lib.sys("Download MarkLogic install",ssh_cmd + "'cd "+MarkLogicEC2Config.INSTALL_DIR+";curl -O "+MarkLogicEC2Config.MARKLOGIC_DOWNLOAD_URL + MarkLogicEC2Config.MARKLOGIC_EXE+"'") MarkLogicEC2Lib.sys("Copy required files","scp config.ini MarkLogicEC2Config.py MarkLogicEC2Lib.py for_remote/* root@"+dns_name+":"+MarkLogicEC2Config.INSTALL_DIR) MarkLogicEC2Lib.sys("Install MarkLogic",ssh_cmd+"\"cd "+MarkLogicEC2Config.INSTALL_DIR+";python MarkLogicSetup.py\"") createAdminConsoleLink(host) print "Finishing "+dns_name+" config at "+time.strftime("%H:%M:%S", time.gmtime())
def startInstance(host): if(not(isRunning(host))): print "Starting thaw of " + host + " at "+time.strftime("%H:%M:%S", time.gmtime()) ec2.start_instances(host) waitForRunningState(host) if(MarkLogicEC2Config.USE_ELASTIC_IP): getElasticIP(host).associate(host) print "Elastic IP added for host " + host + " - " + str(getElasticIP(host)) waitForReachableState(host) if MarkLogicEC2Config.isRedHat(): MarkLogicEC2Lib.sys("Check device mapping ...",sshToBoxString(getInstance(host).dns_name) + "'" + lnCommand()+ "'") createSSHLink(host) if MarkLogicEC2Config.isWindows(): createRDPLink(host) createSessionLink(host) createReinstallScript(host) createAdminConsoleLink(host) print "Host " + host + " started at "+time.strftime("%H:%M:%S", time.gmtime()) else: print "Host " + host + " already running"
def refreshRedHatHost(host): instance = getInstance(host) dns_name = instance.public_dns_name ssh_cmd = sshToBoxString(dns_name) MarkLogicEC2Lib.sys("Stopping MarkLogic",ssh_cmd+"'/etc/init.d/MarkLogic stop'") MarkLogicEC2Lib.sys("Remove previous install",ssh_cmd+"\"rm -rf "+MarkLogicEC2Config.MARKLOGIC_REDHAT_DATA_ROOT +"/*\"") MarkLogicEC2Lib.sys("Install MarkLogic",ssh_cmd+"\"cd "+MarkLogicEC2Config.INSTALL_DIR+";python MarkLogicSetup.py\"") createAdminConsoleLink(host)
def restartHost(host): if(MarkLogicEC2Config.isRedHat()): MarkLogicEC2Lib.sys("Restarting "+host,sshToBoxString(getInstance(host).dns_name) + "'/etc/init.d/MarkLogic restart'")
for i in range(MarkLogicEC2Config.HOST_COUNT): createHost() for host in getAvailableHosts(): setupHost(host) cluster() elif(mode == RESTART_MODE): if(len(sys.argv) > 2): host = getHostForRequest(sys.argv[2]) restartHost(host) else: for host in getAvailableHosts(): restartHost(host) elif(mode == DEVICES_MODE): if(len(sys.argv) > 2): host = getHostForRequest(sys.argv[2]) MarkLogicEC2Lib.sys("Check device mapping ...",sshToBoxString(getInstance(host).dns_name) + "'" + lnCommand()+ "'") else: for host in getAvailableHosts(): MarkLogicEC2Lib.sys("Check device mapping ...",sshToBoxString(getInstance(host).dns_name) + "'" + lnCommand()+ "'") elif(mode == REMOTE_MODE): if(len(sys.argv) > 2): dns_name = getInstance(getHostForRequest(sys.argv[2])).dns_name if MarkLogicEC2Config.isRedHat(): MarkLogicEC2Lib.sys("Logging into box "+dns_name,sshToBoxString(dns_name)) elif MarkLogicEC2Config.isWindows(): MarkLogicEC2Lib.sys("Logging into box "+dns_name,"powershell -noexit -file sessions\\"+ dns_name + ".session.ps1") else: print "You must supply an index or an instance id" else: print mode +" is not a permitted mode"