# OCI

Ops can integrate with your existing Oracle Cloud Infrastructure account. You can use Ops CLI to create and upload an image in OCI account. Once, you have uploaded image, you can also create an instance with a particular image using CLI.

## Pre-requisites

1. Create an Oracle Cloud Infrastructure account (<https://www.oracle.com/cloud/>).
2. Set up a config file with the required credentials.
   1. Go to `User Settings` page, whose link should be seen after clicking on profile avatar in top navigation bar.
   2. Click on `API Keys` link.
   3. Click on `Add API Key` button. A modal with further instructions will appear.
   4. Download the private key.
   5. Click on `Add` button. You should see a configuration preview in the modal.
   6. Copy configuration preview content to `~/.oci/config` file in your machine. Create the directory `.oci` in your home folder if it does not exist yet.
   7. Update the `key_file` in OCI configuration file with the path of the file you downloaded in step 4.
3. Setup a bucket in your OCI account to receive your images.
   1. Access `Object Storage` page.
   2. Click on `Create Bucket` button.
   3. Access bucket details page and copy `Namespace` value to ops configuration file.
4. Copy your bucket details to ops configuration.

   ```
   {
   "CloudConfig": {
    "BucketName": "<bucket_name>",
    "BucketNamespace": "<bucket_namespace>"
   }
   }
   ```
5. You are now able to use ops commands to interact with your OCI Account

```
# OCI configuration file preview
[DEFAULT]
user=ocid1.user.oc1..<user_ocid>
fingerprint=38:9d:75:00:71:6c:b7:e0:21:d4:08:82:e4:db:bc:a7
tenancy=ocid1.tenancy.oc1..<tenancy_ocid>
region=<region>
key_file=<path to your private keyfile> # TODO
```

## Image Operations

### Create Image

You can create an image in OCI with the following command.

```bash
$ ops image create <elf_file|program> -t oci -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.

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

### List Images

You can list existing images on OCI with `ops image list -t oci -c config.json`.

```bash
$ ops image list -t oci -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 OCI.

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

## Instance Operations

### Create Instance

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

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

### List Instances

You can list instance on OCI using `ops instance list` command.

```bash
$ ops instance list -t oci -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 OCI.

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