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

org.jclouds.ec2.elastic_ip2.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 "Chas Emerick, [email protected]"
     :doc "A clojure binding for the jclouds AWS elastic IP address interface."}
  org.jclouds.ec2.elastic-ip2
  (:require (org.jclouds [compute2 :as compute])
    [org.jclouds.ec2.ebs :as ebs])
  (:import org.jclouds.compute.domain.NodeMetadata
    (org.jclouds.ec2.domain PublicIpInstanceIdPair)))

(defn ^org.jclouds.ec2.services.ElasticIPAddressClient
  eip-service
  "Returns an ElasticIPAddressClient for the given ComputeService"
  [compute]
  (-> compute
    .getContext .getProviderSpecificContext .getApi .getElasticIPAddressServices))

(defn allocate
  "Claims a new elastic IP address within the (optionally) specified region for your account.
   Region may be a string, keyword, or a node from which the region
   is inferred.  Returns the IP address as a string."
  ([compute] (allocate compute nil))
  ([compute region]
    (.allocateAddressInRegion (eip-service compute) (ebs/get-region region))))

(defn associate
  "Associates an elastic IP address with a node."
  ([compute ^NodeMetadata node public-ip]
    (associate node public-ip (.getProviderId node)))
  ([compute region public-ip instance-id]
    (.associateAddressInRegion (eip-service compute)
      (ebs/get-region region)
      public-ip
      instance-id)))

(defn addresses
  "Returns a map of elastic IP addresses to maps with slots:

   :region - the region (string/keyword/NodeMetadata) the IP address is allocated within
   :node-id - the ID of the instance with which the IP address is associated (optional)

   You may optionally specify which IP addresses you would like to query."
  ([compute] (addresses compute nil))
  ([compute region & public-ips]
    (into {} (for [^PublicIpInstanceIdPair pair (.describeAddressesInRegion (eip-service compute)
                                                   (ebs/get-region region)
                                                   (into-array String public-ips))]
               [(.getPublicIp pair) (merge {:region (.getRegion pair)}
                                      (when (.getInstanceId pair) {:node-id (.getInstanceId pair)}))]))))

(defn dissociate
  "Dissociates an elastic IP address from the node with which it is currently associated."
  [compute region public-ip]
  (.disassociateAddressInRegion (eip-service compute)
    (ebs/get-region region)
    public-ip))

(defn release
  "Disclaims an elastic IP address from your account."
  ([compute public-ip] (release compute public-ip nil))
  ([compute public-ip region]
    (.releaseAddressInRegion (eip-service compute)
      (ebs/get-region region)
      public-ip)))




© 2015 - 2025 Weber Informatics LLC | Privacy Policy