Skip to content

Commit 0a66be9

Browse files
Terraform Team Automationvsin12
authored andcommitted
Added - Support for RDMA Network Instances
1 parent e6a7b69 commit 0a66be9

29 files changed

+1275
-19
lines changed

internal/integrationtest/core_compute_cluster_test.go

Lines changed: 336 additions & 0 deletions
Large diffs are not rendered by default.

internal/service/core/core_cluster_network_data_source.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,19 @@ func (s *CoreClusterNetworkDataSourceCrud) SetData() error {
8080

8181
s.D.Set("freeform_tags", s.Res.FreeformTags)
8282

83+
if s.Res.HpcIslandId != nil {
84+
s.D.Set("hpc_island_id", *s.Res.HpcIslandId)
85+
}
86+
8387
instancePools := []interface{}{}
8488
for _, item := range s.Res.InstancePools {
8589
instancePools = append(instancePools, InstancePoolToMap(item))
8690
}
8791
s.D.Set("instance_pools", instancePools)
8892

93+
s.D.Set("network_block_ids", s.Res.NetworkBlockIds)
94+
s.D.Set("network_block_ids", s.Res.NetworkBlockIds)
95+
8996
if s.Res.PlacementConfiguration != nil {
9097
s.D.Set("placement_configuration", []interface{}{ClusterNetworkPlacementConfigurationDetailsToMap(s.Res.PlacementConfiguration, true)})
9198
} else {

internal/service/core/core_cluster_network_resource.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ func CoreClusterNetworkResource() *schema.Resource {
254254
},
255255

256256
// Computed
257+
"hpc_island_id": {
258+
Type: schema.TypeString,
259+
Computed: true,
260+
},
261+
"network_block_ids": {
262+
Type: schema.TypeList,
263+
Computed: true,
264+
Elem: &schema.Schema{
265+
Type: schema.TypeString,
266+
},
267+
},
257268
"state": {
258269
Type: schema.TypeString,
259270
Computed: true,
@@ -508,12 +519,19 @@ func (s *CoreClusterNetworkResourceCrud) SetData() error {
508519

509520
s.D.Set("freeform_tags", s.Res.FreeformTags)
510521

522+
if s.Res.HpcIslandId != nil {
523+
s.D.Set("hpc_island_id", *s.Res.HpcIslandId)
524+
}
525+
511526
instancePools := []interface{}{}
512527
for _, item := range s.Res.InstancePools {
513528
instancePools = append(instancePools, InstancePoolToMap(item))
514529
}
515530
s.D.Set("instance_pools", instancePools)
516531

532+
s.D.Set("network_block_ids", s.Res.NetworkBlockIds)
533+
s.D.Set("network_block_ids", s.Res.NetworkBlockIds)
534+
517535
if s.Res.PlacementConfiguration != nil {
518536
s.D.Set("placement_configuration", []interface{}{ClusterNetworkPlacementConfigurationDetailsToMap(s.Res.PlacementConfiguration, false)})
519537
} else {
@@ -540,7 +558,6 @@ func (s *CoreClusterNetworkResourceCrud) mapToClusterNetworkPlacementConfigurati
540558
tmp := availabilityDomain.(string)
541559
result.AvailabilityDomain = &tmp
542560
}
543-
544561
if primarySubnetId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "primary_subnet_id")); ok {
545562
tmp := primarySubnetId.(string)
546563
result.PrimarySubnetId = &tmp
@@ -573,7 +590,6 @@ func ClusterNetworkPlacementConfigurationDetailsToMap(obj *oci_core.ClusterNetwo
573590
if obj.AvailabilityDomain != nil {
574591
result["availability_domain"] = string(*obj.AvailabilityDomain)
575592
}
576-
577593
if obj.PrimarySubnetId != nil {
578594
result["primary_subnet_id"] = string(*obj.PrimarySubnetId)
579595
}

internal/service/core/core_compute_capacity_reservation_resource.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,34 @@ func CoreComputeCapacityReservationResource() *schema.Resource {
7878
},
7979

8080
// Optional
81+
"cluster_config": {
82+
Type: schema.TypeList,
83+
Optional: true,
84+
Computed: true,
85+
MaxItems: 1,
86+
MinItems: 1,
87+
Elem: &schema.Resource{
88+
Schema: map[string]*schema.Schema{
89+
// Required
90+
"hpc_island_id": {
91+
Type: schema.TypeString,
92+
Required: true,
93+
},
94+
95+
// Optional
96+
"network_block_ids": {
97+
Type: schema.TypeList,
98+
Optional: true,
99+
Computed: true,
100+
Elem: &schema.Schema{
101+
Type: schema.TypeString,
102+
},
103+
},
104+
105+
// Computed
106+
},
107+
},
108+
},
81109
"fault_domain": {
82110
Type: schema.TypeString,
83111
Optional: true,
@@ -458,9 +486,57 @@ func (s *CoreComputeCapacityReservationResourceCrud) SetData() error {
458486
return nil
459487
}
460488

489+
func (s *CoreComputeCapacityReservationResourceCrud) mapToClusterConfigDetails(fieldKeyFormat string) (oci_core.ClusterConfigDetails, error) {
490+
result := oci_core.ClusterConfigDetails{}
491+
492+
if hpcIslandId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "hpc_island_id")); ok {
493+
tmp := hpcIslandId.(string)
494+
result.HpcIslandId = &tmp
495+
}
496+
497+
if networkBlockIds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "network_block_ids")); ok {
498+
interfaces := networkBlockIds.([]interface{})
499+
tmp := make([]string, len(interfaces))
500+
for i := range interfaces {
501+
if interfaces[i] != nil {
502+
tmp[i] = interfaces[i].(string)
503+
}
504+
}
505+
if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "network_block_ids")) {
506+
result.NetworkBlockIds = tmp
507+
}
508+
}
509+
510+
return result, nil
511+
}
512+
513+
func ClusterConfigDetailsToMap(obj *oci_core.ClusterConfigDetails) map[string]interface{} {
514+
result := map[string]interface{}{}
515+
516+
if obj.HpcIslandId != nil {
517+
result["hpc_island_id"] = string(*obj.HpcIslandId)
518+
}
519+
520+
result["network_block_ids"] = obj.NetworkBlockIds
521+
result["network_block_ids"] = obj.NetworkBlockIds
522+
523+
return result
524+
}
525+
461526
func (s *CoreComputeCapacityReservationResourceCrud) mapToInstanceReservationConfigDetails(fieldKeyFormat string) (oci_core.InstanceReservationConfigDetails, error) {
462527
result := oci_core.InstanceReservationConfigDetails{}
463528

529+
if clusterConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "cluster_config")); ok {
530+
if tmpList := clusterConfig.([]interface{}); len(tmpList) > 0 {
531+
fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "cluster_config"), 0)
532+
tmp, err := s.mapToClusterConfigDetails(fieldKeyFormatNextLevel)
533+
if err != nil {
534+
return result, fmt.Errorf("unable to convert cluster_config, encountered error: %v", err)
535+
}
536+
result.ClusterConfig = &tmp
537+
}
538+
}
539+
464540
if faultDomain, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "fault_domain")); ok {
465541
tmp := faultDomain.(string)
466542
if tmp != "" {
@@ -499,6 +575,10 @@ func (s *CoreComputeCapacityReservationResourceCrud) mapToInstanceReservationCon
499575
func InstanceReservationConfigToMap(obj oci_core.InstanceReservationConfig) map[string]interface{} {
500576
result := map[string]interface{}{}
501577

578+
if obj.ClusterConfig != nil {
579+
result["cluster_config"] = []interface{}{ClusterConfigDetailsToMap(obj.ClusterConfig)}
580+
}
581+
502582
if obj.FaultDomain != nil {
503583
result["fault_domain"] = string(*obj.FaultDomain)
504584
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package core
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_core "github.com/oracle/oci-go-sdk/v65/core"
11+
12+
"github.com/oracle/terraform-provider-oci/internal/client"
13+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func CoreComputeClusterDataSource() *schema.Resource {
17+
fieldMap := make(map[string]*schema.Schema)
18+
fieldMap["compute_cluster_id"] = &schema.Schema{
19+
Type: schema.TypeString,
20+
Required: true,
21+
}
22+
return tfresource.GetSingularDataSourceItemSchema(CoreComputeClusterResource(), fieldMap, readSingularCoreComputeCluster)
23+
}
24+
25+
func readSingularCoreComputeCluster(d *schema.ResourceData, m interface{}) error {
26+
sync := &CoreComputeClusterDataSourceCrud{}
27+
sync.D = d
28+
sync.Client = m.(*client.OracleClients).ComputeClient()
29+
30+
return tfresource.ReadResource(sync)
31+
}
32+
33+
type CoreComputeClusterDataSourceCrud struct {
34+
D *schema.ResourceData
35+
Client *oci_core.ComputeClient
36+
Res *oci_core.GetComputeClusterResponse
37+
}
38+
39+
func (s *CoreComputeClusterDataSourceCrud) VoidState() {
40+
s.D.SetId("")
41+
}
42+
43+
func (s *CoreComputeClusterDataSourceCrud) Get() error {
44+
request := oci_core.GetComputeClusterRequest{}
45+
46+
if computeClusterId, ok := s.D.GetOkExists("compute_cluster_id"); ok {
47+
tmp := computeClusterId.(string)
48+
request.ComputeClusterId = &tmp
49+
}
50+
51+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "core")
52+
53+
response, err := s.Client.GetComputeCluster(context.Background(), request)
54+
if err != nil {
55+
return err
56+
}
57+
58+
s.Res = &response
59+
return nil
60+
}
61+
62+
func (s *CoreComputeClusterDataSourceCrud) SetData() error {
63+
if s.Res == nil {
64+
return nil
65+
}
66+
67+
s.D.SetId(*s.Res.Id)
68+
69+
if s.Res.AvailabilityDomain != nil {
70+
s.D.Set("availability_domain", *s.Res.AvailabilityDomain)
71+
}
72+
73+
if s.Res.CompartmentId != nil {
74+
s.D.Set("compartment_id", *s.Res.CompartmentId)
75+
}
76+
77+
if s.Res.DefinedTags != nil {
78+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
79+
}
80+
81+
if s.Res.DisplayName != nil {
82+
s.D.Set("display_name", *s.Res.DisplayName)
83+
}
84+
85+
s.D.Set("freeform_tags", s.Res.FreeformTags)
86+
87+
s.D.Set("state", s.Res.LifecycleState)
88+
89+
if s.Res.TimeCreated != nil {
90+
s.D.Set("time_created", s.Res.TimeCreated.String())
91+
}
92+
93+
return nil
94+
}

0 commit comments

Comments
 (0)