Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Resource: azurerm_static_web_app_link_backend #26507

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

nnstt1
Copy link
Contributor

@nnstt1 nnstt1 commented Jun 30, 2024

Community Note

  • Please vote on this PR by adding a 👍 reaction to the original PR to help the community and maintainers prioritize for review
  • Please do not leave comments along the lines of "+1", "me too" or "any updates", they generate extra noise for PR followers and do not help prioritize for review

Description

Support for linking Static Web App to API Management, App Service, or Container App.
Only API Management ID, App Service ID, or Container App ID can be specified in the backend_resource_id argument as backend resources to be linked with Static Web Apps.

PR Checklist

  • I have followed the guidelines in our Contributing Documentation.
  • I have checked to ensure there aren't other open Pull Requests for the same update/change.
  • I have checked if my changes close any open issues. If so please include appropriate closing keywords below.
  • I have updated/added Documentation as required written in a helpful and kind way to assist users that may be unfamiliar with the resource / data source.
  • I have used a meaningful PR title to help maintainers and other users understand this change and help prevent duplicate work.
    For example: “resource_name_here - description of change e.g. adding property new_property_name_here

Changes to existing Resource / Data Source

  • I have added an explanation of what my changes do and why I'd like you to include them (This may be covered by linking to an issue above, but may benefit from additional explanation).
  • I have written new tests for my resource or datasource changes & updated any relevent documentation.
  • I have successfully run tests with my changes locally. If not, please provide details on testing challenges that prevented you running the tests.
  • (For changes that include a state migration only). I have manually tested the migration path between relevant versions of the provider.

Testing

  • My submission includes Test coverage as described in the Contribution Guide and the tests pass. (if this is not possible for any reason, please include details of why you did or could not add test coverage)
$ make acctests SERVICE='appservice' TESTARGS='-run=TestStaticWebAppLinkBackendResource_' TESTTIMEOUT='60m'

==> Checking that code complies with gofmt requirements...
==> Checking that Custom Timeouts are used...
==> Checking that acceptance test packages are used...
TF_ACC=1 go test -v ./internal/services/appservice -run=TestStaticWebAppLinkBackendResource_ -timeout 60m -ldflags="-X=github.com/hashicorp/terraform-provider-azurerm/version.ProviderVersion=acc"
=== RUN   TestStaticWebAppLinkBackendResource_basicApiManagement
=== PAUSE TestStaticWebAppLinkBackendResource_basicApiManagement
=== RUN   TestStaticWebAppLinkBackendResource_basicAppService
=== PAUSE TestStaticWebAppLinkBackendResource_basicAppService
=== RUN   TestStaticWebAppLinkBackendResource_basicContainerApp
=== PAUSE TestStaticWebAppLinkBackendResource_basicContainerApp
=== RUN   TestStaticWebAppLinkBackendResource_multipleExpectError
=== PAUSE TestStaticWebAppLinkBackendResource_multipleExpectError
=== RUN   TestStaticWebAppLinkBackendResource_requiresImport
=== PAUSE TestStaticWebAppLinkBackendResource_requiresImport
=== CONT  TestStaticWebAppLinkBackendResource_basicApiManagement
=== CONT  TestStaticWebAppLinkBackendResource_multipleExpectError
=== CONT  TestStaticWebAppLinkBackendResource_requiresImport
=== CONT  TestStaticWebAppLinkBackendResource_basicContainerApp
=== CONT  TestStaticWebAppLinkBackendResource_basicAppService
--- PASS: TestStaticWebAppLinkBackendResource_basicApiManagement (232.01s)
--- PASS: TestStaticWebAppLinkBackendResource_basicAppService (296.44s)
--- PASS: TestStaticWebAppLinkBackendResource_requiresImport (300.86s)
--- PASS: TestStaticWebAppLinkBackendResource_multipleExpectError (399.11s)
--- PASS: TestStaticWebAppLinkBackendResource_basicContainerApp (1174.67s)
PASS
ok      github.com/hashicorp/terraform-provider-azurerm/internal/services/appservice    1176.671s

Change Log

Below please provide what should go into the changelog (if anything) conforming to the Changelog Format documented here.

  • New Resource: azurerm_static_web_app_link_backend [GH-00000]

This is a (please select all that apply):

  • Bug Fix
  • New Feature (ie adding a service, resource, or data source)
  • Enhancement
  • Breaking Change

Related Issue(s)

Fixes #26350

Note

If this PR changes meaningfully during the course of review please update the title and description as required.

Copy link
Member

@jackofallops jackofallops left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @nnstt1 - I've added some comments below to take a look at. However, I think that this resource should actually be split into multiple resources for the specific backend types to avoid the somewhat messy code around checking for IDs and to assist users in being explicit about their configuration? WDYT?

}

