package io.fathom.cloud.compute.commands;
import io.fathom.cloud.commands.TypedCmdlet;
import io.fathom.cloud.compute.networks.IpRange;
import io.fathom.cloud.compute.services.NetworkMap;
import io.fathom.cloud.protobuf.CloudModel.HostData;
import javax.inject.Inject;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HostUpdateCmdlet extends TypedCmdlet {
private static final Logger log = LoggerFactory.getLogger(HostUpdateCmdlet.class);
@Option(name = "-label", usage = "label", required = false)
public String label;
@Option(name = "-cidr", usage = "cidr", required = true)
public String cidr;
@Option(name = "-net", usage = "network interface", required = false)
public String networkDevice;
@Inject
NetworkMap networkMap;
public HostUpdateCmdlet() {
super("host-update");
}
@Override
protected HostData run0() throws Exception {
IpRange range = IpRange.parse(cidr);
if (!range.isIpv6()) {
throw new IllegalArgumentException("Only IPV6 is supported");
}
HostData host = networkMap.findHost(cidr);
if (host == null) {
throw new IllegalArgumentException("Host with specified CIDR not found");
}
HostData.Builder b = HostData.newBuilder(host);
if (label != null) {
b.setLabel(label);
}
if (networkDevice != null) {
b.setNetworkDevice(networkDevice);
}
HostData created = networkMap.updateHost(host.getId(), b);
return created;
}
}