def _update_firewalls(self): if self.setup_firewall: functions.execute_on_host('firewall.setup') # Update any section where this section appears for section in env.config_object.server_sections(): if self.config_section in env.config_object.get_list(section, env.config_object.ALLOWED_SECTIONS) and env.roledefs[section]: functions.execute_on_platform('firewall.setup', hosts=env.roledefs[section])
def _update_firewalls(self): if self.setup_firewall: functions.execute_on_host('firewall.setup') # Update any section where this section appears for section in env.config_object.server_sections(): if self.config_section in env.config_object.get_list( section, env.config_object.ALLOWED_SECTIONS ) and env.roledefs[section]: functions.execute_on_platform('firewall.setup', hosts=env.roledefs[section])
def _ssh_key_exchange(self, master, slave): """ copy ssh key(pub) from master to slave, so that master can access slave without password via ssh """ ssh_dir = os.path.join(self.home_dir, '.ssh') known = os.path.join(ssh_dir, 'known_hosts') with settings(host_string=master): rsa_pub = os.path.join(ssh_dir, 'id_rsa.pub') pub_key = sudo('cat %s' % rsa_pub) slave_addr = slave.split('@')[1] self._trust_key(slave_addr, known) sudo('chown {0}:{1} {2}'.format(self.user, self.group, known)) with settings(host_string=slave): authorized_keys = os.path.join(ssh_dir, 'authorized_keys') if not exists(authorized_keys): sudo('touch {0}'.format(authorized_keys)) sudo('chown {0}:{1} {2}'.format(self.user, self.group, authorized_keys)) append(authorized_keys, pub_key, use_sudo=True) results = functions.execute_on_platform('utils.get_ip', None, hosts=[master]) master_ip = results[master] self._trust_key(master_ip, known) sudo('chown {0}:{1} {2}'.format(self.user, self.group, known))
def _ssh_key_exchange(self, master, slave): """ copy ssh key(pub) from master to slave, so that master can access slave without password via ssh """ ssh_dir = os.path.join(self.home_dir, '.ssh') known = os.path.join(ssh_dir, 'known_hosts') with settings(host_string=master): rsa_pub = os.path.join(ssh_dir, 'id_rsa.pub') pub_key = sudo('cat %s' %rsa_pub) slave_addr = slave.split('@')[1] self._trust_key(slave_addr, known) sudo('chown {0}:{1} {2}'.format(self.user, self.group, known)) with settings(host_string=slave): authorized_keys = os.path.join(ssh_dir, 'authorized_keys') if not exists(authorized_keys): sudo('touch {0}'.format(authorized_keys)) sudo('chown {0}:{1} {2}'.format(self.user, self.group, authorized_keys)) append(authorized_keys, pub_key, use_sudo=True) results = functions.execute_on_platform('utils.get_ip', None, hosts=[master]) master_ip = results[master] self._trust_key(master_ip, known) sudo('chown {0}:{1} {2}'.format(self.user, self.group, known))
def setup(self, master=None, port=6379, hosts=[]): self._install_package() config = list(self.config) if master: results = functions.execute_on_platform('utils.get_ip', None, hosts=[master]) master_ip = results[master] config.append(('# slaveof', "slaveof ")) config.append(('^slaveof', "slaveof {0} {1}".format( master_ip, port))) self._setup_config(config) functions.execute_if_exists('collectd.install_plugin', 'redis')
def _sync_from_master(self, master): self._ssh_key_exchange(master, env.host_string) results = functions.execute_on_platform('utils.get_ip', None) slave_ip = results[env.host_string] assert slave_ip with settings(host_string=master): run('echo "select pg_start_backup(\'backup\', true)" | sudo su postgres -c \'psql\'') run('sudo su postgres -c "rsync -av --exclude postmaster.pid ' '--exclude pg_xlog --exclude server.crt ' '--exclude server.key ' '%s/ postgres@%s:%s/"'%(self.data_dir, slave_ip, self.data_dir)) run('echo "select pg_stop_backup()" | sudo su postgres -c \'psql\'')
def _prep_slave(self, master, full_sync=True): results = functions.execute_on_platform('utils.get_ip', None, hosts=[master]) master_ip = results[master] assert master_ip if full_sync: self._sync_from_master(master) self._setup_postgres_config(hot_standby='on') self._setup_recovery_conf(master_ip) with settings(warn_only=True): sudo('rm {0}'.format(self.trigger))
def setup(self, master=None, port=6379, hosts=[]): self._install_package() config = list(self.config) if master: results = functions.execute_on_platform('utils.get_ip', None, hosts=[master]) master_ip = results[master] config.append(('# slaveof', "slaveof ")) config.append( ('^slaveof', "slaveof {0} {1}".format(master_ip, port))) self._setup_config(config) functions.execute_if_exists('collectd.install_plugin', 'redis')
def _sync_from_master(self, master): self._ssh_key_exchange(master, env.host_string) results = functions.execute_on_platform('utils.get_ip', None) slave_ip = results[env.host_string] assert slave_ip with settings(host_string=master): run('echo "select pg_start_backup(\'backup\', true)" | sudo su postgres -c \'psql\'' ) run('sudo su postgres -c "rsync -av --exclude postmaster.pid ' '--exclude pg_xlog --exclude server.crt ' '--exclude server.key ' '%s/ postgres@%s:%s/"' % (self.data_dir, slave_ip, self.data_dir)) run('echo "select pg_stop_backup()" | sudo su postgres -c \'psql\'' )
def _do_promote(self, candidate): functions.execute_on_platform('postgres.promote_slave', hosts=[candidate])