mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	Added files to xCAT-SoftLayer RPM
Create a python library for xcat as a starting point for transition to Python based in xCAT3. There are also plans to switch over to using the SoftLayer Python API (over Perl) xCAT-SoftLayer.spec file will ship lib/python/xcat directory. A new bin file 'softlayer_nas.py" is created to help assist users with mounting and unmount the SoftLayer NAS shared filesystem DevOps Task #10959 unser xCAT_SoftLayer project
This commit is contained in:
		
							
								
								
									
										92
									
								
								xCAT-SoftLayer/bin/softlayer_nas.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										92
									
								
								xCAT-SoftLayer/bin/softlayer_nas.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| #!/usr/bin/python | ||||
| """ | ||||
| Usage: | ||||
|     softlayer_nas.py [--verbose --hostname=<hostname> --username=<username> --password=<password> --mountpoint=<mountpoint> ] (mount | unmount) | ||||
|     softlayer_nas.py [OPTIONS] (mount | unmount) | ||||
|  | ||||
| Options: | ||||
|     -h --help                  Show help screen | ||||
|     --version                  Show version | ||||
|     --verbose                  Print verbose information | ||||
|     --hostname=<hostname>      SoftLayer Storage hostname | ||||
|     --username=<username>      SoftLayer Storage LUN username  | ||||
|     --password=<password>      SoftLayer Storage LUN password | ||||
|     --mountpoint=<mountpoint>  The mountpoint to use [default: /mnt/nas] | ||||
| """ | ||||
| import os | ||||
| import sys | ||||
| import docopt | ||||
|  | ||||
| path = os.path.dirname(os.path.realpath(__file__)) | ||||
| path = os.path.realpath(os.path.join(path, '..', 'lib', 'python')) | ||||
| if path.startswith('/opt'): | ||||
|     # if installed into system path, do not muck with things | ||||
|     sys.path.append(path) | ||||
|  | ||||
| from xcat import xcatutils | ||||
|  | ||||
| def mount_nas(hostname, user, passwd, mountPoint):  | ||||
|     print "Attempting to mount the NAS at %s" %(mountPoint) | ||||
|  | ||||
|     if xcatutils.isMounted(mountPoint): | ||||
|         raise xcatutils.xCatError("The mount point %s is already in use." %(mountPoint)) | ||||
|   | ||||
|  | ||||
|     cmd = "mount -t cifs //%s/%s -o username=%s,password=%s,rw,nounix,iocharset=utf8,file_mode=0644,dir_mode=0755 %s" %(hostname, user, user, passwd, mountPoint) | ||||
|     out,err = xcatutils.run_command(cmd) | ||||
|  | ||||
| def unmount_nas(mountPoint): | ||||
|     print "Attempting to unmount the NAS at %s..." %(mountPoint) | ||||
|  | ||||
|     if not xcatutils.isMounted(mountPoint): | ||||
|         raise xcatutils.xCatError("The mount point %s is NOT mounted." %(mountPoint)) | ||||
|     else:  | ||||
|         cmd = "umount %s" %(mountPoint) | ||||
|         out,err = xcatutils.run_command(cmd) | ||||
|  | ||||
|         if err:  | ||||
|             print "Encountered error while unmounting..." | ||||
|             print err | ||||
|  | ||||
|  | ||||
| def configure_nas_automount(hostname, user, passwd, mountPoint):  | ||||
|     print "\nNote: To configure automount on reboot, add the following into /etc/fstab:" | ||||
|     cmd = "//%s/%s   %s cifs defaults,username=%s,password=%s 0 0" %(hostname,user,mountPoint,user,passwd) | ||||
|     print "%s\n" %(cmd) | ||||
|  | ||||
| def setup_softlayer_nas():  | ||||
|     # verify information before starting  | ||||
|     if arguments['--hostname'] is None:  | ||||
|         arguments['--hostname'] = xcatutils.getUserInput("Enter the SoftLayer storage hostname") | ||||
|  | ||||
|     if arguments['--username'] is None:  | ||||
|         arguments['--username'] = xcatutils.getUserInput("Enter the SoftLayer storage username") | ||||
|  | ||||
|     if arguments['--password'] is None:  | ||||
|         arguments['--password'] = xcatutils.getUserInput("Enter the SoftLayer storage password") | ||||
|  | ||||
|     # install prereqs | ||||
|     preReqPackages = ['cifs-utils'] | ||||
|     if arguments['--verbose']: | ||||
|         print "Checking for installed packages: %s" %(preReqPackages) | ||||
|     xcatutils.installPackages(preReqPackages) | ||||
|  | ||||
|     # mount the NAS | ||||
|     mount_nas(arguments['--hostname'],arguments['--username'],arguments['--password'],arguments['--mountpoint']) | ||||
|  | ||||
|     configure_nas_automount(arguments['--hostname'],arguments['--username'],arguments['--password'],arguments['--mountpoint']) | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     try: | ||||
|         arguments = (docopt.docopt(__doc__, version="1.0"))  | ||||
|  | ||||
|         if arguments['unmount']: | ||||
|             unmount_nas(arguments['--mountpoint']) | ||||
|         else: | ||||
|             setup_softlayer_nas() | ||||
|  | ||||
|     except docopt.DocoptExit as e: | ||||
|         print e | ||||
|     except xcatutils.xCatError as e: | ||||
|         print "xCatError: %s" %(e)  | ||||
							
								
								
									
										0
									
								
								xCAT-SoftLayer/lib/python/xcat/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								xCAT-SoftLayer/lib/python/xcat/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										85
									
								
								xCAT-SoftLayer/lib/python/xcat/xcatutils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								xCAT-SoftLayer/lib/python/xcat/xcatutils.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
