Skip to content

Commit

Permalink
lcm init
Browse files Browse the repository at this point in the history
  • Loading branch information
Haroon-Dweikat-Ntx committed Feb 4, 2025
1 parent f0693ea commit 2fefb07
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 0 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ require (
github.com/nutanix/ntnx-api-golang-clients/datapolicies-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/dataprotection-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/iam-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/lifecycle-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/microseg-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/networking-go-client/v4 v4.0.1
github.com/nutanix/ntnx-api-golang-clients/prism-go-client/v4 v4.0.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,8 @@ github.com/nutanix/ntnx-api-golang-clients/dataprotection-go-client/v4 v4.0.1 h1
github.com/nutanix/ntnx-api-golang-clients/dataprotection-go-client/v4 v4.0.1/go.mod h1:S07bx9/6uUbMOY/OUJsaIUdvZ/LDaE46Kx9VX7Pt7Ek=
github.com/nutanix/ntnx-api-golang-clients/iam-go-client/v4 v4.0.1 h1:zWbA2qtSJt0WsBcEhqqv6FQTSz8pIwBnHA5etaQg4qo=
github.com/nutanix/ntnx-api-golang-clients/iam-go-client/v4 v4.0.1/go.mod h1:+HvW0f4QGDRZ3/1jcXvF7xA/gQsvQc4XtZy6OUobaO4=
github.com/nutanix/ntnx-api-golang-clients/lifecycle-go-client/v4 v4.0.1 h1:JBSalV1dvI+5YjZzzE9E/tz8V4A7CbSA7wl4C3L8iYs=
github.com/nutanix/ntnx-api-golang-clients/lifecycle-go-client/v4 v4.0.1/go.mod h1:fQTNQlfh5g4SavaQn+sDoMn29K+Lur5lHWtnbq3uA28=
github.com/nutanix/ntnx-api-golang-clients/microseg-go-client/v4 v4.0.1 h1:9SC9PsLQjvkuo0MyL2HMDXQ/dQl1a57RDR4OS22so/U=
github.com/nutanix/ntnx-api-golang-clients/microseg-go-client/v4 v4.0.1/go.mod h1:75Ro+aFIepNAkf2eWjFrFR7m+Ct36EVrD9n9pwAYBrc=
github.com/nutanix/ntnx-api-golang-clients/networking-go-client/v4 v4.0.1 h1:2D2ZJd5Cn0fMeWYnTEHsR1Fcv2G1BSrOAl1fVURtfn4=
Expand Down
7 changes: 7 additions & 0 deletions nutanix/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/datapolicies"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/dataprotection"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/iam"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/lcm"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/microseg"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/networking"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/sdks/v4/prism"
Expand Down Expand Up @@ -116,6 +117,10 @@ func (c *Config) Client() (*Client, error) {
if err != nil {
return nil, err
}
lcmClient, err := lcm.NewLCMClient(configCreds)
if err != nil {
return nil, err
}
return &Client{
WaitTimeout: c.WaitTimeout,
API: v3Client,
Expand All @@ -132,6 +137,7 @@ func (c *Config) Client() (*Client, error) {
DataProtectionAPI: dataprotectionClient,
VmmAPI: vmmClient,
DataPoliciesAPI: dataPoliciesClient,
LcmAPI: lcmClient,
}, nil
}

Expand All @@ -152,4 +158,5 @@ type Client struct {
DataProtectionAPI *dataprotection.Client
VmmAPI *vmm.Client
DataPoliciesAPI *datapolicies.Client
LcmAPI *lcm.Client
}
34 changes: 34 additions & 0 deletions nutanix/sdks/v4/lcm/lcm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package lcm

import (
"github.com/nutanix/ntnx-api-golang-clients/lifecycle-go-client/v4/api"
lcm "github.com/nutanix/ntnx-api-golang-clients/lifecycle-go-client/v4/client"
"github.com/terraform-providers/terraform-provider-nutanix/nutanix/client"
)

type Client struct {
LcmConfigAPIInstance *api.ConfigApi
}

func NewLCMClient(credentials client.Credentials) (*Client, error) {
var baseClient *lcm.ApiClient

// check if all required fields are present. Else create an empty client
if credentials.Username != "" && credentials.Password != "" && credentials.Endpoint != "" {
pcClient := lcm.NewApiClient()

pcClient.Host = credentials.Endpoint
pcClient.Password = credentials.Password
pcClient.Username = credentials.Username
pcClient.Port = 9440
pcClient.VerifySSL = false

baseClient = pcClient
}

f := &Client{
LcmConfigAPIInstance: api.NewConfigApi(baseClient),
}

return f, nil
}
86 changes: 86 additions & 0 deletions nutanix/services/lcmv2/data_source_lcm_configuration_v2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package lcmv2

import (
"context"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nutanix/ntnx-api-golang-clients/prism-go-client/v4/models/prism/v4/management"
conns "github.com/terraform-providers/terraform-provider-nutanix/nutanix"
"github.com/terraform-providers/terraform-provider-nutanix/utils"
)

func DatasourceNutanixLcmConfigrationV2() *schema.Resource {
return &schema.Resource{
ReadContext: DatasourceNutanixLcmConfigrationV2Read,
Schema: map[string]*schema.Schema{
"cluster_id": {
Type: schema.TypeString,
Required: true,
},
"ext_id": {
Type: schema.TypeString,
Required: true,
},
"links": schemaForLinks(),
},
}
}

func DatasourceNutanixLcmConfigrationV2Read(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*conns.Client).PrismAPI

domainManagerExtID := d.Get("domain_manager_ext_id").(string)
backupTargetExtID := d.Get("ext_id").(string)

resp, err := conn.DomainManagerBackupsAPIInstance.GetBackupTargetById(utils.StringPtr(domainManagerExtID), utils.StringPtr(backupTargetExtID), nil)

if err != nil {
return diag.Errorf("error while fetching Backup Target: %s", err)
}

backupTarget := resp.Data.GetValue().(management.BackupTarget)

if err := d.Set("tenant_id", backupTarget.TenantId); err != nil {
return diag.Errorf("error setting tenant_id: %s", err)
}
if err := d.Set("ext_id", backupTarget.ExtId); err != nil {
return diag.Errorf("error setting ext_id: %s", err)
}
if err := d.Set("links", flattenLinks(backupTarget.Links)); err != nil {
return diag.Errorf("error setting links: %s", err)
}
if err := d.Set("last_sync_time", flattenTime(backupTarget.LastSyncTime)); err != nil {
return diag.Errorf("error setting last_sync_time: %s", err)
}
if err := d.Set("is_backup_paused", backupTarget.IsBackupPaused); err != nil {
return diag.Errorf("error setting is_backup_paused: %s", err)
}
if err := d.Set("backup_pause_reason", backupTarget.BackupPauseReason); err != nil {
return diag.Errorf("error setting backup_pause_reason: %s", err)
}
if err := d.Set("location", flattenBackupTargetLocation(backupTarget.Location)); err != nil {
return diag.Errorf("error setting location: %s", err)
}

return nil
}

func schemaForLinks() *schema.Schema {
return &schema.Schema{
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"rel": {
Type: schema.TypeString,
Computed: true,
},
"href": {
Type: schema.TypeString,
Computed: true,
},
},
},
}
}

0 comments on commit 2fefb07

Please sign in to comment.