Exemplo n.º 1
0
    def rotate_cmd(count, partition):
        """Rotate nodes, deleting old nodes and starting new."""
        if partition in ('-', '_default'):
            partition = None

        autoscale.create_n_servers(count, partition)
        autoscale.delete_n_servers(count, partition)
Exemplo n.º 2
0
    def test_delete_n_servers(self, delete_hosts_mock, admin_mock,
                              kill_node_mock):
        """Test deleting n servers."""
        admin_srv_mock = admin_mock.server.return_value
        admin_srv_mock.list.return_value = [
            {'_id': 'test-partition-dq2opb2qrfj.foo.com'},
            {'_id': 'test-partition-dq2opbqskkq.foo.com'},
            {'_id': 'test-partition-dq2opc7ao37.foo.com'},
        ]

        autoscale.delete_n_servers(2, partition='partition')

        delete_hosts_mock.assert_called_once_with(
            ipa_client=mock.ANY,
            ec2_conn=mock.ANY,
            hostnames=[
                'test-partition-dq2opb2qrfj.foo.com',
                'test-partition-dq2opbqskkq.foo.com',
            ],
        )
        admin_srv_mock.delete.assert_has_calls([
            mock.call('test-partition-dq2opb2qrfj.foo.com'),
            mock.call('test-partition-dq2opbqskkq.foo.com'),
        ])
        kill_node_mock.assert_has_calls([
            mock.call(mock.ANY, 'test-partition-dq2opb2qrfj.foo.com'),
            mock.call(mock.ANY, 'test-partition-dq2opbqskkq.foo.com'),
        ])
Exemplo n.º 3
0
    def scale_cmd(count, partition):
        """Scale nodes to specified count."""
        if partition in ('-', '_default'):
            partition = None

        cell = context.GLOBAL.cell
        admin_srv = admin.Server(context.GLOBAL.ldap.conn)
        all_servers = sorted(admin_srv.list({'cell': cell}),
                             key=lambda x: x.get('partition'))

        by_partition = {}
        for part, srvs in itertools.groupby(all_servers,
                                            lambda x: x.get('partition')):
            by_partition[part] = list(srvs)

        current_count = len(
            by_partition.get(partition if partition else '_default', []))

        count_by_partition = collections.Counter(
            {p: len(s)
             for p, s in by_partition.items()})

        if count not in {None, current_count}:
            if count > current_count:
                autoscale.create_n_servers(count - current_count, partition)
            else:
                autoscale.delete_n_servers(current_count - count, partition)

            count_by_partition[partition if partition else '_default'] = count

        for part in sorted(count_by_partition):
            print('{: <32}: {}'.format(part, count_by_partition[part]))