|  | ||||
|  | ||||
| import sys | ||||
| import os | ||||
| import platform | ||||
|  | ||||
| class xCatError(Exception): | ||||
|     def __init__(self, value): | ||||
|         self.value = value | ||||
|     def __str__(self): | ||||
|         return repr(self.value) | ||||
|  | ||||
| def isMounted(mountPoint):  | ||||
|     if os.path.ismount(mountPoint):  | ||||
|         return True | ||||
|     else: | ||||
|         return False | ||||
|  | ||||
| def run_command(cmd): | ||||
|     """ | ||||
|     Function: run_command | ||||
|     Arguments: cmd - string to be run as a command | ||||
|     Description: runs the command then returns out and err | ||||
|     """ | ||||
|     import subprocess | ||||
|  | ||||
|     p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) | ||||
|     (out,err) = p.communicate() | ||||
|     return (out,err) | ||||
|  | ||||
|  | ||||
| def isRhel(): | ||||
|     myDistro = platform.linux_distribution() | ||||
|     if "Red Hat Enterprise Linux Server" or "CentOS" in myDistro: | ||||
|        return True | ||||
|     else:  | ||||
|        return False | ||||
|  | ||||
| def isSles():  | ||||
|     myDistro = platform.linux_distribution() | ||||
|     if "SUSE Linux Enterprise Server" in myDistro: | ||||
|        return True | ||||
|     else:  | ||||
|        return False | ||||
|  | ||||
| def isUbuntu(): | ||||
|     myDistro = platform.linux_distribution() | ||||
|     if "Ubuntu" in myDistro: | ||||
|        return True | ||||
|     else:  | ||||
|        return False | ||||
|  | ||||
| def getUserInput(question): | ||||
|     response = raw_input("%s: " %(question)) | ||||
|     return response | ||||
|  | ||||
| def filterInstalledPackages(pkglist=[]): | ||||
|     fulllist = ""  | ||||
|  | ||||
|     if isRhel(): | ||||
|         # using YUM | ||||
|         import yum  | ||||
|         yb = yum.YumBase() | ||||
|  | ||||
|         for x in pkglist: | ||||
|             if not yb.rpmdb.searchNevra(name='%s' %(x)): | ||||
|                 fulllist += "%s " %(x)  | ||||
|     | ||||
|     return fulllist | ||||
|   | ||||
| def installPackages(pkglist=[]): | ||||
|     fulllist = filterInstalledPackages(pkglist) | ||||
|  | ||||
|     if isRhel(): | ||||
|         if fulllist.strip() != "":  | ||||
|             cmd = "yum -y install %s" %(fulllist) | ||||
|             out,err = xcatutils.run_command(cmd) | ||||
|  | ||||
|     elif isSles():  | ||||
|         print "Using zyppr..." | ||||
|     elif isUbuntu(): | ||||
|         print "Using apt-get..." | ||||
|     else: | ||||
|         print "Error!"  | ||||
|  | ||||
| @@ -47,6 +47,9 @@ xCAT-SoftLayer provides Utilities to make xCAT work in a SoftLayer environment. | ||||
| %install | ||||
| rm -rf $RPM_BUILD_ROOT | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/bin | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib/python | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib/python/xcat | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/xcat/install | ||||
| #mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/xcat/sysclone/postscripts | ||||
| mkdir -p $RPM_BUILD_ROOT/%{prefix}/share/doc/packages/xCAT-SoftLayer | ||||
| @@ -59,6 +62,8 @@ cp -p -R share/xcat/install/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/install/ | ||||
| cp -d bin/* $RPM_BUILD_ROOT/%{prefix}/bin | ||||
| chmod 755 $RPM_BUILD_ROOT/%{prefix}/bin/* | ||||
|  | ||||
| cp -d lib/python/xcat/* $RPM_BUILD_ROOT/%{prefix}/lib/python/xcat/ | ||||
|  | ||||
| #cp -d postscripts/* $RPM_BUILD_ROOT/%{prefix}/share/xcat/sysclone/postscripts | ||||
| #chmod 755 $RPM_BUILD_ROOT/%{prefix}/share/xcat/sysclone/postscripts/* | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user