import time # noqa E402
-def container_exec(binary, container_image):
+def container_exec(binary, container_image, interactive=False):
'''
Build the docker CLI to run a command inside a container
'''
container_binary = os.getenv('CEPH_CONTAINER_BINARY')
- command_exec = [container_binary,
- '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=' + binary, container_image]
+ command_exec = [container_binary, 'run']
+
+ if interactive:
+ command_exec.extend(['--interactive'])
+
+ command_exec.extend(['--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=' + binary, container_image])
return command_exec
return container_image
-def pre_generate_ceph_cmd(container_image=None):
+def pre_generate_ceph_cmd(container_image=None, interactive=False):
'''
Generate ceph prefix comaand
'''
if container_image:
- cmd = container_exec('ceph', container_image)
+ cmd = container_exec('ceph', container_image, interactive=interactive)
else:
cmd = ['ceph']
return cmd
-def generate_ceph_cmd(cluster, args, container_image=None):
+def generate_ceph_cmd(cluster, args, container_image=None, interactive=False):
'''
Generate 'ceph' command line to execute
'''
- cmd = pre_generate_ceph_cmd(container_image=container_image)
+ cmd = pre_generate_ceph_cmd(container_image=container_image, interactive=interactive)
base_cmd = [
'--cluster',
return cmd
-def exec_commands(module, cmd):
+def exec_commands(module, cmd, stdin=None):
'''
Execute command(s)
'''
- rc, out, err = module.run_command(cmd)
+ rc, out, err = module.run_command(cmd, data=stdin)
return rc, cmd, out, err
cluster = module.params.get('cluster')
name = module.params.get('name')
- password = module.params.get('password')
- args = ['ac-user-create', name, password]
+ args = ['ac-user-create', '-i', '-', name]
- cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image)
+ cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image, interactive=True)
return cmd
cluster = module.params.get('cluster')
name = module.params.get('name')
- password = module.params.get('password')
- args = ['ac-user-set-password', name, password]
+ args = ['ac-user-set-password', '-i', '-', name]
- cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image)
+ cmd = generate_ceph_cmd(cluster=cluster, args=args, container_image=container_image, interactive=True)
return cmd
name = module.params.get('name')
state = module.params.get('state')
roles = module.params.get('roles')
+ password = module.params.get('password')
if module.check_mode:
module.exit_json(
if user['roles'] != roles:
rc, cmd, out, err = exec_commands(module, set_roles(module, container_image=container_image))
changed = True
- rc, cmd, out, err = exec_commands(module, set_password(module, container_image=container_image))
+ rc, cmd, out, err = exec_commands(module, set_password(module, container_image=container_image), stdin=password)
else:
- rc, cmd, out, err = exec_commands(module, create_user(module, container_image=container_image))
+ rc, cmd, out, err = exec_commands(module, create_user(module, container_image=container_image), stdin=password)
rc, cmd, out, err = exec_commands(module, set_roles(module, container_image=container_image))
changed = True
import os
-import sys
from mock.mock import patch, MagicMock
import pytest
-sys.path.append('./library')
-import ceph_dashboard_user # noqa: E402
+import ceph_dashboard_user
-fake_binary = 'ceph'
-fake_cluster = 'ceph'
fake_container_binary = 'podman'
fake_container_image = 'docker.io/ceph/daemon:latest'
-fake_container_cmd = [
- fake_container_binary,
- '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=' + fake_binary,
- fake_container_image
-]
-fake_user = 'foo'
-fake_password = 'bar'
-fake_roles = ['read-only', 'block-manager']
-fake_params = {'cluster': fake_cluster,
- 'name': fake_user,
- 'password': fake_password,
- 'roles': fake_roles}
class TestCephDashboardUserModule(object):
+ def setup_method(self):
+ self.fake_params = []
+ self.fake_binary = 'ceph'
+ self.fake_cluster = 'ceph'
+ self.fake_name = 'foo'
+ self.fake_user = 'foo'
+ self.fake_password = 'bar'
+ self.fake_module = MagicMock()
+ self.fake_module.params = self.fake_params
+ self.fake_roles = ['read-only', 'block-manager']
+ self.fake_params = {'cluster': self.fake_cluster,
+ 'name': self.fake_user,
+ 'password': self.fake_password,
+ 'roles': self.fake_roles}
@patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
def test_container_exec(self):
- cmd = ceph_dashboard_user.container_exec(fake_binary, fake_container_image)
+ fake_container_cmd = [
+ fake_container_binary,
+ '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=' + self.fake_binary,
+ fake_container_image
+ ]
+ cmd = ceph_dashboard_user.container_exec(self.fake_binary, fake_container_image)
assert cmd == fake_container_cmd
def test_not_is_containerized(self):
@patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
def test_pre_generate_ceph_cmd(self, image):
if image:
- expected_cmd = fake_container_cmd
+ expected_cmd = [
+ fake_container_binary,
+ '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=' + self.fake_binary,
+ image
+ ]
else:
- expected_cmd = [fake_binary]
+ expected_cmd = [self.fake_binary]
assert ceph_dashboard_user.pre_generate_ceph_cmd(image) == expected_cmd
@patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
def test_generate_ceph_cmd(self, image):
if image:
- expected_cmd = fake_container_cmd
+ expected_cmd = [
+ fake_container_binary,
+ '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=' + self.fake_binary,
+ image
+ ]
else:
- expected_cmd = [fake_binary]
+ expected_cmd = [self.fake_binary]
expected_cmd.extend([
'--cluster',
- fake_cluster,
+ self.fake_cluster,
'dashboard'
])
- assert ceph_dashboard_user.generate_ceph_cmd(fake_cluster, [], image) == expected_cmd
+ assert ceph_dashboard_user.generate_ceph_cmd(self.fake_cluster, [], image) == expected_cmd
def test_create_user(self):
- fake_module = MagicMock()
- fake_module.params = fake_params
+ self.fake_module.params = self.fake_params
+ expected_cmd = [
+ self.fake_binary,
+ '--cluster', self.fake_cluster,
+ 'dashboard', 'ac-user-create',
+ '-i', '-',
+ self.fake_user
+ ]
+
+ assert ceph_dashboard_user.create_user(self.fake_module) == expected_cmd
+
+ @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
+ @patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
+ def test_create_user_container(self):
+ self.fake_module.params = self.fake_params
expected_cmd = [
- fake_binary,
- '--cluster', fake_cluster,
+ fake_container_binary,
+ 'run',
+ '--interactive',
+ '--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=' + self.fake_binary,
+ fake_container_image,
+ '--cluster', self.fake_cluster,
'dashboard', 'ac-user-create',
- fake_user,
- fake_password
+ '-i', '-',
+ self.fake_user
]
- assert ceph_dashboard_user.create_user(fake_module) == expected_cmd
+ assert ceph_dashboard_user.create_user(self.fake_module, container_image=fake_container_image) == expected_cmd
def test_set_roles(self):
- fake_module = MagicMock()
- fake_module.params = fake_params
+ self.fake_module.params = self.fake_params
expected_cmd = [
- fake_binary,
- '--cluster', fake_cluster,
+ self.fake_binary,
+ '--cluster', self.fake_cluster,
'dashboard', 'ac-user-set-roles',
- fake_user
+ self.fake_user
]
- expected_cmd.extend(fake_roles)
+ expected_cmd.extend(self.fake_roles)
- assert ceph_dashboard_user.set_roles(fake_module) == expected_cmd
+ assert ceph_dashboard_user.set_roles(self.fake_module) == expected_cmd
def test_set_password(self):
- fake_module = MagicMock()
- fake_module.params = fake_params
+ self.fake_module.params = self.fake_params
+ expected_cmd = [
+ self.fake_binary,
+ '--cluster', self.fake_cluster,
+ 'dashboard', 'ac-user-set-password',
+ '-i', '-',
+ self.fake_user
+ ]
+
+ assert ceph_dashboard_user.set_password(self.fake_module) == expected_cmd
+
+ @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary})
+ @patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
+ def test_set_password_container(self):
+ self.fake_module.params = self.fake_params
expected_cmd = [
- fake_binary,
- '--cluster', fake_cluster,
+ fake_container_binary,
+ 'run',
+ '--interactive',
+ '--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=' + self.fake_binary,
+ fake_container_image,
+ '--cluster', self.fake_cluster,
'dashboard', 'ac-user-set-password',
- fake_user,
- fake_password
+ '-i', '-',
+ self.fake_user
]
- assert ceph_dashboard_user.set_password(fake_module) == expected_cmd
+ assert ceph_dashboard_user.set_password(self.fake_module, container_image=fake_container_image) == expected_cmd
def test_get_user(self):
- fake_module = MagicMock()
- fake_module.params = fake_params
+ self.fake_module.params = self.fake_params
expected_cmd = [
- fake_binary,
- '--cluster', fake_cluster,
+ self.fake_binary,
+ '--cluster', self.fake_cluster,
'dashboard', 'ac-user-show',
- fake_user,
+ self.fake_user,
'--format=json'
]
- assert ceph_dashboard_user.get_user(fake_module) == expected_cmd
+ assert ceph_dashboard_user.get_user(self.fake_module) == expected_cmd
def test_remove_user(self):
- fake_module = MagicMock()
- fake_module.params = fake_params
+ self.fake_module.params = self.fake_params
expected_cmd = [
- fake_binary,
- '--cluster', fake_cluster,
+ self.fake_binary,
+ '--cluster', self.fake_cluster,
'dashboard', 'ac-user-delete',
- fake_user
+ self.fake_user
]
- assert ceph_dashboard_user.remove_user(fake_module) == expected_cmd
+ assert ceph_dashboard_user.remove_user(self.fake_module) == expected_cmd