diff --git a/docs/src/dependencies.md b/docs/src/dependencies.md
index b8b0dd21..85656d8f 100644
--- a/docs/src/dependencies.md
+++ b/docs/src/dependencies.md
@@ -15,8 +15,8 @@
 
 | Name | Version |
 |------|---------|
-| <a name="provider_oci"></a> [oci](#provider\_oci) | >= 4.119.0 |
-| <a name="provider_random"></a> [random](#provider\_random) | >= 3.4.3 |
+| <a name="provider_oci"></a> [oci](#provider\_oci) | 5.17.0 |
+| <a name="provider_random"></a> [random](#provider\_random) | 3.5.1 |
 
 ## Modules
 
@@ -24,12 +24,13 @@
 |------|--------|---------|
 | <a name="module_bastion"></a> [bastion](#module\_bastion) | ./modules/bastion | n/a |
 | <a name="module_cluster"></a> [cluster](#module\_cluster) | ./modules/cluster | n/a |
+| <a name="module_drg"></a> [drg](#module\_drg) | oracle-terraform-modules/drg/oci | 1.0.5 |
 | <a name="module_extensions"></a> [extensions](#module\_extensions) | ./modules/extensions | n/a |
 | <a name="module_iam"></a> [iam](#module\_iam) | ./modules/iam | n/a |
 | <a name="module_network"></a> [network](#module\_network) | ./modules/network | n/a |
 | <a name="module_operator"></a> [operator](#module\_operator) | ./modules/operator | n/a |
 | <a name="module_utilities"></a> [utilities](#module\_utilities) | ./modules/utilities | n/a |
-| <a name="module_vcn"></a> [vcn](#module\_vcn) | oracle-terraform-modules/vcn/oci | 3.5.3 |
+| <a name="module_vcn"></a> [vcn](#module\_vcn) | oracle-terraform-modules/vcn/oci | 3.5.4 |
 | <a name="module_workers"></a> [workers](#module\_workers) | ./modules/workers | n/a |
 
 ## Resources
diff --git a/docs/src/guide/workers_mode_clusternetwork.md b/docs/src/guide/workers_mode_clusternetwork.md
index 56a1f514..63c3f5f5 100644
--- a/docs/src/guide/workers_mode_clusternetwork.md
+++ b/docs/src/guide/workers_mode_clusternetwork.md
@@ -8,6 +8,11 @@
 {{#include ../../../examples/workers/vars-workers-clusternetwork.auto.tfvars:4:}}
 ```
 
+Instance agent configuration:
+```javascript
+{{#include ../../../examples/workers/vars-workers-agent.auto.tfvars:4:}}
+```
+
 ## References
 * [Cluster Networks with Instance Pools](https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/managingclusternetworks.htm#Managing_Cluster_Networks)
 * [Large Clusters, Lowest Latency: Cluster Networking on Oracle Cloud Infrastructure](https://blogs.oracle.com/cloud-infrastructure/post/large-clusters-lowest-latency-cluster-networking-on-oracle-cloud-infrastructure)
diff --git a/docs/src/guide/workers_mode_instance.md b/docs/src/guide/workers_mode_instance.md
index e02e93b2..5236b614 100644
--- a/docs/src/guide/workers_mode_instance.md
+++ b/docs/src/guide/workers_mode_instance.md
@@ -8,5 +8,10 @@
 {{#include ../../../examples/workers/vars-workers-instance.auto.tfvars:4:}}
 ```
 
+Instance agent configuration:
+```javascript
+{{#include ../../../examples/workers/vars-workers-agent.auto.tfvars:4:}}
+```
+
 ## References
 * [Creating an Instance](https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/launchinginstance.htm)
diff --git a/docs/src/guide/workers_mode_instancepool.md b/docs/src/guide/workers_mode_instancepool.md
index b1d13477..0392c378 100644
--- a/docs/src/guide/workers_mode_instancepool.md
+++ b/docs/src/guide/workers_mode_instancepool.md
@@ -8,5 +8,10 @@
 {{#include ../../../examples/workers/vars-workers-instancepool.auto.tfvars:4:}}
 ```
 
+Instance agent configuration:
+```javascript
+{{#include ../../../examples/workers/vars-workers-agent.auto.tfvars:4:}}
+```
+
 ## References
 * [Using Instance Configurations and Instance Pools](https://docs.oracle.com/en-us/iaas/Content/Compute/Concepts/instancemanagement.htm)
diff --git a/docs/src/inputs_root.md b/docs/src/inputs_root.md
index 9d87aa07..9dd72f8d 100644
--- a/docs/src/inputs_root.md
+++ b/docs/src/inputs_root.md
@@ -77,8 +77,8 @@ The module supports the following configuration for created resources:
 | <a name="input_operator_shape"></a> [operator\_shape](#input\_operator\_shape)| Shape of the created operator instance.|  map(any)|  {<br>  "boot\_volume\_size": 50,<br>  "memory": 4,<br>  "ocpus": 1,<br>  "shape": "VM.Standard.E4.Flex"<br>}|  no|
 | <a name="input_worker_preemptible_config"></a> [worker\_preemptible\_config](#input\_worker\_preemptible\_config)| Default preemptible Compute configuration when unspecified on a pool. See <a href=https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengusingpreemptiblecapacity.htm>Preemptible Worker Nodes</a> for more information.|  map(any)|  {<br>  "enable": false,<br>  "is\_preserve\_boot\_volume": false<br>}|  no|
 | <a name="input_worker_shape"></a> [worker\_shape](#input\_worker\_shape)| Default shape of the created worker instance when unspecified on a pool.|  map(any)|  {<br>  "boot\_volume\_size": 50,<br>  "memory": 16,<br>  "ocpus": 2,<br>  "shape": "VM.Standard.E4.Flex"<br>}|  no|
-| <a name="input_subnets"></a> [subnets](#input\_subnets)| Configuration for standard subnets. The 'create' parameter of each entry defaults to 'auto', creating subnets when other enabled components are expected to utilize them, and may be configured with 'never' or 'always' to force disabled/enabled.|  map(object({<br>    create    = optional(string, "auto")<br>    id        = optional(string)<br>    newbits   = optional(string)<br>    netnum    = optional(string)<br>    cidr      = optional(string)<br>    dns\_label = optional(string)<br>  }))|  {<br>  "bastion": {<br>    "newbits": 13<br>  },<br>  "cp": {<br>    "newbits": 13<br>  },<br>  "int\_lb": {<br>    "newbits": 11<br>  },<br>  "operator": {<br>    "newbits": 13<br>  },<br>  "pods": {<br>    "newbits": 2<br>  },<br>  "pub\_lb": {<br>    "newbits": 11<br>  },<br>  "workers": {<br>    "newbits": 4<br>  }<br>}|  no|
-| <a name="input_nsgs"></a> [nsgs](#input\_nsgs)| Configuration for standard network security groups (NSGs).  The 'create' parameter of each entry defaults to 'auto', creating NSGs when other enabled components are expected to utilize them, and may be configured with 'never' or 'always' to force disabled/enabled.|  map(object({<br>    create = optional(string, "auto")<br>    id     = optional(string)<br>  }))|  {<br>  "bastion": {},<br>  "cp": {},<br>  "int\_lb": {},<br>  "operator": {},<br>  "pods": {},<br>  "pub\_lb": {},<br>  "workers": {}<br>}|  no|
+| <a name="input_subnets"></a> [subnets](#input\_subnets)| Configuration for standard subnets. The 'create' parameter of each entry defaults to 'auto', creating subnets when other enabled components are expected to utilize them, and may be configured with 'never' or 'always' to force disabled/enabled.|  map(object({<br>    create    = optional(string)<br>    id        = optional(string)<br>    newbits   = optional(string)<br>    netnum    = optional(string)<br>    cidr      = optional(string)<br>    dns\_label = optional(string)<br>  }))|  {<br>  "bastion": {<br>    "newbits": 13<br>  },<br>  "cp": {<br>    "newbits": 13<br>  },<br>  "int\_lb": {<br>    "newbits": 11<br>  },<br>  "operator": {<br>    "newbits": 13<br>  },<br>  "pods": {<br>    "newbits": 2<br>  },<br>  "pub\_lb": {<br>    "newbits": 11<br>  },<br>  "workers": {<br>    "newbits": 4<br>  }<br>}|  no|
+| <a name="input_nsgs"></a> [nsgs](#input\_nsgs)| Configuration for standard network security groups (NSGs).  The 'create' parameter of each entry defaults to 'auto', creating NSGs when other enabled components are expected to utilize them, and may be configured with 'never' or 'always' to force disabled/enabled.|  map(object({<br>    create = optional(string)<br>    id     = optional(string)<br>  }))|  {<br>  "bastion": {},<br>  "cp": {},<br>  "int\_lb": {},<br>  "operator": {},<br>  "pods": {},<br>  "pub\_lb": {},<br>  "workers": {}<br>}|  no|
 | <a name="input_bastion_defined_tags"></a> [bastion\_defined\_tags](#input\_bastion\_defined\_tags)| Defined tags applied to created resources.|  map(string)|  {}|  no|
 | <a name="input_bastion_freeform_tags"></a> [bastion\_freeform\_tags](#input\_bastion\_freeform\_tags)| Freeform tags applied to created resources.|  map(string)|  {}|  no|
 | <a name="input_cluster_autoscaler_helm_values"></a> [cluster\_autoscaler\_helm\_values](#input\_cluster\_autoscaler\_helm\_values)| Map of individual Helm chart values. See <a href=https://registry.terraform.io/providers/hashicorp/helm/latest/docs/data-sources/template>data.helm\_template</a>.|  map(string)|  {}|  no|
@@ -105,6 +105,7 @@ The module supports the following configuration for created resources:
 | <a name="input_max_pods_per_node"></a> [max\_pods\_per\_node](#input\_max\_pods\_per\_node)| The default maximum number of pods to deploy per node when unspecified on a pool. Absolute maximum is 110. Ignored when when cni\_type != 'npn'.|  number|  31|  no|
 | <a name="input_worker_drain_timeout_seconds"></a> [worker\_drain\_timeout\_seconds](#input\_worker\_drain\_timeout\_seconds)| The length of time to wait before giving up on draining nodes in a pool. See <a href=https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain>kubectl drain</a> for more information.|  number|  900|  no|
 | <a name="input_worker_pool_size"></a> [worker\_pool\_size](#input\_worker\_pool\_size)| Default size for worker pools when unspecified on a pool.|  number|  0|  no|
+| <a name="input_agent_config"></a> [agent\_config](#input\_agent\_config)| Default agent\_config for self-managed worker pools created with mode: 'instance', 'instance-pool', or 'cluster-network'. See <a href=https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/InstanceAgentConfig for more information.|  object({<br>    are\_all\_plugins\_disabled = bool,<br>    is\_management\_disabled   = bool,<br>    is\_monitoring\_disabled   = bool,<br>    plugins\_config           = map(string),<br>  })|  null|  no|
 | <a name="input_platform_config"></a> [platform\_config](#input\_platform\_config)| Default platform\_config for self-managed worker pools created with mode: 'instance', 'instance-pool', or 'cluster-network'. See <a href=https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/PlatformConfig>PlatformConfig</a> for more information.|  object({<br>    type                                           = optional(string),<br>    are\_virtual\_instructions\_enabled               = optional(bool),<br>    is\_access\_control\_service\_enabled              = optional(bool),<br>    is\_input\_output\_memory\_management\_unit\_enabled = optional(bool),<br>    is\_measured\_boot\_enabled                       = optional(bool),<br>    is\_memory\_encryption\_enabled                   = optional(bool),<br>    is\_secure\_boot\_enabled                         = optional(bool),<br>    is\_symmetric\_multi\_threading\_enabled           = optional(bool),<br>    is\_trusted\_platform\_module\_enabled             = optional(bool),<br>    numa\_nodes\_per\_socket                          = optional(number),<br>    percentage\_of\_cores\_enabled                    = optional(bool),<br>  })|  null|  no|
 | <a name="input_control_plane_nsg_ids"></a> [control\_plane\_nsg\_ids](#input\_control\_plane\_nsg\_ids)| An additional list of network security groups (NSG) ids for the cluster endpoint.|  set(string)|  []|  no|
 | <a name="input_image_signing_keys"></a> [image\_signing\_keys](#input\_image\_signing\_keys)| A list of KMS key ids used by the worker nodes to verify signed images. The keys must use RSA algorithm.|  set(string)|  []|  no|
diff --git a/docs/src/inputs_submodule.md b/docs/src/inputs_submodule.md
index ca745d80..0b9b951e 100644
--- a/docs/src/inputs_submodule.md
+++ b/docs/src/inputs_submodule.md
@@ -148,6 +148,7 @@ Sub-modules currently use a sparse definition of inputs required from the root:
 | <a name="input_node_metadata"></a> [node\_metadata](#input\_node\_metadata)| Map of additional worker node instance metadata. Merged with metadata defined on each pool.|  map(string)|  {}|  no|
 | <a name="input_max_pods_per_node"></a> [max\_pods\_per\_node](#input\_max\_pods\_per\_node)| The default maximum number of pods to deploy per node when unspecified on a pool. Absolute maximum is 110. Ignored when when cni\_type != 'npn'.|  number|  31|  no|
 | <a name="input_worker_pool_size"></a> [worker\_pool\_size](#input\_worker\_pool\_size)| Default size for worker pools when unspecified on a pool.|  number|  0|  no|
+| <a name="input_agent_config"></a> [agent\_config](#input\_agent\_config)| Default agent\_config for self-managed worker pools created with mode: 'instance', 'instance-pool', or 'cluster-network'. See <a href=https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/InstanceAgentConfig for more information.|  object({<br>    are\_all\_plugins\_disabled = bool,<br>    is\_management\_disabled   = bool,<br>    is\_monitoring\_disabled   = bool,<br>    plugins\_config           = map(string),<br>  })|  null|  no|
 | <a name="input_platform_config"></a> [platform\_config](#input\_platform\_config)| Default platform\_config for self-managed worker pools created with mode: 'instance', 'instance-pool', or 'cluster-network'. See <a href=https://docs.oracle.com/en-us/iaas/api/#/en/iaas/20160918/datatypes/PlatformConfig>PlatformConfig</a> for more information.|  object({<br>    type                                           = optional(string),<br>    are\_virtual\_instructions\_enabled               = optional(bool),<br>    is\_access\_control\_service\_enabled              = optional(bool),<br>    is\_input\_output\_memory\_management\_unit\_enabled = optional(bool),<br>    is\_measured\_boot\_enabled                       = optional(bool),<br>    is\_memory\_encryption\_enabled                   = optional(bool),<br>    is\_secure\_boot\_enabled                         = optional(bool),<br>    is\_symmetric\_multi\_threading\_enabled           = optional(bool),<br>    is\_trusted\_platform\_module\_enabled             = optional(bool),<br>    numa\_nodes\_per\_socket                          = optional(number),<br>    percentage\_of\_cores\_enabled                    = optional(bool),<br>  })|  null|  no|
 | <a name="input_apiserver_private_host"></a> [apiserver\_private\_host](#input\_apiserver\_private\_host)| n/a|  string|  n/a|  yes|
 | <a name="input_block_volume_type"></a> [block\_volume\_type](#input\_block\_volume\_type)| Default block volume attachment type for Instance Configurations when unspecified on a pool.|  string|  "paravirtualized"|  no|
@@ -199,6 +200,7 @@ Sub-modules currently use a sparse definition of inputs required from the root:
 | <a name="input_image_id"></a> [image\_id](#input\_image\_id)| n/a|  string|  n/a|  yes|
 | <a name="input_kubeconfig"></a> [kubeconfig](#input\_kubeconfig)| n/a|  string|  n/a|  yes|
 | <a name="input_kubernetes_version"></a> [kubernetes\_version](#input\_kubernetes\_version)| n/a|  string|  n/a|  yes|
+| <a name="input_operator_image_os_version"></a> [operator\_image\_os\_version](#input\_operator\_image\_os\_version)| n/a|  string|  n/a|  yes|
 | <a name="input_ssh_private_key"></a> [ssh\_private\_key](#input\_ssh\_private\_key)| n/a|  string|  n/a|  yes|
 | <a name="input_ssh_public_key"></a> [ssh\_public\_key](#input\_ssh\_public\_key)| n/a|  string|  n/a|  yes|
 | <a name="input_state_id"></a> [state\_id](#input\_state\_id)| n/a|  string|  n/a|  yes|
diff --git a/docs/src/outputs.md b/docs/src/outputs.md
index c8edd974..80e10b0d 100644
--- a/docs/src/outputs.md
+++ b/docs/src/outputs.md
@@ -62,6 +62,7 @@
 * **`worker_count_expected`**&nbsp;&nbsp; # of nodes expected from created worker pools
 * **`worker_drain_expected`**&nbsp;&nbsp; # of nodes expected to be draining in worker pools
 * **`worker_instances`**&nbsp;&nbsp; Created worker pools (mode == 'instance')
+* **`worker_pool_autoscale_expected`**&nbsp;&nbsp; # of worker pools expected with autoscale enabled from created worker pools
 * **`worker_pool_ids`**&nbsp;&nbsp; Created worker pool IDs
 * **`worker_pool_ips`**&nbsp;&nbsp; Created worker instance private IPs by pool for available modes ('node-pool', 'instance').
 * **`worker_pools`**&nbsp;&nbsp; Created worker pools (mode != 'instance')