# Digital Ocean

Ops can integrate with your existing Digital Ocean account.

## Pre-requisites

1. Create an account in [Digital Ocean](https://cloud.digitalocean.com/);
2. Access [Application & API page](https://cloud.digitalocean.com/account/api/tokens):
   * Generate a token and export the value to the environment variable `DO_TOKEN`.
   * Generate space access keys and export the key and the secret to the environment variables `SPACES_KEY` and `SPACES_SECRET`.
3. Access [Spaces page](https://cloud.digitalocean.com/spaces) and create a space;
4. Set your bucket name with the space name and set the region name where the space was created in the configuration file;

Configuration example.

```json
{
  "CloudConfig": {
    "BucketName": "ops",
    "Zone": "sfo3"
  }
}
```

## Image Operations

### Create Image

You can create an image in Digital Ocean with the following command.

```
$ ops image create <elf_file|program> -t do -c config.json
```

For creating an image using a particular package, you need to provide the package name to `ops image create` command with `-p` option.

```
$ ops image create -c config.json -p node_v14.2.0 -a ex.js -i <image name> -t do -c config.json
```

### List Images

You can list existing images on Digital Ocean with `ops image list -t do -c config.json`.

```
$ ops image list -t do -c config.json
+--------------------------------------+------------------------+--------+---------+------------------+
|                 UUID                 |          NAME          | STATUS |  SIZE   |    CREATEDAT     |
+--------------------------------------+------------------------+--------+---------+------------------+
| 01071a8d-eb59-49c1-aa69-028f84cc6d06 | nanos-main-image       | online | 10.0 GB | 3 days ago       |
+--------------------------------------+------------------------+--------+---------+------------------+
| 01c5bd28-aa19-4883-a4c9-31f3ff9fd061 | nanos-node-image       | online | 10.0 GB | 1 month ago      |
+--------------------------------------+------------------------+--------+---------+------------------+
| 01cd3190-df52-47e8-b5c3-b05f7107819e | nanos-server-image     | online | 10.0 GB | 1 year ago       |
+--------------------------------------+------------------------+--------+---------+------------------+
```

### Delete Image

`ops image delete <imagename>` can be used to delete an image from Digital Ocean.

```
$ ops delete image nanos-main-image -t do -c config.json
```

## Instance Operations

### Create Instance

After the successful creation of an image in Digital Ocean, we can create an instance from an existing image.

```
$ ops instance create -t do -c config.json -i <image_name>
```

### List Instances

You can list instance on Digital Ocean using `ops instance list` command.

```
$ ops instance list -t do -c config.json
+--------------------------------------+------------------------+---------+-------------+-----------------------------------------+
|                  ID                  |          NAME          | STATUS  | PRIVATE IPS |               PUBLIC IPS                |
+--------------------------------------+------------------------+---------+-------------+-----------------------------------------+
| 00d954cc-9603-43a0-915b-5c2ae75772b6 | nanos-main-image-15566 | stopped | 10.8.3.63   | 209.151.144.166                         |
+--------------------------------------+------------------------+---------+-------------+-----------------------------------------+
```

### Get Logs for Instance

Work in progress.

### Delete Instance

`ops instance delete` command can be used to delete instance on Digital Ocean.

```
$ ops instance delete my-instance-running -t do -c config.json
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ops.city/ops/clouds/digital_ocean.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
