yakumo.cinder.v2.snapshot

Package yakumo :: Package cinder :: Package v2 :: Module snapshot |
[hide private]
[frames] | no frames]

# Source Code for Module yakumo.cinder.v2.snapshot

      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 volume snapshots on Block Storage V2 API
     18  """
     19
     20  from yakumo import base
     21  from yakumo.constant import UNDEF
     22  from yakumo import mapper
     23
     24
     25  ATTRIBUTE_MAPPING = [
     26      ('id', 'id', mapper.Noop),
     27      ('name', 'name', mapper.Noop),
     28      ('description', 'description', mapper.Noop),
     29      ('size', 'size', mapper.Noop),
     30      ('status', 'status', mapper.Noop),
     31      ('force', 'force', mapper.Noop),
     32      ('source', 'volume_id', mapper.Resource('cinder.volume')),
     33      ('progress', 'os-extended-snapshot-attributes:progress', mapper.Noop),
     34      ('project', 'os-extended-snapshot-attributes:project_id',
     35       mapper.Resource('project')),
     36      ('metadata', 'metadata', mapper.Noop),
     37      ('created_at', 'created_at', mapper.DateTime),
     38      ('updated_at', 'updated_at', mapper.DateTime),
     39  ]
     40
     41
     42 -class Resource(base.Resource):
     43      """resource class for volume snapshots on Block Storage V2 API"""
     44
     45      _stable_state = ['available', 'error', 'error_deleting']
     46
     47 -    def get_metadata(self):
     48          """
     49          Get metadata of a volume snapshot
     50
     51          @return: Metadata
     52          @rtype: dict
     53          """
     54          ret = self._http.get(self._url_resource_path, self._id, 'metadata')
     55          return ret.get('metadata')
     56
     57 -    def set_metadata(self, **metadata):
     58          """
     59          Update metadata of a volume snapshot
     60
     61          @keyword metadata: key=value style.
     62          @type metadata: dict
     63          @rtype: None
     64          """
     65          self._http.post(self._url_resource_path, self._id, 'metadata',
     66                          data={'metadata': metadata})
     67          self.reload()
     68
     69 -    def unset_metadata(self, *keys):
     70          """
     71          Delete metadata of a volume snapshot
     72
     73          @param key: key of the metadata
     74          @type keys: [str]
     75          @rtype: None
     76          """
     77          for key in keys:
     78              self._http.delete(self._url_resource_path, self._id,
     79                                'metadata', key)
     80          self.reload()
     81
     82
     83 -class Manager(base.Manager):
     84      """manager class for volume snapshots on Block Storage V2 API"""
     85
     86      resource_class = Resource
     87      service_type = 'volume'
     88      _attr_mapping = ATTRIBUTE_MAPPING
     89      _json_resource_key = 'snapshot'
     90      _json_resources_key = 'snapshots'
     91      _hidden_methods = ["update"]
     92      _url_resource_list_path = '/snapshots/detail'
     93      _url_resource_path = '/snapshots'
     94
     95 -    def create(self, name=UNDEF, description=UNDEF, metadata=UNDEF,
     96                 source=UNDEF, force=False):
     97          """
     98          Create a snapshot of a volume
     99
    100          @keyword name: Snapshot name
    101          @type name: str
    102          @keyword description: Description
    103          @type description: str
    104          @keyword metadata: Metadata
    105          @type metadata: dict
    106          @keyword source: Source volume
    107          @type source: yakumo.cinder.v2.volume.Resource
    108          @return: Created volume object
    109          @rtype: yakumo.cinder.v2.snapshot.Resource
    110          """
    111          return super(Manager, self).create(name=name,
    112                                             description=description,
    113                                             metadata=metadata,
    114                                             source=source,
    115                                             force=force)
    116