diff --git a/provider/cmd/pulumi-resource-azure-native/schema.json b/provider/cmd/pulumi-resource-azure-native/schema.json index ce1039e72c17..71d6ec5c544d 100644 --- a/provider/cmd/pulumi-resource-azure-native/schema.json +++ b/provider/cmd/pulumi-resource-azure-native/schema.json @@ -1212,6 +1212,10 @@ "type": "string", "description": "The Tenant ID which should be used." }, + "useDefaultAzureCredential": { + "type": "boolean", + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview)." + }, "useMsi": { "type": "boolean", "description": "Allow Managed Service Identity be used for Authentication." @@ -597907,6 +597911,10 @@ "type": "string", "description": "The Tenant ID which should be used." }, + "useDefaultAzureCredential": { + "type": "boolean", + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview)." + }, "useMsi": { "type": "boolean", "description": "Allow Managed Service Identity to be used for Authentication." @@ -780942,7 +780950,7 @@ ] }, "azure-native:machinelearningservices:LabelingJob": { - "description": "Azure Resource Manager resource envelope.\n\nUses Azure REST API version 2024-01-01-preview. In version 2.x of the Azure Native provider, it used API version 2023-04-01-preview.\n\nOther available API versions: 2020-09-01-preview, 2021-03-01-preview, 2022-06-01-preview, 2022-10-01-preview, 2022-12-01-preview, 2023-02-01-preview, 2023-04-01-preview, 2023-06-01-preview, 2023-08-01-preview. These can be accessed by generating a local SDK package using the CLI command `pulumi package add azure-native machinelearningservices [ApiVersion]`. See the [version guide](../../../version-guide/#accessing-any-api-version-via-local-packages) for details.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### CreateOrUpdate Labeling Job.\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing AzureNative = Pulumi.AzureNative;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var labelingJob = new AzureNative.MachineLearningServices.LabelingJob(\"labelingJob\", new()\n {\n Id = \"testLabelingJob\",\n LabelingJobProperties = new AzureNative.MachineLearningServices.Inputs.LabelingJobArgs\n {\n Description = \"string\",\n JobInstructions = new AzureNative.MachineLearningServices.Inputs.LabelingJobInstructionsArgs\n {\n Uri = \"link/to/instructions\",\n },\n JobType = \"Labeling\",\n LabelCategories = \n {\n { \"myCategory1\", new AzureNative.MachineLearningServices.Inputs.LabelCategoryArgs\n {\n Classes = \n {\n { \"myLabelClass1\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass1\",\n Subclasses = null,\n } },\n { \"myLabelClass2\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass2\",\n Subclasses = null,\n } },\n },\n DisplayName = \"myCategory1Title\",\n MultiSelect = AzureNative.MachineLearningServices.MultiSelect.Disabled,\n } },\n { \"myCategory2\", new AzureNative.MachineLearningServices.Inputs.LabelCategoryArgs\n {\n Classes = \n {\n { \"myLabelClass1\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass1\",\n Subclasses = null,\n } },\n { \"myLabelClass2\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass2\",\n Subclasses = null,\n } },\n },\n DisplayName = \"myCategory2Title\",\n MultiSelect = AzureNative.MachineLearningServices.MultiSelect.Disabled,\n } },\n },\n LabelingJobMediaProperties = new AzureNative.MachineLearningServices.Inputs.LabelingJobImagePropertiesArgs\n {\n MediaType = \"Image\",\n },\n MlAssistConfiguration = new AzureNative.MachineLearningServices.Inputs.MLAssistConfigurationEnabledArgs\n {\n InferencingComputeBinding = \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n MlAssist = \"Enabled\",\n TrainingComputeBinding = \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n Properties = \n {\n { \"additionalProp1\", \"string\" },\n { \"additionalProp2\", \"string\" },\n { \"additionalProp3\", \"string\" },\n },\n Tags = \n {\n { \"additionalProp1\", \"string\" },\n { \"additionalProp2\", \"string\" },\n { \"additionalProp3\", \"string\" },\n },\n },\n ResourceGroupName = \"workspace-1234\",\n WorkspaceName = \"testworkspace\",\n });\n\n});\n\n\n```\n\n```go\npackage main\n\nimport (\n\tmachinelearningservices \"github.com/pulumi/pulumi-azure-native-sdk/machinelearningservices/v3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearningservices.NewLabelingJob(ctx, \"labelingJob\", \u0026machinelearningservices.LabelingJobArgs{\n\t\t\tId: pulumi.String(\"testLabelingJob\"),\n\t\t\tLabelingJobProperties: \u0026machinelearningservices.LabelingJobTypeArgs{\n\t\t\t\tDescription: pulumi.String(\"string\"),\n\t\t\t\tJobInstructions: \u0026machinelearningservices.LabelingJobInstructionsArgs{\n\t\t\t\t\tUri: pulumi.String(\"link/to/instructions\"),\n\t\t\t\t},\n\t\t\t\tJobType: pulumi.String(\"Labeling\"),\n\t\t\t\tLabelCategories: machinelearningservices.LabelCategoryMap{\n\t\t\t\t\t\"myCategory1\": \u0026machinelearningservices.LabelCategoryArgs{\n\t\t\t\t\t\tClasses: machinelearningservices.LabelClassMap{\n\t\t\t\t\t\t\t\"myLabelClass1\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass1\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"myLabelClass2\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass2\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDisplayName: pulumi.String(\"myCategory1Title\"),\n\t\t\t\t\t\tMultiSelect: pulumi.String(machinelearningservices.MultiSelectDisabled),\n\t\t\t\t\t},\n\t\t\t\t\t\"myCategory2\": \u0026machinelearningservices.LabelCategoryArgs{\n\t\t\t\t\t\tClasses: machinelearningservices.LabelClassMap{\n\t\t\t\t\t\t\t\"myLabelClass1\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass1\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"myLabelClass2\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass2\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDisplayName: pulumi.String(\"myCategory2Title\"),\n\t\t\t\t\t\tMultiSelect: pulumi.String(machinelearningservices.MultiSelectDisabled),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLabelingJobMediaProperties: machinelearningservices.LabelingJobImageProperties{\n\t\t\t\t\tMediaType: \"Image\",\n\t\t\t\t},\n\t\t\t\tMlAssistConfiguration: machinelearningservices.MLAssistConfigurationEnabled{\n\t\t\t\t\tInferencingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n\t\t\t\t\tMlAssist: \"Enabled\",\n\t\t\t\t\tTrainingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n\t\t\t\t},\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"additionalProp1\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp2\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp3\": pulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\t\"additionalProp1\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp2\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp3\": pulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tResourceGroupName: pulumi.String(\"workspace-1234\"),\n\t\t\tWorkspaceName: pulumi.String(\"testworkspace\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n\n```\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.azurenative.machinelearningservices.LabelingJob;\nimport com.pulumi.azurenative.machinelearningservices.inputs.LabelingJobInstructionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var labelingJob = new LabelingJob(\"labelingJob\", LabelingJobArgs.builder()\n .id(\"testLabelingJob\")\n .labelingJobProperties(LabelingJobArgs.builder()\n .description(\"string\")\n .jobInstructions(LabelingJobInstructionsArgs.builder()\n .uri(\"link/to/instructions\")\n .build())\n .jobType(\"Labeling\")\n .labelCategories(Map.ofEntries(\n Map.entry(\"myCategory1\", LabelCategoryArgs.builder()\n .classes(Map.ofEntries(\n Map.entry(\"myLabelClass1\", Map.ofEntries(\n Map.entry(\"displayName\", \"myLabelClass1\"),\n Map.entry(\"subclasses\", Map.ofEntries(\n ))\n )),\n Map.entry(\"myLabelClass2\", Map.ofEntries(\n Map.entry(\"displayName\", \"myLabelClass2\"),\n Map.entry(\"subclasses\", Map.ofEntries(\n ))\n ))\n ))\n .displayName(\"myCategory1Title\")\n .multiSelect(\"Disabled\")\n .build()),\n Map.entry(\"myCategory2\", LabelCategoryArgs.builder()\n .classes(Map.ofEntries(\n Map.entry(\"myLabelClass1\", LabelClassArgs.builder()\n .displayName(\"myLabelClass1\")\n .subclasses(Map.ofEntries(\n ))\n .build()),\n Map.entry(\"myLabelClass2\", LabelClassArgs.builder()\n .displayName(\"myLabelClass2\")\n .subclasses(Map.ofEntries(\n ))\n .build())\n ))\n .displayName(\"myCategory2Title\")\n .multiSelect(\"Disabled\")\n .build())\n ))\n .labelingJobMediaProperties(LabelingJobImagePropertiesArgs.builder()\n .mediaType(\"Image\")\n .build())\n .mlAssistConfiguration(MLAssistConfigurationEnabledArgs.builder()\n .inferencingComputeBinding(\"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\")\n .mlAssist(\"Enabled\")\n .trainingComputeBinding(\"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\")\n .build())\n .properties(Map.ofEntries(\n Map.entry(\"additionalProp1\", \"string\"),\n Map.entry(\"additionalProp2\", \"string\"),\n Map.entry(\"additionalProp3\", \"string\")\n ))\n .tags(Map.ofEntries(\n Map.entry(\"additionalProp1\", \"string\"),\n Map.entry(\"additionalProp2\", \"string\"),\n Map.entry(\"additionalProp3\", \"string\")\n ))\n .build())\n .resourceGroupName(\"workspace-1234\")\n .workspaceName(\"testworkspace\")\n .build());\n\n }\n}\n\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as azure_native from \"@pulumi/azure-native\";\n\nconst labelingJob = new azure_native.machinelearningservices.LabelingJob(\"labelingJob\", {\n id: \"testLabelingJob\",\n labelingJobProperties: {\n description: \"string\",\n jobInstructions: {\n uri: \"link/to/instructions\",\n },\n jobType: \"Labeling\",\n labelCategories: {\n myCategory1: {\n classes: {\n myLabelClass1: {\n displayName: \"myLabelClass1\",\n subclasses: {},\n },\n myLabelClass2: {\n displayName: \"myLabelClass2\",\n subclasses: {},\n },\n },\n displayName: \"myCategory1Title\",\n multiSelect: azure_native.machinelearningservices.MultiSelect.Disabled,\n },\n myCategory2: {\n classes: {\n myLabelClass1: {\n displayName: \"myLabelClass1\",\n subclasses: {},\n },\n myLabelClass2: {\n displayName: \"myLabelClass2\",\n subclasses: {},\n },\n },\n displayName: \"myCategory2Title\",\n multiSelect: azure_native.machinelearningservices.MultiSelect.Disabled,\n },\n },\n labelingJobMediaProperties: {\n mediaType: \"Image\",\n },\n mlAssistConfiguration: {\n inferencingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n mlAssist: \"Enabled\",\n trainingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n properties: {\n additionalProp1: \"string\",\n additionalProp2: \"string\",\n additionalProp3: \"string\",\n },\n tags: {\n additionalProp1: \"string\",\n additionalProp2: \"string\",\n additionalProp3: \"string\",\n },\n },\n resourceGroupName: \"workspace-1234\",\n workspaceName: \"testworkspace\",\n});\n\n```\n\n```python\nimport pulumi\nimport pulumi_azure_native as azure_native\n\nlabeling_job = azure_native.machinelearningservices.LabelingJob(\"labelingJob\",\n id=\"testLabelingJob\",\n labeling_job_properties={\n \"description\": \"string\",\n \"job_instructions\": {\n \"uri\": \"link/to/instructions\",\n },\n \"job_type\": \"Labeling\",\n \"label_categories\": {\n \"myCategory1\": {\n \"classes\": {\n \"myLabelClass1\": {\n \"display_name\": \"myLabelClass1\",\n \"subclasses\": {},\n },\n \"myLabelClass2\": {\n \"display_name\": \"myLabelClass2\",\n \"subclasses\": {},\n },\n },\n \"display_name\": \"myCategory1Title\",\n \"multi_select\": azure_native.machinelearningservices.MultiSelect.DISABLED,\n },\n \"myCategory2\": {\n \"classes\": {\n \"myLabelClass1\": {\n \"display_name\": \"myLabelClass1\",\n \"subclasses\": {},\n },\n \"myLabelClass2\": {\n \"display_name\": \"myLabelClass2\",\n \"subclasses\": {},\n },\n },\n \"display_name\": \"myCategory2Title\",\n \"multi_select\": azure_native.machinelearningservices.MultiSelect.DISABLED,\n },\n },\n \"labeling_job_media_properties\": {\n \"media_type\": \"Image\",\n },\n \"ml_assist_configuration\": {\n \"inferencing_compute_binding\": \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n \"ml_assist\": \"Enabled\",\n \"training_compute_binding\": \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n \"properties\": {\n \"additionalProp1\": \"string\",\n \"additionalProp2\": \"string\",\n \"additionalProp3\": \"string\",\n },\n \"tags\": {\n \"additionalProp1\": \"string\",\n \"additionalProp2\": \"string\",\n \"additionalProp3\": \"string\",\n },\n },\n resource_group_name=\"workspace-1234\",\n workspace_name=\"testworkspace\")\n\n```\n\n```yaml\nresources:\n labelingJob:\n type: azure-native:machinelearningservices:LabelingJob\n properties:\n id: testLabelingJob\n labelingJobProperties:\n description: string\n jobInstructions:\n uri: link/to/instructions\n jobType: Labeling\n labelCategories:\n myCategory1:\n classes:\n myLabelClass1:\n displayName: myLabelClass1\n subclasses: {}\n myLabelClass2:\n displayName: myLabelClass2\n subclasses: {}\n displayName: myCategory1Title\n multiSelect: Disabled\n myCategory2:\n classes:\n myLabelClass1:\n displayName: myLabelClass1\n subclasses: {}\n myLabelClass2:\n displayName: myLabelClass2\n subclasses: {}\n displayName: myCategory2Title\n multiSelect: Disabled\n labelingJobMediaProperties:\n mediaType: Image\n mlAssistConfiguration:\n inferencingComputeBinding: /subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\n mlAssist: Enabled\n trainingComputeBinding: /subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\n properties:\n additionalProp1: string\n additionalProp2: string\n additionalProp3: string\n tags:\n additionalProp1: string\n additionalProp2: string\n additionalProp3: string\n resourceGroupName: workspace-1234\n workspaceName: testworkspace\n\n```\n\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAn existing resource can be imported using its type token, name, and identifier, e.g.\n\n```sh\n$ pulumi import azure-native:machinelearningservices:LabelingJob testLabelingJob /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.MachineLearningServices/workspaces/{workspaceName}/labelingJobs/{id} \n```\n", + "description": "Azure Resource Manager resource envelope.\n\nUses Azure REST API version 2024-01-01-preview. In version 2.x of the Azure Native provider, it used API version 2023-04-01-preview.\n\nOther available API versions: 2020-09-01-preview, 2021-03-01-preview, 2022-06-01-preview, 2022-10-01-preview, 2022-12-01-preview, 2023-02-01-preview, 2023-04-01-preview, 2023-06-01-preview, 2023-08-01-preview. These can be accessed by generating a local SDK package using the CLI command `pulumi package add azure-native machinelearningservices [ApiVersion]`. See the [version guide](../../../version-guide/#accessing-any-api-version-via-local-packages) for details.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### CreateOrUpdate Labeling Job.\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing AzureNative = Pulumi.AzureNative;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var labelingJob = new AzureNative.MachineLearningServices.LabelingJob(\"labelingJob\", new()\n {\n Id = \"testLabelingJob\",\n LabelingJobProperties = new AzureNative.MachineLearningServices.Inputs.LabelingJobArgs\n {\n Description = \"string\",\n JobInstructions = new AzureNative.MachineLearningServices.Inputs.LabelingJobInstructionsArgs\n {\n Uri = \"link/to/instructions\",\n },\n JobType = \"Labeling\",\n LabelCategories = \n {\n { \"myCategory1\", new AzureNative.MachineLearningServices.Inputs.LabelCategoryArgs\n {\n Classes = \n {\n { \"myLabelClass1\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass1\",\n Subclasses = null,\n } },\n { \"myLabelClass2\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass2\",\n Subclasses = null,\n } },\n },\n DisplayName = \"myCategory1Title\",\n MultiSelect = AzureNative.MachineLearningServices.MultiSelect.Disabled,\n } },\n { \"myCategory2\", new AzureNative.MachineLearningServices.Inputs.LabelCategoryArgs\n {\n Classes = \n {\n { \"myLabelClass1\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass1\",\n Subclasses = null,\n } },\n { \"myLabelClass2\", new AzureNative.MachineLearningServices.Inputs.LabelClassArgs\n {\n DisplayName = \"myLabelClass2\",\n Subclasses = null,\n } },\n },\n DisplayName = \"myCategory2Title\",\n MultiSelect = AzureNative.MachineLearningServices.MultiSelect.Disabled,\n } },\n },\n LabelingJobMediaProperties = new AzureNative.MachineLearningServices.Inputs.LabelingJobImagePropertiesArgs\n {\n MediaType = \"Image\",\n },\n MlAssistConfiguration = new AzureNative.MachineLearningServices.Inputs.MLAssistConfigurationEnabledArgs\n {\n InferencingComputeBinding = \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n MlAssist = \"Enabled\",\n TrainingComputeBinding = \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n Properties = \n {\n { \"additionalProp1\", \"string\" },\n { \"additionalProp2\", \"string\" },\n { \"additionalProp3\", \"string\" },\n },\n Tags = \n {\n { \"additionalProp1\", \"string\" },\n { \"additionalProp2\", \"string\" },\n { \"additionalProp3\", \"string\" },\n },\n },\n ResourceGroupName = \"workspace-1234\",\n WorkspaceName = \"testworkspace\",\n });\n\n});\n\n\n```\n\n```go\npackage main\n\nimport (\n\tmachinelearningservices \"github.com/pulumi/pulumi-azure-native-sdk/machinelearningservices/v3\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearningservices.NewLabelingJob(ctx, \"labelingJob\", \u0026machinelearningservices.LabelingJobArgs{\n\t\t\tId: pulumi.String(\"testLabelingJob\"),\n\t\t\tLabelingJobProperties: \u0026machinelearningservices.LabelingJobTypeArgs{\n\t\t\t\tDescription: pulumi.String(\"string\"),\n\t\t\t\tJobInstructions: \u0026machinelearningservices.LabelingJobInstructionsArgs{\n\t\t\t\t\tUri: pulumi.String(\"link/to/instructions\"),\n\t\t\t\t},\n\t\t\t\tJobType: pulumi.String(\"Labeling\"),\n\t\t\t\tLabelCategories: machinelearningservices.LabelCategoryMap{\n\t\t\t\t\t\"myCategory1\": \u0026machinelearningservices.LabelCategoryArgs{\n\t\t\t\t\t\tClasses: machinelearningservices.LabelClassMap{\n\t\t\t\t\t\t\t\"myLabelClass1\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass1\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"myLabelClass2\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass2\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDisplayName: pulumi.String(\"myCategory1Title\"),\n\t\t\t\t\t\tMultiSelect: pulumi.String(machinelearningservices.MultiSelectDisabled),\n\t\t\t\t\t},\n\t\t\t\t\t\"myCategory2\": \u0026machinelearningservices.LabelCategoryArgs{\n\t\t\t\t\t\tClasses: machinelearningservices.LabelClassMap{\n\t\t\t\t\t\t\t\"myLabelClass1\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass1\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"myLabelClass2\": \u0026machinelearningservices.LabelClassArgs{\n\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"myLabelClass2\"),\n\t\t\t\t\t\t\t\tSubclasses: machinelearningservices.LabelClassMap{},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDisplayName: pulumi.String(\"myCategory2Title\"),\n\t\t\t\t\t\tMultiSelect: pulumi.String(machinelearningservices.MultiSelectDisabled),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLabelingJobMediaProperties: machinelearningservices.LabelingJobImageProperties{\n\t\t\t\t\tMediaType: \"Image\",\n\t\t\t\t},\n\t\t\t\tMlAssistConfiguration: machinelearningservices.MLAssistConfigurationEnabled{\n\t\t\t\t\tInferencingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n\t\t\t\t\tMlAssist: \"Enabled\",\n\t\t\t\t\tTrainingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n\t\t\t\t},\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"additionalProp1\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp2\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp3\": pulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\t\"additionalProp1\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp2\": pulumi.String(\"string\"),\n\t\t\t\t\t\"additionalProp3\": pulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tResourceGroupName: pulumi.String(\"workspace-1234\"),\n\t\t\tWorkspaceName: pulumi.String(\"testworkspace\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n\n```\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.azurenative.machinelearningservices.LabelingJob;\nimport com.pulumi.azurenative.machinelearningservices.inputs.LabelingJobInstructionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var labelingJob = new LabelingJob(\"labelingJob\", LabelingJobArgs.builder()\n .id(\"testLabelingJob\")\n .labelingJobProperties(LabelingJobArgs.builder()\n .description(\"string\")\n .jobInstructions(LabelingJobInstructionsArgs.builder()\n .uri(\"link/to/instructions\")\n .build())\n .jobType(\"Labeling\")\n .labelCategories(Map.ofEntries(\n Map.entry(\"myCategory1\", LabelCategoryArgs.builder()\n .classes(Map.ofEntries(\n Map.entry(\"myLabelClass1\", LabelClassArgs.builder()\n .displayName(\"myLabelClass1\")\n .subclasses(Map.ofEntries(\n ))\n .build()),\n Map.entry(\"myLabelClass2\", LabelClassArgs.builder()\n .displayName(\"myLabelClass2\")\n .subclasses(Map.ofEntries(\n ))\n .build())\n ))\n .displayName(\"myCategory1Title\")\n .multiSelect(\"Disabled\")\n .build()),\n Map.entry(\"myCategory2\", LabelCategoryArgs.builder()\n .classes(Map.ofEntries(\n Map.entry(\"myLabelClass1\", LabelClassArgs.builder()\n .displayName(\"myLabelClass1\")\n .subclasses(Map.ofEntries(\n ))\n .build()),\n Map.entry(\"myLabelClass2\", LabelClassArgs.builder()\n .displayName(\"myLabelClass2\")\n .subclasses(Map.ofEntries(\n ))\n .build())\n ))\n .displayName(\"myCategory2Title\")\n .multiSelect(\"Disabled\")\n .build())\n ))\n .labelingJobMediaProperties(LabelingJobImagePropertiesArgs.builder()\n .mediaType(\"Image\")\n .build())\n .mlAssistConfiguration(MLAssistConfigurationEnabledArgs.builder()\n .inferencingComputeBinding(\"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\")\n .mlAssist(\"Enabled\")\n .trainingComputeBinding(\"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\")\n .build())\n .properties(Map.ofEntries(\n Map.entry(\"additionalProp1\", \"string\"),\n Map.entry(\"additionalProp2\", \"string\"),\n Map.entry(\"additionalProp3\", \"string\")\n ))\n .tags(Map.ofEntries(\n Map.entry(\"additionalProp1\", \"string\"),\n Map.entry(\"additionalProp2\", \"string\"),\n Map.entry(\"additionalProp3\", \"string\")\n ))\n .build())\n .resourceGroupName(\"workspace-1234\")\n .workspaceName(\"testworkspace\")\n .build());\n\n }\n}\n\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as azure_native from \"@pulumi/azure-native\";\n\nconst labelingJob = new azure_native.machinelearningservices.LabelingJob(\"labelingJob\", {\n id: \"testLabelingJob\",\n labelingJobProperties: {\n description: \"string\",\n jobInstructions: {\n uri: \"link/to/instructions\",\n },\n jobType: \"Labeling\",\n labelCategories: {\n myCategory1: {\n classes: {\n myLabelClass1: {\n displayName: \"myLabelClass1\",\n subclasses: {},\n },\n myLabelClass2: {\n displayName: \"myLabelClass2\",\n subclasses: {},\n },\n },\n displayName: \"myCategory1Title\",\n multiSelect: azure_native.machinelearningservices.MultiSelect.Disabled,\n },\n myCategory2: {\n classes: {\n myLabelClass1: {\n displayName: \"myLabelClass1\",\n subclasses: {},\n },\n myLabelClass2: {\n displayName: \"myLabelClass2\",\n subclasses: {},\n },\n },\n displayName: \"myCategory2Title\",\n multiSelect: azure_native.machinelearningservices.MultiSelect.Disabled,\n },\n },\n labelingJobMediaProperties: {\n mediaType: \"Image\",\n },\n mlAssistConfiguration: {\n inferencingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n mlAssist: \"Enabled\",\n trainingComputeBinding: \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n properties: {\n additionalProp1: \"string\",\n additionalProp2: \"string\",\n additionalProp3: \"string\",\n },\n tags: {\n additionalProp1: \"string\",\n additionalProp2: \"string\",\n additionalProp3: \"string\",\n },\n },\n resourceGroupName: \"workspace-1234\",\n workspaceName: \"testworkspace\",\n});\n\n```\n\n```python\nimport pulumi\nimport pulumi_azure_native as azure_native\n\nlabeling_job = azure_native.machinelearningservices.LabelingJob(\"labelingJob\",\n id=\"testLabelingJob\",\n labeling_job_properties={\n \"description\": \"string\",\n \"job_instructions\": {\n \"uri\": \"link/to/instructions\",\n },\n \"job_type\": \"Labeling\",\n \"label_categories\": {\n \"myCategory1\": {\n \"classes\": {\n \"myLabelClass1\": {\n \"display_name\": \"myLabelClass1\",\n \"subclasses\": {},\n },\n \"myLabelClass2\": {\n \"display_name\": \"myLabelClass2\",\n \"subclasses\": {},\n },\n },\n \"display_name\": \"myCategory1Title\",\n \"multi_select\": azure_native.machinelearningservices.MultiSelect.DISABLED,\n },\n \"myCategory2\": {\n \"classes\": {\n \"myLabelClass1\": {\n \"display_name\": \"myLabelClass1\",\n \"subclasses\": {},\n },\n \"myLabelClass2\": {\n \"display_name\": \"myLabelClass2\",\n \"subclasses\": {},\n },\n },\n \"display_name\": \"myCategory2Title\",\n \"multi_select\": azure_native.machinelearningservices.MultiSelect.DISABLED,\n },\n },\n \"labeling_job_media_properties\": {\n \"media_type\": \"Image\",\n },\n \"ml_assist_configuration\": {\n \"inferencing_compute_binding\": \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\",\n \"ml_assist\": \"Enabled\",\n \"training_compute_binding\": \"/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\",\n },\n \"properties\": {\n \"additionalProp1\": \"string\",\n \"additionalProp2\": \"string\",\n \"additionalProp3\": \"string\",\n },\n \"tags\": {\n \"additionalProp1\": \"string\",\n \"additionalProp2\": \"string\",\n \"additionalProp3\": \"string\",\n },\n },\n resource_group_name=\"workspace-1234\",\n workspace_name=\"testworkspace\")\n\n```\n\n```yaml\nresources:\n labelingJob:\n type: azure-native:machinelearningservices:LabelingJob\n properties:\n id: testLabelingJob\n labelingJobProperties:\n description: string\n jobInstructions:\n uri: link/to/instructions\n jobType: Labeling\n labelCategories:\n myCategory1:\n classes:\n myLabelClass1:\n displayName: myLabelClass1\n subclasses: {}\n myLabelClass2:\n displayName: myLabelClass2\n subclasses: {}\n displayName: myCategory1Title\n multiSelect: Disabled\n myCategory2:\n classes:\n myLabelClass1:\n displayName: myLabelClass1\n subclasses: {}\n myLabelClass2:\n displayName: myLabelClass2\n subclasses: {}\n displayName: myCategory2Title\n multiSelect: Disabled\n labelingJobMediaProperties:\n mediaType: Image\n mlAssistConfiguration:\n inferencingComputeBinding: /subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/myscoringcompute\n mlAssist: Enabled\n trainingComputeBinding: /subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/resourceGroup-1234/providers/Microsoft.MachineLearningServices/workspaces/testworkspace/computes/mytrainingompute\n properties:\n additionalProp1: string\n additionalProp2: string\n additionalProp3: string\n tags:\n additionalProp1: string\n additionalProp2: string\n additionalProp3: string\n resourceGroupName: workspace-1234\n workspaceName: testworkspace\n\n```\n\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAn existing resource can be imported using its type token, name, and identifier, e.g.\n\n```sh\n$ pulumi import azure-native:machinelearningservices:LabelingJob testLabelingJob /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.MachineLearningServices/workspaces/{workspaceName}/labelingJobs/{id} \n```\n", "properties": { "azureApiVersion": { "type": "string", diff --git a/provider/go.mod b/provider/go.mod index a10e8ab2545b..d95c6b20205a 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -6,8 +6,8 @@ toolchain go1.24.1 require ( github.com/Azure/azure-sdk-for-go v68.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.2 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v3 v3.0.0-beta.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/recoveryservices/armrecoveryservicesbackup/v4 v4.1.0 @@ -61,7 +61,7 @@ require ( cloud.google.com/go/longrunning v0.5.5 // indirect cloud.google.com/go/storage v1.39.1 // indirect dario.cat/mergo v1.0.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.1 // indirect @@ -102,7 +102,7 @@ require ( github.com/go-jose/go-jose/v3 v3.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/wire v0.6.0 // indirect @@ -241,15 +241,15 @@ require ( github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/crypto v0.39.0 // indirect + golang.org/x/crypto v0.40.0 // indirect golang.org/x/mod v0.25.0 // indirect - golang.org/x/net v0.40.0 // indirect + golang.org/x/net v0.42.0 // indirect golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/term v0.32.0 // indirect - golang.org/x/text v0.26.0 // indirect - golang.org/x/tools v0.33.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.34.0 // indirect + golang.org/x/term v0.33.0 // indirect + golang.org/x/text v0.27.0 // indirect + golang.org/x/tools v0.34.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 lukechampine.com/frand v1.5.1 // indirect diff --git a/provider/go.sum b/provider/go.sum index 1b126eb13706..1123aa0cf211 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -58,12 +58,18 @@ github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1 h1:Wc1ml6QlJs2BHQ/9Bqu1jiyggbsSjramq2oUmp5WeIo= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.2 h1:Hr5FTipp7SL07o2FvoVOX9HRiRH3CR3Mj8pxqCcdD5A= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.2/go.mod h1:QyVsSSN64v5TGltphKLQ2sQxe4OBQg0J1eKRcVBnfgE= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 h1:MhRfI58HblXzCtWEZCO0feHs8LweePB3s90r7WaR1KU= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0/go.mod h1:okZ+ZURbArNdlJ+ptXoyHNuOETzOl1Oww19rm8I2WLA= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 h1:Bg8m3nq/X1DeePkAbCfb6ml6F3F0IunEhE8TMh+lY48= github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= @@ -329,6 +335,8 @@ github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQg github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= @@ -760,6 +768,8 @@ golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1m golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -843,6 +853,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -871,6 +883,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -929,6 +943,8 @@ golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -938,6 +954,8 @@ golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= +golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -952,6 +970,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= +golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1013,6 +1033,8 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58 golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/provider/pkg/gen/__snapshots__/gen_aliases_test_v2.snap b/provider/pkg/gen/__snapshots__/gen_aliases_test_v2.snap index c5dc961cacb2..4683ad7f8d17 100755 --- a/provider/pkg/gen/__snapshots__/gen_aliases_test_v2.snap +++ b/provider/pkg/gen/__snapshots__/gen_aliases_test_v2.snap @@ -77,6 +77,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity be used for Authentication.", "type": "boolean" @@ -433,6 +437,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity to be used for Authentication.", "type": "boolean" diff --git a/provider/pkg/gen/__snapshots__/gen_aliases_test_v3.snap b/provider/pkg/gen/__snapshots__/gen_aliases_test_v3.snap index 080f71952911..b78cde6eed83 100755 --- a/provider/pkg/gen/__snapshots__/gen_aliases_test_v3.snap +++ b/provider/pkg/gen/__snapshots__/gen_aliases_test_v3.snap @@ -77,6 +77,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity be used for Authentication.", "type": "boolean" @@ -433,6 +437,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity to be used for Authentication.", "type": "boolean" diff --git a/provider/pkg/gen/__snapshots__/gen_vnet_test.snap b/provider/pkg/gen/__snapshots__/gen_vnet_test.snap index 5d8138f0602e..747c17e02a88 100755 --- a/provider/pkg/gen/__snapshots__/gen_vnet_test.snap +++ b/provider/pkg/gen/__snapshots__/gen_vnet_test.snap @@ -77,6 +77,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity be used for Authentication.", "type": "boolean" @@ -11398,6 +11402,10 @@ "description": "The Tenant ID which should be used.", "type": "string" }, + "useDefaultAzureCredential": { + "description": "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + "type": "boolean" + }, "useMsi": { "description": "Allow Managed Service Identity to be used for Authentication.", "type": "boolean" diff --git a/provider/pkg/gen/schema.go b/provider/pkg/gen/schema.go index aa01ba1300cc..367ea2a18bc8 100644 --- a/provider/pkg/gen/schema.go +++ b/provider/pkg/gen/schema.go @@ -161,6 +161,11 @@ func PulumiSchema(rootDir string, modules openapi.AzureModules, versioning Versi Description: "The URL to initiate the OIDC token exchange. ", }, + "useDefaultAzureCredential": { + TypeSpec: pschema.TypeSpec{Type: "boolean"}, + Description: "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + }, + // Managed Tracking GUID for User-Agent. "partnerId": { TypeSpec: pschema.TypeSpec{Type: "string"}, @@ -248,6 +253,11 @@ func PulumiSchema(rootDir string, modules openapi.AzureModules, versioning Versi Description: "The URL to initiate the `oidcRequestToken` OIDC token exchange.", }, + "useDefaultAzureCredential": { + TypeSpec: pschema.TypeSpec{Type: "boolean"}, + Description: "Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview).", + }, + // Managed Tracking GUID for User-Agent. "partnerId": { TypeSpec: pschema.TypeSpec{Type: "string"}, diff --git a/provider/pkg/provider/auth_azidentity.go b/provider/pkg/provider/auth_azidentity.go index 0bb8193c97b7..85d671c55843 100644 --- a/provider/pkg/provider/auth_azidentity.go +++ b/provider/pkg/provider/auth_azidentity.go @@ -98,15 +98,31 @@ func NewAzCoreIdentity(ctx context.Context, authConf *authConfiguration, baseCli // "github.com/hashicorp/go-azure-helpers/authentication".Builder.Build() in some ways, to minimize changes in provider // behavior when upgrading authentication dependencies from go-azure-helpers to azidentity. Namely: // - The order in which the the different authentication methods are attempted is the same: -// 1. Service Principal with client certificate -// 2. Service Principal with client secret -// 3. OIDC -// 4. Managed Identity -// 5. Azure CLI +// 1. Default Credential +// 2. Service Principal with client certificate +// 3. Service Principal with client secret +// 4. OIDC +// 5. Managed Identity +// 6. Azure CLI // - When a method is configured but instantiating the credential fails, we return an error and do not fall through to // the next method. // - Auxiliary or additional tenants are supported for SP with client secret and CLI authentication, not for others. func newSingleMethodAuthCredential(authConf *authConfiguration, baseClientOpts azcore.ClientOptions) (azcore.TokenCredential, error) { + if authConf.useDefault { + logging.V(9).Infof("[auth] Using default Azure credential") + fmtErrorMessage := "A %s must be configured when authenticating using the Default Azure Credential." + if authConf.subscriptionId == "" { + return nil, fmt.Errorf(fmtErrorMessage, "Subscription ID") + } + options := &azidentity.DefaultAzureCredentialOptions{ + ClientOptions: baseClientOpts, + AdditionallyAllowedTenants: authConf.auxTenants, // usually empty which is fine + } + return azidentity.NewDefaultAzureCredential(options) + } else { + logging.V(11).Infof("Default Azure Credential is not enabled, skipping") + } + if authConf.clientCertPath != "" { logging.V(9).Infof("[auth] Using SP with client certificate credential") fmtErrorMessage := "A %s must be configured when authenticating as a Service Principal using a Client Certificate." @@ -129,7 +145,7 @@ func newSingleMethodAuthCredential(authConf *authConfiguration, baseClientOpts a } return azidentity.NewClientCertificateCredential(authConf.tenantId, authConf.clientId, certs, key, options) } else { - logging.V(9).Infof("SP with client certificate credential is not enabled, skipping") + logging.V(11).Infof("SP with client certificate credential is not enabled, skipping") } if authConf.clientSecret != "" { @@ -150,14 +166,14 @@ func newSingleMethodAuthCredential(authConf *authConfiguration, baseClientOpts a } return azidentity.NewClientSecretCredential(authConf.tenantId, authConf.clientId, authConf.clientSecret, options) } else { - logging.V(9).Infof("SP with client secret credential is not enabled, skipping") + logging.V(11).Infof("SP with client secret credential is not enabled, skipping") } if authConf.useOidc { logging.V(9).Infof("[auth] Using OIDC credential") return newOidcCredential(authConf, baseClientOpts) } else { - logging.V(9).Infof("OIDC credential is not enabled, skipping") + logging.V(11).Infof("OIDC credential is not enabled, skipping") } if authConf.useMsi { @@ -174,13 +190,14 @@ func newSingleMethodAuthCredential(authConf *authConfiguration, baseClientOpts a } return azidentity.NewManagedIdentityCredential(&msiOpts) } else { - logging.V(9).Infof("Managed Identity (MSI) credential is not enabled, skipping") + logging.V(11).Infof("Managed Identity (MSI) credential is not enabled, skipping") } logging.V(9).Infof("[auth] Using Azure CLI credential") options := &azidentity.AzureCLICredentialOptions{ AdditionallyAllowedTenants: authConf.auxTenants, // usually empty which is fine } + // note that the subscription ID is discoverable when using the Azure CLI credential and hence optional. if authConf.subscriptionId != "" { options.Subscription = authConf.subscriptionId } @@ -346,6 +363,11 @@ type authConfiguration struct { // https://github.com/Azure/azure-sdk-for-go/blob/sdk/azidentity/v1.8.0/sdk/azidentity/managed_identity_client.go#L143 useMsi bool + // Enables the use of azcore's DefaultAzureCredential strategy. + // DefaultAzureCredential simplifies authentication while developing applications that deploy to Azure by + // combining credentials used in Azure hosting environments and credentials used in local development. + useDefault bool + // showSubscription invokes `az account show` and is overridable by tests to fake invoking the az CLI. showSubscription azSubscriptionProvider } @@ -365,7 +387,7 @@ func readAuthConfig(getConfig configGetter) (*authConfiguration, error) { } } - return &authConfiguration{ + authConf := &authConfiguration{ clientId: getConfig("clientId", "ARM_CLIENT_ID"), tenantId: getConfig("tenantId", "ARM_TENANT_ID"), auxTenants: auxTenants, @@ -386,8 +408,12 @@ func readAuthConfig(getConfig configGetter) (*authConfiguration, error) { oidcTokenRequestToken: getConfig("oidcRequestToken", "ACTIONS_ID_TOKEN_REQUEST_TOKEN"), oidcTokenRequestUrl: getConfig("oidcRequestUrl", "ACTIONS_ID_TOKEN_REQUEST_URL"), + useDefault: getConfig("useDefaultAzureCredential", "ARM_USE_DEFAULT_AZURE_CREDENTIAL") == "true", + showSubscription: defaultAzSubscriptionProvider, - }, nil + } + + return authConf, nil } // getCloud returns the configured Azure cloud (environment). diff --git a/provider/pkg/provider/auth_azidentity_test.go b/provider/pkg/provider/auth_azidentity_test.go index 61d91c398d51..cb91b0c80dd3 100644 --- a/provider/pkg/provider/auth_azidentity_test.go +++ b/provider/pkg/provider/auth_azidentity_test.go @@ -385,6 +385,16 @@ func TestNewCredential(t *testing.T) { optsVal := reflect.ValueOf(cred).Elem().FieldByName("opts") require.Equal(t, "subscription-id", optsVal.FieldByName("Subscription").String()) }) + + t.Run("Azure Default Credential", func(t *testing.T) { + conf := &authConfiguration{ + useDefault: true, + subscriptionId: "subscription-id", + } + cred, err := newSingleMethodAuthCredential(conf, azcore.ClientOptions{}) + require.NoError(t, err) + require.IsType(t, &azidentity.DefaultAzureCredential{}, cred) + }) } func TestOidcTokenExchangeAssertion(t *testing.T) { diff --git a/provider/pkg/provider/provider.go b/provider/pkg/provider/provider.go index 22ecb53e6338..e4af2e8ec210 100644 --- a/provider/pkg/provider/provider.go +++ b/provider/pkg/provider/provider.go @@ -1749,8 +1749,10 @@ func (k *azureNativeProvider) setLoggingContext(ctx context.Context) { } func (k *azureNativeProvider) getConfig(configName, envName string) string { - if val, ok := k.config[configName]; ok { - return val + if configName != "" { + if val, ok := k.config[configName]; ok { + return val + } } return os.Getenv(envName) diff --git a/provider/pkg/provider/provider_e2e_test.go b/provider/pkg/provider/provider_e2e_test.go index 9eb0a56e567f..902b4e8f371c 100644 --- a/provider/pkg/provider/provider_e2e_test.go +++ b/provider/pkg/provider/provider_e2e_test.go @@ -298,6 +298,32 @@ func TestAzidentity(t *testing.T) { assert.Equal(t, "04b07795-8ddb-461a-bbee-02f9e1bf7b46", clientToken["appid"]) assert.Equal(t, "user", clientToken["idtyp"]) }) + + t.Run("Default Azure Credential", func(t *testing.T) { + t.Setenv("ARM_USE_DEFAULT_AZURE_CREDENTIAL", "true") + + if _, ok := os.LookupEnv("CI"); ok { + // Configure the default credential chain to use variables provided in build-test.yml, per: + // https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#readme-environment-variables + t.Setenv("AZURE_TOKEN_CREDENTIALS", "EnvironmentCredential") + t.Setenv("AZURE_CLIENT_ID", os.Getenv("ARM_CLIENT_ID")) + t.Setenv("AZURE_TENANT_ID", os.Getenv("ARM_TENANT_ID")) + t.Setenv("AZURE_CLIENT_SECRET", os.Getenv("ARM_CLIENT_SECRET")) + + // Ensure that a subscription ID was provided, because ADC doesn't provide one. + require.NotEmpty(t, os.Getenv("ARM_SUBSCRIPTION_ID")) + } + + pt := newPulumiTest(t, "azidentity") + up := pt.Up(t) + clientConfig, clientToken := validate(t, up) + + if _, ok := os.LookupEnv("CI"); ok { + assert.Equal(t, os.Getenv("ARM_CLIENT_ID"), clientConfig["clientId"]) + assert.Equal(t, os.Getenv("ARM_CLIENT_ID"), clientToken["appid"]) + assert.Equal(t, "app", clientToken["idtyp"]) + } + }) } func TestAutorest(t *testing.T) { diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index d97872c24910..291a18c1fcd1 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -202,6 +202,16 @@ public static string? TenantId set => _tenantId.Set(value); } + private static readonly __Value _useDefaultAzureCredential = new __Value(() => __config.GetBoolean("useDefaultAzureCredential")); + /// + /// Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + /// + public static bool? UseDefaultAzureCredential + { + get => _useDefaultAzureCredential.Get(); + set => _useDefaultAzureCredential.Set(value); + } + private static readonly __Value _useMsi = new __Value(() => __config.GetBoolean("useMsi")); /// /// Allow Managed Service Identity be used for Authentication. diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index 2f5186043198..5077b6c292f3 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -174,6 +174,12 @@ public Input? ClientSecret [Input("tenantId")] public Input? TenantId { get; set; } + /// + /// Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + /// + [Input("useDefaultAzureCredential", json: true)] + public Input? UseDefaultAzureCredential { get; set; } + /// /// Allow Managed Service Identity to be used for Authentication. /// diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index e6f4f34d6882..83507a5baa72 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -194,6 +194,17 @@ Object.defineProperty(exports, "tenantId", { enumerable: true, }); +/** + * Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + */ +export declare const useDefaultAzureCredential: boolean | undefined; +Object.defineProperty(exports, "useDefaultAzureCredential", { + get() { + return __config.getObject("useDefaultAzureCredential"); + }, + enumerable: true, +}); + /** * Allow Managed Service Identity be used for Authentication. */ diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index fc11f4684da5..122bd06d083e 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -50,6 +50,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["partnerId"] = args ? args.partnerId : undefined; resourceInputs["subscriptionId"] = args ? args.subscriptionId : undefined; resourceInputs["tenantId"] = args ? args.tenantId : undefined; + resourceInputs["useDefaultAzureCredential"] = pulumi.output(args ? args.useDefaultAzureCredential : undefined).apply(JSON.stringify); resourceInputs["useMsi"] = pulumi.output(args ? args.useMsi : undefined).apply(JSON.stringify); resourceInputs["useOidc"] = pulumi.output(args ? args.useOidc : undefined).apply(JSON.stringify); } @@ -126,6 +127,10 @@ export interface ProviderArgs { * The Tenant ID which should be used. */ tenantId?: pulumi.Input; + /** + * Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + */ + useDefaultAzureCredential?: pulumi.Input; /** * Allow Managed Service Identity to be used for Authentication. */ diff --git a/sdk/python/pulumi_azure_native/config/__init__.pyi b/sdk/python/pulumi_azure_native/config/__init__.pyi index 1b83ea6d9883..0ea3ac81ce8d 100644 --- a/sdk/python/pulumi_azure_native/config/__init__.pyi +++ b/sdk/python/pulumi_azure_native/config/__init__.pyi @@ -100,6 +100,11 @@ tenantId: Optional[str] The Tenant ID which should be used. """ +useDefaultAzureCredential: Optional[bool] +""" +Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). +""" + useMsi: Optional[bool] """ Allow Managed Service Identity be used for Authentication. diff --git a/sdk/python/pulumi_azure_native/config/vars.py b/sdk/python/pulumi_azure_native/config/vars.py index 3069854dba8b..801852bdd190 100644 --- a/sdk/python/pulumi_azure_native/config/vars.py +++ b/sdk/python/pulumi_azure_native/config/vars.py @@ -140,6 +140,13 @@ def tenant_id(self) -> Optional[str]: """ return __config__.get('tenantId') + @property + def use_default_azure_credential(self) -> Optional[bool]: + """ + Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + """ + return __config__.get_bool('useDefaultAzureCredential') + @property def use_msi(self) -> Optional[bool]: """ diff --git a/sdk/python/pulumi_azure_native/provider.py b/sdk/python/pulumi_azure_native/provider.py index e4406155d0f0..593ffa4f9378 100644 --- a/sdk/python/pulumi_azure_native/provider.py +++ b/sdk/python/pulumi_azure_native/provider.py @@ -36,6 +36,7 @@ def __init__(__self__, *, partner_id: Optional[pulumi.Input[builtins.str]] = None, subscription_id: Optional[pulumi.Input[builtins.str]] = None, tenant_id: Optional[pulumi.Input[builtins.str]] = None, + use_default_azure_credential: Optional[pulumi.Input[builtins.bool]] = None, use_msi: Optional[pulumi.Input[builtins.bool]] = None, use_oidc: Optional[pulumi.Input[builtins.bool]] = None): """ @@ -56,6 +57,7 @@ def __init__(__self__, *, :param pulumi.Input[builtins.str] partner_id: A GUID/UUID that is registered with Microsoft to facilitate partner resource usage attribution. :param pulumi.Input[builtins.str] subscription_id: The Subscription ID which should be used. :param pulumi.Input[builtins.str] tenant_id: The Tenant ID which should be used. + :param pulumi.Input[builtins.bool] use_default_azure_credential: Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). :param pulumi.Input[builtins.bool] use_msi: Allow Managed Service Identity to be used for Authentication. :param pulumi.Input[builtins.bool] use_oidc: Allow OpenID Connect (OIDC) to be used for Authentication. """ @@ -93,6 +95,8 @@ def __init__(__self__, *, pulumi.set(__self__, "subscription_id", subscription_id) if tenant_id is not None: pulumi.set(__self__, "tenant_id", tenant_id) + if use_default_azure_credential is not None: + pulumi.set(__self__, "use_default_azure_credential", use_default_azure_credential) if use_msi is not None: pulumi.set(__self__, "use_msi", use_msi) if use_oidc is not None: @@ -290,6 +294,18 @@ def tenant_id(self) -> Optional[pulumi.Input[builtins.str]]: def tenant_id(self, value: Optional[pulumi.Input[builtins.str]]): pulumi.set(self, "tenant_id", value) + @property + @pulumi.getter(name="useDefaultAzureCredential") + def use_default_azure_credential(self) -> Optional[pulumi.Input[builtins.bool]]: + """ + Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). + """ + return pulumi.get(self, "use_default_azure_credential") + + @use_default_azure_credential.setter + def use_default_azure_credential(self, value: Optional[pulumi.Input[builtins.bool]]): + pulumi.set(self, "use_default_azure_credential", value) + @property @pulumi.getter(name="useMsi") def use_msi(self) -> Optional[pulumi.Input[builtins.bool]]: @@ -337,6 +353,7 @@ def __init__(__self__, partner_id: Optional[pulumi.Input[builtins.str]] = None, subscription_id: Optional[pulumi.Input[builtins.str]] = None, tenant_id: Optional[pulumi.Input[builtins.str]] = None, + use_default_azure_credential: Optional[pulumi.Input[builtins.bool]] = None, use_msi: Optional[pulumi.Input[builtins.bool]] = None, use_oidc: Optional[pulumi.Input[builtins.bool]] = None, __props__=None): @@ -361,6 +378,7 @@ def __init__(__self__, :param pulumi.Input[builtins.str] partner_id: A GUID/UUID that is registered with Microsoft to facilitate partner resource usage attribution. :param pulumi.Input[builtins.str] subscription_id: The Subscription ID which should be used. :param pulumi.Input[builtins.str] tenant_id: The Tenant ID which should be used. + :param pulumi.Input[builtins.bool] use_default_azure_credential: Use the default credential chain of the Azure SDK (see https://learn.microsoft.com/en-us/azure/developer/go/sdk/authentication/credential-chains#defaultazurecredential-overview). :param pulumi.Input[builtins.bool] use_msi: Allow Managed Service Identity to be used for Authentication. :param pulumi.Input[builtins.bool] use_oidc: Allow OpenID Connect (OIDC) to be used for Authentication. """ @@ -404,6 +422,7 @@ def _internal_init(__self__, partner_id: Optional[pulumi.Input[builtins.str]] = None, subscription_id: Optional[pulumi.Input[builtins.str]] = None, tenant_id: Optional[pulumi.Input[builtins.str]] = None, + use_default_azure_credential: Optional[pulumi.Input[builtins.bool]] = None, use_msi: Optional[pulumi.Input[builtins.bool]] = None, use_oidc: Optional[pulumi.Input[builtins.bool]] = None, __props__=None): @@ -433,6 +452,7 @@ def _internal_init(__self__, __props__.__dict__["partner_id"] = partner_id __props__.__dict__["subscription_id"] = subscription_id __props__.__dict__["tenant_id"] = tenant_id + __props__.__dict__["use_default_azure_credential"] = pulumi.Output.from_input(use_default_azure_credential).apply(pulumi.runtime.to_json) if use_default_azure_credential is not None else None __props__.__dict__["use_msi"] = pulumi.Output.from_input(use_msi).apply(pulumi.runtime.to_json) if use_msi is not None else None __props__.__dict__["use_oidc"] = pulumi.Output.from_input(use_oidc).apply(pulumi.runtime.to_json) if use_oidc is not None else None super(Provider, __self__).__init__(