MCPcopy Create free account
hub / github.com/apache/cloudstack / CsVmMetadata

Class CsVmMetadata

systemvm/debian/opt/cloud/bin/configure.py:841–1000  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

839
840
841class CsVmMetadata(CsDataBag):
842
843 def process(self):
844 for ip in self.dbag:
845 if ("id" == ip):
846 continue
847 logging.info("Processing metadata for %s" % ip)
848 for item in self.dbag[ip]:
849 folder = item[0]
850 file = item[1]
851 data = item[2]
852
853 # process only valid data
854 if folder != "userdata" and folder != "metadata":
855 continue
856
857 if file == "":
858 continue
859
860 self.__htaccess(ip, folder, file)
861
862 if data == "":
863 self.__deletefile(ip, folder, file)
864 else:
865 self.__createfile(ip, folder, file, data)
866
867 def __deletefile(self, ip, folder, file):
868 datafile = "/var/www/html/" + folder + "/" + ip + "/" + file
869
870 if os.path.exists(datafile):
871 os.remove(datafile)
872
873 def __writefile(self, dest, data, mode):
874 fh = open(dest, mode)
875 self.__exflock(fh)
876 fh.write(data)
877 self.__unflock(fh)
878 fh.close()
879 os.chmod(dest, 0o644)
880
881 def __createfile(self, ip, folder, file, data):
882 dest = "/var/www/html/" + folder + "/" + ip + "/" + file
883 metamanifestdir = "/var/www/html/" + folder + "/" + ip
884 metamanifest = metamanifestdir + "/meta-data"
885
886 if data is not None:
887 # base64 decode userdata
888 if folder == "userdata" or folder == "user-data":
889 # need to pad data if it is not valid base 64
890 if len(data) % 4 != 0:
891 data += (4 - (len(data) % 4)) * "="
892 data = base64.b64decode(data)
893 if isinstance(data, str):
894 self.__writefile(dest, data, "w")
895 elif isinstance(data, bytes):
896 self.__writefile(dest, data, "wb")
897 else:
898 self.__writefile(dest, "", "w")

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected