Package io.fathom.cloud.network.commands

Source Code of io.fathom.cloud.network.commands.NetworkCreateCmdlet

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(, );
    // }
}
TOP

Related Classes of io.fathom.cloud.network.commands.NetworkCreateCmdlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.