35
39
'disable_iptables_flag': None,
36
40
'enable_motd_sys_info': None,
37
41
'test-var1': 'some data',
38
'user-data': '\n'.join(['#!/bin/sh', '/bin/true', '']),
42
'cloud-init:user-data': '\n'.join(['#!/bin/sh', '/bin/true', '']),
43
'sdc:datacenter_name': 'somewhere2',
44
'sdc:operator-script': '\n'.join(['bin/true', '']),
45
'user-data': '\n'.join(['something', '']),
46
'user-script': '\n'.join(['/bin/true', '']),
41
49
DMI_DATA_RETURN = (str(uuid.uuid4()), 'smartdc')
238
249
self.assertTrue(ret)
239
250
self.assertEquals(MOCK_RETURNS['hostname'],
240
251
dsrc.metadata['local-hostname'])
241
self.assertEquals(MOCK_RETURNS['user-data'], dsrc.userdata_raw)
252
self.assertEquals(MOCK_RETURNS['cloud-init:user-data'],
243
255
def test_userdata(self):
244
256
dsrc = self._get_ds(mockdata=MOCK_RETURNS)
245
257
ret = dsrc.get_data()
246
258
self.assertTrue(ret)
247
self.assertEquals(MOCK_RETURNS['user-data'], dsrc.userdata_raw)
259
self.assertEquals(MOCK_RETURNS['user-data'],
260
dsrc.metadata['legacy-user-data'])
261
self.assertEquals(MOCK_RETURNS['cloud-init:user-data'],
264
def test_sdc_scripts(self):
265
dsrc = self._get_ds(mockdata=MOCK_RETURNS)
266
ret = dsrc.get_data()
268
self.assertEquals(MOCK_RETURNS['user-script'],
269
dsrc.metadata['user-script'])
271
legacy_script_f = "%s/user-script" % self.legacy_user_d
272
self.assertTrue(os.path.exists(legacy_script_f))
273
self.assertTrue(os.path.islink(legacy_script_f))
274
user_script_perm = oct(os.stat(legacy_script_f)[stat.ST_MODE])[-3:]
275
self.assertEquals(user_script_perm, '700')
277
def test_scripts_shebanged(self):
278
dsrc = self._get_ds(mockdata=MOCK_RETURNS)
279
ret = dsrc.get_data()
281
self.assertEquals(MOCK_RETURNS['user-script'],
282
dsrc.metadata['user-script'])
284
legacy_script_f = "%s/user-script" % self.legacy_user_d
285
self.assertTrue(os.path.exists(legacy_script_f))
286
self.assertTrue(os.path.islink(legacy_script_f))
288
with open(legacy_script_f, 'r') as f:
289
shebang = f.readlines()[0].strip()
290
self.assertEquals(shebang, "#!/bin/bash")
291
user_script_perm = oct(os.stat(legacy_script_f)[stat.ST_MODE])[-3:]
292
self.assertEquals(user_script_perm, '700')
294
def test_scripts_shebang_not_added(self):
296
Test that the SmartOS requirement that plain text scripts
297
are executable. This test makes sure that plain texts scripts
298
with out file magic have it added appropriately by cloud-init.
301
my_returns = MOCK_RETURNS.copy()
302
my_returns['user-script'] = '\n'.join(['#!/usr/bin/perl',
305
dsrc = self._get_ds(mockdata=my_returns)
306
ret = dsrc.get_data()
308
self.assertEquals(my_returns['user-script'],
309
dsrc.metadata['user-script'])
311
legacy_script_f = "%s/user-script" % self.legacy_user_d
312
self.assertTrue(os.path.exists(legacy_script_f))
313
self.assertTrue(os.path.islink(legacy_script_f))
315
with open(legacy_script_f, 'r') as f:
316
shebang = f.readlines()[0].strip()
317
self.assertEquals(shebang, "#!/usr/bin/perl")
319
def test_scripts_removed(self):
321
Since SmartOS requires that the user script is fetched
322
each boot, we want to make sure that the information
323
is backed-up for user-review later.
325
This tests the behavior of when a script is removed. It makes
326
sure that a) the previous script is backed-up; and 2) that
327
there is no script remaining.
330
script_d = os.path.join(self.tmp, "scripts", "per-boot")
331
os.makedirs(script_d)
333
test_script_f = "%s/99_user_script" % script_d
334
with open(test_script_f, 'w') as f:
337
my_returns = MOCK_RETURNS.copy()
338
del my_returns['user-script']
340
dsrc = self._get_ds(mockdata=my_returns)
341
ret = dsrc.get_data()
343
self.assertFalse(dsrc.metadata['user-script'])
344
self.assertFalse(os.path.exists(test_script_f))
346
def test_userdata_removed(self):
348
User-data in the SmartOS world is supposed to be written to a file
349
each and every boot. This tests to make sure that in the event the
350
legacy user-data is removed, the existing user-data is backed-up and
351
there is no /var/db/user-data left.
354
user_data_f = "%s/mdata-user-data" % self.legacy_user_d
355
with open(user_data_f, 'w') as f:
358
my_returns = MOCK_RETURNS.copy()
359
del my_returns['user-data']
361
dsrc = self._get_ds(mockdata=my_returns)
362
ret = dsrc.get_data()
364
self.assertFalse(dsrc.metadata.get('legacy-user-data'))
367
for root, _dirs, files in os.walk(self.legacy_user_d):
369
name_f = os.path.join(root, name)
370
permissions = oct(os.stat(name_f)[stat.ST_MODE])[-3:]
371
if re.match(r'.*\/mdata-user-data$', name_f):
374
self.assertEquals(permissions, '400')
376
self.assertFalse(found_new)
249
378
def test_disable_iptables_flag(self):
250
379
dsrc = self._get_ds(mockdata=MOCK_RETURNS)