package io.fathom.cloud.network.commands;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.commands.Cmdlet;
import io.fathom.cloud.network.NetworkService;
import io.fathom.cloud.protobuf.NetworkingModel.NetworkData;
import io.fathom.cloud.protobuf.ProtobufYamlWriter;
import io.fathom.cloud.server.auth.Auth;
import io.fathom.cloud.services.AuthService;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;
import javax.inject.Inject;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NetworkCreateCmdlet extends Cmdlet {
private static final Logger log = LoggerFactory.getLogger(NetworkCreateCmdlet.class);
public NetworkCreateCmdlet() {
super("network-create");
}
@Option(name = "-u", usage = "username", required = true)
public String username;
@Option(name = "-p", usage = "password", required = true)
public String password;
@Option(name = "-project", usage = "project", required = true)
public String project;
@Option(name = "-n", usage = "name", required = true)
public String name;
public boolean adminStateUp = true;
public boolean shared = true;
public boolean routerExternal = true;
@Inject
AuthService authService;
@Inject
NetworkService networkService;
@Override
public void run() throws CloudException, IOException {
Auth unscoped = authService.authenticate(null, username, password);
if (unscoped == null) {
throw new IllegalArgumentException("Cannot authenticate");
}
List<Long> projectIds = authService.resolveProjectName(unscoped, project);
if (projectIds.size() == 0) {
throw new IllegalArgumentException("Cannot find project");
}
if (projectIds.size() != 1) {
throw new IllegalArgumentException("The project name is ambiguous");
}
Long projectId = projectIds.get(0);
Auth auth = authService.authenticate(projectId, username, password);
if (auth == null) {
throw new IllegalArgumentException("Cannot authenticate to project");
}
NetworkData.Builder b = NetworkData.newBuilder();
if (name != null) {
b.setName(name);
}
b.setAdminStateUp(adminStateUp);
b.setShared(shared);
b.setRouterExternal(routerExternal);
NetworkData created = networkService.createNetwork(auth, b);
try (Writer writer = new OutputStreamWriter(stdout)) {
ProtobufYamlWriter.serialize(created, writer);
}
}
// @Override
// public void setSession(ServerSession session) {
// SshAgent sshAgent =
// session.getFactoryManager().getAgentFactory().createClient(session);
//
// sshAgent.sign(, );
// }
}