package org.xmlsh.aws; import java.io.IOException; import java.util.List; import javax.xml.stream.XMLStreamException; import org.xmlsh.aws.util.AWSEC2Command; import org.xmlsh.core.CoreException; import org.xmlsh.core.Options; import org.xmlsh.core.UnexpectedException; import org.xmlsh.core.XValue; import com.amazonaws.services.ec2.model.CopyImageRequest; import com.amazonaws.services.ec2.model.CopyImageResult; import net.sf.saxon.s9api.SaxonApiException; public class ec2CopyImage extends AWSEC2Command { /** * @param args * @throws IOException */ @Override public int run(List<XValue> args) throws Exception { Options opts = getOptions( "r=source-region:,s=source-ami-id:,n=name:,d=description:,c=client-token:"); parseOptions(opts, args); setSerializeOpts(this.getSerializeOpts(opts)); args = opts.getRemainingArgs(); try { getEC2Client(opts); } catch (UnexpectedException e) { usage(e.getLocalizedMessage()); return 1; } int ret = copy(opts); return ret; } private int copy(Options opts) throws IOException, XMLStreamException, SaxonApiException, CoreException { String sourceImageId = opts.getOptStringRequired("source-ami-id"); String sourceRegion = opts.getOptStringRequired("source-region"); CopyImageRequest request = (new CopyImageRequest()) .withSourceImageId(sourceImageId) .withSourceRegion(sourceRegion); String name = opts.getOptString("name", null); String desc = opts.getOptString("description", null); if(name != null) request.setName(name); if(desc != null) request.setDescription(desc); traceCall("copyImage"); CopyImageResult result = getAWSClient().copyImage(request); writeResult(result); return 0; } private void writeResult(CopyImageResult result) throws IOException, XMLStreamException, SaxonApiException, CoreException { startResult(); startElement("image"); attribute("image-id", result.getImageId()); endElement(); endResult(); } }