package io.fathom.cloud.dns.command;
import io.fathom.cloud.commands.TypedCmdlet;
import io.fathom.cloud.dns.services.DnsBackends;
import io.fathom.cloud.protobuf.DnsModel.BackendData;
import io.fathom.cloud.protobuf.DnsModel.BackendSecretData;
import io.fathom.cloud.protobuf.DnsModel.DnsBackendProviderType;
import javax.inject.Inject;
import org.kohsuke.args4j.Option;
import com.google.common.base.Strings;
public class DnsBackendCreateCmdlet extends TypedCmdlet {
@Option(name = "-e", usage = "email", required = false, metaVar = "EMAIL")
public String email;
@Option(name = "-s", usage = "server", required = false, metaVar = "URL")
public String server;
@Option(name = "-key", usage = "provider key", required = true, metaVar = "ID")
public String key;
@Option(name = "-type", usage = "provider type", required = false)
public DnsBackendProviderType type = DnsBackendProviderType.OPENSTACK;
@Option(name = "-default", usage = "default", required = false)
public boolean defaultProvider = false;
@Option(name = "-username", usage = "Backend service username", required = false)
public String username;
@Option(name = "-secret", usage = "Backend service secret / password", required = false)
public String secret;
@Inject
DnsBackends dnsBackends;
public DnsBackendCreateCmdlet() {
super("dns-backend-create");
}
@Override
protected BackendData run0() throws Exception {
if (server == null) {
switch (type) {
case OPENSTACK:
this.server = "https://api-cloud.fathomdb.com/openstack/identity/";
break;
}
}
if (Strings.isNullOrEmpty(email)) {
if (type == DnsBackendProviderType.OPENSTACK) {
throw new IllegalArgumentException("Email is required when using remote openstack DNS");
}
}
BackendData.Builder b = BackendData.newBuilder();
b.setKey(key);
b.setType(type);
if (server != null) {
b.setUrl(server);
}
b.setDefault(defaultProvider);
BackendSecretData.Builder sb = BackendSecretData.newBuilder();
{
if (username != null) {
sb.setUsername(username);
}
if (secret != null) {
sb.setPassword(secret);
}
}
BackendData registration = dnsBackends.register(b, sb, email);
return registration;
}
}