OCI

 1#!/usr/bin/env python3
 2# This file is part of pycloudlib. See LICENSE file for license information.
 3"""Basic examples of various lifecycle with an OCI instance."""
 4
 5import logging
 6import sys
 7from base64 import b64encode
 8
 9import pycloudlib
10
11cloud_config = """#cloud-config
12runcmd:
13  - echo 'hello' > /home/ubuntu/example.txt
14"""
15
16
17def demo(
18    availability_domain: str = None,
19    compartment_id: str = None,
20    vcn_name: str = None,
21):
22    """Show example of using the OCI library.
23
24    Connects to OCI and launches released image. Then runs
25    through a number of examples.
26    """
27    with pycloudlib.OCI(
28        "oracle-test",
29        availability_domain=availability_domain,
30        compartment_id=compartment_id,
31        vcn_name=vcn_name,
32    ) as client:
33        with client.launch(
34            image_id=client.released_image("jammy"),
35            user_data=b64encode(cloud_config.encode()).decode(),
36        ) as instance:
37            instance.wait()
38            print(instance.instance_data)
39            print(instance.ip)
40            instance.execute("cloud-init status --wait --long")
41            print(instance.execute("cat /home/ubuntu/example.txt"))
42
43            snapshotted_image_id = client.snapshot(instance)
44
45        with client.launch(image_id=snapshotted_image_id) as new_instance:
46            new_instance.wait()
47            new_instance.execute("whoami")
48
49
50if __name__ == "__main__":
51    logging.basicConfig(level=logging.DEBUG)
52    if len(sys.argv) != 3:
53        print(
54            "No arguments passed via command line. "
55            "Assuming values are set in pycloudlib configuration file."
56        )
57        demo()
58    else:
59        passed_availability_domain = sys.argv[1]
60        passed_compartment_id = sys.argv[2]
61        passed_vcn_name = sys.argv[3] if len(sys.argv) == 4 else None
62        demo(passed_availability_domain, passed_compartment_id, passed_vcn_name)