[data.tf]
data "oci_core_app_catalog_listings" "image_catalog" {
filter {
name = "display_name"
values = ["^Rocky Linux 9 aarch64.*"]
regex = true
}
}
data "oci_core_app_catalog_listing_resource_versions" "image_catalog_resource" {
listing_id = lookup(data.oci_core_app_catalog_listings.image_catalog.app_catalog_listings[0], "listing_id")
}
data "oci_core_app_catalog_subscriptions" "image_catalog_ocid" {
#Required
compartment_id = var.compartment_id
#Optional
listing_id = oci_core_app_catalog_subscription.image_catalog_subscription.listing_id
filter {
name = "listing_resource_version"
values = ["${oci_core_app_catalog_subscription.image_catalog_subscription.listing_resource_version}"]
}
}
x86 이미지가 필요하면 values = ["^Rocky Linux 9 aarch64.*"] 부분을 values = ["^Rocky Linux 9 x86.*"] 으로 변경
이 글을 찾으신 분이 모를거 같지는 않지만 compartment_id는 tanancy_id가 들어갑니다.
[main.tf]
resource "oci_core_app_catalog_listing_resource_version_agreement" "image_catalog_agreement" {
#Required
listing_id = lookup(data.oci_core_app_catalog_listing_resource_versions.image_catalog_resource.app_catalog_listing_resource_versions[0], "listing_id")
listing_resource_version = lookup(data.oci_core_app_catalog_listing_resource_versions.image_catalog_resource.app_catalog_listing_resource_versions[0], "listing_resource_version")
}
resource "oci_core_app_catalog_subscription" "image_catalog_subscription" {
compartment_id = var.compartment_id
eula_link = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.eula_link
listing_id = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_id
listing_resource_version = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_resource_version
oracle_terms_of_use_link = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.oracle_terms_of_use_link
signature = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.signature
time_retrieved = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.time_retrieved
timeouts {
create = "15m"
}
}
resource "oci_core_instance" "server" {
...
source_details {
source_id = "${lookup(data.oci_core_app_catalog_subscriptions.image_catalog_ocid.app_catalog_subscriptions[0], "listing_resource_id")}"
source_type = "image"
...
}
...
depends_on = [oci_core_app_catalog_subscription.image_catalog_subscription]
}
구독이 완료 된 후에 이미지 리소스 아이디를 알 수 있기 때문에 해당 리소스에 의존성을 지정했습니다.
[output.tf]
output "image_catalog" {
value = [
for img in data.oci_core_app_catalog_listings.image_catalog.app_catalog_listings : {
id = img.listing_id
name = img.display_name
}
]
}
output "image_catalog_resource_ver" {
value = {
id = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_id
ver = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_resource_version
}
}
필요할 경우 디버그 용으로 사용 가능
[참고사항]
Changes to Outputs:
+ images = [
+ {
+ id = "ocid1.appcataloglisting.oc1..aaaaaaaazht7vduko4ld3vd36b4kcud2d23pbupi3f5oq2ukl22aod643buq"
+ name = "Rocky Linux 9 aarch64 Supported by CIQ"
},
+ {
+ id = "ocid1.appcataloglisting.oc1..aaaaaaaa6e5d6lkdocl6bxnxamgfjh6d6ur6x3surr6ve2gp6fglxxchtzlq"
+ name = "Rocky Linux 9 from CIQ"
},
+ {
+ id = "ocid1.appcataloglisting.oc1..aaaaaaaalj22oi67z27g27kuopuua7az6b6cznamavtxqz6qxohbik3yz63a"
+ name = "Rocky Linux 9 from CIQ - Optimized for NVIDIA GPUs"
},
+ {
+ id = "ocid1.appcataloglisting.oc1..aaaaaaaalloook6cglb7j557jiadml7nlwu4poptazeinnzlsnjyvnlf3rwa"
+ name = "Rocky Linux 9 x86 Supported by CIQ"
},
]
from CIQ는 Enterprise Edition, Supported by CIQ는 Community Edition 입니다.
OCI에서 Rocky Linux는 다른 OS(Ubuntu, Oracle Linux 등) 와는 다르게
마켓 플레이스에서 제공하는 이미지를 사용해야 하네요
마켓 플레이스 카탈로그 조회 > 제품에 대한 사용 동의 > 제품 구독 의 절차를 진행해야
Terraform에서 이미지 ID를 구할 수 있습니다.
Cloud Shell에서 그때 그때 버전이 바뀔때마다 조회하는건 비효율적인것 같아 정보를 찾아 보았습니다.
[Link]
[Reddit] How do you find an image OCID ?
Reddit의 oraclecloud 커뮤니티
oraclecloud 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요
www.reddit.com