Search in sources :

Example 1 with OpenstackImageClient

use of org.openstack.client.common.OpenstackImageClient in project platformlayer by platformlayer.

the class OpenstackCloudContext method getImageStore.

public ImageStore getImageStore(OpenstackCloud cloud) throws OpsException {
    OpenstackCloudHelpers helpers = new OpenstackCloudHelpers();
    OpenstackImageClient openstackImageClient = helpers.buildOpenstackImageClient(cloud);
    return new GlanceImageStore(openstackImageClient);
}
Also used : OpenstackImageClient(org.openstack.client.common.OpenstackImageClient)

Example 2 with OpenstackImageClient

use of org.openstack.client.common.OpenstackImageClient in project platformlayer by platformlayer.

the class GlanceImageStore method updateImageTags.

@Override
public void updateImageTags(String imageId, Tags tags) throws OpsException {
    OpenstackImageClient glanceClient = getOpenstackImageClient();
    boolean replace = false;
    try {
        Map<String, Object> tagMap = Maps.newHashMap();
        for (Tag tag : tags.getTags()) {
            tagMap.put(tag.getKey(), tag.getValue());
        }
        glanceClient.root().images().image(imageId).updateMetadata(tagMap, replace);
    } catch (OpenstackException e) {
        throw new OpsException("Error updating image tags", e);
    }
}
Also used : OpsException(org.platformlayer.ops.OpsException) OpenstackImageClient(org.openstack.client.common.OpenstackImageClient) JSONObject(org.json.JSONObject) Tag(org.platformlayer.core.model.Tag) OpenstackException(org.openstack.client.OpenstackException)

Example 3 with OpenstackImageClient

use of org.openstack.client.common.OpenstackImageClient in project platformlayer by platformlayer.

the class GlanceImageStore method uploadImage.

@Override
public String uploadImage(OpsTarget target, Tags tags, File imageFile, long rawImageFileSize) throws OpsException {
    OpenstackImageClient client = getOpenstackImageClient();
    String diskFormat = null;
    if (tags != null) {
        // This logic looks suspicious...
        assert false;
        for (Tag tag : tags.getTags()) {
            ImageFormat imageFormat = ImageFormat.fromTags(tags);
            diskFormat = mapToGlanceDiskFormat(imageFormat);
        }
    }
    String glanceBaseUrl;
    String tokenId;
    try {
        Access access = client.getSession().getAuthenticationToken();
        tokenId = access.getToken().getId();
        glanceBaseUrl = client.root().getBaseUrl();
    } catch (OpenstackException e) {
        throw new OpsException("Error getting glance url", e);
    }
    // Upload to glance
    String glanceUploadUrl = glanceBaseUrl;
    if (!glanceUploadUrl.endsWith("/")) {
        glanceUploadUrl += "/";
    }
    glanceUploadUrl += "images";
    String imageName = "image-" + System.currentTimeMillis();
    Command command = Command.build("curl");
    command.addLiteral("--fail");
    command.addLiteral("--upload-file").addFile(imageFile);
    command.addLiteral("-X").addLiteral("POST");
    command.addLiteral("-H").addQuoted("X-Auth-Token: " + tokenId);
    command.addLiteral("-H").addQuoted("Content-Type: application/octet-stream");
    command.addLiteral("-H").addQuoted("X-Image-Meta-Name: " + imageName);
    command.addLiteral("-H").addQuoted("X-Image-Meta-Is-Public: True");
    // } else {
    if (diskFormat != null) {
        command.addLiteral("-H").addQuoted("X-Image-Meta-Disk-Format: " + diskFormat);
    }
    command.addLiteral("-H").addQuoted("X-Image-Meta-Container-Format: bare");
    // }
    // command.addLiteral("-H").addQuoted("X-Image-Meta-Min-Disk: 0");
    // command.addLiteral("-H").addQuoted("X-Image-Meta-Min-Ram: 0");
    // command.addLiteral("-H").addQuoted("X-Image-Meta-Image-Size: " + rawImageFileSize);
    command.addLiteral("-H").addQuoted("X-Image-Meta-Size: " + rawImageFileSize);
    // image_meta = {'name': fields.pop('name'),
    // 'is_public': utils.bool_from_string(
    // fields.pop('is_public', False)),
    // 'disk_format': fields.pop('disk_format', 'raw'),
    // 'min_disk': fields.pop('min_disk', 0),
    // 'min_ram': fields.pop('min_ram', 0),
    // 'container_format': fields.pop('container_format', 'ovf')}
    // glance add name=DebianSqueeze is_public=True disk_format=raw container_format=bare
    // system_id="http://org.platformlayer/service/imagefactory/v1.0:bootstrap"
    // image_size="${RAW_SIZE}" < disk.raw.gz
    command.addQuoted(glanceUploadUrl);
    command.setTimeout(TimeSpan.FIFTEEN_MINUTES);
    ProcessExecution execution = target.executeCommand(command);
    String imageId;
    // String imageLocation;
    {
        // "is_public": true, "deleted_at": null, "min_ram": 0, "size": 925761536}}
        try {
            JSONObject json = new JSONObject(execution.getStdOut());
            JSONObject image = json.getJSONObject("image");
            // imageLocation = image.getString("location");
            imageId = image.getString("id");
        } catch (JSONException e) {
            log.warn("Image upload returned: " + execution.getStdOut());
            throw new OpsException("Error parsing return value from image upload", e);
        }
    }
    if (tags != null) {
        updateImageTags(imageId, tags);
    }
    return imageId;
}
Also used : OpsException(org.platformlayer.ops.OpsException) JSONObject(org.json.JSONObject) Command(org.platformlayer.ops.Command) ProcessExecution(org.platformlayer.ops.process.ProcessExecution) OpenstackImageClient(org.openstack.client.common.OpenstackImageClient) Access(org.openstack.model.identity.Access) JSONException(org.json.JSONException) Tag(org.platformlayer.core.model.Tag) OpenstackException(org.openstack.client.OpenstackException) ImageFormat(org.platformlayer.ops.images.ImageFormat)

