예제 #1
0
def create_bucket(module, blade):
    """Create bucket"""
    changed = True
    if not module.check_mode:
        try:
            api_version = blade.api_version.list_versions().versions
            if VERSIONING_VERSION in api_version:
                attr = BucketPost()
                attr.account = Reference(name=module.params["account"])
                blade.buckets.create_buckets(names=[module.params["name"]],
                                             bucket=attr)
            else:
                attr = Bucket()
                attr.account = Reference(name=module.params["account"])
                blade.buckets.create_buckets(names=[module.params["name"]],
                                             account=attr)
            if (module.params["versioning"] != "absent"
                    and VERSIONING_VERSION in api_version):
                try:
                    blade.buckets.update_buckets(
                        names=[module.params["name"]],
                        bucket=BucketPatch(
                            versioning=module.params["versioning"]),
                    )
                except Exception:
                    module.fail_json(
                        msg=
                        "Object Store Bucket {0} Created but versioning state failed"
                        .format(module.params["name"]))
        except Exception:
            module.fail_json(msg="Object Store Bucket {0}: Creation failed".
                             format(module.params["name"]))
    module.exit_json(changed=changed)
예제 #2
0
def create_rule(module, blade):
    """Create lifecycle policy"""
    changed = True
    if not module.check_mode:
        if not module.params["keep_for"]:
            module.fail_json(
                msg="'keep_for' is required to create a new lifecycle rule")
        if not module.params["keep_for"][-1:].lower() in ["w", "d"]:
            module.fail_json(
                msg="'keep_for' format incorrect - specify as 'd' or 'w'")
        try:
            attr = LifecycleRulePost(
                bucket=Reference(name=module.params["bucket"]),
                rule_id=module.params["name"],
                keep_previous_version_for=_convert_to_millisecs(
                    module.params["keep_for"]),
                prefix=module.params["prefix"],
            )
            blade.lifecycle_rules.create_lifecycle_rules(rule=attr)
            if not module.params["enabled"]:
                attr = LifecycleRulePatch()
                attr.enabled = False
                blade.lifecycle_rules.update_lifecycle_rules(
                    name=[
                        module.params["bucket"] + "/" + module.params["name"]
                    ],
                    rule=attr,
                )
        except Exception:
            module.fail_json(
                msg="Failed to create lifecycle rule {0} for bucket {1}.".
                format(module.params["name"], module.params["bucket"]))
    module.exit_json(changed=changed)
예제 #3
0
def create_bucket(module, blade):
    """Create bucket"""
    changed = False
    try:
        attr = Bucket()
        attr.account = Reference(name=module.params['account'])
        blade.buckets.create_buckets(names=[module.params['name']], account=attr)
        changed = True
    except Exception:
        module.fail_json(msg='Object Store Bucket {0}: Creation failed'.format(module.params['name']))
    module.exit_json(changed=changed)
예제 #4
0
def restore_snapshot(module, blade):
    """Restore a filesystem back from the latest snapshot"""
    if not module.check_mode:
        snapname = get_latest_fssnapshot(module, blade)
        if snapname is not None:
            fs_attr = FileSystem(name=module.params['name'],
                                 source=Reference(name=snapname))
            try:
                blade.file_systems.create_file_systems(
                    overwrite=True,
                    discard_non_snapshotted_data=True,
                    file_system=fs_attr)
                changed = True
            except Exception:
                changed = False
        else:
            module.fail_json(
                msg='Filesystem {0} has no snapshots to restore from.'.format(
                    module.params['name']))
    module.exit_json(changed=changed)
