in pkg/fake/virtualmachinesapi.go [93:155]
func (c *VirtualMachinesAPI) BeginCreateOrUpdate(_ context.Context, resourceGroupName string, vmName string, parameters armcompute.VirtualMachine, options *armcompute.VirtualMachinesClientBeginCreateOrUpdateOptions) (*runtime.Poller[armcompute.VirtualMachinesClientCreateOrUpdateResponse], error) {
// gather input parameters (may get rid of this with multiple mocked function signatures to reflect common patterns)
input := &VirtualMachineCreateOrUpdateInput{
ResourceGroupName: resourceGroupName,
VMName: vmName,
VM: parameters,
Options: options,
}
// BeginCreateOrUpdate should fail, if the vm exists in the cache, and we are attempting to change properties for zone
return c.VirtualMachineCreateOrUpdateBehavior.Invoke(input, func(input *VirtualMachineCreateOrUpdateInput) (*armcompute.VirtualMachinesClientCreateOrUpdateResponse, error) {
//if input.ResourceGroupName == "" {
// return nil, errors.New("ResourceGroupName is required")
//}
// TODO: may have to clone ...
// TODO: subscription ID?
vm := input.VM
id := utils.MkVMID(input.ResourceGroupName, input.VMName)
vm.ID = to.StringPtr(id)
// Check store for existing vm by name
existingVM, ok := c.Instances.Load(id)
if ok {
incomingZone := vm.Zones[0] // Note: this assumes at least 1 zone and only one zone is put on our vm
existingZone := existingVM.(armcompute.VirtualMachine).Zones[0]
if incomingZone != existingZone {
// Currently only returning for zones, but osProfile.customData will also return this error
errCode := "PropertyChangeNotAllowed"
msg := `Creating virtual machine "aks-default-4984v" failed: PUT https://management.azure.com/subscriptions/****/resourceGroups/****/providers/Microsoft.Compute/virtualMachines/aks-default-4984v
--------------------------------------------------------------------------------
RESPONSE 409: 409 Conflict
ERROR CODE: PropertyChangeNotAllowed
--------------------------------------------------------------------------------
{
"error": {
"code": "PropertyChangeNotAllowed",
"message": "Changing property 'zones' is not allowed.",
"target": "zones"
}
}
--------------------------------------------------------------------------------`
return nil, &azcore.ResponseError{
ErrorCode: errCode,
RawResponse: &http.Response{
Body: createSDKErrorBody(errCode, msg),
},
}
}
// Use existing vm rather than restoring
return &armcompute.VirtualMachinesClientCreateOrUpdateResponse{VirtualMachine: existingVM.(armcompute.VirtualMachine)}, nil
}
vm.Name = to.StringPtr(input.VMName)
if vm.Properties == nil {
vm.Properties = &armcompute.VirtualMachineProperties{}
}
if vm.Properties.TimeCreated == nil {
vm.Properties.TimeCreated = lo.ToPtr(time.Now()) // TODO: use simulated time?
}
c.Instances.Store(id, vm)
return &armcompute.VirtualMachinesClientCreateOrUpdateResponse{VirtualMachine: vm}, nil
})
}