예제 #1
0
    def initialize(self):
        if self.res.is_initialized:
            raise DrbdResourceError('Resource "%s" is already initialized.', self.res)
        logger.info('Initializing Resource "%s".', self.res)

        volume_name = self.res.volume_full_name
        logger.info('Creating Volume "%s" for Resource "%s".', volume_name, self.res)
        vol = Volume(name=volume_name)
        vol.create(self.res.size)

        logger.info('Creating Metadata for Resource "%s".', self.res)
        sh.drbdadm('create-md', self.res.name)

        logger.info('Writing config for Resource "%s".', self.res)
        self.write_config()

        logger.info('Reloading Drbd for Resource "%s".', self.res)
        self.adjust()

        logger.info('Marking Resource "%s" as initialized.', self.res)
        self.res.is_initialized = True
        self.res.save()

        logger.info('Resource "%s" has been initialized.', self.res)
        return True
예제 #2
0
 def connect(self, discard_my_data=False):
     """Connect to peer.
     If discard_my_data=True, it will overwrite any local changes to force it to match peer.
     """
     args = []
     if discard_my_data:
         args.extend(['--', '--discard-my-data'])
     args.extend(['connect', self.res.name])
     sh.drbdadm(*args)
     return True
예제 #3
0
 def resize(self, assume_clean=False):
     """Dynamically grow the Resource to be the full size of the underlying Volume.
     If assume_clean=True, then it assumes the new space is just new space, not existing data,
     that way it doesn't have to sync it between peers."""
     args = []
     if assume_clean:
         args.extend(['--', '--assume_clean'])
     args.extend(['resize', self.res.name])
     sh.drbdadm(*args)
     return True
예제 #4
0
    def replication_init(self, is_source=False):
        repl_name = self.replication_device_name

        # Format volume for replication
        # Not needed with official tools init script?
        sh.drbdadm('create-md', repl_name)

        if is_source:
            repl_dev_path = self.replication_device_path
            # This forcefully overwrites the data of our peer
            sh.drbdsetup(repl_dev_path, 'primary', force='yes')
예제 #5
0
def start_services():
    logging.info("Starting storage Pools..")
    service('zfs', 'start')
    time.sleep(30)

    logging.info("Starting volume replication")
    service('drbd', 'start')
    time.sleep(30)

    # Check DRBD status per resource, work with cluster peer to make sure all
    # primaries are on one host.
    for r in [0, 1, 2]:
        r = 'r%d' % r
        sh.drbdadm('primary', r)
예제 #6
0
 def outdate(self):
     """Outdates resource"""
     sh.drbdadm('outdate', self.res.name)
     return True
예제 #7
0
 def adjust(self):
     """Applies any config changes on resource"""
     sh.drbdadm('adjust', self.res.name)
     return True
예제 #8
0
 def secondary(self):
     """Demote self to secondary"""
     sh.drbdadm('secondary', self.res.name)
     return True
예제 #9
0
 def primary(self):
     """Promote self to primary"""
     sh.drbdadm('primary', self.res.name)
     return True
예제 #10
0
 def disconnect(self):
     """Disconnect from peer"""
     sh.drbdadm('disconnect', self.res.name)
     return True
예제 #11
0
 def replication_demote_to_secondary(self):
     repl_name = self.replication_device_name
     sh.drbdadm('secondary', repl_name)
예제 #12
0
 def replication_promote_to_primary(self):
     repl_name = self.replication_device_name
     sh.drbdadm('primary', repl_name)