mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			173 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """ General helper functions 
 | |
| for use in the configuation process
 | |
| 
 | |
| """
 | |
| import subprocess
 | |
| import logging
 | |
| import os.path
 | |
| import re
 | |
| import shutil
 | |
| from netaddr import *
 | |
| from pprint import pprint
 | |
| 
 | |
| def is_mounted(name):
 | |
|     for i in execute("mount"):
 | |
|         vals = i.lstrip().split()
 | |
|         if vals[0] == "tmpfs" and vals[2] == name:
 | |
|             return True
 | |
|     return False
 | |
| 
 | |
| def mount_tmpfs(name):
 | |
|     if not is_mounted(name):
 | |
|         print "Mounting it"
 | |
|         execute("mount tmpfs %s -t tmpfs" % name)
 | |
| 
 | |
| def umount_tmpfs(name):
 | |
|     if is_mounted(name):
 | |
|         execute("umount %s" % name)
 | |
| 
 | |
| def rm(name):
 | |
|     os.remove(name) if os.path.isfile(name) else None
 | |
| 
 | |
| def rmdir(name):
 | |
|     if name:
 | |
|         shutil.rmtree(name, True)
 | |
| 
 | |
| def mkdir(name, mode, fatal):
 | |
|     try:
 | |
|         os.makedirs(name, mode)
 | |
|     except OSError as e:
 | |
|         if e.errno != 17:
 | |
|             print "failed to make directories " + name + " due to :" +e.strerror
 | |
|             if(fatal):
 | |
|                 sys.exit(1)
 | |
| 
 | |
| def updatefile(filename, val, mode):
 | |
|     """ add val to file """
 | |
|     handle = open(filename, 'r')
 | |
|     for line in handle.read():
 | |
|         if line.strip().lstrip() == val:
 | |
|             return
 | |
|     # set the value
 | |
|     handle.close()
 | |
|     handle = open(filename, mode)
 | |
|     handle.write(val)
 | |
|     handle.close()
 | |
| 
 | |
| def bool_to_yn(val):
 | |
|     if val:
 | |
|         return "yes"
 | |
|     return "no"
 | |
| 
 | |
| def get_device_info():
 | |
|     """ Returns all devices on system with their ipv4 ip netmask """
 | |
|     list = []
 | |
|     for i in execute("ip addr show"):
 | |
|         vals = i.strip().lstrip().rstrip().split()
 | |
|         if vals[0] == "inet":
 | |
|             to = {}
 | |
|             to['ip'] = vals[1]
 | |
|             to['dev'] = vals[-1]
 | |
|             to['network'] = IPNetwork(to['ip'])
 | |
|             to['dnsmasq'] = False
 | |
|             list.append(to)
 | |
|     return list
 | |
| 
 | |
| def get_domain():
 | |
|     for line in open("/etc/resolv.conf"):
 | |
|         vals = line.lstrip().split()
 | |
|         if vals[0] == "domain":
 | |
|             return vals[1]
 | |
|     return "cloudnine.internal"
 | |
| 
 | |
| def get_device(ip):
 | |
|     """ Returns the device which has a specific ip 
 | |
|     If the ip is not found returns an empty string
 | |
|     """
 | |
|     for i in execute("ip addr show"):
 | |
|         vals = i.strip().lstrip().rstrip().split()
 | |
|         if vals[0] == "inet":
 | |
|             if vals[1].split('/')[0] == ip:
 | |
|                 return vals[-1]
 | |
|     return ""
 | |
| 
 | |
| def get_ip(device):
 | |
|     """ Return first ip on an interface """
 | |
|     cmd = "ip addr show dev %s" % device
 | |
|     for i in execute(cmd):
 | |
|         vals = i.lstrip().split()
 | |
|         if (vals[0] == 'inet'):
 | |
|             return vals[1]
 | |
|     return ""
 | |
| 
 | |
| def definedinfile(filename, val):
 | |
|     """ Check if val is defined in the file """
 | |
|     for line in open(filename):
 | |
|         if re.search(val, line):
 | |
|             return True
 | |
|     return False
 | |
| 
 | |
| def addifmissing(filename, val):
 | |
|     """ Add something to a file
 | |
|     if it is not already there """
 | |
|     if not os.path.isfile(filename):
 | |
|          logging.debug("File %s doesn't exist, so create" % filename)
 | |
|          open(filename,"w").close()
 | |
|     if not definedinfile(filename, val):
 | |
|          updatefile(filename, val + "\n", "a")
 | |
|          logging.debug("Added %s to file %s" % (val, filename))
 | |
|          return True
 | |
|     return False
 | |
| 
 | |
| def get_hostname():
 | |
|     for line in open("/etc/hostname"):
 | |
|         return line.strip()
 | |
| 
 | |
| def execute(command):
 | |
|     """ Execute command """
 | |
|     logging.debug("Executing %s" % command)
 | |
|     p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 | |
|     result = p.communicate()[0]
 | |
|     return result.splitlines()
 | |
| 
 | |
| def execute2(command):
 | |
|     """ Execute command """
 | |
|     logging.debug("Executing %s" % command)
 | |
|     p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 | |
|     p.wait()
 | |
|     return p
 | |
| 
 | |
| def service(name, op):
 | |
|     execute("service %s %s" % (name, op))
 | |
|     logging.info("Service %s %s" % (name, op))
 | |
| 
 | |
| def start_if_stopped(name):
 | |
|     ret = execute2("service %s status" % name)
 | |
|     if ret.returncode:
 | |
|         execute2("service %s start" % name)
 | |
| 
 | |
| def hup_dnsmasq(name, user):
 | |
|     pid = ""
 | |
|     for i in execute("ps -ef | grep %s" % name):
 | |
|         vals = i.lstrip().split()
 | |
|         if (vals[0] == user):
 | |
|             pid = vals[1]
 | |
|     if pid:
 | |
|         logging.info("Sent hup to %s", name)
 | |
|         execute("kill -HUP %s" % pid)
 | |
|     else:
 | |
|         service("dnsmasq", "start")
 | |
| 
 | |
| def copy_if_needed(src, dest):
 | |
|     """ Copy a file if the destination does not already exist
 | |
|     """
 | |
|     if os.path.isfile(dest):
 | |
|         return
 | |
|     try:
 | |
|         shutil.copy2(src, dest)
 | |
|     except IOError:
 | |
|         logging.Error("Could not copy %s to %s" % (src, dest))
 | |
|     else:
 | |
|         logging.info("Copied %s to %s" % (src, dest))
 | |
| 
 |