summaryrefslogtreecommitdiff
path: root/tests/unittests/test_datasource/test_smartos.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2014-02-13 23:57:33 -0500
committerScott Moser <smoser@ubuntu.com>2014-02-13 23:57:33 -0500
commit1bf99b6fe9d11a9e3b1d452940d21779347ea461 (patch)
tree311d2acd0e220ffbf316c7d0d75380f160a67518 /tests/unittests/test_datasource/test_smartos.py
parent4ba72556193219f90c313f62d0d309761bb53c6b (diff)
downloadvyos-cloud-init-1bf99b6fe9d11a9e3b1d452940d21779347ea461.tar.gz
vyos-cloud-init-1bf99b6fe9d11a9e3b1d452940d21779347ea461.zip
re-work vendor-data and smartos
This reduces how much cloud-init is explicitly involved in what "vendor-data" could accomplish. The goal of vendor-data was to provide the vendor with a channel to run arbitrary code that accomodate for their specific platform. Much of those accomodations are currently being done in cloud-init. However, this now moves some of those things to default "vendor-data", instead of cloud-init proper. Basically, now we have an 'sdc:vendor-data' key in the metadata. If that does not exist, then cloud-init will use the default. The default, provides a boothook. That boothook writes a file into /var/lib/cloud/per-boot/ . That file will be both written on every boot and then executed at rc.local time frame (by 'scripts-per-boot'). It will then execute /var/lib/cloud/instance/data/user-script and /var/lib/cloud/instance/data/operator-script if they exist. So, the things that cloud-init is now doing outside of the default vendor-data that I would rather be done in vendor-data is: * managing the population of instance/data/user-script and instance/data/operator-script. These could very easily be done from the boothook, but doing them in cloud-init removes the necessity for having a 'mdata-get' command in the image (or some other way for the boothook script to query the datasource). * managing the LEGACY things.
Diffstat (limited to 'tests/unittests/test_datasource/test_smartos.py')
-rw-r--r--tests/unittests/test_datasource/test_smartos.py51
1 files changed, 11 insertions, 40 deletions
diff --git a/tests/unittests/test_datasource/test_smartos.py b/tests/unittests/test_datasource/test_smartos.py
index 062b44ee..19282bac 100644
--- a/tests/unittests/test_datasource/test_smartos.py
+++ b/tests/unittests/test_datasource/test_smartos.py
@@ -44,6 +44,7 @@ MOCK_RETURNS = {
'cloud-init:user-data': '\n'.join(['#!/bin/sh', '/bin/true', '']),
'sdc:datacenter_name': 'somewhere2',
'sdc:operator-script': '\n'.join(['bin/true', '']),
+ 'sdc:vendor-data': '\n'.join(['VENDOR_DATA', '']),
'user-data': '\n'.join(['something', '']),
'user-script': '\n'.join(['/bin/true', '']),
}
@@ -107,7 +108,6 @@ class MockSerial(object):
yield '\n'
-#class TestSmartOSDataSource(MockerTestCase):
class TestSmartOSDataSource(helpers.FilesystemMockingTestCase):
def setUp(self):
helpers.FilesystemMockingTestCase.setUp(self)
@@ -345,10 +345,10 @@ class TestSmartOSDataSource(helpers.FilesystemMockingTestCase):
there is no script remaining.
"""
- script_d = os.path.join(self.tmp, "scripts", "per-boot")
+ script_d = os.path.join(self.tmp, "instance", "data")
os.makedirs(script_d)
- test_script_f = "%s/99_user_script" % script_d
+ test_script_f = os.path.join(script_d, 'user-script')
with open(test_script_f, 'w') as f:
f.write("TEST DATA")
@@ -397,49 +397,20 @@ class TestSmartOSDataSource(helpers.FilesystemMockingTestCase):
dsrc = self._get_ds(mockdata=MOCK_RETURNS)
ret = dsrc.get_data()
self.assertTrue(ret)
- self.assertEquals(MOCK_RETURNS['sdc:operator-script'],
- dsrc.metadata['vendordata'])
+ self.assertEquals(MOCK_RETURNS['sdc:vendor-data'],
+ dsrc.metadata['vendor-data'])
def test_default_vendor_data(self):
my_returns = MOCK_RETURNS.copy()
- def_op_script = my_returns['sdc:operator-script']
- del my_returns['sdc:operator-script']
+ def_op_script = my_returns['sdc:vendor-data']
+ del my_returns['sdc:vendor-data']
dsrc = self._get_ds(mockdata=my_returns)
ret = dsrc.get_data()
self.assertTrue(ret)
- self.assertNotEquals(def_op_script, dsrc.metadata['vendordata'])
-
- self.replicateTestRoot('simple_ubuntu', self.tmp)
- cfg = {
- 'cloud_init_modules': ['write-files'],
- }
- cloud_cfg = util.yaml_dumps(cfg)
- util.ensure_dir(os.path.join(self.tmp, 'etc', 'cloud'))
- util.write_file(os.path.join(self.tmp, 'etc',
- 'cloud', 'cloud.cfg'), cloud_cfg)
-
- self._patchIn(self.tmp)
-
- initer = stages.Init()
- initer.read_cfg()
- initer.datasource = dsrc
- initer.initialize()
- initer.fetch()
- _iid = initer.instancify()
- initer.update()
- initer.cloudify().run('consume_data',
- initer.consume_data,
- args=[PER_INSTANCE],
- freq=PER_INSTANCE)
- mods = stages.Modules(initer)
- (_which_ran, _failures) = mods.run_section('cloud_init_modules')
- pb_script_fns = os.path.join(dsrc.paths.get_cpath('scripts'),
- 'per-boot', '01_sdc-operator-script.sh')
- self.assertTrue(os.path.isfile(pb_script_fns))
- self.assertTrue(os.access(pb_script_fns, os.X_OK))
-
- with open(pb_script_fns, 'r') as fd:
- self.assertIn("#!/bin/sh", fd.readlines()[0])
+ self.assertNotEquals(def_op_script, dsrc.metadata['vendor-data'])
+
+ # we expect default vendor-data is a boothook
+ self.assertTrue(dsrc.vendordata_raw.startswith("#cloud-boothook"))
def test_disable_iptables_flag(self):
dsrc = self._get_ds(mockdata=MOCK_RETURNS)