All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jclouds.ec2.ami2.clj Maven / Gradle / Ivy

;
; Licensed to jclouds, Inc. (jclouds) under one or more
; contributor license agreements.  See the NOTICE file
; distributed with this work for additional information
; regarding copyright ownership.  jclouds licenses this file
; to you under the Apache License, Version 2.0 (the
; "License"); you may not use this file except in compliance
; with the License.  You may obtain a copy of the License at
;
;   http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing,
; software distributed under the License is distributed on an
; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
; KIND, either express or implied.  See the License for the
; specific language governing permissions and limitations
; under the License.
;

(ns
  #^{:author "Hunter Hutchinson, [email protected]"
     :doc "A clojure binding to the jclouds AMI service interface."}
  org.jclouds.ec2.ami2
  (:use org.jclouds.compute2 [clojure.core.incubator :only (-?>)])
  (:import org.jclouds.aws.domain.Region
    org.jclouds.ec2.services.AMIClient
    org.jclouds.ec2.options.CreateImageOptions
    org.jclouds.compute.domain.NodeMetadata
    (org.jclouds.ec2.domain Volume Volume$Status Snapshot Snapshot$Status AvailabilityZoneInfo)))

(defn ^org.jclouds.ec2.services.AMIClient
  ami-service
  ""
  [compute]
  (-> compute
    .getContext
    .getProviderSpecificContext
    .getApi
    .getAMIServices))

(defn get-region
  "Coerces the first parameter into a Region string; strings, keywords, and
   NodeMetadata instances are acceptable arguments. An optional second argument
   is returned if the first cannot be coerced into a region string.
   Returns nil otherwise."
  ([v] (get-region v nil))
  ([v default-region]
    (cond
      (string? v) v
      (keyword? v) (name v)
      (instance? NodeMetadata v) (let [zone (location v)]
      ; no easier way to go from zone -> region?
      (if (> (.indexOf zone "-") -1)
        (subs zone 0 (-> zone count dec))
        zone))
      :else default-region)))

(defn- as-string
  [v]
  (cond
    (string? v) v
    (keyword? v) (name v)
    :else v))

(defn- get-string
  [map key]
  (as-string (get map key)))

(defn- as-int
  [v]
  (cond
    (number? v) (int v)
    (string? v) (Integer/parseInt v)
    :else (throw (IllegalArgumentException.
    (str "Don't know how to convert object of type " (class v) " to a string")))))

(defn create-image-in-region
  ([compute region name node-id description]
     (.createImageInRegion (ami-service compute)
                              (get-region region)
                              (as-string name)
                              (as-string node-id)
                              (into-array CreateImageOptions
                                          (when description
                                            [(.withDescription (CreateImageOptions.) description)])))))





© 2015 - 2025 Weber Informatics LLC | Privacy Policy