Example #1
0
 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])
Example #2
0
 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])
Example #3
0
    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))
Example #4
0
    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))
Example #5
0
    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')
Example #6
0
    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\'')
Example #7
0
    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))
Example #8
0
    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')
Example #9
0
    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))
Example #10
0
    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\''
                )
Example #11
0
 def _do_promote(self, candidate):
     functions.execute_on_platform('postgres.promote_slave',
                                   hosts=[candidate])
Example #12
0
 def _do_promote(self, candidate):
     functions.execute_on_platform('postgres.promote_slave', hosts=[candidate])