Exemplo n.º 1
0
def main():
    module = AnsibleModule(
        argument_spec=dict(
            name=dict(type='str',
                      required=True,
                      choices=[
                          'noup', 'nodown', 'noout', 'nobackfill',
                          'norebalance', 'norecover', 'noscrub', 'nodeep-scrub'
                      ]),
            cluster=dict(type='str', required=False, default='ceph'),
            state=dict(type='str',
                       required=False,
                       default='present',
                       choices=['present', 'absent']),
        ),
        supports_check_mode=True,
    )

    name = module.params.get('name')
    cluster = module.params.get('cluster')
    state = module.params.get('state')

    startd = datetime.datetime.now()

    container_image = is_containerized()

    if state == 'present':
        cmd = generate_ceph_cmd(['osd', 'set'], [name],
                                cluster=cluster,
                                container_image=container_image)
    else:
        cmd = generate_ceph_cmd(['osd', 'unset'], [name],
                                cluster=cluster,
                                container_image=container_image)

    if module.check_mode:
        exit_module(module=module,
                    out='',
                    rc=0,
                    cmd=cmd,
                    err='',
                    startd=startd,
                    changed=False)
    else:
        rc, out, err = module.run_command(cmd)
        exit_module(module=module,
                    out=out,
                    rc=rc,
                    cmd=cmd,
                    err=err,
                    startd=startd,
                    changed=True)
Exemplo n.º 2
0
def update_pool(module,
                cluster,
                name,
                user,
                user_key,
                delta,
                container_image=None):
    '''
    Update an existing pool
    '''

    report = ""

    for key in delta.keys():
        if key != 'application':
            args = [
                'set', name, delta[key]['cli_set_opt'], delta[key]['value']
            ]

            cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                                    args=args,
                                    cluster=cluster,
                                    user=user,
                                    user_key=user_key,
                                    container_image=container_image)

            rc, cmd, out, err = exec_command(module, cmd)
            if rc != 0:
                return rc, cmd, out, err

        else:
            rc, cmd, out, err = exec_command(
                module,
                disable_application_pool(
                    cluster,
                    name,
                    delta['application']['old_application'],
                    user,
                    user_key,
                    container_image=container_image))  # noqa: E501
            if rc != 0:
                return rc, cmd, out, err

            rc, cmd, out, err = exec_command(
                module,
                enable_application_pool(
                    cluster,
                    name,
                    delta['application']['new_application'],
                    user,
                    user_key,
                    container_image=container_image))  # noqa: E501
            if rc != 0:
                return rc, cmd, out, err

        report = report + "\n" + "{} has been updated: {} is now {}".format(
            name, key, delta[key]['value'])  # noqa: E501

    out = report
    return rc, cmd, out, err
Exemplo n.º 3
0
def create_profile(module,
                   name,
                   k,
                   m,
                   stripe_unit,
                   crush_device_class,
                   cluster='ceph',
                   force=False,
                   container_image=None):  # noqa: E501
    '''
    Create a profile
    '''

    args = ['set', name, 'k={}'.format(k), 'm={}'.format(m)]
    if stripe_unit:
        args.append('stripe_unit={}'.format(stripe_unit))
    if crush_device_class:
        args.append('crush-device-class={}'.format(crush_device_class))
    if force:
        args.append('--force')

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
                            args=args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 4