func (r StaticWebAppLinkBackendResource) ResourceType() string {
return "azurerm_static_web_app_link_backend"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we call this

Suggested change
return "azurerm_static_web_app_link_backend"
return "azurerm_static_web_app_linked_backend"

as the resource names the "thing" created, not the action.

}

func (r StaticWebAppLinkBackendResource) ModelObject() interface{} {
return &StaticWebAppLinkBackendModel{}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return &StaticWebAppLinkBackendModel{}
return &StaticWebAppLinkedBackendModel{}

Comment on lines +72 to +77
return map[string]*pluginsdk.Schema{
"id": {
Type: pluginsdk.TypeString,
Computed: true,
},
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

id is handled implicitly by the SDK package and cannot be specified here

Suggested change
return map[string]*pluginsdk.Schema{
"id": {
Type: pluginsdk.TypeString,
Computed: true,
},
}
return map[string]*pluginsdk.Schema{}

Comment on lines +99 to +146
if apiManagementId, err := apimanagementservice.ParseServiceID(model.BackendResourceId); err == nil {
linkedBackend.id = apiManagementId.ID()
linkedBackend.name = apiManagementId.ServiceName

backendClient := metadata.Client.ApiManagement.ServiceClient

apiManagement, err := backendClient.Get(ctx, *apiManagementId)
if err != nil {
return fmt.Errorf("reading specified %s: %+v", *apiManagementId, err)
}

if appModel := apiManagement.Model; appModel != nil {
loc = location.Normalize(appModel.Location)
}

} else if appServiceId, err := commonids.ParseAppServiceID(model.BackendResourceId); err == nil {
linkedBackend.id = appServiceId.ID()
linkedBackend.name = appServiceId.SiteName

backendClient := metadata.Client.AppService.WebAppsClient

appService, err := backendClient.Get(ctx, *appServiceId)
if err != nil {
return fmt.Errorf("reading specified %s: %+v", *appServiceId, err)
}

if appModel := appService.Model; appModel != nil {
loc = location.Normalize(appModel.Location)
}

} else if containerAppId, err := containerapps.ParseContainerAppID(model.BackendResourceId); err == nil {
linkedBackend.id = containerAppId.ID()
linkedBackend.name = containerAppId.ContainerAppName

backendClient := metadata.Client.ContainerApps.ContainerAppClient

containerApp, err := backendClient.Get(ctx, *containerAppId)
if err != nil {
return fmt.Errorf("reading specified %s: %+v", *containerAppId, err)
}

if appModel := containerApp.Model; appModel != nil {
loc = location.Normalize(appModel.Location)
}

} else {
return fmt.Errorf("unsupported backend resource type")
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we update this to a switch using the validate functions? Since the Schema validation gates the values here before we get here, we shouldn't need the error/defaul case.


if model := result.Model; model != nil {
if props := model.Properties; props != nil {
state.BackendResourceId = pointer.From(props.BackendResourceId)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll need to check the ID type here and parse it with the appropriate parser to ensure the ID is correctly cased and formatted for the state.

---
subcategory: "App Service (Web Apps)"
layout: "azurerm"
page_title: "Azure Resource Manager: azurerm_static_web_app_link_backend"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
page_title: "Azure Resource Manager: azurerm_static_web_app_link_backend"
page_title: "Azure Resource Manager: azurerm_static_web_app_linked_backend"

Manages a Static Web App Link Backend.
---

# azurerm_static_web_app_link_backend
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# azurerm_static_web_app_link_backend
# azurerm_static_web_app_linked_backend

sku_name = "Consumption_0"
}

resource "azurerm_static_web_app_link_backend" "example" {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
resource "azurerm_static_web_app_link_backend" "example" {
resource "azurerm_static_web_app_linked_backend" "example" {

Copy link

github-actions bot commented Sep 2, 2024

This PR is being labeled as "stale" because it has not been updated for 30 or more days.

If this PR is still valid, please remove the "stale" label. If this PR is blocked, please add it to the "Blocked" milestone.

If you need some help completing this PR, please leave a comment letting us know. Thank you!

@github-actions github-actions bot added the stale label Sep 2, 2024
@github-actions github-actions bot removed the stale label Oct 21, 2024
@katbyte katbyte requested review from katbyte and a team as code owners November 14, 2024 00:08
Copy link

This PR is being labeled as "stale" because it has not been updated for 30 or more days.

If this PR is still valid, please remove the "stale" label. If this PR is blocked, please add it to the "Blocked" milestone.

If you need some help completing this PR, please leave a comment letting us know. Thank you!

@github-actions github-actions bot added the stale label Jan 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support for linking static_web_app to container_app
3 participants