Example #1
0
        public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change)
        {
            Vm vm = _vms[id];

            await Delay();

            return(vm);
        }
Example #2
0
        public async Task <Vm> ChangeConfiguration(string id, VmKeyValue change)
        {
            Vm vm = TryFind(id);

            await Delay();

            return(vm);
        }
Example #3
0
        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()));
        }
Example #4
0
        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));
        }
Example #5
0
        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)));
        }
Example #6
0
        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));
        }
Example #7
0
        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));
        }
Example #8
0
 public async Task <Vm> Change(string id, VmKeyValue change)
 {
     return(await ReconfigureVm(id, change.Key, "", change.Value));
 }