Skip to content

Commit 88a8dec

Browse files
committed
fix(oracle,ktclassic): honor AssignPublicIP flag when creating VM
1 parent ec4d640 commit 88a8dec

2 files changed

Lines changed: 46 additions & 23 deletions

File tree

cloud-control-manager/cloud-driver/drivers/ktclassic/resources/VMHandler.go

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -374,32 +374,39 @@ func (vmHandler *KtCloudVMHandler) StartVM(vmReqInfo irs.VMReqInfo) (irs.VMInfo,
374374
// cblogger.Infof("==> \n### result : [%s]", result.Listvirtualmachinesresponse.Virtualmachine[0])
375375
// spew.Dump(result)
376376

377-
publicIp, publicIpId, err := vmHandler.associateIpAddress()
378-
if err != nil {
379-
cblogger.Errorf("Failed to Create New Public IP : [%v]", err)
380-
return irs.VMInfo{}, err
381-
}
382-
cblogger.Infof("==> The Public IP and Public ID : [%s], [%s]", publicIp, publicIpId)
377+
var publicIp, publicIpId string
378+
if vmReqInfo.AssignPublicIP == nil || *vmReqInfo.AssignPublicIP {
379+
publicIp, publicIpId, err = vmHandler.associateIpAddress()
380+
if err != nil {
381+
cblogger.Errorf("Failed to Create New Public IP : [%v]", err)
382+
return irs.VMInfo{}, err
383+
}
384+
cblogger.Infof("==> The Public IP and Public ID : [%s], [%s]", publicIp, publicIpId)
383385

384-
// Caution!!) If execute DeleteFirewall(), PortFording rule also deleted via KT Cloud API
385-
// Delete Firewall Rule(Open : tcp/22) created when setting PORT Forwarding.
386-
// The port No. 22 is opened already when the PortFording rule is created.
386+
// Caution!!) If execute DeleteFirewall(), PortFording rule also deleted via KT Cloud API
387+
// Delete Firewall Rule(Open : tcp/22) created when setting PORT Forwarding.
388+
// The port No. 22 is opened already when the PortFording rule is created.
387389

388-
// _, error := vmHandler.deleteFirewall(publicIpId)
389-
// if error != nil {
390-
// cblogger.Error(error.Error())
390+
// _, error := vmHandler.deleteFirewall(publicIpId)
391+
// if error != nil {
392+
// cblogger.Error(error.Error())
391393

392-
// return irs.VMInfo{}, err
393-
// } else {
394-
// cblogger.Info("Succeeded in Deleting the Firewall rules!!")
395-
// }
394+
// return irs.VMInfo{}, err
395+
// } else {
396+
// cblogger.Info("Succeeded in Deleting the Firewall rules!!")
397+
// }
396398

397-
_, ruleErr := vmHandler.createPortForwardingFirewallRules(sgSystemIDs, publicIpId, newVM.Deployvirtualmachineresponse.ID)
398-
if ruleErr != nil {
399-
newErr := fmt.Errorf("Failed to Create PortForwarding Rules and Firewall Rules : [%v]", ruleErr)
400-
cblogger.Error(newErr.Error())
401-
LoggingError(callLogInfo, newErr)
402-
return irs.VMInfo{}, newErr
399+
_, ruleErr := vmHandler.createPortForwardingFirewallRules(sgSystemIDs, publicIpId, newVM.Deployvirtualmachineresponse.ID)
400+
if ruleErr != nil {
401+
newErr := fmt.Errorf("Failed to Create PortForwarding Rules and Firewall Rules : [%v]", ruleErr)
402+
cblogger.Error(newErr.Error())
403+
LoggingError(callLogInfo, newErr)
404+
return irs.VMInfo{}, newErr
405+
}
406+
} else {
407+
cblogger.Info("# AssignPublicIP=false: skipping Public IP creation and PortForwarding/Firewall rule setup. " +
408+
"KT Cloud Classic enforces Security Groups only via per-PublicIP Firewall/PortForwarding rules, " +
409+
"so the requested SecurityGroups will NOT be enforced at the network level for this VM.")
403410
}
404411

405412
// Converts string slice to string

cloud-control-manager/cloud-driver/drivers/oracle/resources/VMHandler.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,23 @@ func (handler *OracleVMHandler) StartVM(req irs.VMReqInfo) (irs.VMInfo, error) {
5757
}
5858
metadata := map[string]string{"ssh_authorized_keys": keyInfo.PublicKey, "user_data": userData}
5959
vmTags := freeformTagsWith(req.TagList, map[string]string{oracleVMKeyPairNameTag: req.KeyPairIID.NameId, oracleVMUserIDTag: defaultVMUserID})
60-
details := core.LaunchInstanceDetails{CompartmentId: common.String(handler.CompartmentID), AvailabilityDomain: common.String(handler.Region.Zone), DisplayName: common.String(req.IId.NameId), Shape: common.String(req.VMSpecName), SourceDetails: core.InstanceSourceViaImageDetails{ImageId: common.String(imageID)}, CreateVnicDetails: &core.CreateVnicDetails{SubnetId: common.String(req.SubnetIID.SystemId), AssignPublicIp: common.Bool(true), DisplayName: common.String(req.IId.NameId), HostnameLabel: common.String(dnsLabel(req.IId.NameId)), NsgIds: nsgIDs, FreeformTags: vmTags}, Metadata: metadata, FreeformTags: vmTags}
60+
details := core.LaunchInstanceDetails{
61+
CompartmentId: common.String(handler.CompartmentID),
62+
AvailabilityDomain: common.String(handler.Region.Zone),
63+
DisplayName: common.String(req.IId.NameId),
64+
Shape: common.String(req.VMSpecName),
65+
SourceDetails: core.InstanceSourceViaImageDetails{ImageId: common.String(imageID)},
66+
CreateVnicDetails: &core.CreateVnicDetails{
67+
SubnetId: common.String(req.SubnetIID.SystemId),
68+
AssignPublicIp: common.Bool(req.AssignPublicIP == nil || *req.AssignPublicIP),
69+
DisplayName: common.String(req.IId.NameId),
70+
HostnameLabel: common.String(dnsLabel(req.IId.NameId)),
71+
NsgIds: nsgIDs,
72+
FreeformTags: vmTags,
73+
},
74+
Metadata: metadata,
75+
FreeformTags: vmTags,
76+
}
6177
shapeConfig, err := handler.launchShapeConfig(shape)
6278
if err != nil {
6379
return irs.VMInfo{}, err

0 commit comments

Comments
 (0)