0
def create_rule(module, container_image=None):
    '''
    Create a new crush replicated/erasure rule
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    rule_type = module.params.get('rule_type')
    bucket_root = module.params.get('bucket_root')
    bucket_type = module.params.get('bucket_type')
    device_class = module.params.get('device_class')
    profile = module.params.get('profile')

    if rule_type == 'replicated':
        args = ['create-replicated', name, bucket_root, bucket_type]
        if device_class:
            args.append(device_class)
    else:
        args = ['create-erasure', name]
        if profile:
            args.append(profile)

    cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
                            args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 5
0
def list_pools(cluster,
               user,
               user_key,
               details,
               output_format='json',
               container_image=None):
    '''
    List existing pools
    '''

    args = ['ls']

    if details:
        args.append('detail')

    args.extend(['-f', output_format])

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    return cmd
Exemplo n.º 6
0
def get_pool_details(module,
                     cluster,
                     name,
                     user,
                     user_key,
                     output_format='json',
                     container_image=None):
    '''
    Get details about a given pool
    '''

    args = ['ls', 'detail', '-f', output_format]

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    rc, cmd, out, err = exec_command(module, cmd)

    if rc == 0:
        out = [p for p in json.loads(out.strip()) if p['pool_name'] == name][0]

    _rc, _cmd, application_pool, _err = exec_command(
        module,
        get_application_pool(
            cluster,  # noqa: E501
            name,  # noqa: E501
            user,  # noqa: E501
            user_key,  # noqa: E501
            container_image=container_image))  # noqa: E501

    # This is a trick because "target_size_ratio" isn't present at the same
    # level in the dict
    # ie:
    # {
    # 'pg_num': 8,
    # 'pgp_num': 8,
    # 'pg_autoscale_mode': 'on',
    #     'options': {
    #          'target_size_ratio': 0.1
    #     }
    # }
    # If 'target_size_ratio' is present in 'options', we set it, this way we
    # end up with a dict containing all needed keys at the same level.
    if 'target_size_ratio' in out['options'].keys():
        out['target_size_ratio'] = out['options']['target_size_ratio']
    else:
        out['target_size_ratio'] = None

    application = list(json.loads(application_pool.strip()).keys())

    if len(application) == 0:
        out['application'] = ''
    else:
        out['application'] = application[0]

    return rc, cmd, out, err
Exemplo n.º 7
0
def create_key(module, result, cluster, user, user_key, name, secret, caps, import_key, dest, container_image=None):  # noqa: E501
    '''
    Create a CephX key
    '''

    cmd_list = []
    if not secret:
        secret = generate_secret()

    if user == 'client.admin':
        args = ['import', '-i', dest]
    else:
        args = ['get-or-create', name]
        args.extend(generate_caps(None, caps))
        args.extend(['-o', dest])

    cmd_list.append(generate_ceph_authtool_cmd(
        cluster, name, secret, caps, dest, container_image))

    if import_key or user != 'client.admin':
        cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
                                          args=args,
                                          cluster=cluster,
                                          user=user,
                                          user_key=user_key,
                                          container_image=container_image))

    return cmd_list
Exemplo n.º 8
0
def generate_orch_cli(cluster, spec_path, container_image):

    args = ['apply', '--in-file', spec_path]

    cmd = generate_ceph_cmd(sub_cmd=['orch'], args=args,
                            spec_path=spec_path, cluster=cluster,
                            container_image=container_image)
    return cmd
Exemplo n.º 9
0
def create_pool(cluster,
                name,
                user,
                user_key,
                user_pool_config,
                container_image=None):
    '''
    Create a new pool
    '''

    args = [
        'create', user_pool_config['pool_name']['value'],
        user_pool_config['type']['value']
    ]

    if user_pool_config['pg_autoscale_mode']['value'] == 'off':
        args.extend([
            '--pg_num', user_pool_config['pg_num']['value'], '--pgp_num',
            user_pool_config['pgp_num']['value']
            or user_pool_config['pg_num']['value']
        ])
    elif user_pool_config['target_size_ratio']['value']:
        args.extend([
            '--target_size_ratio',
            user_pool_config['target_size_ratio']['value']
        ])

    if user_pool_config['type']['value'] == 'replicated':
        args.extend([
            user_pool_config['crush_rule']['value'], '--expected_num_objects',
            user_pool_config['expected_num_objects']['value'],
            '--autoscale-mode', user_pool_config['pg_autoscale_mode']['value']
        ])

    if (user_pool_config['size']['value']
            and user_pool_config['type']['value'] == "replicated"):
        args.extend(['--size', user_pool_config['size']['value']])

    elif user_pool_config['type']['value'] == 'erasure':
        args.extend([user_pool_config['erasure_profile']['value']])

        if user_pool_config['crush_rule']['value']:
            args.extend([user_pool_config['crush_rule']['value']])

        args.extend([
            '--expected_num_objects',
            user_pool_config['expected_num_objects']['value'],
            '--autoscale-mode', user_pool_config['pg_autoscale_mode']['value']
        ])

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    return cmd
Exemplo n.º 10
0
def main():
    module = AnsibleModule(
        argument_spec=dict(
            ids=dict(type='list', required=True),
            cluster=dict(type='str', required=False, default='ceph'),
            state=dict(type='str',
                       required=True,
                       choices=['destroy', 'down', 'in', 'out', 'purge',
                                'rm']),  # noqa: E501
        ),
        supports_check_mode=True,
    )

    ids = module.params.get('ids')
    cluster = module.params.get('cluster')
    state = module.params.get('state')

    if state in ['destroy', 'purge'] and len(ids) > 1:
        module.fail_json(
            msg='destroy and purge only support one OSD at at time',
            rc=1)  # noqa: E501

    startd = datetime.datetime.now()

    container_image = is_containerized()

    cmd = generate_ceph_cmd(['osd', state],
                            ids,
                            cluster=cluster,
                            container_image=container_image)  # noqa: E501

    if state in ['destroy', 'purge']:
        cmd.append('--yes-i-really-mean-it')

    if module.check_mode:
        exit_module(module=module,
                    out='',
                    rc=0,
                    cmd=cmd,
                    err='',
                    startd=startd,
                    changed=False)
    else:
        rc, out, err = module.run_command(cmd)
        changed = True
        if state in ['down', 'in', 'out'] and 'marked' not in err:
            changed = False
        exit_module(module=module,
                    out=out,
                    rc=rc,
                    cmd=cmd,
                    err=err,
                    startd=startd,
                    changed=changed)
Exemplo n.º 11
0
def remove_user(module, container_image=None):
    '''
    Remove a user
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['ac-user-delete', name]

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'], args=args, cluster=cluster, container_image=container_image)

    return cmd
