Quickops 2: Configure Python SDK for OCI

Before you can start using python SDK for OCI you need to comply with the following requirements, and also certain information you need to have at hand:

  • Signing public and private key pair.
    • OCI request the key to be on PEM format. you can use the following commands
openssl genrsa -out oci-api-key -aes128 2048
chmod go-rwx oci-api-key
openssl rsa -pubout -in oci-api-key -out oci-api-key.pub

Note It is required that the private key has permissions only to the file owner, otherwise you will receive an error when trying to use it on OCI.

  • Upload the public key to your user on OCI Access to user OCI
    • Move to Identity > Users > User Details > API Keys

Clic over Add API key - Here you will paste the content from the oci-api-key.pub file you just generated, and click over Add

Take note of the fingerprint that will appear on your console. OCI use fingerprint during authentication phase to review your keys.
Fingerprints looks something like this:

56:73:ff:44:8f:b3:c3:1d:58:12:a8:1f:ff:ff:aa:66

  • Take note of your user OCI
  • Take note of the tenancy OCID You can look it on the console (Menu > Administration > Tenancy Details) Remember that: tenant OCID is Root Compartment OCI

You can get more information about Compartments in OCID HERE

  • Get your Region Identifier This should be the region selected when the account was created, or in case you subscribed to a different region, it should be that region. Example: > region=us-phoenix-1

Now we can proceed to the SDK configuration

Python SDK

In simple words, an SDK is a library that allows a programming language to interact with Oracle cloud infrastructure resources.

For this case we are using Python SDK

1.- So, to install the SDK, first we need to make sure we have python installed.

Note Python SDK works with both version 2 or 3 but use the latest.

☁  .oci  python --version
Python 3.9.7
☁  .oci

On your case you may find that the versions is pointing to python 2. To set python 3 as default on MAC yo can consult one of these:

2.- Update pip as Python SDK for OCI is a PyPi module

Under the documentation:

This is the Python SDK for Oracle Cloud Infrastructure. Python 3.6, 3.7, 3.8 and 3.9 are supported.

And also as a note:

It is highly recommended that a Python virtual environment be used when installing oci.

Let follows the recommendations:

☁  oci-sdk-python  ls
☁  oci-sdk-python  python -m venv ocisdk
☁  oci-sdk-python  ls
ocisdk
☁  oci-sdk-python  source ocisdk/bin/activate


(ocisdk) ☁  oci-sdk-python  python -m pip install --upgrade pip
Requirement already satisfied: pip in ./ocisdk/lib/python3.9/site-packages (21.2.4)
Collecting pip
  Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
     |████████████████████████████████| 1.7 MB 1.6 MB/s
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.2.4
    Uninstalling pip-21.2.4:
      Successfully uninstalled pip-21.2.4
Successfully installed pip-21.3.1
(ocisdk) ☁  oci-sdk-python

We can proceed to install OCI SDK

(ocisdk) ☁  oci-sdk-python  pip install oci
...
Installing collected packages: pycparser, cffi, six, cryptography, pytz, python-dateutil, pyOpenSSL, circuitbreaker, certifi, oci
    Running setup.py install for circuitbreaker ... done
Successfully installed certifi-2021.10.8 cffi-1.15.0 circuitbreaker-1.3.2 cryptography-3.4.7 oci-2.52.1 pyOpenSSL-19.1.0 pycparser-2.21 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0
3.- Create OCI Config file

If you remember, at the beginning i wrote some information you need to have at hand, well now is the moment to use that information.

There are 2 ways to setup your config file,

FIRST, by installing OCI CLI and running the setup dialog

brew update && brew install oci-cli
oci --version

oci setup config

Note More on the official documentation

SECOND, by manually creating the file under ~/.oci

cd
cd .oci
vi config

and inside the config file add the following:

[DEFAULT]
user = <user-ocid>
fingerprint = <fingerprint from your user API key >
tenancy = <tenancy-id or rootCompartment-id>
region = us-phoenix-1
key_file = <the full path to your private key file in pem format>

Note the file should have the following permissions
-rw-------

You can store several profiles on the same file.

4.- Finally!!! Using the SDK

If you deactivate your venv execute the source command again,
Under the venv run

(ocisdk) ☁  oci-sdk-python  python

And inside the Python CLI run

>>> import oci
>>> config = oci.config.from_file("~/.oci/config", "DEFAULT2")
>>> identity = oci.identity.identityClient(config)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'oci.identity' has no attribute 'identityClient'
>>> identity = oci.identity.IdentityClient(config)
>>> availability_domains_list = identity.list_availability_domains(config['tenancy']).data


>>> for availability_domain in availability_domains_list:
...     print('AD: ' + str(availability_domain.name))
...
//look for your results
>>>

You can find information on any known issues with the SDK here and under the “Issues” tab of this project’s Github Repository

26