def config_changed(): if config('prefer-ipv6'): status_set('maintenance', 'Configuring ipv6') assert_charm_supports_ipv6() ensure_swift_directories() setup_rsync() if not config('action-managed-upgrade') and \ openstack_upgrade_available('swift'): status_set('maintenance', 'Running openstack upgrade') do_openstack_upgrade(configs=CONFIGS) setup_storage() for rid in relation_ids('swift-storage'): swift_storage_relation_joined(rid=rid) CONFIGS.write_all() save_script_rc() if relations_of_type('nrpe-external-master'): update_nrpe_config() sysctl_dict = config('sysctl') if sysctl_dict: create_sysctl(sysctl_dict, '/etc/sysctl.d/50-swift-storage-charm.conf') add_to_updatedb_prunepath(STORAGE_MOUNT_PATH)
def test_setup_storage_overwrite(self, mock_get_device_blkid, determine, mkfs, clean, mock_is_device_in_ring): self.test_config.set('overwrite', True) mock_is_device_in_ring.return_value = False self.is_mapped_loopback_device.return_value = None self.is_device_mounted.return_value = False determine.return_value = ['/dev/vdb'] mock_get_device_blkid.return_value = \ '2d0b960f-f638-434c-bdbf-dca7f35a7af1' swift_utils.setup_storage() clean.assert_called_with('/dev/vdb') self.mkdir.assert_called_with('/srv/node/vdb', owner='swift', group='swift') self.mount.assert_called_with('/dev/vdb', '/srv/node/vdb', filesystem='xfs') self.fstab_add.assert_called_with( 'UUID=2d0b960f-f638-434c-bdbf-dca7f35a7af1', '/srv/node/vdb', 'xfs', options=None) calls = [ call(['chown', '-R', 'swift:swift', '/srv/node/vdb']), call(['chmod', '-R', '0755', '/srv/node/vdb']) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ]) self.assertEqual(self.test_kv.get('prepared-devices'), ['/dev/vdb'])
def test_setup_storage_overwrite(self, determine, mkfs, clean, mock_is_device_in_ring): self.test_config.set('overwrite', True) mock_is_device_in_ring.return_value = False self.is_mapped_loopback_device.return_value = None self.is_device_mounted.return_value = False determine.return_value = ['/dev/vdb'] swift_utils.setup_storage() clean.assert_called_with('/dev/vdb') self.mkdir.assert_called_with('/srv/node/vdb', owner='swift', group='swift') self.mount.assert_called_with('/dev/vdb', '/srv/node/vdb', filesystem='xfs') self.fstab_add.assert_called_with('/dev/vdb', '/srv/node/vdb', 'xfs', options=None) calls = [call(['chown', '-R', 'swift:swift', '/srv/node/vdb']), call(['chmod', '-R', '0755', '/srv/node/vdb'])] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ]) self.assertEqual(self.test_kv.get('prepared-devices'), ['/dev/vdb'])
def test_setup_storage_img(self, determine, mkfs, mock_is_device_in_ring, mock_Fstab): class MockFstab(object): def get_entry_by_attr(self, x, y): return None mock_Fstab.return_value = MockFstab() mock_is_device_in_ring.return_value = False determine.return_value = ["/dev/loop0", ] self.is_mapped_loopback_device.return_value = "/srv/test.img" self.is_device_mounted.return_value = False swift_utils.setup_storage() self.mount.assert_called_with( "/dev/loop0", "/srv/node/loop0", filesystem="xfs", ) self.fstab_add.assert_called_with( '/dev/loop0', '/srv/node/loop0', 'xfs', options='loop,nofail,defaults' ) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/loop0', group='swift', owner='swift') ])
def test_setup_storage_img(self, mock_get_device_blkid, determine, mkfs, mock_is_device_in_ring, mock_Fstab): class MockFstab(object): def get_entry_by_attr(self, x, y): return None mock_Fstab.return_value = MockFstab() mock_is_device_in_ring.return_value = False determine.return_value = [ "/dev/loop0", ] self.is_mapped_loopback_device.return_value = "/srv/test.img" self.is_device_mounted.return_value = False mock_get_device_blkid.return_value = \ '2d0b960f-f638-434c-bdbf-dca7f35a7af1' swift_utils.setup_storage() self.mount.assert_called_with( "/dev/loop0", "/srv/node/loop0", filesystem="xfs", ) self.fstab_add.assert_called_with( 'UUID=2d0b960f-f638-434c-bdbf-dca7f35a7af1', '/srv/node/loop0', 'xfs', options='loop,nofail,defaults') self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/loop0', group='swift', owner='swift') ])
def test_setup_storage_overwrite(self, determine, mkfs, clean, mock_is_device_in_ring): self.test_config.set('overwrite', True) mock_is_device_in_ring.return_value = False self.is_mapped_loopback_device.return_value = None determine.return_value = ['/dev/vdb'] swift_utils.setup_storage() clean.assert_called_with('/dev/vdb') self.mkdir.assert_called_with('/srv/node/vdb', owner='swift', group='swift') self.mount.assert_called_with('/dev/vdb', '/srv/node/vdb', filesystem='xfs') self.fstab_add.assert_called_with('/dev/vdb', '/srv/node/vdb', 'xfs', options=None) calls = [ call(['chown', '-R', 'swift:swift', '/srv/node/vdb']), call(['chmod', '-R', '0755', '/srv/node/vdb']) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ])
def install(): status_set('maintenance', 'Executing pre-install') execd_preinstall() configure_installation_source(config('openstack-origin')) status_set('maintenance', 'Installing apt packages') apt_update() apt_install(PACKAGES, fatal=True) status_set('maintenance', 'Setting up storage') setup_storage() ensure_swift_directories()
def test_setup_storage_no_chmod_existing_devs(self, determine_block_devs, mock_is_device_in_ring): """ Verifies that only newly added and formatted storage devices are chmodded and chowned and not the entire /srv/node directory. Doing this will cause unnecessary write updates and for a production cluster, there could potentially be a lot of files to process. """ determine_block_devs.return_values = ['/dev/vdb', '/dev/vdc'] mock_is_device_in_ring.return_value = True swift_utils.setup_storage() self.assertEqual(self.check_call.call_count, 0)
def test_setup_storage_encrypt_noready(self, determine, mkfs, clean, mock_is_device_in_ring, mock_Fstab, mock_vaultlocker, mock_uuid): mock_context = MagicMock() mock_context.complete = False mock_context.return_value = {} mock_vaultlocker.VaultKVContext.return_value = mock_context swift_utils.setup_storage(encrypt=True) mock_vaultlocker.write_vaultlocker_conf.assert_not_called() clean.assert_not_called() self.check_call.assert_not_called() self.mkdir.assert_not_called() self.assertEqual(self.test_kv.get('prepared-devices'), None)
def test_setup_storage_no_overwrite(self, determine, mkfs, clean, mock_is_device_in_ring): mock_is_device_in_ring.return_value = False determine.return_value = ['/dev/vdb'] swift_utils.setup_storage() self.assertFalse(clean.called) calls = [call(['chown', '-R', 'swift:swift', '/srv/node/']), call(['chmod', '-R', '0755', '/srv/node/'])] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ])
def test_setup_storage_no_overwrite(self, determine, mkfs, clean, mock_is_device_in_ring): mock_is_device_in_ring.return_value = False determine.return_value = ['/dev/vdb'] swift_utils.setup_storage() self.assertFalse(clean.called) calls = [ call(['chown', '-R', 'swift:swift', '/srv/node/vdb']), call(['chmod', '-R', '0755', '/srv/node/vdb']) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ])
def test_setup_storage_encrypt(self, mock_get_device_blkid, determine, mkfs, clean, mock_is_device_in_ring, mock_Fstab, mock_vaultlocker, mock_uuid, filter_installed_packages): filter_installed_packages.return_value = [] mock_context = MagicMock() mock_context.complete = True mock_context.return_value = 'test_context' mock_vaultlocker.VaultKVContext.return_value = mock_context mock_uuid.uuid4.return_value = '7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe' mock_is_device_in_ring.return_value = False self.is_device_mounted.return_value = False self.is_mapped_loopback_device.return_value = None determine.return_value = ['/dev/vdb'] mock_get_device_blkid.return_value = \ '2d0b960f-f638-434c-bdbf-dca7f35a7af1' swift_utils.setup_storage(encrypt=True) self.assertFalse(clean.called) calls = [ call([ 'vaultlocker', 'encrypt', '--uuid', '7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe', '/dev/vdb' ]), call([ 'chown', '-R', 'swift:swift', '/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe' ]), call([ 'chmod', '-R', '0755', '/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe' ]) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe', group='swift', owner='swift') ]) self.assertEqual( self.test_kv.get('prepared-devices'), ['/dev/mapper/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe']) mock_vaultlocker.write_vaultlocker_conf.assert_called_with( 'test_context', priority=90)
def test_setup_storage_no_overwrite(self, mock_get_device_blkid, determine, mkfs, clean, mock_is_device_in_ring, mock_Fstab): mock_is_device_in_ring.return_value = False self.is_device_mounted.return_value = False determine.return_value = ['/dev/vdb'] mock_get_device_blkid.return_value = \ '2d0b960f-f638-434c-bdbf-dca7f35a7af1' swift_utils.setup_storage() self.assertFalse(clean.called) calls = [ call(['chown', '-R', 'swift:swift', '/srv/node/vdb']), call(['chmod', '-R', '0755', '/srv/node/vdb']) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/vdb', group='swift', owner='swift') ]) self.assertEqual(self.test_kv.get('prepared-devices'), ['/dev/vdb'])
def test_setup_storage_img(self, determine, mkfs, mock_is_device_in_ring): mock_is_device_in_ring.return_value = False determine.return_value = [ "/srv/test.img", ] self.is_mapped_loopback_device.return_value = "/srv/test.img" swift_utils.setup_storage() self.mount.assert_called_with( "/srv/test.img", "/srv/node/test.img", filesystem="xfs", ) self.fstab_add.assert_called_with('/srv/test.img', '/srv/node/test.img', 'xfs', options='loop, defaults') self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/test.img', group='swift', owner='swift') ])
def test_setup_storage_img(self, determine, mkfs, mock_is_device_in_ring): mock_is_device_in_ring.return_value = False determine.return_value = ["/srv/test.img", ] self.is_mapped_loopback_device.return_value = "/srv/test.img" swift_utils.setup_storage() self.mount.assert_called_with( "/srv/test.img", "/srv/node/test.img", filesystem="xfs", ) self.fstab_add.assert_called_with( '/srv/test.img', '/srv/node/test.img', 'xfs', options='loop, defaults' ) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/test.img', group='swift', owner='swift') ])
def test_setup_storage_encrypt(self, determine, mkfs, clean, mock_is_device_in_ring, mock_Fstab, mock_vaultlocker, mock_uuid): mock_context = MagicMock() mock_context.complete = True mock_context.return_value = 'test_context' mock_vaultlocker.VaultKVContext.return_value = mock_context mock_uuid.uuid4.return_value = '7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe' mock_is_device_in_ring.return_value = False self.is_device_mounted.return_value = False self.is_mapped_loopback_device.return_value = None determine.return_value = ['/dev/vdb'] swift_utils.setup_storage(encrypt=True) self.assertFalse(clean.called) calls = [ call(['vaultlocker', 'encrypt', '--uuid', '7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe', '/dev/vdb']), call(['chown', '-R', 'swift:swift', '/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe']), call(['chmod', '-R', '0755', '/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe']) ] self.check_call.assert_has_calls(calls) self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe', group='swift', owner='swift') ]) self.assertEqual(self.test_kv.get('prepared-devices'), ['/dev/mapper/crypt-7c3ff7c8-fd20-4dca-9be6-6f44f213d3fe']) mock_vaultlocker.write_vaultlocker_conf.assert_called_with( 'test_context', priority=90 )
def test_setup_storage_img_reuse_fstab_entry(self, determine, mkfs, mock_is_device_in_ring, mock_Fstab): FstabEntry = namedtuple('FstabEntry', ['mountpoint', 'device']) class MockFstab(object): def __init__(self): self.device = '/srv/test.img' def get_entry_by_attr(self, x, y): return FstabEntry(mountpoint='/srv/node/test.img', device='/srv/test.img') mock_Fstab.return_value = MockFstab() mock_is_device_in_ring.return_value = False determine.return_value = [ "/dev/loop0", ] self.is_mapped_loopback_device.return_value = "/srv/test.img" self.is_device_mounted.return_value = False swift_utils.setup_storage() self.mount.assert_called_with( "/srv/test.img", "/srv/node/loop0", filesystem="xfs", ) self.fstab_add.assert_called_with('/srv/test.img', '/srv/node/loop0', 'xfs', options='loop,nofail,defaults') self.mkdir.assert_has_calls([ call('/srv/node', owner='swift', group='swift', perms=0o755), call('/srv/node/loop0', group='swift', owner='swift') ])
def configure_storage(): setup_storage(config('encrypt')) for rid in relation_ids('swift-storage'): swift_storage_relation_joined(rid=rid)