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
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
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
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')
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)
def outdate(self): """Outdates resource""" sh.drbdadm('outdate', self.res.name) return True
def adjust(self): """Applies any config changes on resource""" sh.drbdadm('adjust', self.res.name) return True
def secondary(self): """Demote self to secondary""" sh.drbdadm('secondary', self.res.name) return True
def primary(self): """Promote self to primary""" sh.drbdadm('primary', self.res.name) return True
def disconnect(self): """Disconnect from peer""" sh.drbdadm('disconnect', self.res.name) return True
def replication_demote_to_secondary(self): repl_name = self.replication_device_name sh.drbdadm('secondary', repl_name)
def replication_promote_to_primary(self): repl_name = self.replication_device_name sh.drbdadm('primary', repl_name)