예제 #1
0
    def init_resources(self, cloud_config):
        resources = self.resources
        self.resources = dict()
        self.rbd_util = rbd_util.RbdUtil(
            getattr(self.config, "%s" % self.position), self.config.migrate)
        self.qemu_img = qemu_img.QemuImg(
            getattr(self.config, "%s" % self.position), self.config.migrate)
        self.ssh_util = ssh_util.SshUtil(
            getattr(self.config, "%s" % self.position), self.config.migrate)

        ident_conf = self.make_resource_config(self.config, self.position,
                                               cloud_config, 'identity')
        self.mysql_connector = self.get_db_method_create_connection(
            'identity', ident_conf)
        identity = resources['identity'](ident_conf, self)
        self.resources['identity'] = identity

        skip_initialization = ['identity']
        if not self.config.src_objstorage.service:
            skip_initialization.append('objstorage')
        for resource in resources:
            if resource not in skip_initialization:
                resource_config = self.make_resource_config(
                    self.config, self.position, cloud_config, resource)
                self.mysql_connector = \
                    self.get_db_method_create_connection(resource,
                                                         resource_config)
                self.resources[resource] = resources[resource](resource_config,
                                                               self)
예제 #2
0
파일: cloud.py 프로젝트: miarmak/CloudFerry
    def init_resources(self, cloud_config):
        resources = self.resources
        self.resources = dict()
        self.mysql_connector = mysql_connector.MysqlConnector(
            getattr(self.config, "%s_mysql" % self.position), 'cinder')
        self.rbd_util = rbd_util.RbdUtil(
            getattr(self.config, "%s" % self.position), self.config.migrate)
        self.qemu_img = qemu_img.QemuImg(
            getattr(self.config, "%s" % self.position), self.config.migrate)
        self.ssh_util = ssh_util.SshUtil(
            getattr(self.config, "%s" % self.position), self.config.migrate)

        identity_conf = self.make_resource_config(self.config, self.position,
                                                  cloud_config, 'identity')
        identity = resources['identity'](identity_conf, self)
        self.resources['identity'] = identity

        for resource in resources:
            if resource != 'identity':
                resource_config = self.make_resource_config(
                    self.config, self.position, cloud_config, resource)
                self.resources[resource] = resources[resource](resource_config,
                                                               self)
    def run(self, storage_info=None, identity_info=None, **kwargs):
        storage_info = copy.deepcopy(storage_info)
        deploy_info = copy.deepcopy(storage_info)
        deploy_info.update(identity_info)
        storage_info.update(identity_info)
        volume_resource = self.cloud.resources[utl.STORAGE_RESOURCE]
        for vol_id, vol in deploy_info[utl.VOLUMES_TYPE].iteritems():
            if vol['snapshots']:

                vol_info = vol[utl.VOLUME_BODY]

                snapshots_list = \
                    [snap_info for snap_info in vol['snapshots'].values()]

                snapshots_list.sort(key=lambda x: x['created_at'])

                for snap in snapshots_list:
                    if snapshots_list.index(snap) == 0:
                        act_snap_transfer = \
                            snap_transfer.SnapTransfer(
                                self.init,
                                ssh_ceph_to_ceph.SSHCephToCeph,
                                1)
                    else:
                        snap_num = snapshots_list.index(snap)
                        snap['prev_snapname'] = \
                            snapshots_list[snap_num - 1]['name']
                        act_snap_transfer = \
                            snap_transfer.SnapTransfer(
                                self.init,
                                ssh_ceph_to_ceph.SSHCephToCeph,
                                2)

                    act_snap_transfer.run(volume=vol_info, snapshot_info=snap)

                    volume_resource.create_snapshot(
                        volume_id=vol_id,
                        display_name=snap['display_name'],
                        display_description=snap['display_description'])

                act_snap_transfer = snap_transfer.SnapTransfer(
                    self.init, ssh_ceph_to_ceph.SSHCephToCeph, 3)
                act_snap_transfer.run(volume=vol_info,
                                      snapshot_info=snapshots_list[-1])

                for snap in snapshots_list:
                    if volume_resource.config.storage.host:
                        act_delete_redundant_snap = \
                            rbd_util.RbdUtil(cloud=self.cloud,
                                             config_migrate=self.cfg.migrate,
                                             host=vol_info[utl.HOST_DST])
                        act_delete_redundant_snap.snap_rm(
                            vol_info[utl.PATH_DST], snap['name'])
                    else:
                        act_delete_redundant_snap = \
                            rbd_util.RbdUtil(cloud=self.cloud,
                                             config_migrate=self.cfg.migrate)
                        act_delete_redundant_snap.snap_rm(
                            vol_info[utl.PATH_DST], snap['name'],
                            vol_info[utl.HOST_DST])

            else:
                one_volume_info = {
                    'one_volume_info': {
                        utl.VOLUMES_TYPE: {
                            vol_id: vol
                        }
                    }
                }

                act_transport_vol_data = \
                    task_transfer.TaskTransfer(self.init,
                                               'SSHCephToCeph',
                                               input_info='one_volume_info')

                act_transport_vol_data.run(**one_volume_info)

        return {}