Example 4 with OpenstackImageClient

use of org.openstack.client.common.OpenstackImageClient in project platformlayer by platformlayer.

the class GlanceImageStore method findImages.

@Override
public List<CloudImage> findImages(List<Tag> tags) throws OpsException {
    List<CloudImage> matches = Lists.newArrayList();
    OpenstackImageClient glanceClient = getOpenstackImageClient();
    Iterable<Image> images;
    try {
        images = glanceClient.root().images().list(true);
    } catch (OpenstackException e) {
        throw new OpsException("Error listing images", e);
    }
    for (Image image : images) {
        boolean match = true;
        for (Tag tag : tags) {
            match = false;
            String tagKey = tag.getKey();
            String tagValue = tag.getValue();
            boolean checked = false;
            if (ImageFormat.isImageFormatTag(tag)) {
                ImageFormat format = ImageFormat.fromTag(tag);
                // if ("qcow2".equals(tagValue)) {
                // format = ImageFormat.DiskQcow2;
                // } else {
                // throw new UnsupportedOperationException("Unknown glance disk_format: " + tagValue);
                // }
                //
                // Tag mappedTag = format.toTag();
                //
                // match = Objects.equal(mappedTag.getValue().getDiskFormat(), glanceDiskFormat);
                // checked = true;
                String glanceDiskFormat = mapToGlanceDiskFormat(format);
                if (glanceDiskFormat != null) {
                    match = Objects.equal(image.getDiskFormat(), glanceDiskFormat);
                    checked = true;
                }
            }
            if (!checked) {
                for (Entry<String, Object> meta : image.getProperties().asMap().entrySet()) {
                    if (Objects.equal(tagKey, meta.getKey())) {
                        String content = (String) meta.getValue();
                        // OS BUG #885044: Content contains whitespace
                        content = content.trim();
                        if (content.equals(tagValue)) {
                            match = true;
                        }
                    }
                }
            }
            if (!match) {
                break;
            }
        }
        if (match) {
            matches.add(new GlanceImage(image));
        }
    }
    return matches;
}
Also used : OpsException(org.platformlayer.ops.OpsException) CloudImage(org.platformlayer.ops.images.CloudImage) Image(org.openstack.model.image.Image) CloudImage(org.platformlayer.ops.images.CloudImage) OpenstackException(org.openstack.client.OpenstackException) ImageFormat(org.platformlayer.ops.images.ImageFormat) OpenstackImageClient(org.openstack.client.common.OpenstackImageClient) JSONObject(org.json.JSONObject) Tag(org.platformlayer.core.model.Tag)

Aggregations

OpenstackImageClient (org.openstack.client.common.OpenstackImageClient)4 JSONObject (org.json.JSONObject)3 OpenstackException (org.openstack.client.OpenstackException)3 Tag (org.platformlayer.core.model.Tag)3 OpsException (org.platformlayer.ops.OpsException)3 ImageFormat (org.platformlayer.ops.images.ImageFormat)2 JSONException (org.json.JSONException)1 Access (org.openstack.model.identity.Access)1 Image (org.openstack.model.image.Image)1 Command (org.platformlayer.ops.Command)1 CloudImage (org.platformlayer.ops.images.CloudImage)1 ProcessExecution (org.platformlayer.ops.process.ProcessExecution)1