-
Notifications
You must be signed in to change notification settings - Fork 666
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Power vm instance console languages support
Signed-off-by: Yussuf Shaikh <yussuf.shaikh@ibm.com>
- Loading branch information
Showing
7 changed files
with
410 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
Oops, something went wrong.