# 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)