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')
        ])
示例#6
0
 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)
示例#9
0
 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_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')
     ])
示例#13
0
 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'])
示例#16
0
    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')
        ])
示例#20
0
def configure_storage():
    setup_storage(config('encrypt'))

    for rid in relation_ids('swift-storage'):
        swift_storage_relation_joined(rid=rid)