Exemplo n.º 12
0
def get_profile(module, name, cluster='ceph', container_image=None):
    '''
    Get existing profile
    '''

    args = ['get', name, '--format=json']

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
                            args=args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 13
0
def set_password(module, container_image=None):
    '''
    Set user password
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['ac-user-set-password', '-i', '-', name]

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'], args=args, cluster=cluster, container_image=container_image, interactive=True)

    return cmd
Exemplo n.º 14
0
def get_user(module, container_image=None):
    '''
    Get existing user
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['ac-user-show', name, '--format=json']

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'], args=args, cluster=cluster, container_image=container_image)

    return cmd
Exemplo n.º 15
0
def create_user(module, container_image=None):
    '''
    Create a new user
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['ac-user-create', '-i', '-',  name]

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'], args=args, cluster=cluster, container_image=container_image, interactive=True)

    return cmd
Exemplo n.º 16
0
def get_fs(module, container_image=None):
    '''
    Get existing fs
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['get', name, '--format=json']

    cmd = generate_ceph_cmd(cluster=cluster, sub_cmd=['fs'], args=args, container_image=container_image)

    return cmd
Exemplo n.º 17
0
def remove_fs(module, container_image=None):
    '''
    Remove a fs
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['rm', name, '--yes-i-really-mean-it']

    cmd = generate_ceph_cmd(cluster=cluster, sub_cmd=['fs'], args=args, container_image=container_image)

    return cmd
Exemplo n.º 18
0
def delete_profile(module, name, cluster='ceph', container_image=None):
    '''
    Delete a profile
    '''

    args = ['rm', name]

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
                            args=args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 19
0
def fail_fs(module, container_image=None):
    '''
    Fail a fs
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['fail', name]

    cmd = generate_ceph_cmd(cluster=cluster, sub_cmd=['fs'], args=args, container_image=container_image)

    return cmd
