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)