/************************************************************************* * Copyright 2009-2014 Eucalyptus Systems, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. * * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need * additional information or have any questions. ************************************************************************/ package com.eucalyptus.resources.client; import java.util.ArrayList; import java.util.List; import com.eucalyptus.auth.euare.*; import com.eucalyptus.component.id.Euare; import com.eucalyptus.resources.EucalyptusActivityException; import com.eucalyptus.util.DispatchingClient; import com.eucalyptus.util.Exceptions; import com.eucalyptus.util.Callback.Checked; import com.eucalyptus.util.async.CheckedListenableFuture; import com.google.common.collect.Lists; import org.apache.log4j.Logger; /** * @author Sang-Min Park * */ public class EuareClient { private static Logger LOG = Logger.getLogger(EuareClient.class); private static EuareClient _instance = null; private EuareClient(){ } public static EuareClient getInstance(){ if(_instance == null) _instance = new EuareClient(); return _instance; } private class EuareContext extends AbstractClientContext<EuareMessage, Euare> { private EuareContext(final String userId){ super(userId, Euare.class); } } private class EuareGetServerCertificateTask extends EucalyptusClientTask<EuareMessage, Euare> { private String certName = null; private ServerCertificateType certificate = null; private EuareGetServerCertificateTask(final String certName) { this.certName = certName; } private GetServerCertificateType getRequest() { final GetServerCertificateType req = new GetServerCertificateType(); req.setServerCertificateName(this.certName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(getRequest(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final GetServerCertificateResponseType resp = (GetServerCertificateResponseType) response; if (resp.getGetServerCertificateResult() != null) this.certificate = resp.getGetServerCertificateResult() .getServerCertificate(); } public ServerCertificateType getServerCertificate() { return this.certificate; } } private class EuareDeleteInstanceProfileTask extends EucalyptusClientTask<EuareMessage, Euare> { private String profileName = null; private EuareDeleteInstanceProfileTask(String profileName) { this.profileName = profileName; } private DeleteInstanceProfileType deleteInstanceProfile() { final DeleteInstanceProfileType req = new DeleteInstanceProfileType(); req.setInstanceProfileName(this.profileName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(deleteInstanceProfile(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final DeleteInstanceProfileResponseType resp = (DeleteInstanceProfileResponseType) response; } } private class EuareAddRoleToInstanceProfileTask extends EucalyptusClientTask<EuareMessage, Euare> { private String instanceProfileName = null; private String roleName = null; private EuareAddRoleToInstanceProfileTask(final String instanceProfileName, final String roleName) { this.instanceProfileName = instanceProfileName; this.roleName = roleName; } private AddRoleToInstanceProfileType addRoleToInstanceProfile() { final AddRoleToInstanceProfileType req = new AddRoleToInstanceProfileType(); req.setRoleName(this.roleName); req.setInstanceProfileName(this.instanceProfileName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(addRoleToInstanceProfile(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final AddRoleToInstanceProfileResponseType resp = (AddRoleToInstanceProfileResponseType) response; } } private class EuareRemoveRoleFromInstanceProfileTask extends EucalyptusClientTask<EuareMessage, Euare> { private String instanceProfileName = null; private String roleName = null; private EuareRemoveRoleFromInstanceProfileTask( final String instanceProfileName, final String roleName) { this.instanceProfileName = instanceProfileName; this.roleName = roleName; } private RemoveRoleFromInstanceProfileType removeRoleFromInstanceProfile() { final RemoveRoleFromInstanceProfileType req = new RemoveRoleFromInstanceProfileType(); req.setRoleName(this.roleName); req.setInstanceProfileName(this.instanceProfileName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(removeRoleFromInstanceProfile(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final RemoveRoleFromInstanceProfileResponseType resp = (RemoveRoleFromInstanceProfileResponseType) response; } } private class EuareListInstanceProfilesTask extends EucalyptusClientTask<EuareMessage, Euare> { private String pathPrefix = null; private List<InstanceProfileType> instanceProfiles = null; private EuareListInstanceProfilesTask(final String pathPrefix) { this.pathPrefix = pathPrefix; } private ListInstanceProfilesType listInstanceProfiles() { final ListInstanceProfilesType req = new ListInstanceProfilesType(); req.setPathPrefix(this.pathPrefix); return req; } public List<InstanceProfileType> getInstanceProfiles() { return this.instanceProfiles; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(listInstanceProfiles(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { ListInstanceProfilesResponseType resp = (ListInstanceProfilesResponseType) response; try { instanceProfiles = resp.getListInstanceProfilesResult() .getInstanceProfiles().getMember(); } catch (Exception ex) { ; } } } private class EuareCreateInstanceProfileTask extends EucalyptusClientTask<EuareMessage, Euare> { private String profileName = null; private String path = null; private InstanceProfileType instanceProfile = null; private EuareCreateInstanceProfileTask(String profileName, String path) { this.profileName = profileName; this.path = path; } private CreateInstanceProfileType createInstanceProfile() { final CreateInstanceProfileType req = new CreateInstanceProfileType(); req.setInstanceProfileName(this.profileName); req.setPath(this.path); return req; } public InstanceProfileType getInstanceProfile() { return this.instanceProfile; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(createInstanceProfile(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final CreateInstanceProfileResponseType resp = (CreateInstanceProfileResponseType) response; try { this.instanceProfile = resp.getCreateInstanceProfileResult() .getInstanceProfile(); } catch (Exception ex) { ; } } } private class EuareDeleteRoleTask extends EucalyptusClientTask<EuareMessage, Euare> { private String roleName = null; private EuareDeleteRoleTask(String roleName) { this.roleName = roleName; } private DeleteRoleType deleteRole() { final DeleteRoleType req = new DeleteRoleType(); req.setRoleName(this.roleName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(deleteRole(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final DeleteRoleResponseType resp = (DeleteRoleResponseType) response; } } private class EuareCreateRoleTask extends EucalyptusClientTask<EuareMessage, Euare> { String roleName = null; String path = null; String assumeRolePolicy = null; private RoleType role = null; private EuareCreateRoleTask(String roleName, String path, String assumeRolePolicy) { this.roleName = roleName; this.path = path; this.assumeRolePolicy = assumeRolePolicy; } private CreateRoleType createRole() { final CreateRoleType req = new CreateRoleType(); req.setRoleName(this.roleName); req.setPath(this.path); req.setAssumeRolePolicyDocument(this.assumeRolePolicy); return req; } public RoleType getRole() { return this.role; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(createRole(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { CreateRoleResponseType resp = (CreateRoleResponseType) response; try { this.role = resp.getCreateRoleResult().getRole(); } catch (Exception ex) { ; } } } private class EuareListRolesTask extends EucalyptusClientTask<EuareMessage, Euare> { private String pathPrefix = null; private List<RoleType> roles = Lists.newArrayList(); private EuareListRolesTask(String pathPrefix) { this.pathPrefix = pathPrefix; } private ListRolesType listRoles() { final ListRolesType req = new ListRolesType(); req.setPathPrefix(this.pathPrefix); return req; } public List<RoleType> getRoles() { return this.roles; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(listRoles(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { ListRolesResponseType resp = (ListRolesResponseType) response; try { this.roles = resp.getListRolesResult().getRoles().getMember(); } catch (Exception ex) { ; } } } private class EuarePutRolePolicyTask extends EucalyptusClientTask<EuareMessage, Euare> { private String roleName = null; private String policyName = null; private String policyDocument = null; private EuarePutRolePolicyTask(String roleName, String policyName, String policyDocument) { this.roleName = roleName; this.policyName = policyName; this.policyDocument = policyDocument; } private PutRolePolicyType putRolePolicy() { final PutRolePolicyType req = new PutRolePolicyType(); req.setRoleName(this.roleName); req.setPolicyName(this.policyName); req.setPolicyDocument(this.policyDocument); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(putRolePolicy(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final PutRolePolicyResponseType resp = (PutRolePolicyResponseType) response; } } private class EuareListRolePoliciesTask extends EucalyptusClientTask<EuareMessage, Euare> { private String roleName = null; private List<String> policies = null; private EuareListRolePoliciesTask(final String roleName) { this.roleName = roleName; } private ListRolePoliciesType listRolePolicies() { final ListRolePoliciesType req = new ListRolePoliciesType(); req.setRoleName(this.roleName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(listRolePolicies(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { try { final ListRolePoliciesResponseType resp = (ListRolePoliciesResponseType) response; this.policies = resp.getListRolePoliciesResult().getPolicyNames() .getMemberList(); } catch (final Exception ex) { this.policies = Lists.newArrayList(); } } public List<String> getResult() { return this.policies; } } private class EuareGetRolePolicyTask extends EucalyptusClientTask<EuareMessage, Euare> { private String roleName = null; private String policyName = null; private GetRolePolicyResult result = null; private EuareGetRolePolicyTask(final String roleName, final String policyName) { this.roleName = roleName; this.policyName = policyName; } private GetRolePolicyType getRolePolicy() { final GetRolePolicyType req = new GetRolePolicyType(); req.setRoleName(this.roleName); req.setPolicyName(this.policyName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(getRolePolicy(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { try { final GetRolePolicyResponseType resp = (GetRolePolicyResponseType) response; this.result = resp.getGetRolePolicyResult(); } catch (final Exception ex) { ; } } GetRolePolicyResult getResult() { return this.result; } } private class EuareDeleteRolePolicyTask extends EucalyptusClientTask<EuareMessage, Euare> { private String roleName = null; private String policyName = null; private EuareDeleteRolePolicyTask(final String roleName, final String policyName) { this.roleName = roleName; this.policyName = policyName; } private DeleteRolePolicyType deleteRolePolicy() { final DeleteRolePolicyType req = new DeleteRolePolicyType(); req.setRoleName(this.roleName); req.setPolicyName(this.policyName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(deleteRolePolicy(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final DeleteRolePolicyResponseType resp = (DeleteRolePolicyResponseType) response; } } private class UploadServerCertificateTask extends EucalyptusClientTask<EuareMessage, Euare> { private String certName = null; private String certPath = "/"; private String certPem = null; private String pkPem = null; private String certChain = null; private ServerCertificateMetadataType serverCertificateMetadata = null; private UploadServerCertificateTask(final String certName, final String certPath, final String certPem, final String pkPem, final String certChain ){ this.certName = certName; if(certPath!=null) this.certPath = certPath; this.certPem = certPem; this.pkPem = pkPem; this.certChain = certChain; } private UploadServerCertificateType uploadServerCertificate(){ final UploadServerCertificateType req = new UploadServerCertificateType(); req.setServerCertificateName(this.certName); req.setPath(this.certPath); req.setCertificateBody(this.certPem); req.setPrivateKey(this.pkPem); if(this.certChain!=null) req.setCertificateChain(this.certChain); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(uploadServerCertificate(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final UploadServerCertificateResponseType resp = (UploadServerCertificateResponseType) response; serverCertificateMetadata = resp.getUploadServerCertificateResult().getServerCertificateMetadata(); } public ServerCertificateMetadataType getCertificateMetadata() { return serverCertificateMetadata; } } private class DeleteServerCertificateTask extends EucalyptusClientTask<EuareMessage, Euare> { private String certName = null; private DeleteServerCertificateTask(final String certName){ this.certName = certName; } private DeleteServerCertificateType deleteServerCertificate(){ final DeleteServerCertificateType req = new DeleteServerCertificateType(); req.setServerCertificateName(this.certName); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(deleteServerCertificate(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final DeleteServerCertificateResponseType resp = new DeleteServerCertificateResponseType(); } } //TODO: need formatting private class DescribeServerCertificateTask extends EucalyptusClientTask<EuareMessage, Euare> { private String certName = null; private String path = null; private ServerCertificateMetadataType result = null; private DescribeServerCertificateTask(final String certName, final String path) { if (certName == null || certName.isEmpty()) throw new IllegalArgumentException("Cert name can't be null or empty"); this.certName = certName; this.path = path; } private ListServerCertificatesType deleteServerCertificate() { final ListServerCertificatesType req = new ListServerCertificatesType(); if (path != null) req.setPathPrefix(path); return req; } @Override void dispatchInternal(ClientContext<EuareMessage, Euare> context, Checked<EuareMessage> callback) { final DispatchingClient<EuareMessage, Euare> client = context.getClient(); client.dispatch(deleteServerCertificate(), callback); } @Override void dispatchSuccess(ClientContext<EuareMessage, Euare> context, EuareMessage response) { final ListServerCertificatesResponseType resp = (ListServerCertificatesResponseType) response; if (resp != null && resp.getListServerCertificatesResult() != null) { ArrayList<ServerCertificateMetadataType> results = resp.getListServerCertificatesResult().getServerCertificateMetadataList().getMemberList(); for(ServerCertificateMetadataType cert:results) { if (cert.getServerCertificateName().equals(certName)) { result = cert; break; } } } else { LOG.debug("Can't get response from ListServerCertificates request"); } } public ServerCertificateMetadataType getResult() { return result; } } public List<RoleType> listRoles(final String userId, final String pathPrefix) { final EuareListRolesTask task = new EuareListRolesTask(pathPrefix); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getRoles(); } else throw new EucalyptusActivityException("failed to list IAM roles"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public RoleType createRole(final String userId, final String roleName, final String path, final String assumeRolePolicy) { final EuareCreateRoleTask task = new EuareCreateRoleTask(roleName, path, assumeRolePolicy); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getRole(); } else throw new EucalyptusActivityException("failed to create IAM role"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public ServerCertificateType getServerCertificate(final String userId, final String certName) { final EuareGetServerCertificateTask task = new EuareGetServerCertificateTask( certName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getServerCertificate(); } else throw new EucalyptusActivityException( "failed to get server certificate"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void deleteRole(final String userId, final String roleName) { final EuareDeleteRoleTask task = new EuareDeleteRoleTask(roleName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException("failed to delete IAM role"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public List<InstanceProfileType> listInstanceProfiles(final String userId, String pathPrefix) { final EuareListInstanceProfilesTask task = new EuareListInstanceProfilesTask( pathPrefix); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getInstanceProfiles(); } else throw new EucalyptusActivityException("failed to delete IAM role"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public InstanceProfileType createInstanceProfile(final String userId, String profileName, String path) { final EuareCreateInstanceProfileTask task = new EuareCreateInstanceProfileTask( profileName, path); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getInstanceProfile(); } else throw new EucalyptusActivityException( "failed to create IAM instance profile"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void deleteInstanceProfile(final String userId, String profileName) { final EuareDeleteInstanceProfileTask task = new EuareDeleteInstanceProfileTask( profileName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException( "failed to delete IAM instance profile"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void addRoleToInstanceProfile(final String userId, String instanceProfileName, String roleName) { final EuareAddRoleToInstanceProfileTask task = new EuareAddRoleToInstanceProfileTask( instanceProfileName, roleName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException( "failed to add role to the instance profile"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void removeRoleFromInstanceProfile(final String userId, String instanceProfileName, String roleName) { final EuareRemoveRoleFromInstanceProfileTask task = new EuareRemoveRoleFromInstanceProfileTask( instanceProfileName, roleName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException( "failed to remove role from the instance profile"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public List<String> listRolePolicies(final String userId, final String roleName) { final EuareListRolePoliciesTask task = new EuareListRolePoliciesTask( roleName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getResult(); } else throw new EucalyptusActivityException("failed to list role's policies"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public GetRolePolicyResult getRolePolicy(final String userId, String roleName, String policyName) { final EuareGetRolePolicyTask task = new EuareGetRolePolicyTask(roleName, policyName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return task.getResult(); } else throw new EucalyptusActivityException("failed to get role's policy"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void putRolePolicy(final String userId, String roleName, String policyName, String policyDocument) { final EuarePutRolePolicyTask task = new EuarePutRolePolicyTask(roleName, policyName, policyDocument); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException("failed to put role's policy"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public void deleteRolePolicy(final String userId, String roleName, String policyName) { final EuareDeleteRolePolicyTask task = new EuareDeleteRolePolicyTask( roleName, policyName); final CheckedListenableFuture<Boolean> result = task .dispatch(new EuareContext(userId)); try { if (result.get()) { return; } else throw new EucalyptusActivityException("failed to delete role's policy"); } catch (Exception ex) { throw Exceptions.toUndeclared(ex); } } public ServerCertificateMetadataType uploadServerCertificate(final String userId, final String certName, final String certPath, final String certBodyPem, final String pkPem, final String certChainPem){ final UploadServerCertificateTask task = new UploadServerCertificateTask(certName, certPath, certBodyPem, pkPem, certChainPem ); final CheckedListenableFuture<Boolean> result = task.dispatch(new EuareContext(userId)); try{ if(result.get()){ return task.getCertificateMetadata(); }else throw new EucalyptusActivityException("failed to upload server certificate"); }catch(Exception ex){ throw Exceptions.toUndeclared(ex); } } public void deleteServerCertificate(final String userId, final String certName){ final DeleteServerCertificateTask task = new DeleteServerCertificateTask(certName); final CheckedListenableFuture<Boolean> result = task.dispatch(new EuareContext(userId)); try{ if(result.get()){ return; }else throw new EucalyptusActivityException("failed to delete server certificate"); }catch(Exception ex){ throw Exceptions.toUndeclared(ex); } } public ServerCertificateMetadataType describeServerCertificate(final String userId, final String certName, final String path){ final DescribeServerCertificateTask task = new DescribeServerCertificateTask(certName, path); final CheckedListenableFuture<Boolean> result = task.dispatch(new EuareContext(userId)); try{ if(result.get()){ return task.getResult(); }else throw new EucalyptusActivityException("failed to delete server certificate"); }catch(Exception ex){ throw Exceptions.toUndeclared(ex); } } }