Exemplo n.º 20
0
def set_fs(module, container_image=None):
    '''
    Set parameter to a fs
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    max_mds = module.params.get('max_mds')

    args = ['set', name, 'max_mds', str(max_mds)]

    cmd = generate_ceph_cmd(cluster=cluster, sub_cmd=['fs'], args=args, container_image=container_image)

    return cmd
Exemplo n.º 21
0
def create_fs(module, container_image=None):
    '''
    Create a new fs
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    data = module.params.get('data')
    metadata = module.params.get('metadata')

    args = ['new', name, metadata, data]

    cmd = generate_ceph_cmd(cluster=cluster, sub_cmd=['fs'], args=args, container_image=container_image)

    return cmd
Exemplo n.º 22
0
def remove_pool(cluster, name, user, user_key, container_image=None):
    '''
    Remove a pool
    '''

    args = ['rm', name, name, '--yes-i-really-really-mean-it']

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    return cmd
Exemplo n.º 23
0
def set_roles(module, container_image=None):
    '''
    Set user roles
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    roles = module.params.get('roles')

    args = ['ac-user-set-roles', name]

    args.extend(roles)

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'], args=args, cluster=cluster, container_image=container_image)

    return cmd
Exemplo n.º 24
0
def get_rule(module, container_image=None):
    '''
    Get existing crush rule
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['dump', name, '--format=json']

    cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
                            args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 25
0
def remove_rule(module, container_image=None):
    '''
    Remove a crush rule
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')

    args = ['rm', name]

    cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
                            args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
Exemplo n.º 26
0
def create_user(module, container_image=None):
    '''
    Create a new user
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    password = module.params.get('password')

    args = ['ac-user-create', name, password]

    cmd = generate_ceph_cmd(sub_cmd=['dashboard'],
                            args=args,
                            cluster=cluster,
                            container_image=container_image)

    return cmd
def set_password(module, container_image=None):
    '''
    Set user password
    '''

    cluster = module.params.get('cluster')
    name = module.params.get('name')
    password = module.params.get('password')

    args = ['ac-user-set-password', name, password]

    cmd = generate_ceph_cmd(cluster=cluster,
                            sub_cmd=['dashboard'],
                            args=args,
                            container_image=container_image)

    return cmd
Exemplo n.º 28
0
def main():
    module = AnsibleModule(
        argument_spec=dict(
            name=dict(type='str', required=True),
            cluster=dict(type='str', required=False, default='ceph'),
            state=dict(type='str',
                       required=False,
                       default='enable',
                       choices=['enable', 'disable']),  # noqa: E501
        ),
        supports_check_mode=True,
    )

    name = module.params.get('name')
    cluster = module.params.get('cluster')
    state = module.params.get('state')

    startd = datetime.datetime.now()

    container_image = is_containerized()

    cmd = generate_ceph_cmd(['mgr', 'module'], [state, name],
                            cluster=cluster,
                            container_image=container_image)

    if module.check_mode:
        exit_module(module=module,
                    out='',
                    rc=0,
                    cmd=cmd,
                    err='',
                    startd=startd,
                    changed=False)
    else:
        rc, out, err = module.run_command(cmd)
        if 'is already enabled' in err:
            changed = False
        else:
            changed = True
        exit_module(module=module,
                    out=out,
                    rc=rc,
                    cmd=cmd,
                    err=err,
                    startd=startd,
                    changed=changed)
Exemplo n.º 29
0
def enable_application_pool(cluster,
                            name,
                            application,
                            user,
                            user_key,
                            container_image=None):
    '''
    Enable application on a given pool
    '''

    args = ['application', 'enable', name, application]

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    return cmd
Exemplo n.º 30
0
def get_application_pool(cluster,
                         name,
                         user,
                         user_key,
                         output_format='json',
                         container_image=None):
    '''
    Get application type enabled on a given pool
    '''

    args = ['application', 'get', name, '-f', output_format]

    cmd = generate_ceph_cmd(sub_cmd=['osd', 'pool'],
                            args=args,
                            cluster=cluster,
                            user=user,
                            user_key=user_key,
                            container_image=container_image)

    return cmd