Skip to content

Commit

Permalink
Added support for listing, creating and deleting organization secrets (
Browse files Browse the repository at this point in the history
…#461)

* Added support for listing, creating and deleting organization secrets
  • Loading branch information
juanpardo authored Sep 28, 2023
1 parent 267fc8e commit 0092c9e
Show file tree
Hide file tree
Showing 5 changed files with 258 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ Changes for croud
Unreleased
==========

- Added support for listing, deleting and creating organization secrets.

1.7.0 - 2023/09/11
==================

Expand Down
60 changes: 60 additions & 0 deletions croud/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@
org_files_delete,
org_files_get,
org_files_list,
org_secrets_create,
org_secrets_delete,
org_secrets_list,
organizations_create,
organizations_delete,
organizations_edit,
Expand Down Expand Up @@ -1011,6 +1014,63 @@
},
},
},
"secrets": {
"help": "Manage organization's secrets.",
"commands" : {
"list": {
"help": "Lists all the secrets that belong to an organization.",
"extra_args": [
Argument(
"--org-id", type=str, required=True,
help="The organization ID to use.",
),
],
"resolver": org_secrets_list,
},
"create": {
"help": "Creates a new secret for the given organization.",
"extra_args": [
Argument(
"--org-id", type=str, required=True,
help="The organization ID to use.",
),
Argument(
"--name", type=str, required=True,
help="The name the secret will be known as.",
),
Argument(
"--type", type=str, required=True, choices=["AWS"],
help="The type of Secret. Currently only AWS type is "
"supported.",
),
Argument(
"--access-key", type=str, required=True,
help="For an AWS type secret, the access key ID.",
),
Argument(
"--secret-key", type=str, required=True,
help="For an AWS type secret, the secret key.",
),
],
"resolver": org_secrets_create,
},
"delete": {
"help": "Deletes the secret that matches the given ID for the "
"organization specified.",
"extra_args": [
Argument(
"--org-id", type=str, required=True,
help="The organization ID to use.",
),
Argument(
"--secret-id", type=str, required=True,
help="The secret ID to use.",
),
],
"resolver": org_secrets_delete,
},
}
},
"files": {
"help": "Manage organization's files.",
"commands": {
Expand Down
47 changes: 47 additions & 0 deletions croud/organizations/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,53 @@ def op_upload_file_to_org(
return data, errors


def org_secrets_create(args: Namespace) -> None:
client = Client.from_args(args)
payload = {
"name": args.name,
"type": args.type,
"data": {
"access_key": args.access_key,
"secret_key": args.secret_key,
},
}
data, errors = client.post(
f"/api/v2/organizations/{args.org_id}/secrets/", body=payload
)
print_response(
data=data,
errors=errors,
keys=["id", "type", "name", "description"],
success_message="Secret created.",
output_fmt=get_output_format(args),
)


def org_secrets_list(args: Namespace) -> None:
client = Client.from_args(args)
data, errors = client.get(f"/api/v2/organizations/{args.org_id}/secrets/")
print_response(
data=data,
errors=errors,
keys=["id", "type", "name", "description"],
output_fmt=get_output_format(args),
)


def org_secrets_delete(args: Namespace) -> None:
client = Client.from_args(args)
data, errors = client.delete(
f"/api/v2/organizations/{args.org_id}/secrets/{args.secret_id}/"
)
print_response(
data=data,
errors=errors,
keys=["id", "type", "name", "description"],
success_message="Secret deleted.",
output_fmt=get_output_format(args),
)


def org_files_create(args: Namespace) -> None:
client = Client.from_args(args)

Expand Down
82 changes: 82 additions & 0 deletions docs/commands/organizations.rst
Original file line number Diff line number Diff line change
Expand Up @@ -313,3 +313,85 @@ Example
| 327ad0e6-607f-4f99-a4cc-c1e98bf28e4d | nyc_taxi | UPLOADED | 107.56 MiB | https://cratedb-file-uploads.s3.amazonaws.com/some/download |
+--------------------------------------+----------+----------+-------------+-------------------------------------------------------------+
``organizations secrets``
=========================

.. argparse::
:module: croud.__main__
:func: get_parser
:prog: croud
:path: organizations secrets
:nosubcommands:


``organizations secrets list``
------------------------------

.. argparse::
:module: croud.__main__
:func: get_parser
:prog: croud
:path: organizations secrets list

Example
.......

.. code-block:: console
sh$ croud organizations secrets list \
--org-id f6c39580-5719-431d-a508-0cee4f9e8209
+--------------------------------------+--------+----------+------------------+
| id | type | name | description |
|--------------------------------------+--------+----------+------------------|
| e9068b31-14f5-4629-b585-70b3b8ae73bf | AWS | mysecret | **********esskey |
+--------------------------------------+--------+----------+------------------+
``organizations secrets delete``
--------------------------------

.. argparse::
:module: croud.__main__
:func: get_parser
:prog: croud
:path: organizations secrets delete

Example
.......

.. code-block:: console
sh$ croud organizations secrets delete \
--org-id f6c39580-5719-431d-a508-0cee4f9e8209 \
--secret-id e9068b31-14f5-4629-b585-70b3b8ae73bf
==> Success: Secret deleted.
``organizations secrets create``
--------------------------------

.. argparse::
:module: croud.__main__
:func: get_parser
:prog: croud
:path: organizations secrets create

Example
.......

.. code-block:: console
sh$ croud organizations secrests create \
--org-id f6c39580-5719-431d-a508-0cee4f9e8209 \
--name mysecret \
--type AWS \
--access-key AKIAUVOXAVYAPIBHQK7I \
--secret-key mysecretkey
+--------------------------------------+--------+----------+------------------+
| id | type | name | description |
|--------------------------------------+--------+----------+------------------|
| 71e7c5da-51fa-44f2-b178-d95052cbe620 | AWS | mysecret | **********BHQK7I |
+--------------------------------------+--------+----------+------------------+
==> Success: Secret created.
67 changes: 67 additions & 0 deletions tests/commands/test_organizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,3 +450,70 @@ def test_organizations_files_create(mock_request, mock_isfile):
f"/api/v2/organizations/{org_id}/files/",
body={"name": file_name},
)


@mock.patch.object(Client, "request", return_value=({}, None))
def test_organizations_secrets_list(mock_request):
org_id = gen_uuid()

call_command("croud", "organizations", "secrets", "list", "--org-id", org_id)
assert_rest(
mock_request, RequestMethod.GET, f"/api/v2/organizations/{org_id}/secrets/"
)


@mock.patch.object(Client, "request", return_value=({}, None))
def test_organizations_secrets_create(mock_request):
org_id = gen_uuid()
name = "my_secret"
secret_type = "AWS"
access_key = "my_access_key"
secret_key = "my_secret_key"

call_command(
"croud",
"organizations",
"secrets",
"create",
"--org-id",
org_id,
"--name",
name,
"--type",
secret_type,
"--access-key",
access_key,
"--secret-key",
secret_key,
)
assert_rest(
mock_request,
RequestMethod.POST,
f"/api/v2/organizations/{org_id}/secrets/",
body={
"name": name,
"type": secret_type,
"data": {"access_key": access_key, "secret_key": secret_key},
},
)


@mock.patch.object(Client, "request", return_value=({}, None))
def test_organizations_secrets_delete(mock_request):
org_id = gen_uuid()

call_command(
"croud",
"organizations",
"secrets",
"delete",
"--org-id",
org_id,
"--secret-id",
"my_secret_id",
)
assert_rest(
mock_request,
RequestMethod.DELETE,
f"/api/v2/organizations/{org_id}/secrets/my_secret_id/",
)

0 comments on commit 0092c9e

Please sign in to comment.