yakumo.nova.v2.floating_ip

Package yakumo :: Package nova :: Package v2 :: Module floating_ip |
[hide private]
[frames] | no frames]

# Source Code for Module yakumo.nova.v2.floating_ip

      1  # Copyright 2014-2017 by Akira Yoshiyama <akirayoshiyama@gmail.com>.
      2  # All Rights Reserved.
      3  #
      4  #    Licensed under the Apache License, Version 2.0 (the "License"); you may
      5  #    not use this file except in compliance with the License. You may obtain
      6  #    a copy of the License at
      7  #
      8  #         http://www.apache.org/licenses/LICENSE-2.0
      9  #
     10  #    Unless required by applicable law or agreed to in writing, software
     11  #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  #    License for the specific language governing permissions and limitations
     14  #    under the License.
     15
     16  """
     17  Resource class and its manager for floating IPs in Compute API v2
     18  """
     19
     20  from yakumo import base
     21  from yakumo.constant import UNDEF
     22  from yakumo import mapper
     23  from yakumo import utils
     24
     25
     26  ATTRIBUTE_MAPPING = [
     27      ('id', 'id', mapper.Noop),
     28      ('fixed_ip', 'fixed_ip', mapper.Noop),
     29      ('server', 'instance_id', mapper.Resource('nova.server')),
     30      ('ip', 'ip', mapper.Noop),
     31      ('pool', 'pool', mapper.Noop),
     32  ]
     33
     34
     35 -class Resource(base.Resource):
     36      """Resource class for floating IPs in Compute API v2"""
     37
     38 -    def associate(self, server=None):
     39          """
     40          Associate a floating IP
     41
     42          @keyword server: Server
     43          @type server: yakumo.nova.v2.server.Resource
     44          @rtype: None
     45          """
     46          self._http.post('/servers/%s/action' % server.get_id(),
     47                          data=utils.get_json_body(
     48                              'addFloatingIp', address=self.ip))
     49
     50 -    def disassociate(self):
     51          """
     52          Disassociate a floating IP
     53
     54          @rtype: None
     55          """
     56          self._http.post('/servers/%s/action' % self.server.id,
     57                          data=utils.get_json_body(
     58                              'removeFloatingIp', address=self.ip))
     59
     60 -    def deallocate(self):
     61          """
     62          Deallocate a floating IP
     63
     64          @rtype: None
     65          """
     66          super(Resource, self).delete()
     67
     68
     69 -class Manager(base.Manager):
     70      """Manager class for floating IPs in Compute API v2"""
     71
     72      resource_class = Resource
     73      service_type = 'compute'
     74      _attr_mapping = ATTRIBUTE_MAPPING
     75      _hidden_methods = ["create", "update", "delete"]
     76      _json_resource_key = 'floating_ip'
     77      _json_resources_key = 'floating_ips'
     78      _url_resource_path = '/os-floating-ips'
     79
     80 -    def allocate(self, pool=UNDEF):
     81          """Allocate a new floating IP
     82
     83          @keyword pool: Pool name
     84          @type pool: str
     85          @return: Allocated floating IP address
     86          @rtype: yakumo.nova.v2.floating_ip.Resource
     87          """
     88          return super(Manager, self).create(pool=pool)
     89
     90 -    def list_pools(self):
     91          """
     92          List floating IP pools
     93
     94          @return: Floating IP pool list
     95          @rtype: [str]
     96          """
     97          ret = self._http.get('/os-floating-ip-pools')
     98          return [x["name"] for x in ret.get("floating_ip_pools", [])]
     99