Skip to content

Commit a93ae68

Browse files
abhilash-avalexng-canuck
authored andcommitted
Adding support for Metrics-based Dynamic Auto-scaling
1 parent 8f4ad91 commit a93ae68

31 files changed

+2929
-43
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Add singular Availability Domain data source with related example updates
55
- Support for Monitoring service
66
- Adding ability to disable monitoring in instances
7+
- Adding support for Metrics-based Dynamic Auto-scaling
78

89
## 3.16.0 (February 26, 2019)
910

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
resource "oci_core_instance" "TFInstance" {
2+
availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"
3+
compartment_id = "${var.compartment_ocid}"
4+
display_name = "TFInstanceForInstancePool"
5+
shape = "${var.instance_shape}"
6+
7+
create_vnic_details {
8+
subnet_id = "${oci_core_subnet.ExampleSubnet.id}"
9+
display_name = "primaryvnic"
10+
assign_public_ip = true
11+
hostname_label = "tfexampleinstance${count.index}"
12+
}
13+
14+
source_details {
15+
source_type = "image"
16+
source_id = "${var.instance_image_ocid[var.region]}"
17+
}
18+
19+
timeouts {
20+
create = "60m"
21+
}
22+
}
23+
24+
resource "oci_core_instance_configuration" "TFInstanceConfiguration" {
25+
compartment_id = "${var.compartment_ocid}"
26+
display_name = "TFExampleInstanceConfiguration"
27+
28+
instance_details {
29+
instance_type = "compute"
30+
31+
launch_details {
32+
compartment_id = "${var.compartment_ocid}"
33+
ipxe_script = "ipxeScript"
34+
shape = "${var.instance_shape}"
35+
display_name = "TFExampleInstanceConfigurationLaunchDetails"
36+
37+
create_vnic_details {
38+
assign_public_ip = true
39+
display_name = "TFExampleInstanceConfigurationVNIC"
40+
skip_source_dest_check = false
41+
}
42+
43+
extended_metadata = {
44+
some_string = "stringA"
45+
nested_object = "{\"some_string\": \"stringB\", \"object\": {\"some_string\": \"stringC\"}}"
46+
}
47+
48+
source_details = {
49+
source_type = "image"
50+
image_id = "${var.instance_image_ocid[var.region]}"
51+
}
52+
}
53+
}
54+
}
55+
56+
resource "oci_core_instance_pool" "TFInstancePool" {
57+
compartment_id = "${var.compartment_ocid}"
58+
instance_configuration_id = "${oci_core_instance_configuration.TFInstanceConfiguration.id}"
59+
size = 2
60+
state = "RUNNING"
61+
display_name = "TFInstancePool"
62+
63+
placement_configurations {
64+
availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"
65+
primary_subnet_id = "${oci_core_subnet.ExampleSubnet.id}"
66+
}
67+
}
68+
69+
resource "oci_auto_scaling_auto_scaling_configuration" "TFAutoScalingConfiguration" {
70+
compartment_id = "${var.compartment_ocid}"
71+
cool_down_in_seconds = "300"
72+
display_name = "TFAutoScalingConfiguration"
73+
is_enabled = "true"
74+
75+
policies {
76+
capacity {
77+
initial = "4"
78+
max = "4"
79+
min = "2"
80+
}
81+
82+
display_name = "TFPolicy"
83+
policy_type = "threshold"
84+
85+
rules {
86+
action {
87+
type = "CHANGE_COUNT_BY"
88+
value = "1"
89+
}
90+
91+
display_name = "TFScaleOutRule"
92+
93+
metric {
94+
metric_type = "CPU_UTILIZATION"
95+
96+
threshold {
97+
operator = "GT"
98+
value = "1"
99+
}
100+
}
101+
}
102+
103+
rules {
104+
action {
105+
type = "CHANGE_COUNT_BY"
106+
value = "-1"
107+
}
108+
109+
display_name = "TFScaleInRule"
110+
111+
metric {
112+
metric_type = "CPU_UTILIZATION"
113+
114+
threshold {
115+
operator = "LT"
116+
value = "1"
117+
}
118+
}
119+
}
120+
}
121+
122+
auto_scaling_resources {
123+
id = "${oci_core_instance_pool.TFInstancePool.id}"
124+
type = "instancePool"
125+
}
126+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Gets a list of Availability Domains
2+
data "oci_identity_availability_domains" "ADs" {
3+
compartment_id = "${var.tenancy_ocid}"
4+
}
5+
6+
data "oci_core_instance_configuration" TFInstanceConfigurationDatasource {
7+
instance_configuration_id = "${oci_core_instance_configuration.TFInstanceConfiguration.id}"
8+
}
9+
10+
data "oci_core_instance_configurations" TFInstanceConfigurationDatasources {
11+
compartment_id = "${var.compartment_ocid}"
12+
13+
filter {
14+
name = "id"
15+
values = ["${oci_core_instance_configuration.TFInstanceConfiguration.id}"]
16+
}
17+
}
18+
19+
data "oci_core_instance_pool" "TFInstancePoolDatasource" {
20+
instance_pool_id = "${oci_core_instance_pool.TFInstancePool.id}"
21+
}
22+
23+
data "oci_core_instance_pools" "TFInstancePoolDatasources" {
24+
compartment_id = "${var.compartment_ocid}"
25+
display_name = "TFInstancePool"
26+
state = "RUNNING"
27+
28+
filter {
29+
name = "id"
30+
values = ["${oci_core_instance_pool.TFInstancePool.id}"]
31+
}
32+
}
33+
34+
data "oci_core_instance_pool_instances" "TFInstancePoolInstanceDatasources" {
35+
compartment_id = "${var.compartment_ocid}"
36+
instance_pool_id = "${oci_core_instance_pool.TFInstancePool.id}"
37+
display_name = "TFInstancePool"
38+
}
39+
40+
data "oci_auto_scaling_auto_scaling_configuration" "TFAutoScalingConfigurationDatasource" {
41+
auto_scaling_configuration_id = "${oci_auto_scaling_auto_scaling_configuration.TFAutoScalingConfiguration.id}"
42+
}
43+
44+
data "oci_auto_scaling_auto_scaling_configurations" "TFAutoScalingConfigurationDatasources" {
45+
compartment_id = "${var.compartment_ocid}"
46+
display_name = "TFAutoScalingConfiguration"
47+
48+
filter {
49+
name = "id"
50+
values = ["${oci_auto_scaling_auto_scaling_configuration.TFAutoScalingConfiguration.id}"]
51+
}
52+
}

docs/examples/autoscaling/env-vars

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
### Authentication details
2+
export TF_VAR_tenancy_ocid="<tenancy OCID>"
3+
export TF_VAR_user_ocid="<user OCID>"
4+
export TF_VAR_fingerprint="<PEM key fingerprint>"
5+
export TF_VAR_private_key_path="<path to the private key that matches the fingerprint above>"
6+
7+
### Region
8+
export TF_VAR_region="<region in which to operate, example: us-ashburn-1, us-phoenix-1>"
9+
10+
### Compartment
11+
export TF_VAR_compartment_ocid="<compartment OCID>"
12+
13+
### Public/private keys used on the instance
14+
export TF_VAR_ssh_public_key=$(cat <path to public key>)
15+
export TF_VAR_ssh_private_key=$(cat <path to private key>)
16+
## NOTE: These are not your api keys. More info on the right keys see
17+
## https://docs.us-phoenix-1.oraclecloud.com/Content/Compute/Tasks/managingkeypairs.htm
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
resource "oci_core_virtual_network" "ExampleVCN" {
2+
cidr_block = "10.1.0.0/16"
3+
compartment_id = "${var.compartment_ocid}"
4+
display_name = "TFExampleVCN"
5+
dns_label = "tfexamplevcn"
6+
}
7+
8+
resource "oci_core_subnet" "ExampleSubnet" {
9+
availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[var.availability_domain - 1],"name")}"
10+
cidr_block = "10.1.20.0/24"
11+
display_name = "TFExampleSubnet"
12+
dns_label = "tfexamplesubnet"
13+
security_list_ids = ["${oci_core_virtual_network.ExampleVCN.default_security_list_id}"]
14+
compartment_id = "${var.compartment_ocid}"
15+
vcn_id = "${oci_core_virtual_network.ExampleVCN.id}"
16+
route_table_id = "${oci_core_route_table.ExampleRT.id}"
17+
dhcp_options_id = "${oci_core_virtual_network.ExampleVCN.default_dhcp_options_id}"
18+
}
19+
20+
resource "oci_core_internet_gateway" "ExampleIG" {
21+
compartment_id = "${var.compartment_ocid}"
22+
display_name = "TFExampleIG"
23+
vcn_id = "${oci_core_virtual_network.ExampleVCN.id}"
24+
}
25+
26+
resource "oci_core_route_table" "ExampleRT" {
27+
compartment_id = "${var.compartment_ocid}"
28+
vcn_id = "${oci_core_virtual_network.ExampleVCN.id}"
29+
display_name = "TFExampleRouteTable"
30+
31+
route_rules {
32+
destination = "0.0.0.0/0"
33+
destination_type = "CIDR_BLOCK"
34+
network_entity_id = "${oci_core_internet_gateway.ExampleIG.id}"
35+
}
36+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
provider "oci" {
2+
tenancy_ocid = "${var.tenancy_ocid}"
3+
user_ocid = "${var.user_ocid}"
4+
fingerprint = "${var.fingerprint}"
5+
private_key_path = "${var.private_key_path}"
6+
region = "${var.region}"
7+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
variable "tenancy_ocid" {}
2+
variable "user_ocid" {}
3+
variable "fingerprint" {}
4+
variable "private_key_path" {}
5+
variable "region" {}
6+
7+
variable "compartment_ocid" {}
8+
variable "ssh_public_key" {}
9+
variable "ssh_private_key" {}
10+
11+
variable "instance_shape" {
12+
default = "VM.Standard2.1"
13+
}
14+
15+
variable "instance_image_ocid" {
16+
type = "map"
17+
18+
default = {
19+
// See https://docs.us-phoenix-1.oraclecloud.com/images/
20+
// Oracle-provided image "Oracle-Linux-7.5-2018.10.16-0"
21+
us-phoenix-1 = "ocid1.image.oc1.phx.aaaaaaaaoqj42sokaoh42l76wsyhn3k2beuntrh5maj3gmgmzeyr55zzrwwa"
22+
23+
us-ashburn-1 = "ocid1.image.oc1.iad.aaaaaaaageeenzyuxgia726xur4ztaoxbxyjlxogdhreu3ngfj2gji3bayda"
24+
eu-frankfurt-1 = "ocid1.image.oc1.eu-frankfurt-1.aaaaaaaaitzn6tdyjer7jl34h2ujz74jwy5nkbukbh55ekp6oyzwrtfa4zma"
25+
uk-london-1 = "ocid1.image.oc1.uk-london-1.aaaaaaaa32voyikkkzfxyo4xbdmadc2dmvorfxxgdhpnk6dw64fa3l4jh7wa"
26+
}
27+
}
28+
29+
# Choose an Availability Domain
30+
variable "availability_domain" {
31+
default = "3"
32+
}

0 commit comments

Comments
 (0)