def create_rule(module, blade):
    """Create lifecycle policy"""
    changed = True
    if not module.check_mode:
        if not module.params['keep_for']:
            module.fail_json(msg="\'keep_for\' is required to create a new lifecycle rule")
        if not module.params['keep_for'][-1:].lower() in ['w', 'd']:
            module.fail_json(msg="\'keep_for\' format incorrect - specify as \'d\' or \'w\'")
        try:
            attr = LifecycleRulePost(rule_id=module.params['name'],
                                     keep_previous_version_for=_convert_to_millisecs(module.params['keep_for']),
                                     prefix=module.params['prefix'])
            attr.bucket = Reference(name=module.params['bucket'])
            blade.lifecycle_rules.create_lifecycle_rules(rule=attr)
            if not module.params['enabled']:
                attr = LifecycleRulePatch()
                attr.enabled = False
                blade.lifecycle_rules.update_lifecycle_rules(name=[module.params['bucket'] + '/' + module.params['name']],
                                                             rule=attr)
        except Exception:
            module.fail_json(msg="Failed to create lifecycle rule {0} for bucket {1}.".format(module.params['name'],
                                                                                              module.params['bucket']))
    module.exit_json(changed=changed)
예제 #6
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--account",
                        default='datateam',
                        help="Service account name.")
    parser.add_argument("--user", default='spark', help="Account user name.")
    parser.add_argument("--outfile",
                        default='credentials',
                        help="Output file for key credentials.")
    args = parser.parse_args()

    # Create PurityFb object for a certain array using environment variables.
    FB_MGMT = os.environ.get('FB_MGMT_VIP')
    TOKEN = os.environ.get('FB_MGMT_TOKEN')

    # Fail fast if necessary env variables not available.
    if not FB_MGMT or not TOKEN:
        print(
            "Requires environment variables for logging into FlashBlade REST: please set FB_MGMT_VIP and FB_MGMT_TOKEN"
        )
        exit(1)

    # Step 1: login to the FlashBlade management API
    fb = PurityFb(FB_MGMT)
    fb.disable_verify_ssl()
    try:
        fb.login(TOKEN)
    except rest.ApiException as e:
        print("Exception: %s\n" % e)
        exit()

    # Step 2: Create service account
    try:
        res = fb.object_store_accounts.create_object_store_accounts(
            names=[args.account])
        print("Creating service account {}".format(args.account))
    except:
        print("Service account {} already exists".format(args.account))

    # Step 3: Create user account
    accountuser = args.account + '/' + args.user

    try:
        # post the object store user object myobjuser on the array
        print("Creating user account {}".format(accountuser))
        res = fb.object_store_users.create_object_store_users(
            names=[accountuser])
    except:
        print("User %s creation failed.".format(accountuser))

    # Step 4: Create access keys

    res = fb.object_store_access_keys.list_object_store_access_keys(
        filter="user.name=\'{}\'".format(accountuser))
    if len(res.items) == 2:
        print("User {} cannot create more access keys.".format(accountuser))
        exit(1)

    # generate access key and secret key for object store user
    # note: you need to handle the secret key since you can't retrieve it from the array after create
    accesskey = ""
    secretkey = ""
    try:
        res = fb.object_store_access_keys.create_object_store_access_keys(
            object_store_access_key={'user': {
                'name': accountuser
            }})
        accesskey = res.items[0].name
        secretkey = res.items[0].secret_access_key
    except rest.ApiException as e:
        print("Exception when creating object store access key: %s\n" % e)
        exit(1)

    # Step 5: Create bucket
    bucketname = args.user + "-working"
    print("Creating bucket %s\n" % bucketname)

    try:
        attr = Bucket()
        # Each bucket must be associated with a service account.
        attr.account = Reference(name=args.account)
        res = fb.buckets.create_buckets(names=[bucketname], account=attr)
    except rest.ApiException as e:
        print("Exception when creating bucket: %s\n" % e)

    # Output
    with open(args.outfile, "w") as outf:
        outf.write("AWS_ACCESS_KEY_ID={}\n".format(accesskey))
        outf.write("AWS_SECRET_ACCESS_KEY_ID={}\n".format(secretkey))

    print(
        "Access newly created bucket in Spark at s3a://{}/".format(bucketname))

    fb.logout()