From e05a43526c12a6ddf8a187ffc443fa99398a5866 Mon Sep 17 00:00:00 2001 From: njucz Date: Wed, 10 Jun 2020 16:21:43 +0800 Subject: [PATCH 1/5] add check for available service provider - `azurerm_bot_connection` --- .../services/bot/bot_connection_resource.go | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/azurerm/internal/services/bot/bot_connection_resource.go b/azurerm/internal/services/bot/bot_connection_resource.go index 694697c8464b..0dbbe2afb1c2 100644 --- a/azurerm/internal/services/bot/bot_connection_resource.go +++ b/azurerm/internal/services/bot/bot_connection_resource.go @@ -112,9 +112,37 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er } } + serviceProviderName := d.Get("service_provider_name").(string) + serviceProviderFound := false + var availableProviders []string + + serviceProviders, err := client.ListServiceProviders(ctx) + if err != nil { + return fmt.Errorf("listing Bot Connection service provider: %+v", err) + } + + if serviceProviders.Value == nil { + return fmt.Errorf("no available service provider %+v", serviceProviders) + } + for _, provider := range *serviceProviders.Value { + if provider.Properties == nil || provider.Properties.ServiceProviderName == nil { + continue + } + name := provider.Properties.ServiceProviderName + if serviceProviderName == *name { + serviceProviderFound = true + break + } + availableProviders = append(availableProviders, *name) + } + + if !serviceProviderFound { + return fmt.Errorf("invalid Service Provider Name. available service providers are: %+v", availableProviders) + } + connection := botservice.ConnectionSetting{ Properties: &botservice.ConnectionSettingProperties{ - ServiceProviderDisplayName: utils.String(d.Get("service_provider_name").(string)), + ServiceProviderDisplayName: utils.String(serviceProviderName), ClientID: utils.String(d.Get("client_id").(string)), ClientSecret: utils.String(d.Get("client_secret").(string)), Scopes: utils.String(d.Get("scopes").(string)), From 7f57d8fc37d9285c61d0e07e0a625b636df5d541 Mon Sep 17 00:00:00 2001 From: njucz Date: Wed, 10 Jun 2020 16:40:08 +0800 Subject: [PATCH 2/5] Update azurerm/internal/services/bot/bot_connection_resource.go Co-authored-by: Tom Harvey --- azurerm/internal/services/bot/bot_connection_resource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azurerm/internal/services/bot/bot_connection_resource.go b/azurerm/internal/services/bot/bot_connection_resource.go index 0dbbe2afb1c2..5576419c3d67 100644 --- a/azurerm/internal/services/bot/bot_connection_resource.go +++ b/azurerm/internal/services/bot/bot_connection_resource.go @@ -137,7 +137,7 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er } if !serviceProviderFound { - return fmt.Errorf("invalid Service Provider Name. available service providers are: %+v", availableProviders) + return fmt.Errorf("the Service Provider %q was not found. The available service providers are %s", strings.Join(availableProviders, ",")) } connection := botservice.ConnectionSetting{ From 51bd3bc6cbf5e74bd3ddb3ca2046a2cae0a472ec Mon Sep 17 00:00:00 2001 From: njucz Date: Wed, 10 Jun 2020 16:40:35 +0800 Subject: [PATCH 3/5] Update azurerm/internal/services/bot/bot_connection_resource.go Co-authored-by: Tom Harvey --- azurerm/internal/services/bot/bot_connection_resource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azurerm/internal/services/bot/bot_connection_resource.go b/azurerm/internal/services/bot/bot_connection_resource.go index 5576419c3d67..7867fb721c0b 100644 --- a/azurerm/internal/services/bot/bot_connection_resource.go +++ b/azurerm/internal/services/bot/bot_connection_resource.go @@ -122,7 +122,7 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er } if serviceProviders.Value == nil { - return fmt.Errorf("no available service provider %+v", serviceProviders) + return fmt.Errorf("no service providers were returned from the Azure API") } for _, provider := range *serviceProviders.Value { if provider.Properties == nil || provider.Properties.ServiceProviderName == nil { From e0ba970a53303ab2211564295c80e3ca691c55bf Mon Sep 17 00:00:00 2001 From: njucz Date: Wed, 10 Jun 2020 17:00:31 +0800 Subject: [PATCH 4/5] update --- azurerm/internal/services/bot/bot_connection_resource.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azurerm/internal/services/bot/bot_connection_resource.go b/azurerm/internal/services/bot/bot_connection_resource.go index 7867fb721c0b..e7f78dc5808a 100644 --- a/azurerm/internal/services/bot/bot_connection_resource.go +++ b/azurerm/internal/services/bot/bot_connection_resource.go @@ -3,6 +3,7 @@ package bot import ( "fmt" "log" + "strings" "time" "github.com/Azure/azure-sdk-for-go/services/preview/botservice/mgmt/2018-07-12/botservice" @@ -137,7 +138,7 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er } if !serviceProviderFound { - return fmt.Errorf("the Service Provider %q was not found. The available service providers are %s", strings.Join(availableProviders, ",")) + return fmt.Errorf("the Service Provider %q was not found. The available service providers are %s", serviceProviderName, strings.Join(availableProviders, ",")) } connection := botservice.ConnectionSetting{ From 4ed1c6606891407aaa91951378434c4e9d8bc0e4 Mon Sep 17 00:00:00 2001 From: njucz Date: Wed, 10 Jun 2020 19:23:07 +0800 Subject: [PATCH 5/5] update --- .../services/bot/bot_connection_resource.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/azurerm/internal/services/bot/bot_connection_resource.go b/azurerm/internal/services/bot/bot_connection_resource.go index e7f78dc5808a..ee1172bdd569 100644 --- a/azurerm/internal/services/bot/bot_connection_resource.go +++ b/azurerm/internal/services/bot/bot_connection_resource.go @@ -114,7 +114,7 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er } serviceProviderName := d.Get("service_provider_name").(string) - serviceProviderFound := false + var serviceProviderId *string var availableProviders []string serviceProviders, err := client.ListServiceProviders(ctx) @@ -130,24 +130,24 @@ func resourceArmBotConnectionCreate(d *schema.ResourceData, meta interface{}) er continue } name := provider.Properties.ServiceProviderName - if serviceProviderName == *name { - serviceProviderFound = true + if strings.EqualFold(serviceProviderName, *name) { + serviceProviderId = provider.Properties.ID break } availableProviders = append(availableProviders, *name) } - if !serviceProviderFound { + if serviceProviderId == nil { return fmt.Errorf("the Service Provider %q was not found. The available service providers are %s", serviceProviderName, strings.Join(availableProviders, ",")) } connection := botservice.ConnectionSetting{ Properties: &botservice.ConnectionSettingProperties{ - ServiceProviderDisplayName: utils.String(serviceProviderName), - ClientID: utils.String(d.Get("client_id").(string)), - ClientSecret: utils.String(d.Get("client_secret").(string)), - Scopes: utils.String(d.Get("scopes").(string)), - Parameters: expandAzureRMBotConnectionParameters(d.Get("parameters").(map[string]interface{})), + ServiceProviderID: serviceProviderId, + ClientID: utils.String(d.Get("client_id").(string)), + ClientSecret: utils.String(d.Get("client_secret").(string)), + Scopes: utils.String(d.Get("scopes").(string)), + Parameters: expandAzureRMBotConnectionParameters(d.Get("parameters").(map[string]interface{})), }, Kind: botservice.KindBot, Location: utils.String(d.Get("location").(string)),