Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions novaclient/v1_1/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
from novaclient.v1_1 import services
from novaclient.v1_1 import fixed_ips
from novaclient.v1_1 import floating_ips_bulk
from novaclient.v1_1 import scheduled_images


class Client(object):
Expand Down Expand Up @@ -117,6 +118,7 @@ def __init__(self, username, api_key, project_id, auth_url=None,
self.coverage = coverage_ext.CoverageManager(self)
self.availability_zones = \
availability_zones.AvailabilityZoneManager(self)
self.scheduled_images = scheduled_images.ScheduledImageManager(self)

# Add in any extensions...
if extensions:
Expand Down
63 changes: 63 additions & 0 deletions novaclient/v1_1/scheduled_images.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Copyright 2013 Rackspace, Inc.
# All Rights Reserved.
#
# Licensed 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.

"""
Scheduled Images interface (1.1 extension).
"""

import urllib

from novaclient import base
from novaclient import exceptions

class ScheduledImage(base.Resource):
def __repr__(self):
return "<ScheduledImage>"

class ScheduledImageManager(base.Manager):
resource_class = ScheduledImage

def get(self, server_id):
"""
Get the scheduled image information for the server.

:param server_id: The ID of the server to query for.
:rtype: :class:`ScheduledImage`
"""
try:
return self._get("/servers/%s/os-si-image-schedule" % server_id, "image_schedule")
except exceptions.NotFound:
msg = "Scheduled images not enabled for server %s" % server_id
raise exceptions.NotFound(404, msg)

def disable(self, server_id):
"""
Disable the creation of scheduled images for the server.

:param server_id: The ID of the server to disable scheduled images for.
"""
self._delete("/servers/%s/os-si-image-schedule" % server_id)

def enable(self, server_id, retention):
"""
Enable the creation of scheduled images for the server.

:param server_id: The ID of the server to enable scheduled images for.
:param retention: The number of scheduled images to retain.
:rtype: :class:`ScheduledImage`
"""
body = {'image_schedule': {'retention': retention}}
return self._create("/servers/%s/os-si-image-schedule" % server_id,
body, "image_schedule")
22 changes: 22 additions & 0 deletions novaclient/v1_1/shell.py
Original file line number Diff line number Diff line change
Expand Up @@ -3024,3 +3024,25 @@ def do_availability_zone_list(cs, _args):
_translate_availability_zone_keys(result)
utils.print_list(result, ['Name', 'Status'],
sortby_index=None)


@utils.arg('server', metavar='<server>', help='Name or ID of server.')
def do_scheduled_images_show(cs, args):
"""Show the scheduled image settings for a server"""
server_id = _find_server(cs, args.server).id
result = cs.scheduled_images.get(server_id)
print "Retention: %d" % result['retention']

@utils.arg('server', metavar='<server>', help='Name or ID of server.')
@utils.arg('retention', metavar='<retention>',
help='Number of scheduled images to retain')
def do_scheduled_images_enable(cs, args):
"""Enable scheduled images for a server"""
server_id = _find_server(cs, args.server).id
result = cs.scheduled_images.enable(server_id, args.retention)

@utils.arg('server', metavar='<server>', help='Name or ID of server.')
def do_scheduled_images_disable(cs, args):
"""Enable scheduled images for a server"""
server_id = _find_server(cs, args.server).id
result = cs.scheduled_images.disable(server_id)