-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Import modules from ceph-ansible project
Signed-off-by: Teoman ONAY <[email protected]>
- Loading branch information
Showing
43 changed files
with
12,201 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
import os | ||
import datetime | ||
from typing import List | ||
from ansible.module_utils.basic import AnsibleModule | ||
|
||
|
||
def generate_cmd(cmd='ceph', | ||
sub_cmd=None, | ||
args=None, | ||
user_key=None, | ||
cluster='ceph', | ||
user='client.admin', | ||
container_image=None, | ||
interactive=False): | ||
''' | ||
Generate 'ceph' command line to execute | ||
''' | ||
|
||
if user_key is None: | ||
user_key = '/etc/ceph/{}.{}.keyring'.format(cluster, user) | ||
|
||
cmd = pre_generate_cmd(cmd, container_image=container_image, interactive=interactive) # noqa: E501 | ||
|
||
base_cmd = [ | ||
'-n', | ||
user, | ||
'-k', | ||
user_key, | ||
'--cluster', | ||
cluster | ||
] | ||
|
||
if sub_cmd is not None: | ||
base_cmd.extend(sub_cmd) | ||
|
||
cmd.extend(base_cmd) if args is None else cmd.extend(base_cmd + args) | ||
|
||
return cmd | ||
|
||
|
||
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'] | ||
|
||
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 | ||
|
||
|
||
def is_containerized(): | ||
''' | ||
Check if we are running on a containerized cluster | ||
''' | ||
|
||
if 'CEPH_CONTAINER_IMAGE' in os.environ: | ||
container_image = os.getenv('CEPH_CONTAINER_IMAGE') | ||
else: | ||
container_image = None | ||
|
||
return container_image | ||
|
||
|
||
def pre_generate_cmd(cmd, container_image=None, interactive=False): | ||
''' | ||
Generate ceph prefix command | ||
''' | ||
if container_image: | ||
cmd = container_exec(cmd, container_image, interactive=interactive) | ||
else: | ||
cmd = [cmd] | ||
|
||
return cmd | ||
|
||
|
||
def exec_command(module, cmd, stdin=None, check_rc=False): | ||
''' | ||
Execute command(s) | ||
''' | ||
|
||
binary_data = False | ||
if stdin: | ||
binary_data = True | ||
rc, out, err = module.run_command(cmd, data=stdin, binary_data=binary_data, check_rc=check_rc) # noqa: E501 | ||
|
||
return rc, cmd, out, err | ||
|
||
|
||
def build_base_cmd(module: "AnsibleModule") -> List[str]: | ||
cmd = ['cephadm'] | ||
docker = module.params.get('docker') | ||
image = module.params.get('image') | ||
fsid = module.params.get('fsid') | ||
|
||
if docker: | ||
cmd.append('--docker') | ||
if image: | ||
cmd.extend(['--image', image]) | ||
|
||
cmd.append('shell') | ||
|
||
if fsid: | ||
cmd.extend(['--fsid', fsid]) | ||
|
||
return cmd | ||
|
||
|
||
def build_base_cmd_orch(module: "AnsibleModule") -> List[str]: | ||
cmd = build_base_cmd(module) | ||
cmd.extend(['ceph', 'orch']) | ||
|
||
return cmd | ||
|
||
|
||
def exit_module(module, out, rc, cmd, err, startd, changed=False, diff=dict(before="", after="")): # noqa: E501 | ||
endd = datetime.datetime.now() | ||
delta = endd - startd | ||
|
||
result = dict( | ||
cmd=cmd, | ||
start=str(startd), | ||
end=str(endd), | ||
delta=str(delta), | ||
rc=rc, | ||
stdout=out.rstrip("\r\n"), | ||
stderr=err.rstrip("\r\n"), | ||
changed=changed, | ||
diff=diff | ||
) | ||
module.exit_json(**result) | ||
|
||
|
||
def fatal(message, module): | ||
''' | ||
Report a fatal error and exit | ||
''' | ||
|
||
if module: | ||
module.fail_json(msg=message, rc=1) | ||
else: | ||
raise Exception(message) |
Oops, something went wrong.