mirror of https://github.com/ceph/ceph-ansible.git
509 lines
17 KiB
Python
509 lines
17 KiB
Python
import json
|
|
import os
|
|
import sys
|
|
sys.path.append('./library')
|
|
import ceph_pool
|
|
from mock.mock import patch, Mock, MagicMock
|
|
|
|
|
|
fake_user = 'client.admin'
|
|
fake_user_key = '/etc/ceph/ceph.client.admin.keyring'
|
|
fake_pool_name = 'foo'
|
|
fake_cluster_name = 'ceph'
|
|
fake_container_image_name = 'quay.ceph.io/ceph-ci/daemon:latest-luminous'
|
|
|
|
|
|
@patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': 'podman'})
|
|
class TestCephPoolModule(object):
|
|
def setup_method(self):
|
|
self.fake_running_pool_details = {
|
|
'pool_id': 39,
|
|
'pool_name': 'foo2',
|
|
'create_time': '2020-05-12T12:32:03.696673+0000',
|
|
'flags': 32769,
|
|
'flags_names': 'hashpspool,creating',
|
|
'type': 1,
|
|
'size': 2,
|
|
'min_size': 1,
|
|
'crush_rule': 0,
|
|
'object_hash': 2,
|
|
'pg_autoscale_mode': 'on',
|
|
'pg_num': 32,
|
|
'pg_placement_num': 32,
|
|
'pg_placement_num_target': 32,
|
|
'pg_num_target': 32,
|
|
'pg_num_pending': 32,
|
|
'last_pg_merge_meta': {
|
|
'source_pgid': '0.0',
|
|
'ready_epoch': 0,
|
|
'last_epoch_started': 0,
|
|
'last_epoch_clean': 0,
|
|
'source_version': "0'0",
|
|
'target_version': "0'0"
|
|
},
|
|
'last_change': '109',
|
|
'last_force_op_resend': '0',
|
|
'last_force_op_resend_prenautilus': '0',
|
|
'last_force_op_resend_preluminous': '0',
|
|
'auid': 0,
|
|
'snap_mode': 'selfmanaged',
|
|
'snap_seq': 0,
|
|
'snap_epoch': 0,
|
|
'pool_snaps': [],
|
|
'removed_snaps': '[]',
|
|
'quota_max_bytes': 0,
|
|
'quota_max_objects': 0,
|
|
'tiers': [],
|
|
'tier_of': -1,
|
|
'read_tier': -1,
|
|
'write_tier': -1,
|
|
'cache_mode': 'none',
|
|
'target_max_bytes': 0,
|
|
'target_max_objects': 0,
|
|
'cache_target_dirty_ratio_micro': 400000,
|
|
'cache_target_dirty_high_ratio_micro': 600000,
|
|
'cache_target_full_ratio_micro': 800000,
|
|
'cache_min_flush_age': 0,
|
|
'cache_min_evict_age': 0,
|
|
'erasure_code_profile': '',
|
|
'hit_set_params': {
|
|
'type': 'none'
|
|
},
|
|
'hit_set_period': 0,
|
|
'hit_set_count': 0,
|
|
'use_gmt_hitset': True,
|
|
'min_read_recency_for_promote': 0,
|
|
'min_write_recency_for_promote': 0,
|
|
'hit_set_grade_decay_rate': 0,
|
|
'hit_set_search_last_n': 0,
|
|
'grade_table': [],
|
|
'stripe_width': 0,
|
|
'expected_num_objects': 0,
|
|
'fast_read': False,
|
|
'options': {},
|
|
'application_metadata': {
|
|
'rbd': {}
|
|
},
|
|
'application': 'rbd'
|
|
}
|
|
self.fake_user_pool_config = {
|
|
'pool_name': {
|
|
'value': 'foo2'
|
|
},
|
|
'pg_num': {
|
|
'value': '32',
|
|
'cli_set_opt': 'pg_num'
|
|
},
|
|
'pgp_num': {
|
|
'value': '0',
|
|
'cli_set_opt': 'pgp_num'
|
|
},
|
|
'pg_autoscale_mode': {
|
|
'value': 'on',
|
|
'cli_set_opt': 'pg_autoscale_mode'
|
|
},
|
|
'target_size_ratio': {
|
|
'value': None,
|
|
'cli_set_opt': 'target_size_ratio'
|
|
},
|
|
'application': {
|
|
'value': 'rbd'
|
|
},
|
|
'type': {
|
|
'value': 'replicated'
|
|
},
|
|
'erasure_profile': {
|
|
'value': 'default'
|
|
},
|
|
'crush_rule': {
|
|
'value': 'replicated_rule',
|
|
'cli_set_opt': 'crush_rule'
|
|
},
|
|
'expected_num_objects': {
|
|
'value': '0'
|
|
},
|
|
'size': {
|
|
'value': '2',
|
|
'cli_set_opt': 'size'
|
|
},
|
|
'min_size': {
|
|
'value': '0',
|
|
'cli_set_opt': 'min_size'
|
|
},
|
|
'pg_placement_num': {
|
|
'value': '32',
|
|
'cli_set_opt': 'pgp_num'
|
|
}}
|
|
|
|
|
|
def test_check_pool_exist(self):
|
|
expected_command_list = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
fake_user,
|
|
'-k',
|
|
fake_user_key,
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'stats',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'-f',
|
|
'json'
|
|
]
|
|
|
|
cmd = ceph_pool.check_pool_exist(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], fake_user, fake_user_key, output_format='json', container_image=fake_container_image_name)
|
|
assert cmd == expected_command_list
|
|
|
|
def test_get_default_running_config(self):
|
|
params = ['osd_pool_default_size', 'osd_pool_default_min_size', 'osd_pool_default_pg_num', 'osd_pool_default_pgp_num']
|
|
|
|
expected_command_list = []
|
|
cmd_list = []
|
|
|
|
for param in params:
|
|
expected_command_list.append([
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'config',
|
|
'get',
|
|
'mon.*',
|
|
param
|
|
])
|
|
cmd_list.append(ceph_pool.generate_get_config_cmd(param, fake_cluster_name, fake_user, fake_user_key, container_image=fake_container_image_name))
|
|
assert cmd_list == expected_command_list
|
|
|
|
|
|
def test_get_application_pool(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'application',
|
|
'get',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'-f',
|
|
'json'
|
|
]
|
|
|
|
cmd = ceph_pool.get_application_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], fake_user, fake_user_key, 'json', container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
def test_enable_application_pool(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'application',
|
|
'enable',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'rbd'
|
|
]
|
|
|
|
cmd = ceph_pool.enable_application_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], 'rbd', fake_user, fake_user_key, container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
def test_disable_application_pool(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'application',
|
|
'disable',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'rbd',
|
|
'--yes-i-really-mean-it'
|
|
]
|
|
|
|
cmd = ceph_pool.disable_application_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], 'rbd', fake_user, fake_user_key, container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
|
|
def test_compare_pool_config_no_diff(self):
|
|
delta = ceph_pool.compare_pool_config(self.fake_user_pool_config, self.fake_running_pool_details)
|
|
|
|
assert delta == {}
|
|
|
|
def test_compare_pool_config_std_diff(self):
|
|
self.fake_user_pool_config['size']['value'] = '3'
|
|
delta = ceph_pool.compare_pool_config(self.fake_user_pool_config, self.fake_running_pool_details)
|
|
|
|
assert delta == {'size': {'cli_set_opt': 'size', 'value': '3'}}
|
|
|
|
def test_compare_pool_config_target_size_ratio_diff(self):
|
|
self.fake_user_pool_config['target_size_ratio']['value'] = '0.5'
|
|
delta = ceph_pool.compare_pool_config(self.fake_user_pool_config, self.fake_running_pool_details)
|
|
|
|
assert delta == {'target_size_ratio': {'cli_set_opt': 'target_size_ratio', 'value': '0.5'}}
|
|
|
|
def test_compare_pool_config_application_diff(self):
|
|
self.fake_user_pool_config['application']['value'] = 'foo'
|
|
delta = ceph_pool.compare_pool_config(self.fake_user_pool_config, self.fake_running_pool_details)
|
|
|
|
assert delta == {'application': {'new_application': 'foo', 'old_application': 'rbd', 'value': 'foo'}}
|
|
|
|
|
|
def test_list_pools_details(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'ls',
|
|
'detail',
|
|
'-f',
|
|
'json'
|
|
]
|
|
|
|
cmd = ceph_pool.list_pools(fake_cluster_name, fake_user, fake_user_key, True, 'json', container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
def test_list_pools_nodetails(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'ls',
|
|
'-f',
|
|
'json'
|
|
]
|
|
|
|
cmd = ceph_pool.list_pools(fake_cluster_name, fake_user, fake_user_key, False, 'json', container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
|
|
def test_create_replicated_pool(self):
|
|
self.fake_user_pool_config['type']['value'] = 'replicated'
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'create',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'--pg_num',
|
|
self.fake_user_pool_config['pg_num']['value'],
|
|
'--pgp_num',
|
|
self.fake_user_pool_config['pgp_num']['value'],
|
|
self.fake_user_pool_config['type']['value'],
|
|
self.fake_user_pool_config['crush_rule']['value'],
|
|
'--expected_num_objects',
|
|
self.fake_user_pool_config['expected_num_objects']['value'],
|
|
'--size',
|
|
self.fake_user_pool_config['size']['value'],
|
|
'--autoscale-mode',
|
|
self.fake_user_pool_config['pg_autoscale_mode']['value']
|
|
]
|
|
|
|
cmd = ceph_pool.create_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], fake_user, fake_user_key, self.fake_user_pool_config, container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
def test_create_erasure_pool(self):
|
|
self.fake_user_pool_config['type']['value'] = 'erasure'
|
|
self.fake_user_pool_config['erasure_profile']['value'] = 'erasure-default'
|
|
self.fake_user_pool_config['crush_rule']['value'] = 'erasure_rule'
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'create',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'--pg_num',
|
|
self.fake_user_pool_config['pg_num']['value'],
|
|
'--pgp_num',
|
|
self.fake_user_pool_config['pgp_num']['value'],
|
|
self.fake_user_pool_config['type']['value'],
|
|
self.fake_user_pool_config['erasure_profile']['value'],
|
|
self.fake_user_pool_config['crush_rule']['value'],
|
|
'--expected_num_objects',
|
|
self.fake_user_pool_config['expected_num_objects']['value'],
|
|
'--autoscale-mode',
|
|
self.fake_user_pool_config['pg_autoscale_mode']['value']
|
|
]
|
|
|
|
cmd = ceph_pool.create_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], fake_user, fake_user_key, self.fake_user_pool_config, container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command
|
|
|
|
def test_remove_pool(self):
|
|
expected_command = [
|
|
'podman',
|
|
'run',
|
|
'--rm',
|
|
'--net=host',
|
|
'-v',
|
|
'/etc/ceph:/etc/ceph:z',
|
|
'-v',
|
|
'/var/lib/ceph/:/var/lib/ceph/:z',
|
|
'-v',
|
|
'/var/log/ceph/:/var/log/ceph/:z',
|
|
'--entrypoint=ceph',
|
|
fake_container_image_name,
|
|
'-n',
|
|
'client.admin',
|
|
'-k',
|
|
'/etc/ceph/ceph.client.admin.keyring',
|
|
'--cluster',
|
|
'ceph',
|
|
'osd',
|
|
'pool',
|
|
'rm',
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
self.fake_user_pool_config['pool_name']['value'],
|
|
'--yes-i-really-really-mean-it'
|
|
]
|
|
|
|
cmd = ceph_pool.remove_pool(fake_cluster_name, self.fake_user_pool_config['pool_name']['value'], fake_user, fake_user_key, container_image=fake_container_image_name)
|
|
|
|
assert cmd == expected_command |