Skip to content

Commit 41172f3

Browse files
authored
Merge pull request #21 from Rohit-Intel-Cloud/add_tristate_instance
add quick enabled flag and generate quick connect URL
2 parents 947aa69 + b08efd4 commit 41172f3

File tree

5 files changed

+64
-22
lines changed

5 files changed

+64
-22
lines changed

internal/models/instance.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ type InstanceModel struct {
1818
}
1919

2020
type InstanceSpec struct {
21-
InstanceGroup types.String `tfsdk:"instance_group"`
22-
InstanceType types.String `tfsdk:"instance_type"`
23-
MachineImage types.String `tfsdk:"machine_image"`
24-
SSHPublicKeyNames []types.String `tfsdk:"ssh_public_key_names"`
25-
UserData types.String `tfsdk:"user_data"`
21+
InstanceGroup types.String `tfsdk:"instance_group"`
22+
InstanceType types.String `tfsdk:"instance_type"`
23+
MachineImage types.String `tfsdk:"machine_image"`
24+
SSHPublicKeyNames []types.String `tfsdk:"ssh_public_key_names"`
25+
UserData types.String `tfsdk:"user_data"`
26+
QuickConnectEnabled types.String `tfsdk:"quick_connect_enabled"`
27+
QuickConnectUrl types.String `tfsdk:"quick_connect_url"`
2628
}
2729

2830
type NetworkInterfaceSpec struct {

internal/provider/instance_data_source.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ func (d *instanceDataSource) Schema(_ context.Context, _ datasource.SchemaReques
9393
"user_data": schema.StringAttribute{
9494
Optional: true,
9595
},
96+
"quick_connect_enabled": schema.StringAttribute{
97+
Optional: true,
98+
},
9699
},
97100
},
98101
"interfaces": schema.ListNestedAttribute{

internal/provider/instance_resource.go

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ func (r *computeInstanceResource) Schema(_ context.Context, _ resource.SchemaReq
108108
"user_data": schema.StringAttribute{
109109
Optional: true,
110110
},
111+
"quick_connect_enabled": schema.StringAttribute{
112+
Optional: true,
113+
},
114+
"quick_connect_url": schema.StringAttribute{
115+
Computed: true,
116+
Optional: true,
117+
},
111118
},
112119
},
113120
"interfaces": schema.ListNestedAttribute{
@@ -224,9 +231,10 @@ func (r *computeInstanceResource) Create(ctx context.Context, req resource.Creat
224231
Name string "json:\"name\""
225232
VNet string "json:\"vNet\""
226233
} "json:\"interfaces\""
227-
MachineImage string "json:\"machineImage\""
228-
SshPublicKeyNames []string "json:\"sshPublicKeyNames\""
229-
UserData string "json:\"userData,omitempty\""
234+
MachineImage string "json:\"machineImage\""
235+
SshPublicKeyNames []string "json:\"sshPublicKeyNames\""
236+
UserData string "json:\"userData,omitempty\""
237+
QuickConnectEnabled string "json:\"quickConnectEnabled,omitempty\""
230238
}{
231239
AvailabilityZone: fmt.Sprintf("%sa", *r.client.Region),
232240
InstanceGroup: plan.Spec.InstanceGroup.ValueString(),
@@ -239,10 +247,11 @@ func (r *computeInstanceResource) Create(ctx context.Context, req resource.Creat
239247
VNet: fmt.Sprintf("%sa-default", *r.client.Region),
240248
},
241249
},
242-
InstanceType: plan.Spec.InstanceType.ValueString(),
243-
MachineImage: plan.Spec.MachineImage.ValueString(),
244-
UserData: plan.Spec.UserData.ValueString(),
245-
SshPublicKeyNames: sshKeys,
250+
InstanceType: plan.Spec.InstanceType.ValueString(),
251+
MachineImage: plan.Spec.MachineImage.ValueString(),
252+
UserData: plan.Spec.UserData.ValueString(),
253+
SshPublicKeyNames: sshKeys,
254+
QuickConnectEnabled: capitalize(plan.Spec.QuickConnectEnabled.ValueString()),
246255
},
247256
}
248257

@@ -307,6 +316,9 @@ func (r *computeInstanceResource) Create(ctx context.Context, req resource.Creat
307316
return
308317
}
309318

