From b8022106948b1c8ed7be95d6e5e42dfe19f0d651 Mon Sep 17 00:00:00 2001 From: Yussuf Shaikh Date: Wed, 27 Oct 2021 17:57:02 +0530 Subject: [PATCH] Power vm instance console languages support Signed-off-by: Yussuf Shaikh --- ...ource_ibm_pi_instance_console_languages.go | 97 ++++++++++++++ ..._ibm_pi_instance_console_languages_test.go | 35 ++++++ ibm/provider.go | 2 + ...source_ibm_pi_instance_console_language.go | 118 ++++++++++++++++++ ...e_ibm_pi_instance_console_language_test.go | 44 +++++++ .../d/pi_console_languages.html copy.markdown | 54 ++++++++ .../docs/r/pi_console_language.html.markdown | 60 +++++++++ 7 files changed, 410 insertions(+) create mode 100644 ibm/data_source_ibm_pi_instance_console_languages.go create mode 100644 ibm/data_source_ibm_pi_instance_console_languages_test.go create mode 100644 ibm/resource_ibm_pi_instance_console_language.go create mode 100644 ibm/resource_ibm_pi_instance_console_language_test.go create mode 100644 website/docs/d/pi_console_languages.html copy.markdown create mode 100644 website/docs/r/pi_console_language.html.markdown diff --git a/ibm/data_source_ibm_pi_instance_console_languages.go b/ibm/data_source_ibm_pi_instance_console_languages.go new file mode 100644 index 0000000000..38e95ce652 --- /dev/null +++ b/ibm/data_source_ibm_pi_instance_console_languages.go @@ -0,0 +1,97 @@ +// Copyright IBM Corp. 2017, 2021 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package ibm + +import ( + "context" + + "github.com/IBM-Cloud/power-go-client/helpers" + "github.com/hashicorp/go-uuid" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/IBM-Cloud/power-go-client/clients/instance" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" +) + +const ( + ConsoleLanguages = "console_languages" + ConsoleLanguageCode = "code" + ConsoleLanguageDesc = "language" +) + +/* +Datasource to get the list of available console languages for an instance +*/ +func dataSourceIBMPIInstanceConsoleLanguages() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIBMPIInstanceConsoleLanguagesRead, + Schema: map[string]*schema.Schema{ + helpers.PICloudInstanceId: { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.NoZeroValues, + }, + helpers.PIInstanceName: { + Type: schema.TypeString, + Required: true, + Description: "The unique identifier or name of the instance", + ValidateFunc: validation.NoZeroValues, + }, + + // Computed Attributes + ConsoleLanguages: { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + ConsoleLanguageCode: { + Type: schema.TypeString, + Computed: true, + Description: "language code", + }, + ConsoleLanguageDesc: { + Type: schema.TypeString, + Computed: true, + Description: "language description", + }, + }, + }, + }, + }, + } +} + +func dataSourceIBMPIInstanceConsoleLanguagesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + sess, err := meta.(ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + cloudInstanceID := d.Get(helpers.PICloudInstanceId).(string) + instanceName := d.Get(helpers.PIInstanceName).(string) + + client := instance.NewIBMPIInstanceClient(ctx, sess, cloudInstanceID) + languages, err := client.GetConsoleLanguages(instanceName) + if err != nil { + return diag.FromErr(err) + } + + var clientgenU, _ = uuid.GenerateUUID() + d.SetId(clientgenU) + + if len(languages.ConsoleLanguages) > 0 { + result := make([]map[string]interface{}, 0, len(languages.ConsoleLanguages)) + for _, language := range languages.ConsoleLanguages { + l := map[string]interface{}{ + ConsoleLanguageCode: *language.Code, + ConsoleLanguageDesc: language.Language, + } + result = append(result, l) + } + d.Set(ConsoleLanguages, result) + } + + return nil +} diff --git a/ibm/data_source_ibm_pi_instance_console_languages_test.go b/ibm/data_source_ibm_pi_instance_console_languages_test.go new file mode 100644 index 0000000000..40cbe719ad --- /dev/null +++ b/ibm/data_source_ibm_pi_instance_console_languages_test.go @@ -0,0 +1,35 @@ +// Copyright IBM Corp. 2017, 2021 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package ibm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccIBMPIInstanceConsoleLanguages(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMPIInstanceConsoleLanguagesConfig(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_pi_console_languages.example", "id"), + resource.TestCheckResourceAttrSet("data.ibm_pi_console_languages.example", "console_languages.#"), + ), + }, + }, + }) +} + +func testAccCheckIBMPIInstanceConsoleLanguagesConfig() string { + return fmt.Sprintf(` + data "ibm_pi_console_languages" "example" { + pi_cloud_instance_id = "%s" + pi_instance_name = "%s" + }`, pi_cloud_instance_id, pi_instance_name) +} diff --git a/ibm/provider.go b/ibm/provider.go index dc4c0f52da..e4535b96b9 100644 --- a/ibm/provider.go +++ b/ibm/provider.go @@ -429,6 +429,7 @@ func Provider() *schema.Provider { "ibm_pi_cloud_connections": dataSourceIBMPICloudConnections(), "ibm_pi_sap_profiles": dataSourceIBMPISAPProfiles(), "ibm_pi_sap_profile": dataSourceIBMPISAPProfile(), + "ibm_pi_console_languages": dataSourceIBMPIInstanceConsoleLanguages(), // Added for private dns zones @@ -762,6 +763,7 @@ func Provider() *schema.Provider { "ibm_pi_ike_policy": resourceIBMPIIKEPolicy(), "ibm_pi_ipsec_policy": resourceIBMPIIPSecPolicy(), "ibm_pi_vpn_connection": resourceIBMPIVPNConnection(), + "ibm_pi_console_language": resourceIBMPIInstanceConsoleLanguage(), //Private DNS related resources "ibm_dns_zone": resourceIBMPrivateDNSZone(), diff --git a/ibm/resource_ibm_pi_instance_console_language.go b/ibm/resource_ibm_pi_instance_console_language.go new file mode 100644 index 0000000000..3f69cbe121 --- /dev/null +++ b/ibm/resource_ibm_pi_instance_console_language.go @@ -0,0 +1,118 @@ +// Copyright IBM Corp. 2017, 2021 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package ibm + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/IBM-Cloud/power-go-client/clients/instance" + "github.com/IBM-Cloud/power-go-client/helpers" + "github.com/IBM-Cloud/power-go-client/power/models" +) + +const ( + PIConsoleLanguageCode = "pi_language_code" +) + +func resourceIBMPIInstanceConsoleLanguage() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIBMPIInstanceConsoleLanguageCreate, + ReadContext: resourceIBMPIInstanceConsoleLanguageRead, + UpdateContext: resourceIBMPIInstanceConsoleLanguageUpdate, + DeleteContext: resourceIBMPIInstanceConsoleLanguageDelete, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(5 * time.Minute), + Update: schema.DefaultTimeout(5 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + // Required Attributes + helpers.PICloudInstanceId: { + Type: schema.TypeString, + Required: true, + Description: "PI cloud instance ID", + }, + helpers.PIInstanceName: { + Type: schema.TypeString, + Required: true, + Description: "The unique identifier or name of the instance", + }, + PIConsoleLanguageCode: { + Type: schema.TypeString, + Required: true, + Description: "Language code", + }, + }, + } +} + +func resourceIBMPIInstanceConsoleLanguageCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + sess, err := meta.(ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + cloudInstanceID := d.Get(helpers.PICloudInstanceId).(string) + instanceName := d.Get(helpers.PIInstanceName).(string) + code := d.Get(PIConsoleLanguageCode).(string) + + client := instance.NewIBMPIInstanceClient(ctx, sess, cloudInstanceID) + + consoleLanguage := &models.ConsoleLanguage{ + Code: &code, + } + + _, err = client.UpdateConsoleLanguage(instanceName, consoleLanguage) + if err != nil { + log.Printf("[DEBUG] err %s", err) + return diag.FromErr(err) + } + + d.SetId(fmt.Sprintf("%s/%s", cloudInstanceID, instanceName)) + + return resourceIBMPIInstanceConsoleLanguageRead(ctx, d, meta) +} + +func resourceIBMPIInstanceConsoleLanguageRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // There is no get concept for instance console language + return nil +} + +func resourceIBMPIInstanceConsoleLanguageUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + sess, err := meta.(ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + if d.HasChange(ConsoleLanguageCode) { + cloudInstanceID := d.Get(helpers.PICloudInstanceId).(string) + instanceName := d.Get(helpers.PIInstanceName).(string) + code := d.Get(PIConsoleLanguageCode).(string) + + client := instance.NewIBMPIInstanceClient(ctx, sess, cloudInstanceID) + + consoleLanguage := &models.ConsoleLanguage{ + Code: &code, + } + _, err = client.UpdateConsoleLanguage(instanceName, consoleLanguage) + if err != nil { + log.Printf("[DEBUG] err %s", err) + return diag.FromErr(err) + } + } + return resourceIBMPIInstanceConsoleLanguageRead(ctx, d, meta) +} + +func resourceIBMPIInstanceConsoleLanguageDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // There is no delete or unset concept for instance console language + d.SetId("") + return nil +} diff --git a/ibm/resource_ibm_pi_instance_console_language_test.go b/ibm/resource_ibm_pi_instance_console_language_test.go new file mode 100644 index 0000000000..93f2b5c305 --- /dev/null +++ b/ibm/resource_ibm_pi_instance_console_language_test.go @@ -0,0 +1,44 @@ +// Copyright IBM Corp. 2017, 2021 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package ibm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccIBMPIInstanceConsoleLanguage(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMPIInstanceConsoleLanguageConfig("037"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr( + "ibm_pi_console_language.example", "pi_language_code", "037"), + ), + }, + { + Config: testAccCheckIBMPIInstanceConsoleLanguageConfig("e1399"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr( + "ibm_pi_console_language.example", "pi_language_code", "e1399"), + ), + }, + }, + }) +} + +func testAccCheckIBMPIInstanceConsoleLanguageConfig(code string) string { + return fmt.Sprintf(` + resource "ibm_pi_console_language" "example" { + pi_cloud_instance_id = "%s" + pi_instance_name = "%s" + pi_language_code = "%s" + } + `, pi_cloud_instance_id, pi_instance_name, code) +} diff --git a/website/docs/d/pi_console_languages.html copy.markdown b/website/docs/d/pi_console_languages.html copy.markdown new file mode 100644 index 0000000000..d5f7f36afd --- /dev/null +++ b/website/docs/d/pi_console_languages.html copy.markdown @@ -0,0 +1,54 @@ +--- + +subcategory: "Power Systems" +layout: "ibm" +page_title: "IBM: pi_console_languages" +description: |- + Manages Instance Console Languages in the Power Virtual Server cloud. +--- + +# ibm_pi_console_languages + +Retrieve information about all the available Console Languages for an Instance. For more information, see [getting started with IBM Power Systems Virtual Servers](https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started). + +## Example usage + +```terraform +data "ibm_pi_console_languages" "example" { + pi_cloud_instance_id = "" + pi_instance_name = "" +} +``` + +**Notes** + +* Please find [supported Regions](https://cloud.ibm.com/apidocs/power-cloud#endpoint) for endpoints. +* If a Power cloud instance is provisioned at `lon04`, The provider level attributes should be as follows: + * `region` - `lon` + * `zone` - `lon04` + +Example usage: + + ```terraform + provider "ibm" { + region = "lon" + zone = "lon04" + } + ``` + +## Argument reference + +Review the argument references that you can specify for your data source. + +- `pi_cloud_instance_id` - (Required, String) The GUID of the service instance associated with an account. +- `pi_instance_name` - (Required, String) The unique identifier or name of the instance. + +## Attribute reference + +In addition to all argument reference list, you can access the following attribute references after your data source is created. + +- `console_languages` - (List) List of all the Console Languages. + + Nested scheme for `console_languages`: + - `code` - (String) Language code. + - `language` - (String) Language description. diff --git a/website/docs/r/pi_console_language.html.markdown b/website/docs/r/pi_console_language.html.markdown new file mode 100644 index 0000000000..9d3d574440 --- /dev/null +++ b/website/docs/r/pi_console_language.html.markdown @@ -0,0 +1,60 @@ +--- + +subcategory: "Power Systems" +layout: "ibm" +page_title: "IBM: pi_console_language" +description: |- + Manages Instance Console Languages in the Power Virtual Server cloud. +--- + +# ibm_pi_console_language + +Update the Console Language of a Server for your Power Systems Virtual Server instance. For more information, see [getting started with IBM Power Systems Virtual Servers](https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started). + +## Example usage +The following example enables you to update the Console Languages of a Server: + +```terraform +resource "ibm_pi_console_language" "example" { + pi_cloud_instance_id = "" + pi_instance_name = "" + pi_language_code = "" +} +``` + +**Note** + +* Please find [supported Regions](https://cloud.ibm.com/apidocs/power-cloud#endpoint) for endpoints. +* If a Power cloud instance is provisioned at `lon04`, The provider level attributes should be as follows: + * `region` - `lon` + * `zone` - `lon04` + + Example usage: + + ```terraform + provider "ibm" { + region = "lon" + zone = "lon04" + } + ``` + +## Timeouts + +The `ibm_pi_console_language` provides the following [timeouts](https://www.terraform.io/docs/language/resources/syntax.html) configuration options: + +- **create** - (Default 5 minutes) Used for setting a console language. +- **update** - (Default 5 minutes) Used for updating a console language. + +## Argument reference + +Review the argument references that you can specify for your resource. + +- `pi_cloud_instance_id` - (Required, String) The GUID of the service instance associated with an account. +- `pi_instance_name` - (Required, String) The unique identifier or name of the instance. +- `pi_language_code` - (Required, String) Language code. + +## Attribute reference + +In addition to all argument reference list, you can access the following attribute reference after your resource is created. + +- `id` - (String) The unique identifier of the instance console language. The ID is composed of `/`.