From bef0ec31930f73cbb915a74edeb74da775af6756 Mon Sep 17 00:00:00 2001
From: sarna
Date: Sun, 11 Feb 2024 15:28:41 -0700
Subject: [PATCH] Add Upgrade Channels to NGINXaaS
---
.../nginx/nginx_deployment_data_source.go | 10 ++++++++
.../nginx_deployment_data_source_test.go | 1 +
.../nginx/nginx_deployment_resource.go | 24 +++++++++++++++++++
.../nginx/nginx_deployment_resource_test.go | 11 +++++----
website/docs/d/nginx_deployment.html.markdown | 2 ++
website/docs/r/nginx_deployment.html.markdown | 15 +++++++-----
6 files changed, 52 insertions(+), 11 deletions(-)
diff --git a/internal/services/nginx/nginx_deployment_data_source.go b/internal/services/nginx/nginx_deployment_data_source.go
index 4d38ae5864f4d..41a075ead5c26 100644
--- a/internal/services/nginx/nginx_deployment_data_source.go
+++ b/internal/services/nginx/nginx_deployment_data_source.go
@@ -34,6 +34,7 @@ type DeploymentDataSourceModel struct {
FrontendPublic []FrontendPublic `tfschema:"frontend_public"`
FrontendPrivate []FrontendPrivate `tfschema:"frontend_private"`
NetworkInterface []NetworkInterface `tfschema:"network_interface"`
+ UpgradeChannel string `tfschema:"automatic_upgrade_channel"`
Tags map[string]string `tfschema:"tags"`
}
@@ -164,6 +165,11 @@ func (m DeploymentDataSource) Attributes() map[string]*pluginsdk.Schema {
},
},
+ "automatic_upgrade_channel": {
+ Type: pluginsdk.TypeString,
+ Computed: true,
+ },
+
"tags": commonschema.TagsDataSource(),
}
}
@@ -267,6 +273,10 @@ func (m DeploymentDataSource) Read() sdk.ResourceFunc {
if userProfile := props.UserProfile; userProfile != nil && userProfile.PreferredEmail != nil {
output.Email = pointer.ToString(props.UserProfile.PreferredEmail)
}
+
+ if props.AutoUpgradeProfile != nil {
+ output.UpgradeChannel = props.AutoUpgradeProfile.UpgradeChannel
+ }
}
}
diff --git a/internal/services/nginx/nginx_deployment_data_source_test.go b/internal/services/nginx/nginx_deployment_data_source_test.go
index 174fbe294808c..757f05783b4f7 100644
--- a/internal/services/nginx/nginx_deployment_data_source_test.go
+++ b/internal/services/nginx/nginx_deployment_data_source_test.go
@@ -27,6 +27,7 @@ func TestAccNginxDeploymentDataSource_basic(t *testing.T) {
check.That(data.ResourceName).Key("capacity").Exists(),
check.That(data.ResourceName).Key("managed_resource_group").Exists(),
check.That(data.ResourceName).Key("ip_address").Exists(),
+ check.That(data.ResourceName).Key("automatic_upgrade_channel").Exists(),
),
},
})
diff --git a/internal/services/nginx/nginx_deployment_resource.go b/internal/services/nginx/nginx_deployment_resource.go
index bca153fb9ec8d..a43fc26623ee0 100644
--- a/internal/services/nginx/nginx_deployment_resource.go
+++ b/internal/services/nginx/nginx_deployment_resource.go
@@ -53,6 +53,7 @@ type DeploymentModel struct {
FrontendPublic []FrontendPublic `tfschema:"frontend_public"`
FrontendPrivate []FrontendPrivate `tfschema:"frontend_private"`
NetworkInterface []NetworkInterface `tfschema:"network_interface"`
+ UpgradeChannel string `tfschema:"automatic_upgrade_channel"`
Tags map[string]string `tfschema:"tags"`
}
@@ -194,6 +195,13 @@ func (m DeploymentResource) Arguments() map[string]*pluginsdk.Schema {
},
},
+ "automatic_upgrade_channel": {
+ Type: pluginsdk.TypeString,
+ Optional: true,
+ Default: "stable",
+ ValidateFunc: validation.StringIsNotEmpty,
+ },
+
"tags": commonschema.Tags(),
}
}
@@ -309,6 +317,12 @@ func (m DeploymentResource) Create() sdk.ResourceFunc {
}
}
+ if model.UpgradeChannel != "" {
+ prop.AutoUpgradeProfile = &nginxdeployment.AutoUpgradeProfile{
+ UpgradeChannel: model.UpgradeChannel,
+ }
+ }
+
req.Properties = prop
req.Identity, err = identity.ExpandSystemAndUserAssignedMapFromModel(model.Identity)
@@ -412,6 +426,10 @@ func (m DeploymentResource) Read() sdk.ResourceFunc {
output.Email = pointer.ToString(props.UserProfile.PreferredEmail)
}
+ if props.AutoUpgradeProfile != nil {
+ output.UpgradeChannel = props.AutoUpgradeProfile.UpgradeChannel
+ }
+
flattenedIdentity, err := identity.FlattenSystemAndUserAssignedMapToModel(model.Identity)
if err != nil {
return fmt.Errorf("flattening `identity`: %v", err)
@@ -481,6 +499,12 @@ func (m DeploymentResource) Update() sdk.ResourceFunc {
}
}
+ if meta.ResourceData.HasChange("automatic_upgrade_channel") {
+ req.Properties.AutoUpgradeProfile = &nginxdeployment.AutoUpgradeProfile{
+ UpgradeChannel: model.UpgradeChannel,
+ }
+ }
+
if err := client.DeploymentsUpdateThenPoll(ctx, *id, req); err != nil {
return fmt.Errorf("updating %s: %v", id, err)
}
diff --git a/internal/services/nginx/nginx_deployment_resource_test.go b/internal/services/nginx/nginx_deployment_resource_test.go
index 39211e2b46697..7234c3dfd480b 100644
--- a/internal/services/nginx/nginx_deployment_resource_test.go
+++ b/internal/services/nginx/nginx_deployment_resource_test.go
@@ -105,11 +105,12 @@ func (a DeploymentResource) basic(data acceptance.TestData) string {
%s
resource "azurerm_nginx_deployment" "test" {
- name = "acctest-%[2]d"
- resource_group_name = azurerm_resource_group.test.name
- sku = "standard_Monthly"
- location = azurerm_resource_group.test.location
- diagnose_support_enabled = true
+ name = "acctest-%[2]d"
+ resource_group_name = azurerm_resource_group.test.name
+ sku = "standard_Monthly"
+ location = azurerm_resource_group.test.location
+ diagnose_support_enabled = true
+ automatic_upgrade_channel = "stable"
frontend_public {
ip_address = [azurerm_public_ip.test.id]
diff --git a/website/docs/d/nginx_deployment.html.markdown b/website/docs/d/nginx_deployment.html.markdown
index 2a75e72e7f627..e15822058e4c0 100644
--- a/website/docs/d/nginx_deployment.html.markdown
+++ b/website/docs/d/nginx_deployment.html.markdown
@@ -63,6 +63,8 @@ In addition to the Arguments listed above - the following Attributes are exporte
* `sku` - Name of the SKU for this Nginx Deployment.
+* `automatic_upgrade_channel` - The automatic upgrade channel for this NGINX deployment.
+
* `tags` - A mapping of tags assigned to the Nginx Deployment.
---
diff --git a/website/docs/r/nginx_deployment.html.markdown b/website/docs/r/nginx_deployment.html.markdown
index 89ce87300933a..5f470bd0caf5b 100644
--- a/website/docs/r/nginx_deployment.html.markdown
+++ b/website/docs/r/nginx_deployment.html.markdown
@@ -55,12 +55,13 @@ resource "azurerm_subnet" "example" {
}
resource "azurerm_nginx_deployment" "example" {
- name = "example-nginx"
- resource_group_name = azurerm_resource_group.example.name
- sku = "publicpreview_Monthly_gmz7xq9ge3py"
- location = azurerm_resource_group.example.location
- managed_resource_group = "example"
- diagnose_support_enabled = true
+ name = "example-nginx"
+ resource_group_name = azurerm_resource_group.example.name
+ sku = "publicpreview_Monthly_gmz7xq9ge3py"
+ location = azurerm_resource_group.example.location
+ managed_resource_group = "example"
+ diagnose_support_enabled = true
+ automatic_upgrade_channel = "stable"
frontend_public {
ip_address = [azurerm_public_ip.example.id]
@@ -109,6 +110,8 @@ The following arguments are supported:
* `network_interface` - (Optional) One or more `network_interface` blocks as defined below. Changing this forces a new Nginx Deployment to be created.
+* `automatic_upgrade_channel` - (Optional) Specify the automatic upgrade channel for the NGINX deployment. Defaults to `stable`. The possible values are `stable` and `preview`.
+
* `tags` - (Optional) A mapping of tags which should be assigned to the Nginx Deployment.
---