001/*
002 * VM-Operator
003 * Copyright (C) 2023 Michael N. Lipp
004 * 
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
017 */
018
019package org.jdrupes.vmoperator.runner.qemu.commands;
020
021import com.fasterxml.jackson.databind.JsonNode;
022import com.fasterxml.jackson.databind.node.ObjectNode;
023
024/**
025 * A {@link QmpCommand} that plugs a CPU into an unused slot.
026 */
027public class QmpAddCpu extends QmpCommand {
028
029    private final JsonNode unused;
030    private final String cpuId;
031
032    /**
033     * Instantiates a new command.
034     *
035     * @param unused description of an unused cpu slot
036     * @param cpuId the cpu id
037     */
038    public QmpAddCpu(JsonNode unused, String cpuId) {
039        super();
040        this.unused = unused.deepCopy();
041        this.cpuId = cpuId;
042    }
043
044    @Override
045    public JsonNode toJson() {
046        ObjectNode cmd = mapper.createObjectNode();
047        cmd.put("execute", "device_add");
048        ObjectNode args = mapper.createObjectNode();
049        cmd.set("arguments", args);
050        args.setAll((ObjectNode) unused.get("props"));
051        args.set("driver", unused.get("type"));
052        args.put("id", cpuId);
053        return cmd;
054    }
055
056    @Override
057    public String toString() {
058        return "QmpAddCpu(" + unused.get("type") + ", " + cpuId + ")";
059    }
060
061}