feat: add cloudflare workers ai config and global credentials
This commit is contained in:
220
oracle/kr/resources.tf
Normal file
220
oracle/kr/resources.tf
Normal file
@@ -0,0 +1,220 @@
|
||||
# Data source to reference existing VCN in Korea region
|
||||
data "oci_core_vcns" "existing_vcns" {
|
||||
compartment_id = var.compartment_id
|
||||
}
|
||||
|
||||
# Use the specific existing VCN by filtering
|
||||
locals {
|
||||
target_vcn = [
|
||||
for vcn in data.oci_core_vcns.existing_vcns.virtual_networks :
|
||||
vcn.id if vcn.display_name == "vcn-20220508-0033"
|
||||
][0]
|
||||
default_dhcp_options_id = [
|
||||
for vcn in data.oci_core_vcns.existing_vcns.virtual_networks :
|
||||
vcn.default_dhcp_options_id if vcn.display_name == "vcn-20220508-0033"
|
||||
][0]
|
||||
default_route_table_id = [
|
||||
for vcn in data.oci_core_vcns.existing_vcns.virtual_networks :
|
||||
vcn.default_route_table_id if vcn.display_name == "vcn-20220508-0033"
|
||||
][0]
|
||||
default_security_list_id = [
|
||||
for vcn in data.oci_core_vcns.existing_vcns.virtual_networks :
|
||||
vcn.default_security_list_id if vcn.display_name == "vcn-20220508-0033"
|
||||
][0]
|
||||
}
|
||||
|
||||
# Find existing subnets in the target VCN
|
||||
data "oci_core_subnets" "existing_subnets" {
|
||||
compartment_id = var.compartment_id
|
||||
vcn_id = local.target_vcn
|
||||
}
|
||||
|
||||
# Use an existing subnet or create a new one in the existing VCN
|
||||
resource "oci_core_subnet" "kr_subnet" {
|
||||
count = length(data.oci_core_subnets.existing_subnets.subnets) == 0 ? 1 : 0 # Only create if no subnets exist
|
||||
|
||||
availability_domain = var.availability_domain
|
||||
cidr_block = "10.0.1.0/24"
|
||||
compartment_id = var.compartment_id
|
||||
display_name = "kr-subnet-tf"
|
||||
vcn_id = local.target_vcn
|
||||
dhcp_options_id = local.default_dhcp_options_id
|
||||
route_table_id = local.default_route_table_id
|
||||
security_list_ids = [local.default_security_list_id]
|
||||
dns_label = "krtfsub"
|
||||
}
|
||||
|
||||
# Define which subnet to use based on whether existing subnets are found
|
||||
locals {
|
||||
subnet_to_use = length(data.oci_core_subnets.existing_subnets.subnets) > 0 ? data.oci_core_subnets.existing_subnets.subnets[0].id : oci_core_subnet.kr_subnet[0].id
|
||||
}
|
||||
|
||||
# 实例 ch2 (将要终止的实例) - 仅在需要时创建用于模拟资源回收
|
||||
resource "oci_core_instance" "ch2_instance" {
|
||||
count = var.ch2_enabled ? 1 : 0
|
||||
|
||||
availability_domain = var.availability_domain
|
||||
compartment_id = var.compartment_id
|
||||
display_name = "ch2-instance"
|
||||
shape = var.ch2_shape
|
||||
|
||||
create_vnic_details {
|
||||
subnet_id = local.subnet_to_use
|
||||
assign_public_ip = true
|
||||
hostname_label = "ch2instance"
|
||||
}
|
||||
|
||||
source_details {
|
||||
source_type = "image"
|
||||
source_id = var.image_id
|
||||
}
|
||||
|
||||
metadata = {
|
||||
ssh_authorized_keys = var.ssh_public_key
|
||||
}
|
||||
|
||||
timeouts {
|
||||
create = "60m"
|
||||
}
|
||||
}
|
||||
|
||||
# 实例 ch3 (保持不变的实例)
|
||||
resource "oci_core_instance" "ch3_instance" {
|
||||
count = var.ch3_enabled ? 1 : 0
|
||||
|
||||
availability_domain = var.availability_domain
|
||||
compartment_id = var.compartment_id
|
||||
display_name = "ch3-instance"
|
||||
shape = var.ch3_shape
|
||||
|
||||
create_vnic_details {
|
||||
subnet_id = local.subnet_to_use
|
||||
assign_public_ip = true
|
||||
hostname_label = "ch3instance"
|
||||
}
|
||||
|
||||
source_details {
|
||||
source_type = "image"
|
||||
source_id = var.image_id
|
||||
}
|
||||
|
||||
metadata = {
|
||||
ssh_authorized_keys = var.ssh_public_key
|
||||
}
|
||||
|
||||
timeouts {
|
||||
create = "60m"
|
||||
}
|
||||
}
|
||||
|
||||
# A1 实例 (主要实例) - ARM架构实例
|
||||
resource "oci_core_instance" "a1_instance" {
|
||||
availability_domain = var.availability_domain
|
||||
compartment_id = var.compartment_id
|
||||
display_name = "a1-instance"
|
||||
shape = var.a1_shape
|
||||
|
||||
create_vnic_details {
|
||||
subnet_id = local.subnet_to_use
|
||||
assign_public_ip = true
|
||||
hostname_label = "a1instance"
|
||||
}
|
||||
|
||||
source_details {
|
||||
source_type = "image"
|
||||
source_id = var.image_id
|
||||
}
|
||||
|
||||
metadata = {
|
||||
ssh_authorized_keys = var.ssh_public_key
|
||||
}
|
||||
|
||||
timeouts {
|
||||
create = "60m"
|
||||
}
|
||||
|
||||
# 添加对 ch2 实例的依赖,确保在 ch2 被删除后才创建 A1
|
||||
depends_on = [oci_core_instance.ch2_instance]
|
||||
}
|
||||
|
||||
# 为 A1 实例创建调整后的存储卷(代表从ch2释放的资源重新分配到A1,总共150GB)
|
||||
resource "oci_core_volume" "a1_resize_storage" {
|
||||
availability_domain = var.availability_domain
|
||||
compartment_id = var.compartment_id
|
||||
display_name = "a1-resize-storage" # 重命名以反映用途
|
||||
size_in_gbs = var.a1_storage_size_gb # 应该设置为150GB,代表A1的新存储大小
|
||||
|
||||
# 确保ch2实例已禁用(模拟终止),以便我们可以重新分配其资源
|
||||
lifecycle {
|
||||
precondition {
|
||||
condition = var.ch2_enabled == false
|
||||
error_message = "为了进行资源重新分配,请先设置 ch2_enabled = false 来模拟终止 ch2 实例."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 将调整后的数据卷附加到 A1 实例
|
||||
resource "oci_core_volume_attachment" "a1_resize_attachment" {
|
||||
count = var.ch2_enabled == false ? 1 : 0 # 仅在 ch2 被"终止"后附加
|
||||
|
||||
attachment_type = "paravirtualized"
|
||||
instance_id = oci_core_instance.a1_instance.id
|
||||
volume_id = oci_core_volume.a1_resize_storage.id
|
||||
}
|
||||
|
||||
# 实例配置变量
|
||||
variable "compartment_id" {
|
||||
description = "OCI Compartment OCID for Korea region"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "availability_domain" {
|
||||
description = "Availability Domain for Korea region resources"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "image_id" {
|
||||
description = "OCID of the OS image to use for instances in Korea"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "ssh_public_key" {
|
||||
description = "SSH Public Key for instance access"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "ch2_shape" {
|
||||
description = "Shape for ch2 instance"
|
||||
type = string
|
||||
default = "VM.Standard2.1" # 较小的实例
|
||||
}
|
||||
|
||||
variable "ch3_shape" {
|
||||
description = "Shape for ch3 instance"
|
||||
type = string
|
||||
default = "VM.Standard2.1" # 较小的实例
|
||||
}
|
||||
|
||||
variable "a1_shape" {
|
||||
description = "Shape for A1 instance"
|
||||
type = string
|
||||
default = "VM.Standard.A1.Flex" # ARM 架构实例
|
||||
}
|
||||
|
||||
variable "ch2_enabled" {
|
||||
description = "Whether to enable ch2 instance (when false, simulates termination for resource reallocation)"
|
||||
type = bool
|
||||
default = false # 默认不启用,以模拟已终止的状态
|
||||
}
|
||||
|
||||
variable "ch3_enabled" {
|
||||
description = "Whether to enable ch3 instance"
|
||||
type = bool
|
||||
default = true # 默认启用
|
||||
}
|
||||
|
||||
variable "a1_storage_size_gb" {
|
||||
description = "Storage size in GB for A1 instance"
|
||||
type = number
|
||||
default = 150 # 默认150GB,代表A1实例的新存储大小(原有100GB + 新增50GB)
|
||||
}
|
||||
Reference in New Issue
Block a user