319+
// Set quick connect URL if required
320+
plan.Spec.QuickConnectUrl = types.StringValue(r.getQuickConnectUrl(plan.Spec.QuickConnectEnabled, instResp))
321+
310322
// Set state to fully populated data
311323
diags = resp.State.Set(ctx, plan)
312324
resp.Diagnostics.Append(diags...)
@@ -346,10 +358,12 @@ func (r *computeInstanceResource) Read(ctx context.Context, req resource.ReadReq
346358
state.Name = types.StringValue(instance.Metadata.Name)
347359
state.AvailabilityZone = types.StringValue(instance.Spec.AvailabilityZone)
348360
state.Spec = &models.InstanceSpec{
349-
InstanceGroup: types.StringValue(instance.Spec.InstanceGroup),
350-
InstanceType: types.StringValue(instance.Spec.InstanceType),
351-
MachineImage: types.StringValue(instance.Spec.MachineImage),
352-
UserData: types.StringValue(instance.Spec.UserData),
361+
InstanceGroup: types.StringValue(instance.Spec.InstanceGroup),
362+
InstanceType: types.StringValue(instance.Spec.InstanceType),
363+
MachineImage: types.StringValue(instance.Spec.MachineImage),
364+
UserData: types.StringValue(instance.Spec.UserData),
365+
QuickConnectEnabled: types.StringValue(instance.Spec.QuickConnectEnabled),
366+
QuickConnectUrl: types.StringValue(instance.Spec.QuickConnectUrl),
353367
}
354368

355369
for _, k := range instance.Spec.SshPublicKeyNames {
@@ -440,3 +454,14 @@ func (r *computeInstanceResource) Delete(ctx context.Context, req resource.Delet
440454
return
441455
}
442456
}
457+
458+
func (r *computeInstanceResource) getQuickConnectUrl(quickConnectEnabled types.String, inst *itacservices.Instance) string {
459+
if capitalize(quickConnectEnabled.ValueString()) == "True" {
460+
return fmt.Sprintf("https://%s.connect.%s.devcloudtenant.io/v1/connect/%s/%s",
461+
inst.Metadata.ResourceId,
462+
*r.client.Region,
463+
*r.client.Cloudaccount,
464+
inst.Metadata.ResourceId)
465+
}
466+
return ""
467+
}

internal/provider/utils.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
package provider
22

3+
import "strings"
4+
35
func remove(slice []interface{}, s int) []interface{} {
46
return append(slice[:s], slice[s+1:]...)
57
}
8+
9+
func capitalize(s string) string {
10+
if len(s) == 0 {
11+
return s
12+
}
13+
return strings.ToUpper(s[:1]) + s[1:]
14+
}

pkg/itacservices/instances.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,11 @@ type Instance struct {
4242
Name string `json:"name"`
4343
VNet string `json:"vnet"`
4444
} `json:"interfaces"`
45-
MachineImage string `json:"machineImage"`
46-
SshPublicKeyNames []string `json:"sshPublicKeyNames"`
47-
UserData string `json:"userData,omitempty"`
45+
MachineImage string `json:"machineImage"`
46+
SshPublicKeyNames []string `json:"sshPublicKeyNames"`
47+
UserData string `json:"userData,omitempty"`
48+
QuickConnectEnabled string `json:"quickConnectEnabled,omitempty"`
49+
QuickConnectUrl string `json:"quickConnectUrl,omitempty"`
4850
} `json:"spec"`
4951
Status struct {
5052
Interfaces []struct {
@@ -79,9 +81,10 @@ type InstanceCreateRequest struct {
7981
Name string `json:"name"`
8082
VNet string `json:"vNet"`
8183
} `json:"interfaces"`
82-
MachineImage string `json:"machineImage"`
83-
SshPublicKeyNames []string `json:"sshPublicKeyNames"`
84-
UserData string `json:"userData,omitempty"`
84+
MachineImage string `json:"machineImage"`
85+
SshPublicKeyNames []string `json:"sshPublicKeyNames"`
86+
UserData string `json:"userData,omitempty"`
87+
QuickConnectEnabled string `json:"quickConnectEnabled,omitempty"`
8588
} `json:"spec"`
8689
}
8790

0 commit comments

Comments
 (0)