mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	* refactor: remove trailing whitespace from Python files * Add the GitHub Super-Linter Add Python flake8 linting for W291 trailing whitespace * Add licenses
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you under the Apache License, Version 2.0 (the
 | |
| # "License"); you may not use this file except in compliance
 | |
| # with the License.  You may obtain a copy of the License at
 | |
| #
 | |
| #   http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing,
 | |
| # software distributed under the License is distributed on an
 | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| # KIND, either express or implied.  See the License for the
 | |
| # specific language governing permissions and limitations
 | |
| # under the License.
 | |
| 
 | |
| '''
 | |
| Created on Jul 2, 2012
 | |
| 
 | |
| @author: frank
 | |
| '''
 | |
| import sys
 | |
| import os
 | |
| import os.path
 | |
| import base64
 | |
| 
 | |
| HTML_ROOT = "/var/www/html/"
 | |
| 
 | |
| def writeIfNotHere(fileName, texts):
 | |
|     if not os.path.exists(fileName):
 | |
|         entries = []
 | |
|     else:
 | |
|         f = open(fileName, 'r')
 | |
|         entries = f.readlines()
 | |
|         f.close()
 | |
| 
 | |
|     texts = [ "%s\n" % t for t in texts ]
 | |
|     need = False
 | |
|     for t in texts:
 | |
|         if not t in entries:
 | |
|             entries.append(t)
 | |
|             need = True
 | |
| 
 | |
|     if need:
 | |
|         f = open(fileName, 'w')
 | |
|         f.write(''.join(entries))
 | |
|         f.close()
 | |
| 
 | |
| def createRedirectEntry(vmIp, folder, filename):
 | |
|     entry = "RewriteRule ^%s$  ../%s/%%{REMOTE_ADDR}/%s [L,NC,QSA]" % (filename, folder, filename)
 | |
|     htaccessFolder="/var/www/html/latest"
 | |
|     htaccessFile=os.path.join(htaccessFolder, ".htaccess")
 | |
|     if not os.path.exists(htaccessFolder):
 | |
|         os.makedirs(htaccessFolder)
 | |
|     writeIfNotHere(htaccessFile, ["Options +FollowSymLinks", "RewriteEngine On", entry])
 | |
| 
 | |
|     htaccessFolder = os.path.join("/var/www/html/", folder, vmIp)
 | |
|     if not os.path.exists(htaccessFolder):
 | |
|         os.makedirs(htaccessFolder)
 | |
|     htaccessFile=os.path.join(htaccessFolder, ".htaccess")
 | |
|     entry="Options -Indexes\nOrder Deny,Allow\nDeny from all\nAllow from %s" % vmIp
 | |
|     f = open(htaccessFile, 'w')
 | |
|     f.write(entry)
 | |
|     f.close()
 | |
| 
 | |
|     if folder in ['metadata', 'meta-data']:
 | |
|         entry1="RewriteRule ^meta-data/(.+)$  ../%s/%%{REMOTE_ADDR}/$1 [L,NC,QSA]" % folder
 | |
|         htaccessFolder="/var/www/html/latest"
 | |
|         htaccessFile=os.path.join(htaccessFolder, ".htaccess")
 | |
|         entry2="RewriteRule ^meta-data/$  ../%s/%%{REMOTE_ADDR}/meta-data [L,NC,QSA]" % folder
 | |
|         writeIfNotHere(htaccessFile, [entry1, entry2])
 | |
| 
 | |
| 
 | |
| def addUserData(vmIp, folder, fileName, contents):
 | |
| 
 | |
|     baseFolder = os.path.join(HTML_ROOT, folder, vmIp)
 | |
|     if not os.path.exists(baseFolder):
 | |
|         os.makedirs(baseFolder)
 | |
| 
 | |
|     createRedirectEntry(vmIp, folder, fileName)
 | |
| 
 | |
|     datafileName = os.path.join(HTML_ROOT, folder, vmIp, fileName)
 | |
|     metaManifest = os.path.join(HTML_ROOT, folder, vmIp, "meta-data")
 | |
|     if folder == "userdata":
 | |
|         if contents != "none":
 | |
|             contents = base64.urlsafe_b64decode(contents)
 | |
|         else:
 | |
|             contents = ""
 | |
| 
 | |
|     f = open(datafileName, 'w')
 | |
|     f.write(contents)
 | |
|     f.close()
 | |
| 
 | |
|     if folder == "metadata" or folder == "meta-data":
 | |
|         writeIfNotHere(metaManifest, [fileName])
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     string = sys.argv[1]
 | |
|     allEntires = string.split(";")
 | |
|     for entry in allEntires:
 | |
|         (vmIp, folder, fileName, contents) = entry.split(',', 3)
 | |
|         addUserData(vmIp, folder, fileName, contents)
 | |
|     sys.exit(0)
 |