def get(self, flavor):
        """
        Get a specific flavor.

        :param flavor: The ID of the :class:`Flavor` to get.
        :rtype: :class:`Flavor`
        """
        return self._get("/flavors/%s" % base.getid(flavor), "flavor")
 def delete_meta(self, server, keys):
     """
     Delete metadata from an server
     :param server: The :class:`Server` to add metadata to
     :param keys: A list of metadata keys to delete from the server
     """
     for k in keys:
         self._delete("/servers/%s/metadata/%s" % (base.getid(server), k))
    def get(self, image):
        """
        Get an image.

        :param image: The ID of the image to get.
        :rtype: :class:`Image`
        """
        return self._get("/images/%s" % base.getid(image), "image")
    def get(self, server):
        """
        Get a server.

        :param server: ID of the :class:`Server` to get.
        :rtype: :class:`Server`
        """
        return self._get("/servers/%s" % base.getid(server), "server")
    def delete_meta(self, image, keys):
        """
        Delete metadata from an image

        :param image: The :class:`Image` to add metadata to
        :param keys: A list of metadata keys to delete from the image
        """
        for k in keys:
            self._delete("/images/%s/metadata/%s" % (base.getid(image), k))
 def set_meta(self, server, metadata):
     """
     Set a servers metadata
     :param server: The :class:`Server` to add metadata to
     :param metadata: A dict of metadata to add to the server
     """
     body = {'metadata': metadata}
     return self._create("/servers/%s/metadata" % base.getid(server),
                          body, "metadata")
    def delete(self, image):
        """
        Delete an image.

        It should go without saying that you can't delete an image
        that you didn't create.

        :param image: The :class:`Image` (or its ID) to delete.
        """
        self._delete("/images/%s" % base.getid(image))
    def set_meta(self, image, metadata):
        """
        Set an images metadata

        :param image: The :class:`Image` to add metadata to
        :param metadata: A dict of metadata to add to the image
        """
        body = {'metadata': metadata}
        return self._create("/images/%s/metadata" % base.getid(image), body,
                             "metadata")
    def resize(self, server, flavor):
        """
        Resize a server's resources.

        :param server: The :class:`Server` (or its ID) to share onto.
        :param flavor: the :class:`Flavor` (or its ID) to resize to.

        Until a resize event is confirmed with :meth:`confirm_resize`, the old
        server will be kept around and you'll be able to roll back to the old
        flavor quickly with :meth:`revert_resize`. All resizes are
        automatically confirmed after 24 hours.
        """
        self._action('resize', server, {'flavorRef': base.getid(flavor)})
    def rebuild(self, server, image, password=None):
        """
        Rebuild -- shut down and then re-image -- a server.

        :param server: The :class:`Server` (or its ID) to share onto.
        :param image: the :class:`Image` (or its ID) to re-image with.
        :param password: string to set as password on the rebuilt server.
        """
        body = {'imageRef': base.getid(image)}
        if password is not None:
            body['adminPass'] = password
        resp, body = self._action('rebuild', server, body)
        return Server(self, body['server'])
    def update(self, server, name=None):
        """
        Update the name or the password for a server.

        :param server: The :class:`Server` (or its ID) to update.
        :param name: Update the server's name.
        """
        if name is None:
            return

        body = {
            "server": {
                "name": name,
            },
        }

        self._update("/servers/%s" % base.getid(server), body)
 def suspend(self, server):
     """
     Suspend the server.
     """
     self.api.post('/servers/%s/suspend' % base.getid(server))
 def resume(self, server):
     """
     Resume the server.
     """
     self.api.post('/servers/%s/resume' % base.getid(server))
    def test_getid(self):
        self.assertEqual(base.getid(4), 4)

        class TmpObject(object):
            id = 4
        self.assertEqual(base.getid(TmpObject), 4)
 def _action(self, action, server, info=None):
     """
     Perform a server "action" -- reboot/rebuild/resize/etc.
     """
     url = '/servers/%s/action' % base.getid(server)
     return self.api.post(url, body={action: info})
 def unpause(self, server):
     """
     Unpause the server.
     """
     self.api.post('/servers/%s/unpause' % base.getid(server))
 def delete(self, server):
     """
     Delete (i.e. shut down and delete the image) this server.
     """
     self._delete("/servers/%s" % base.getid(server))