Skip to content

Commit

Permalink
testing feature added
Browse files Browse the repository at this point in the history
  • Loading branch information
atighineanu committed Apr 17, 2019
1 parent 7987aa3 commit f71d6d7
Showing 1 changed file with 96 additions and 14 deletions.
110 changes: 96 additions & 14 deletions haproxy.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import os, subprocess
import templ
import templ, clustersetuptest

ip='192.168.100.222'
ipbind='192.168.100.27'
ipbind='192.168.100.231'
sshpwd='test'

def NodeIPfinder(nodes):
for i in range(0, len(nodes)):
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+ip +" 'ping -c 3 "+nodes[i]+"'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip +" 'ping -c 3 "+nodes[i]+"'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()
temp = outcommand1.split("\n")
temp2 = temp[2].split()
Expand Down Expand Up @@ -39,15 +40,15 @@ def RunningChecker(temp, str) :
def PackageInstaller(IPs, package) :
for i in range(0, len(IPs)):
###checking if haproxy is installed:
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+IPs[i]+" 'rpm -qi "+package+"'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+IPs[i]+" 'rpm -qi "+package+"'"], stdout=subprocess.PIPE, shell=True)
(outcommand4, err) = proc.communicate()

#remembering the machine's hostname
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+IPs[i]+" 'hostname'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+IPs[i]+" 'hostname'"], stdout=subprocess.PIPE, shell=True)
(outcommand3, err) = proc.communicate()

if 'not installed' in str(outcommand4):
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+IPs[i]+" 'zypper -n in "+package+"'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+IPs[i]+" 'zypper -n in "+package+"'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()


Expand All @@ -61,20 +62,42 @@ def PackageInstaller(IPs, package) :



def ConfigCopier(ip, path, config, node):
###copying the config file to the main node (the ip we're working with)
os.system("sshpass -p "+sshpwd+" ssh root@"+ip+" 'printf \""+str(config)+"\" > "+path+"'")

#a = os.system("sshpass -p test ssh -Y [email protected] 'crm status'")
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'cat "+path+"'"], stdout=subprocess.PIPE, shell=True)
(outcommand3, err) = proc.communicate()
temp2 = outcommand3.split("\n")

###checking if it was properly copied
###if we find the ips and node names in the config file -> Success!
if 'csync2' in path:
if 'include /etc/haproxy/haproxy.cfg' in outcommand3:
print '2.f) csync2 successfully set up on main node'
if 'haproxy' in path:
if node2 in temp2[len(temp2)-1] and ipnode2 in temp2[len(temp2)-1] and node1 in temp2[len(temp2)-2] and ipnode1 in temp2[len(temp2)-2]:
print '2.d) haproxy.cfg file properly set! Success.'
if 'index' in path:
if ip in temp2[len(temp2)-2] and node in temp2[len(temp2)-3]:
print '2.e.'+str(ReportStepCounter)+') index.html succesfully loaded in node '+node



##--------------------------MAIN PROGRAM STARTS HERE------------------------------------------------

proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+ip+" 'crm status'"], stdout=subprocess.PIPE, shell=True)
###----Starting with checking crm status------------------------------
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'crm status'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()


## So far, just implemented to check two resources WHERE do they run:
## stonith-sbd and admin-ip; feel free to add more stuff when you need
##
temp = outcommand1.split()
#print temp
nodes = []
IPs = []

for i in range(0, len(temp)):
if temp[i] == 'Online:':
for j in range(i+2, i+5):
Expand All @@ -88,13 +111,15 @@ def PackageInstaller(IPs, package) :
print '1.a) stonith-sbd runs on node '+ str(runnersbd)
print '1.b) admin-ip runs on node '+ str(runnerip)


### checking if three nodes
print '1.c) list of online nodes: ' + str(nodes)
if len(nodes) >= 3 :
print '1.d) good! more than 2 nodes...'


### checking which device is used by sbd
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+ip+" 'cat /etc/sysconfig/sbd'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'cat /etc/sysconfig/sbd'"], stdout=subprocess.PIPE, shell=True)
(outcommand2, err) = proc.communicate()
temp = outcommand2.split("\n")

Expand All @@ -106,15 +131,14 @@ def PackageInstaller(IPs, package) :

print '2.a) sbd runs on this device: '+sbddev


