Skip to content

Commit f55789d

Browse files
Merge pull request #303495 from MicrosoftDocs/main
Auto Publish – main to live - 2025-07-29 11:00 UTC
2 parents 019f981 + dfbf0ac commit f55789d

File tree

52 files changed

+915
-15
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+915
-15
lines changed

articles/automation/automation-hrw-run-runbooks.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Run Azure Automation Runbooks on a Hybrid Runbook Worker
33
description: This article describes how to run runbooks on machines in your local datacenter or other cloud provider with the Hybrid Runbook Worker.
44
services: automation
55
ms.subservice: process-automation
6-
ms.date: 07/22/2025
6+
ms.date: 07/29/2025
77
ms.topic: how-to
88
ms.custom: devx-track-azurepowershell, linux-related-content
99
ms.service: azure-automation
@@ -14,7 +14,7 @@ author: jasminemehndir
1414
# Run Automation runbooks on a Hybrid Runbook Worker
1515

1616

17-
> [!Important]
17+
> [!IMPORTANT]
1818
> - Starting 1st April 2025, all jobs running on agent-based Hybrid Worker will be stopped.
1919
> - Azure Automation Agent-based User Hybrid Runbook Worker (Windows and Linux) has retired on **31 August 2024** and is no longer supported. Follow the guidelines on how to [migrate from an existing Agent-based User Hybrid Runbook Workers to Extension-based Hybrid Workers](migrate-existing-agent-based-hybrid-worker-to-extension-based-workers.md).
2020
@@ -41,8 +41,9 @@ Azure Automation handles jobs on Hybrid Runbook Workers differently from jobs ru
4141
Jobs for Hybrid Runbook Workers run under the local **System** account.
4242

4343
> [!NOTE]
44-
>- PowerShell 5.1, PowerShell 7.1(preview), Python 2.7, and Python 3.8 runbooks are supported on both extension-based and agent-based Windows Hybrid Runbook Workers. For agent based workers, ensure the Windows Hybrid worker version is 7.3.12960 or above.
45-
>- PowerShell 7.2 and Python 3.10 (preview) runbooks are supported on extension-based Windows Hybrid Workers only. Ensure the Windows Hybrid worker extension version is 1.1.11 or above.
44+
>- PowerShell 7.4 and Python 3.10 runbooks are supported on extension-based Windows Hybrid Workers only. Ensure the Windows Hybrid worker extension version is 1.3.63 or above.
45+
>- PowerShell 5.1, PowerShell 7.1 (preview), Python 2.7, and Python 3.8 runbooks are supported on both extension-based and agent-based Windows Hybrid Runbook Workers. For agent based workers, ensure the Windows Hybrid worker version is 7.3.12960 or above.
46+
>- PowerShell 7.2 runbook is supported on extension-based Windows Hybrid Workers only. Ensure the Windows Hybrid worker extension version is 1.1.11 or above.
4647
4748
#### Extension-based Hybrid Workers
4849

@@ -94,8 +95,9 @@ If the *Python* executable file is at the default location *C:\Python27\python.e
9495
### Linux Hybrid Worker
9596

9697
> [!NOTE]
97-
>- PowerShell 5.1, PowerShell 7.1(preview), Python 2.7, Python 3.8 runbooks are supported on both extension-based and agent-based Linux Hybrid Runbook Workers. For agent-based workers, ensure the Linux Hybrid Runbook worker version is 1.7.5.0 or above.
98-
>- PowerShell 7.2 and Python 3.10 (preview) runbooks are supported on extension-based Linux Hybrid Workers only. Ensure the Linux Hybrid worker extension version is 1.1.11 or above.
98+
>- PowerShell 7.4 and Python 3.10 runbooks are supported on extension-based Linux Hybrid Workers only. Ensure the Linux Hybrid worker extension version is 1.1.23 or above.
99+
>- PowerShell 5.1, PowerShell 7.1 (preview), Python 2.7, Python 3.8 runbooks are supported on both extension-based and agent-based Linux Hybrid Runbook Workers. For agent-based workers, ensure the Linux Hybrid Runbook worker version is 1.7.5.0 or above.
100+
>- PowerShell 7.2 runbook is supported on extension-based Linux Hybrid Workers only. Ensure the Linux Hybrid worker extension version is 1.1.11 or above.
99101
100102
#### Extension-based Hybrid Workers
101103

