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. ---