### checking if all nodes are registered in sbd
proc = subprocess.Popen(["sshpass -p test ssh -Y root@"+ip+" 'sbd -d " + sbddev+ " list'"], stdout=subprocess.PIPE, shell=True)
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'sbd -d " + sbddev+ " list'"], stdout=subprocess.PIPE, shell=True)
(outcommand3, err) = proc.communicate()
print '2.b) list of registered nodes on SBD: \n'+outcommand3

temp = outcommand3.split("\n")
alternative = nodes[:]
##print id(alternative)
##print id(nodes)

if len(temp) >= 3: ###at least three nodes...
counter=0
Expand All @@ -128,7 +152,7 @@ def PackageInstaller(IPs, package) :
print '2.c) all three nodes are well-registered. Success. \n'
elif alternative != None: #if alternative list of nodes is not empty -> register it with 'sbd -d <device> allocate <node>' command
for i in range(0, len(alternative)):
os.system("shpass -p test ssh -Y root@"+ip+" 'sbd -d "+sbddev+" allocate "+alternative[i]+"'")
os.system("shpass -p "+sshpwd+" ssh -Y root@"+ip+" 'sbd -d "+sbddev+" allocate "+alternative[i]+"'")

#### Finding all ips of all nodes in cluster:
NodeIPfinder(nodes)
Expand All @@ -139,9 +163,67 @@ def PackageInstaller(IPs, package) :
### Checking if apache2 installed on all nodes:
PackageInstaller(IPs, 'apache2')

### Loading template(s) into the config file(s):

### first finding node1 and node2 for the templates
count = 0
for i in range(0, len(IPs)):
if IPs[i] == ip:
continue
else:
count +=1
if count >1:
node2 = nodes[i]
ipnode2 = IPs[i]
else:
node1 = nodes[i]
ipnode1 = IPs[i]

#### copying the haproxy.cfg into the main working node...
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'hostname'"], stdout=subprocess.PIPE, shell=True)
(mainnodename, err) = proc.communicate()

temp = templ.HaprxyTemplHandler('haproxytempl.txt',ipbind, IPs, nodes)
ConfigCopier(ip, '/etc/haproxy/haproxy.cfg', temp, mainnodename)

ReportStepCounter=0
#### then copying the index.html files for node2 and 3 (apache will run only on nodes on which haproxy will not run)

for i in range(0, len(nodes)):
ReportStepCounter+=1
temp = templ.ApacheTemplHandler('apachetempl.txt', nodes[i], IPs[i])
ConfigCopier(IPs[i],'/srv/www/htdocs/index.html', temp, nodes[i])


#### adding "include haproxy.cfg" into csync2.cfg file:
for i in range(0, len(nodes)):
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+IPs[i]+" 'cat /etc/csync2/csync2.cfg'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()
if not('haproxy.cfg' in outcommand1):
outcommand1 = outcommand1.replace("}", "include /etc/haproxy/haproxy.cfg;\n}")
ConfigCopier(IPs[i], '/etc/csync2/csync2.cfg', outcommand1, nodes[i])


### syncronizing the csync2 profile:
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'csync2 -xv >&txt; cat txt'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()
print '2.g) Output of "csync2 -xv" command:\n'+outcommand1

ReportStepCounter=0
for i in range(0, len(nodes)):
os.system("sshpass -p "+sshpwd+" ssh -Y root@"+IPs[i]+" 'systemctl start apache2'")

for i in range(0, len(nodes)):
ReportStepCounter+=1
proc = subprocess.Popen(["sshpass -p "+sshpwd+" ssh -Y root@"+ip+" 'systemctl status apache2'"], stdout=subprocess.PIPE, shell=True)
(outcommand1, err) = proc.communicate()
if 'unning' in outcommand1:
print '3.a.'+str(ReportStepCounter)+') apache2 runs on node '+ nodes[i]
else:
print '3.a.'+str(ReportStepCounter)+') apache2 isn\'t running on node '+ nodes[i]


####---------------------SETTING UP THE CLUSTER----------------------------------------------------------------
###-------------------------TESTING------------------------------------------
clustersetuptest.ClusterConfigurer(ip)
clustersetuptest.ClusterTester(ipbind)

0 comments on commit f71d6d7

Please sign in to comment.