|
28 | 28 | from xml.dom import Node |
29 | 29 |
|
30 | 30 | class DataSourceOVF(DataSource.DataSource): |
31 | | - pass |
| 31 | + seed = None |
| 32 | + seeddir = cloudinit.seeddir + '/ovf' |
| 33 | + |
| 34 | + def __init__(self): |
| 35 | + pass |
| 36 | + |
| 37 | + def __str__(self): |
| 38 | + mstr="DataSourceOVF" |
| 39 | + mstr = mstr + " [seed=%s]" % self.seed |
| 40 | + return(mstr) |
| 41 | + |
| 42 | + def get_data(self): |
| 43 | + (seedfile, contents) = get_ovf_env(seeddir) |
| 44 | + if seedfile: |
| 45 | + # found a seed dir |
| 46 | + self.seed = "%s/%s" % (dirname,seedfile) |
| 47 | + ret = read_ovf_environment(contents) |
| 48 | + # self.user_data=ret['user-data'] |
| 49 | + # self.meta_data=ret['meta-data'] |
| 50 | + return(True) |
| 51 | + |
| 52 | + (dev, fname, contents) = find_ovf_env() |
| 53 | + if not dev: |
| 54 | + return(False) |
| 55 | + |
| 56 | + ret = read_ovf_environment(contents) |
| 57 | + # self.user_data=ret['user-data'] |
| 58 | + # self.meta_data=ret['meta-data'] |
| 59 | + return(True) |
| 60 | + |
| 61 | + |
| 62 | +# this will return a dict with some content |
| 63 | +# meta-data, user-data |
| 64 | +def read_ovf_environment(contents): |
| 65 | + # this should basically shove into python objects |
| 66 | + # the values we read from ovf environment |
| 67 | + self.metadata = md; |
| 68 | + self.userdata_raw = ud |
| 69 | + |
32 | 70 |
|
| 71 | +# returns tuple of filename (in 'dirname', and the contents of the file) |
| 72 | +# on "not found", returns 'None' for filename and False for contents |
33 | 73 | def get_ovf_env(dirname): |
34 | 74 | env_names = ("ovf-env.xml", "ovf_env.xml", "OVF_ENV.XML", "OVF-ENV.XML" ) |
35 | 75 | for fname in env_names: |
@@ -142,11 +182,17 @@ def getProperties(environString): |
142 | 182 | propElems = findChild(propSections[0], lambda n: n.localName == "Property") |
143 | 183 |
|
144 | 184 | for elem in propElems: |
145 | | - key, val = ( None, None ) |
146 | | - for attr in elem.attributes.values(): |
147 | | - if attr.namespaceURI == envNsURI: |
148 | | - if attr.localName == "key" : key = attr.value |
149 | | - if attr.localName == "value": val = attr.value |
| 185 | + key = elem.attributes.getNamedItemNS(envNsURI,"key").value |
| 186 | + val = elem.attributes.getNamedItemNS(envNsURI,"value").value |
150 | 187 | props[key] = val |
151 | 188 |
|
152 | 189 | return(props) |
| 190 | + |
| 191 | +if __name__ == "__main__": |
| 192 | + import sys |
| 193 | + envStr = open(sys.argv[1]).read() |
| 194 | + props = getProperties(envStr) |
| 195 | + import pprint |
| 196 | + pprint.pprint(props) |
| 197 | + |
| 198 | + read_ovf_environment |
0 commit comments