Made new ovf-env.xml handling more robust. Test cases included
This commit is contained in:
parent
b56c388430
commit
29b07145fc
@ -84,21 +84,20 @@ class DataSourceAzureNet(sources.DataSource):
|
|||||||
|
|
||||||
candidates = [self.seed_dir]
|
candidates = [self.seed_dir]
|
||||||
candidates.extend(list_possible_azure_ds_devs())
|
candidates.extend(list_possible_azure_ds_devs())
|
||||||
|
previous_ovf_cfg = None
|
||||||
if ddir:
|
if ddir:
|
||||||
candidates.append(ddir)
|
candidates.append(ddir)
|
||||||
|
|
||||||
|
previous_ovf_cfg = None
|
||||||
|
if os.path.exists("%s/ovf-env.xml" % ddir):
|
||||||
|
previous_ovf_cfg = load_azure_ds_dir(ddir)
|
||||||
|
|
||||||
found = None
|
found = None
|
||||||
|
|
||||||
for cdev in candidates:
|
for cdev in candidates:
|
||||||
try:
|
try:
|
||||||
if cdev.startswith("/dev/"):
|
if cdev.startswith("/dev/"):
|
||||||
ret = util.mount_cb(cdev, load_azure_ds_dir)
|
ret = util.mount_cb(cdev, load_azure_ds_dir)
|
||||||
|
|
||||||
# If we load the OVF from a device, it means that a
|
|
||||||
# new ovf-env.xml has been found. (LP: #1269626)
|
|
||||||
if os.path.exists(ddir):
|
|
||||||
LOG.info("removing old agent directory %s" % ddir)
|
|
||||||
util.del_dir(ddir)
|
|
||||||
else:
|
else:
|
||||||
ret = load_azure_ds_dir(cdev)
|
ret = load_azure_ds_dir(cdev)
|
||||||
|
|
||||||
@ -110,6 +109,11 @@ class DataSourceAzureNet(sources.DataSource):
|
|||||||
LOG.warn("%s was not mountable" % cdev)
|
LOG.warn("%s was not mountable" % cdev)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if ret != previous_ovf_cfg:
|
||||||
|
LOG.info(("instance configuration has changed, "
|
||||||
|
"removing old agent directory"))
|
||||||
|
util.del_dir(ddir)
|
||||||
|
|
||||||
(md, self.userdata_raw, cfg, files) = ret
|
(md, self.userdata_raw, cfg, files) = ret
|
||||||
self.seed = cdev
|
self.seed = cdev
|
||||||
self.metadata = util.mergemanydict([md, DEFAULT_METADATA])
|
self.metadata = util.mergemanydict([md, DEFAULT_METADATA])
|
||||||
|
@ -119,6 +119,10 @@ class TestAzureDataSource(MockerTestCase):
|
|||||||
{'ovf-env.xml': data['ovfcontent']})
|
{'ovf-env.xml': data['ovfcontent']})
|
||||||
|
|
||||||
mod = DataSourceAzure
|
mod = DataSourceAzure
|
||||||
|
ddir = "%s/var/lib/waagent" % self.tmp
|
||||||
|
mod.BUILTIN_DS_CONFIG['data_dir'] = ddir
|
||||||
|
if not os.path.isdir(ddir):
|
||||||
|
os.makedirs(ddir)
|
||||||
|
|
||||||
self.apply_patches([(mod, 'list_possible_azure_ds_devs', dsdevs)])
|
self.apply_patches([(mod, 'list_possible_azure_ds_devs', dsdevs)])
|
||||||
|
|
||||||
@ -338,6 +342,40 @@ class TestAzureDataSource(MockerTestCase):
|
|||||||
|
|
||||||
self.assertEqual(userdata, dsrc.userdata_raw)
|
self.assertEqual(userdata, dsrc.userdata_raw)
|
||||||
|
|
||||||
|
def test_existing_ovf_same(self):
|
||||||
|
mydata = "FOOBAR"
|
||||||
|
odata = {'UserData': base64.b64encode(mydata)}
|
||||||
|
data = {'ovfcontent': construct_valid_ovf_env(data=odata)}
|
||||||
|
|
||||||
|
with open("%s/ovf-env.xml" % self.tmp, 'w') as fp:
|
||||||
|
fp.write(construct_valid_ovf_env(data=odata))
|
||||||
|
with open("%s/sem" % self.tmp, 'w') as fp:
|
||||||
|
fp.write("test")
|
||||||
|
|
||||||
|
dsrc = self._get_ds(data)
|
||||||
|
ret = dsrc.get_data()
|
||||||
|
self.assertTrue(ret)
|
||||||
|
self.assertEqual(dsrc.userdata_raw, mydata)
|
||||||
|
self.assertTrue(os.path.exists("%s/sem" % self.tmp))
|
||||||
|
|
||||||
|
def test_existing_ovf_diff(self):
|
||||||
|
mydata = "FOOBAR"
|
||||||
|
odata = {'UserData': base64.b64encode(mydata)}
|
||||||
|
data = {'ovfcontent': construct_valid_ovf_env(data=odata)}
|
||||||
|
|
||||||
|
data_dir = "%s/var/lib/waagent" % self.tmp
|
||||||
|
os.makedirs(data_dir)
|
||||||
|
with open("%s/ovf-env.xml" % data_dir, 'w') as fp:
|
||||||
|
fp.write(construct_valid_ovf_env())
|
||||||
|
with open("%s/sem" % data_dir, 'w') as fp:
|
||||||
|
fp.write("test")
|
||||||
|
|
||||||
|
dsrc = self._get_ds(data)
|
||||||
|
ret = dsrc.get_data()
|
||||||
|
self.assertTrue(ret)
|
||||||
|
self.assertEqual(dsrc.userdata_raw, mydata)
|
||||||
|
self.assertFalse(os.path.exists("%s/sem" % data_dir))
|
||||||
|
|
||||||
|
|
||||||
class TestReadAzureOvf(MockerTestCase):
|
class TestReadAzureOvf(MockerTestCase):
|
||||||
def test_invalid_xml_raises_non_azure_ds(self):
|
def test_invalid_xml_raises_non_azure_ds(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user