Skip to content

Commit

Permalink
Power vm instance console languages support
Browse files Browse the repository at this point in the history
Signed-off-by: Yussuf Shaikh <yussuf.shaikh@ibm.com>
  • Loading branch information
yussufsh committed Dec 15, 2021
1 parent 36cd7b2 commit b802210
Show file tree
Hide file tree
Showing 7 changed files with 410 additions and 0 deletions.
97 changes: 97 additions & 0 deletions ibm/data_source_ibm_pi_instance_console_languages.go
Original file line number Diff line number Diff line change
@@ -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
}
35 changes: 35 additions & 0 deletions ibm/data_source_ibm_pi_instance_console_languages_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
2 changes: 2 additions & 0 deletions ibm/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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(),
Expand Down
118 changes: 118 additions & 0 deletions ibm/resource_ibm_pi_instance_console_language.go
Original file line number Diff line number Diff line change
@@ -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
}
44 changes: 44 additions & 0 deletions ibm/resource_ibm_pi_instance_console_language_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
54 changes: 54 additions & 0 deletions website/docs/d/pi_console_languages.html copy.markdown
Original file line number Diff line number Diff line change
@@ -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 = "<value of the cloud_instance_id>"
pi_instance_name = "<instance name or id>"
}
```

**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.
Loading

0 comments on commit b802210

Please sign in to comment.