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)
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'), ])
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]))