public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change) { Vm vm = _vms[id]; await Delay(); return(vm); }
public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change) { Vm vm = TryFind(id); await Delay(); return(vm); }
public async Task <Vm> Change(string id, VmKeyValue change) { var segments = change.Value.Split(':'); string label = segments.Length > 1 ? segments.Last() : ""; return(await ReconfigureVm(id, change.Key, label, segments.First())); }
public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change) { _logger.LogDebug("changing " + id + " " + change.Key + "=" + change.Value); Vm vm = await Load(id); if (vm == null) { throw new InvalidOperationException(); } VimClient host = FindHostByVm(id); VmOptions vmo = null; var segments = change.Value.Split(':'); string val = segments.First(); string tag = segments.Length > 1 ? $":{segments.Last()}" : ""; //sanitize inputs if (change.Key == "iso") { // vmo = await GetVmIsoOptions(vm.Name.Tag()); // if (!vmo.Iso.Contains(change.Value)) // throw new InvalidOperationException(); var isopath = new DatastorePath(val); isopath.Merge(host.Options.IsoStore); change = new VmKeyValue { Key = "iso", Value = isopath.ToString() + tag }; } if (change.Key == "net" && !change.Value.StartsWith("_none_")) { vmo = await GetVmNetOptions(vm.Name.Tag()); if (!vmo.Net.Contains(val)) { throw new InvalidOperationException(); } } return(await host.Change(id, change)); }
public async Task <ActionResult <Vm> > Reconfigure(string id, [FromBody] VmKeyValue change) { // need elevated privileges to change vm to special nets if ( change.Key == "net" && !change.Value.Contains("#") && (_user.Role == UserRole.User || _user.Role == UserRole.Builder) ) { throw new ActionForbiddenException(); } await AuthorizeAction(id, "change"); Vm vm = await _pod.Load(id); SendBroadcast(vm, "change"); return(Ok(await _pod.ChangeConfiguration(id, change))); }
public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change) { _logger.LogDebug("changing " + id + " " + change.Key + "=" + change.Value); Vm vm = await Load(id); if (vm == null) { throw new InvalidOperationException(); } VimClient host = FindHostByVm(id); VmOptions vmo = null; //sanitize inputs if (change.Key == "iso") { // vmo = await GetVmIsoOptions(vm.Name.Tag()); // if (!vmo.Iso.Contains(change.Value)) // throw new InvalidOperationException(); var isopath = new DatastorePath(change.Value); isopath.Merge(host.Options.IsoStore); change = new VmKeyValue { Key = "iso", Value = isopath.ToString() }; } if (change.Key == "net") { vmo = await GetVmNetOptions(vm.Name.Tag()); if (!vmo.Net.Contains(change.Value)) { throw new InvalidOperationException(); } } return(await host.Change(id, change)); }
public async Task <ActionResult <Vm> > ReconfigureVm(string id, [FromBody] VmKeyValue change) { AuthorizeAny( () => Actor.IsAdmin, () => CanManageVm(id, Actor.Id).Result ); // need elevated privileges to change vm to special nets if ( Actor.IsBuilder.Equals(false) && change.Key == "net" && change.Value.Contains("#").Equals(false) && _options.AllowUnprivilegedVmReconfigure.Equals(false) ) { throw new ActionForbidden(); } Vm vm = await _pod.ChangeConfiguration(id, change); SendBroadcast(vm, "change"); return(Ok(vm)); }
public async Task <Vm> Change(string id, VmKeyValue change) { return(await ReconfigureVm(id, change.Key, "", change.Value)); }