Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(DOCSP-46656) Adds handwritten command for atlas api. #838

Merged
merged 4 commits into from
Feb 7, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions snooty.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ toc_landing_pages = [
[constants]
aagent = "Automation Agent"
adf = "Atlas Data Federation"
atlas-admin-api = "Atlas Administration API"
atlas-cli = "Atlas CLI"
atlas-cli-full = "MongoDB Atlas CLI"
atlas-cli-version = "1.35.0"
Expand Down
154 changes: 154 additions & 0 deletions source/command/atlas-api.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
.. _atlas-api:

=========
atlas api
=========

.. default-domain:: mongodb

.. contents:: On this page
:local:
:backlinks: none
:depth: 1
:class: singlecol

Access all features of the `{+atlas-admin-api+} <https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/>`__
using the {+atlas-cli+} with the syntax: ``atlas api <tag> <operationId>``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: ambiguous who is "using" the atlas-cli (could refer to the API)

Suggested change
using the {+atlas-cli+} with the syntax: ``atlas api <tag> <operationId>``.
by using the {+atlas-cli+} with the syntax: ``atlas api <tag> <operationId>``.


This experimental feature streamlines script development by letting you interact
directly with any {+atlas-admin-api+} endpoint using the {+atlas-cli+}.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
directly with any {+atlas-admin-api+} endpoint using the {+atlas-cli+}.
directly with any {+atlas-admin-api+} endpoint by using the {+atlas-cli+}.


To learn more about working with the {+atlas-admin-api+}, see :ref:`atlas-admin-api-access`.

Syntax
------

.. code-block::
:caption: Command Syntax

atlas api <tag> <operationId> [options]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While it's correct that we use <tag> and <operationId>, we use a camelCase version of these values.

This will mainly influence <tag>, afaik the current operationIds are already in camelCase.

Some examples:

  • Flex Clusters -> flexClusters
  • Monitoring and Logs -> monitoringAndLogs

I don't see this captured anywhere in this page yet.


Arguments
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should use a table for the arguments here, similar to other pages in the Atlas CLI docs

---------

* **<tag>**

*Type:* string

*Required*

The category of {+atlas-admin-api+} operations. To find the tag, check
the `API documentation <https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/>`__
|url| for the endpoint. It appears after ``#tag/``. For example, in
``https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/#tag/Clusters/operation/listClusters``,
the tag is ``Clusters``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding my last comment about casing commands would live under atlas api clusters [operationId]


* **<operationId>**

*Type:* string

*Required*

The identifier of the {+atlas-admin-api+} endpoint. To find the operationId, check the
`API documentation <https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/>`__
|url| for the endpoint. It appears after ``operation/``. For example, in
``https://www.mongodb.com/docs/atlas/reference/api-resources-spec/v2/#tag/Clusters/operation/listClusters``,
the operationId is ``listClusters``.

Options
-------

Pass in the path and query parameters for the {+atlas-admin-api+} endpoint
as flags. For example, if the endpoint is ``/api/atlas/v2/orgs/{orgId}/invoices/{invoiceId}``,
the {+atlas-cli+} command is:

.. code-block:: shell

atlas api <tag> <operationId> --orgId <ORG_ID> --invoiceId <INVOICE_ID>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be helpful to mention that --orgId and --projectId are not required; they'll be taken from your profile when they're not set. (Unless they're not set on the profile, then they're needed, but they should be set in most cases)


If applicable to the endpoint, pass in the request body using the ``--file`` option
or standard input (``stdin``).
For example:

.. code-block:: shell

atlas api clusters create --file cluster-config.json

In addition, the following options are available for all {+atlas-admin-api+} endpoints.

.. list-table::
:header-rows: 1
:widths: 20 10 10 60

* - Name
- Type
- Required
- Description
* - ``--api-version``
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here api_version can be set as a property on your profile, if that's set then this value will be used when --api-version is not provided.

- string
- false
- Specify the :ref:`version <api-versioning-overview>` of the {+atlas-admin-api+}
for the command. Defaults to the latest API version.
* - ``--format``
- string
- false
- Output format. Supported formats include ``json``, ``csv``, or a Go template.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The output format depends on the endpoint.

Most endpoints will output json, but there are some exceptions.

  • When an endpoint supports json, then you can provided json or a Go template as output.
  • When an endpoint supports json/csv you can provide all 3 options
  • There are also endpoints which output binary data, like logs (gzip). In that case --out becomes required.

The easiest ways to see what's supported is to:

  • check the content response type examples on the API docs example
  • run atlas api <tag> <operationId> --help

Defaults to ``json``.
* - ``--file``
- string
- false
- File path to the request body content, if required by the operation.
Alternatively, provide input through standard input (``stdin``).
* - ``-o, --out``
- string
- false
- File path to save the output. By default, the result is displayed in the terminal.
* - ``-h, --help``
- boolean
- false
- Help for the current command.

Inherited Options
-----------------

.. list-table::
:header-rows: 1
:widths: 20 10 10 60

* - Name
- Type
- Required
- Description
* - ``-P, --profile``
- string
- false
- Name of the profile to use from your configuration file. For more information about profiles, see `Atlas CLI Configuration <https://dochub.mongodb.org/core/atlas-cli-save-connection-settings>`__.

Output
------

If the command succeeds, the {+atlas-cli+} outputs the result of the {+atlas-admin-api+}
operation, formatted as specified by the ``--format`` option. If no format is provided,
the output defaults to JSON. For example responses, see the `{+atlas-admin-api+} Specification <https://mongodb.com/docs/atlas/reference/api-resources-spec>`__.

Examples
--------

.. code-block::
:copyable: false

# Create a new cluster using the latest API version:
atlas api clusters createCluster --file createCluster.json

# List all clusters for a specific organization:
atlas api clusters listClusters --orgId <ORG_ID>

# Get details of a specific invoice by organization ID and invoice ID:
atlas api orgs getInvoice --orgId <ORG_ID> --invoiceId <INVOICE_ID>

# Output in CSV format and save the result to a file:
atlas api clusters listClusters --format csv --out clusters.csv

# Specify a particular API version for an operation:
atlas api clusters getCluster --name <CLUSTER_NAME> --api-version 2023-10-01

1 change: 1 addition & 0 deletions source/command/atlas.txt
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ Related Commands
accessLists </command/atlas-accessLists>
accessLogs </command/atlas-accessLogs>
alerts </command/atlas-alerts>
api </command/atlas-api>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This page is autogenerated, so this change will be overwritten at the next release. I don't think we can have this on this page due to our automation system unless they add it upstream.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jeroenvervaeke are you able to add this upstream? This is so the new page shows up in the left-hand table of contents.

auditing </command/atlas-auditing>
auth </command/atlas-auth>
backups </command/atlas-backups>
Expand Down