@@ -286,7 +288,7 @@ By default, the Hybrid jobs run under the context of System account. However, to
286288
1. Select **Hybrid Worker Groups**, and then select the specific group.
287289
1. Select **Settings**.
288290
1. Change the value of **Hybrid Worker credentials** from **Default** to **Custom**.
289-
1. Select the credential and click **Save**.
291+
1. Select the credential and select **Save**.
290292
1. If the following permissions are not assigned for Custom users, jobs might get suspended.
291293
292294
| **Resource type** | **Folder permissions** |

articles/azure-app-configuration/TOC.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@
200200
href: howto-feature-filters-javascript.md
201201
- name: Python
202202
href: howto-feature-filters-python.md
203+
- name: Go Gin
204+
href: howto-feature-filters-go.md
203205
- name: Enable features on a schedule
204206
items:
205207
- name: Overview
@@ -208,6 +210,8 @@
208210
href: howto-timewindow-filter-aspnet-core.md
209211
- name: JavaScript
210212
href: howto-timewindow-filter-javascript.md
213+
- name: Go Gin
214+
href: howto-timewindow-filter-go.md
211215
- name: Python
212216
href: howto-time-window-filter-python.md
213217
- name: Roll out features to targeted audience

articles/azure-app-configuration/concept-feature-management.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ To start using feature flags with Azure App Configuration, continue to the follo
9696
> [!div class="nextstepaction"]
9797
> [JavaScript](./quickstart-feature-flag-javascript.md)
9898
99+
> [!div class="nextstepaction"]
100+
> [Go](./quickstart-feature-flag-go-console.md)
101+
102+
> [!div class="nextstepaction"]
103+
> [Go Gin](./quickstart-feature-flag-go-gin.md)
104+
99105
> [!div class="nextstepaction"]
100106
> [Azure Kubernetes Service](./quickstart-feature-flag-azure-kubernetes-service.md)
101107
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
---
2+
title: Enable conditional features with a custom filter in a Go Gin web application
3+
titleSuffix: Azure App Configuration
4+
description: Learn how to implement a custom feature filter to enable conditional feature flags for your Go Gin web application.
5+
ms.service: azure-app-configuration
6+
ms.devlang: golang
7+
author: linglingye
8+
ms.author: linglingye
9+
ms.topic: how-to
10+
ms.custom: devx-track-go, mode-other
11+
ms.date: 07/25/2025
12+
---
13+
14+
# Enable conditional features with a custom filter in a Go Gin web application
15+
16+
Feature flags can use feature filters to enable features conditionally. To learn more about feature filters, see [Enable conditional features with feature filters](./howto-feature-filters.md).
17+
18+
The example used in this guide is based on the Go Gin web application introduced in the feature management [quickstart](./quickstart-feature-flag-go-gin.md). Before proceeding further, complete the quickstart to create a Go Gin web application with a *Beta* feature flag. Once completed, you must [add a custom feature filter](./howto-feature-filters.md) to the *Beta* feature flag in your App Configuration store.
19+
20+
In this guide, you learn how to implement a custom feature filter and use the feature filter to enable features conditionally.
21+
22+
## Prerequisites
23+
24+
- Create a [Go Gin web application with a feature flag](./quickstart-feature-flag-go-gin.md).
25+
- [Add a custom feature filter to the feature flag](./howto-feature-filters.md)
26+
27+
## Implement a custom feature filter
28+
29+
You added a custom feature filter named **Random** with a **Percentage** parameter for your *Beta* feature flag in the prerequisites. Next, you'll implement the feature filter to enable the *Beta* feature flag based on the chance defined by the **Percentage** parameter.
30+
31+
1. Create a `random_filter.go` file with the following code:
32+
33+
```golang
34+
package main
35+
36+
import (
37+
"fmt"
38+
"math/rand"
39+
"time"
40+
41+
"github.com/microsoft/Featuremanagement-Go/featuremanagement"
42+
)
43+
44+
type RandomFilter struct{}
45+
46+
func (f *RandomFilter) Name() string {
47+
return "Random"
48+
}
49+
50+
func (f *RandomFilter) Evaluate(evalCtx featuremanagement.FeatureFilterEvaluationContext, appCtx any) (bool, error) {
51+
percentage, ok := evalCtx.Parameters["Percentage"].(float64)
52+
if !ok {
53+
return false, fmt.Errorf("invalid parameter type for Percentage: expected float64, got %T", evalCtx.Parameters["Percentage"])
54+
}
55+
56+
rand.Seed(time.Now().UnixNano())
57+
randomValue := rand.Intn(100)
58+
return randomValue <= int(percentage), nil
59+
}
60+
```
61+
62+
You added a `RandomFilter` struct that implements the `FeatureFilter` interface from the `featuremanagement` library. The `FeatureFilter` interface has two methods:
63+
- `Name()` returns the filter name **Random**, which matches the filter name you set in the *Beta* feature flag in Azure App Configuration.
64+
- `Evaluate()` is called whenever a feature flag is evaluated. A feature filter enables a feature flag by returning `true`.
65+
66+
2. Update your `main.go` file to register the `RandomFilter` when creating the feature manager:
67+
68+
```golang
69+
// ...existing code...
70+
71+
func main() {
72+
ctx := context.Background()
73+
74+
// Load Azure App Configuration
75+
appConfig, err := loadAzureAppConfiguration(ctx)
76+
if err != nil {
77+
log.Fatalf("Error loading Azure App Configuration: %v", err)
78+
}
79+
80+
// Create feature flag provider
81+
featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
82+
if err != nil {
83+
log.Fatalf("Error creating feature flag provider: %v", err)
84+
}
85+
86+
// Register custom filters
87+
options := &featuremanagement.Options{
88+
Filters: []featuremanagement.FeatureFilter{
89+
&RandomFilter{},
90+
},
91+
}
92+
93+
// Create feature manager with custom filters
94+
featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, options)
95+
if err != nil {
96+
log.Fatalf("Error creating feature manager: %v", err)
97+
}
98+
99+
// ...existing code...
100+
}
101+
```
102+
103+
## Feature filter in action
104+
105+
Relaunch the application and refresh the browser a few times. Without manually toggling the feature flag, the **Beta** menu appears randomly based on the percentage you set.
106+
107+
:::image type="content" source="./media/quickstarts/gin-app-feature-flag-before.png" alt-text="Screenshot of Gin web app with Beta menu hidden.":::
108+
109+
:::image type="content" source="./media/quickstarts/gin-app-feature-flag-after.png" alt-text="Screenshot of Gin web app with Beta menu.":::
110+
111+
## Next steps
112+
113+
To learn more about the built-in feature filters, continue to the following documents.
114+
115+
> [!div class="nextstepaction"]
116+
> [Enable features on a schedule](./howto-timewindow-filter.md)
117+
118+
> [!div class="nextstepaction"]
119+
> [Roll out features to targeted audience](./howto-targetingfilter.md)
120+
121+
For the full feature rundown of the Go feature management library, continue to the following document.
122+
123+
> [!div class="nextstepaction"]
124+
> [Go Feature Management reference](https://pkg.go.dev/github.com/microsoft/Featuremanagement-Go/featuremanagement)

articles/azure-app-configuration/howto-feature-filters.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ You can create custom feature filters that enable features based on your specifi
6262
- [ASP.NET Core](./howto-feature-filters-aspnet-core.md)
6363
- [Node.js](./howto-feature-filters-javascript.md)
6464
- [Python](./howto-feature-filters-python.md)
65+
- [Go Gin](./howto-feature-filters-go.md)
6566

6667
## Next steps
6768

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
title: Enable features on a schedule in a Go Gin web application
3+
titleSuffix: Azure App Configuration
4+
description: Learn how to enable feature flags on a schedule in a Go Gin web application by using time window filters.
5+
ms.service: azure-app-configuration
6+
ms.devlang: golang
7+
author: linglingye
8+
ms.author: linglingye
9+
ms.topic: how-to
10+
ms.custom: devx-track-go, mode-other
11+
ms.date: 07/25/2025
12+
---
13+
14+
# Enable features on a schedule in a Go Gin web application
15+
16+
In this guide, you use the time window filter to enable a feature on a schedule for a Go Gin web application.
17+
18+
The example used in this article is based on the Go Gin web application introduced in the feature management [quickstart](./quickstart-feature-flag-go-gin.md). Before proceeding further, complete the quickstart to create a Go Gin web application with a *Beta* feature flag. Once completed, you must [add a time window filter](./howto-timewindow-filter.md) to the *Beta* feature flag in your App Configuration store.
19+
20+
## Prerequisites
21+
22+
- Create a [Go Gin web application with a feature flag](./quickstart-feature-flag-go-gin.md).
23+
- [Add a time window filter to the feature flag](./howto-timewindow-filter.md)
24+
25+
## Use the time window filter
26+
27+
You added a time window filter for your *Beta* feature flag in the prerequisites. Next, you'll use the feature flag with the time window filter in your Go Gin web application.
28+
29+
When you create a feature manager, the built-in feature filters are automatically added to its feature filter collection
30+
31+
The existing code from the quickstart already handles time window filters through the feature manager:
32+
33+
```golang
34+
// Create feature flag provider
35+
featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
36+
if err != nil {
37+
log.Fatalf("Error creating feature flag provider: %v", err)
38+
}
39+
40+
// Create feature manager (supports built-in filters including TimeWindowFilter)
41+
featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil)
42+
if err != nil {
43+
log.Fatalf("Error creating feature manager: %v", err)
44+
}
45+
```
46+
47+
The feature evaluation in your middleware will now respect the time window filter:
48+
49+
```golang
50+
func (app *WebApp) featureMiddleware() gin.HandlerFunc {
51+
return func(c *gin.Context) {
52+
// Check if Beta feature is enabled (TimeWindowFilter is automatically evaluated)
53+
betaEnabled, err := app.featureManager.IsEnabled("Beta")
54+
if err != nil {
55+
log.Printf("Error checking Beta feature: %v", err)
56+
}
57+
58+
// Store feature flag status for use in templates
59+
c.Set("betaEnabled", betaEnabled)
60+
c.Next()
61+
}
62+
}
63+
```
64+
65+
## Time window filter in action
66+
67+
Relaunch the application. If your current time is earlier than the start time set for the time window filter, the **Beta** menu item won't appear on the toolbar. This is because the *Beta* feature flag is disabled by the time window filter.
68+
69+
:::image type="content" source="./media/quickstarts/gin-app-feature-flag-before.png" alt-text="Screenshot of Gin web app with Beta menu hidden.":::
70+
71+
Once the start time has passed, refresh your browser a few times. You'll notice that the **Beta** menu item now appears. This is because the *Beta* feature flag is now enabled by the time window filter.
72+
73+
:::image type="content" source="./media/quickstarts/gin-app-feature-flag-after.png" alt-text="Screenshot of Gin web app with Beta menu.":::
74+
75+
## Next steps
76+
77+
To learn more about the feature filters, continue to the following documents.
78+
79+
> [!div class="nextstepaction"]
80+
> [Enable conditional features with feature filters](./howto-feature-filters.md)
81+
82+
> [!div class="nextstepaction"]
83+
> [Roll out features to targeted audience](./howto-targetingfilter.md)
84+
85+
For the full feature rundown of the Go feature management library, continue to the following document.
86+
87+
> [!div class="nextstepaction"]
88+
> [Go Feature Management reference](https://pkg.go.dev/github.com/microsoft/Featuremanagement-Go/featuremanagement)

articles/azure-app-configuration/howto-timewindow-filter.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ In this article, you learn how to add and configure a time window filter for you
5858

5959
- [ASP.NET Core](./howto-timewindow-filter-aspnet-core.md)
6060
- [JavaScript](./howto-timewindow-filter-javascript.md)
61+
- [Go Gin](./howto-timewindow-filter-go.md)
6162
- [Python](./howto-time-window-filter-python.md)
6263

6364
## Next steps

articles/backup/backup-client-automation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Use PowerShell to back up Windows Server to Azure
33
description: In this article, learn how to use PowerShell to set up Azure Backup on Windows Server or a Windows client, and manage backup and recovery.
44
ms.topic: how-to
5-
ms.date: 02/28/2025
5+
ms.date: 07/29/2025
66
ms.service: azure-backup
77
ms.custom: devx-track-azurepowershell, no-azure-ad-ps-ref, engagement-fy24
88
author: AbhishekMallick-MS
@@ -33,7 +33,7 @@ The following steps lead you through creating a Recovery Services vault. A Recov
3333
2. The Recovery Services vault is an Azure Resource Manager resource, so you need to place it within a Resource Group. You can use an existing resource group, or create a new one. When creating a new resource group, specify the name and location for the resource group.
3434
3535
```powershell
36-
New-AzResourceGroup -Name "test-rg" Location "WestUS"
36+
New-AzResourceGroup -Name "test-rg" -Location "WestUS"
3737
```
3838
3939
3. Use the **New-AzRecoveryServicesVault** cmdlet to create the new vault. Be sure to specify the same location for the vault as was used for the resource group.

articles/cost-management-billing/manage/direct-ea-administration.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ ms.reviewer: prsaini
1212

1313
# EA Billing administration on the Azure portal
1414

15-
> [!NOTE]
16-
> On February 15, 2024, the [EA portal](https://ea.azure.com) retired. It's now read only. All EA customers and partners use Cost Management + Billing in the Azure portal to manage their enrollments.
17-
1815
This article explains the common tasks that an Enterprise Agreement (EA) administrator accomplishes in the [Azure portal](https://portal.azure.com/#blade/Microsoft_Azure_GTM/ModernBillingMenuBlade/AllBillingScopes). A direct enterprise agreement is signed between Microsoft and an enterprise agreement customer. Conversely, an indirect EA is one where a customer signs an agreement with a Microsoft partner. This article is applicable for both direct and indirect EA customers.
1916

2017
## Manage your enrollment
@@ -661,7 +658,7 @@ Before the Azure EA enrollment reaches the Enterprise Agreement end date, the en
661658
- Confirm disablement of all services associated with the enrollment.
662659

663660
**Expired**<br>
664-
The Azure EA customer is opted out of the extended term, and the Azure EA enrollment reached the Enterprise Agreement end date. The enrollment expires, and all associated services are disabled.
661+
The EA enrollment expires when it reaches the enterprise agreement end date and is opted out of the extended term. Sign a new enrollment contract as soon as possible. Although your service isn't disabled immediately, there's a risk of it getting disabled. Additionally, if there are no active subscriptions, billing and usage data generated after the enrollment end date will not be visible. However, if any subscriptions remain active under the expired enrollment, billing and usage data will continue to be generated.
665662

666663
**Transferred**<br>
667664
Enrollments where all associated accounts and services were transferred to a new enrollment appear with a transferred status.

0 commit comments

Comments
 (0)