~ubuntu-branches/ubuntu/raring/nova/raring-proposed

« back to all changes in this revision

Viewing changes to nova/api/ec2/ec2utils.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Adam Gandelman, Chuck Short
  • Date: 2012-11-23 09:04:58 UTC
  • mfrom: (1.1.66)
  • Revision ID: package-import@ubuntu.com-20121123090458-91565o7aev1i1h71
Tags: 2013.1~g1-0ubuntu1
[ Adam Gandelman ]
* debian/control: Ensure novaclient is upgraded with nova,
  require python-keystoneclient >= 1:2.9.0. (LP: #1073289)
* debian/patches/{ubuntu/*, rbd-security.patch}: Dropped, applied
  upstream.
* debian/control: Add python-testtools to Build-Depends.

[ Chuck Short ]
* New upstream version.
* Refreshed debian/patches/avoid_setuptools_git_dependency.patch.
* debian/rules: FTBFS if missing binaries.
* debian/nova-scheudler.install: Add missing rabbit-queues and
  nova-rpc-zmq-receiver.
* Remove nova-volume since it doesnt exist anymore, transition to cinder-*.
* debian/rules: install apport hook in the right place.
* debian/patches/ubuntu-show-tests.patch: Display test failures.
* debian/control: Add depends on genisoimage
* debian/control: Suggest guestmount.
* debian/control: Suggest websockify. (LP: #1076442)
* debian/nova.conf: Disable nova-volume service.
* debian/control: Depend on xen-system-* rather than the hypervisor.
* debian/control, debian/mans/nova-conductor.8, debian/nova-conductor.init,
  debian/nova-conductor.install, debian/nova-conductor.logrotate
  debian/nova-conductor.manpages, debian/nova-conductor.postrm
  debian/nova-conductor.upstart.in: Add nova-conductor service.
* debian/control: Add python-fixtures as a build deps.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from nova import context
22
22
from nova import db
23
23
from nova import exception
24
 
from nova import flags
25
24
from nova.network import model as network_model
26
25
from nova.openstack.common import log as logging
27
 
from nova import utils
28
 
 
29
 
 
30
 
FLAGS = flags.FLAGS
 
26
from nova.openstack.common import timeutils
 
27
from nova.openstack.common import uuidutils
 
28
 
31
29
LOG = logging.getLogger(__name__)
32
30
 
33
31
 
129
127
 
130
128
def id_to_ec2_inst_id(instance_id):
131
129
    """Get or create an ec2 instance ID (i-[base 16 number]) from uuid."""
132
 
    if utils.is_uuid_like(instance_id):
 
130
    if uuidutils.is_uuid_like(instance_id):
133
131
        ctxt = context.get_admin_context()
134
132
        int_id = get_int_id_from_instance_uuid(ctxt, instance_id)
135
133
        return id_to_ec2_id(int_id)
149
147
 
150
148
def id_to_ec2_snap_id(snapshot_id):
151
149
    """Get or create an ec2 volume ID (vol-[base 16 number]) from uuid."""
152
 
    if utils.is_uuid_like(snapshot_id):
 
150
    if uuidutils.is_uuid_like(snapshot_id):
153
151
        ctxt = context.get_admin_context()
154
152
        int_id = get_int_id_from_snapshot_uuid(ctxt, snapshot_id)
155
153
        return id_to_ec2_id(int_id, 'snap-%08x')
159
157
 
160
158
def id_to_ec2_vol_id(volume_id):
161
159
    """Get or create an ec2 volume ID (vol-[base 16 number]) from uuid."""
162
 
    if utils.is_uuid_like(volume_id):
 
160
    if uuidutils.is_uuid_like(volume_id):
163
161
        ctxt = context.get_admin_context()
164
162
        int_id = get_int_id_from_volume_uuid(ctxt, volume_id)
165
163
        return id_to_ec2_id(int_id, 'vol-%08x')
176
174
    return get_volume_uuid_from_int_id(ctxt, int_id)
177
175
 
178
176
 
 
177
def is_ec2_timestamp_expired(request, expires=None):
 
178
    """Checks the timestamp or expiry time included in a EC2 request
 
179
    and returns true if the request is expired
 
180
    """
 
181
    query_time = None
 
182
    timestamp = request.get('Timestamp')
 
183
    expiry_time = request.get('Expires')
 
184
    try:
 
185
        if timestamp and expiry_time:
 
186
            msg = _("Request must include either Timestamp or Expires,"
 
187
                    " but cannot contain both")
 
188
            LOG.error(msg)
 
189
            raise exception.InvalidRequest(msg)
 
190
        elif expiry_time:
 
191
            query_time = timeutils.parse_strtime(expiry_time,
 
192
                                        "%Y-%m-%dT%H:%M:%SZ")
 
193
            return timeutils.is_older_than(query_time, -1)
 
194
        elif timestamp:
 
195
            query_time = timeutils.parse_strtime(timestamp,
 
196
                                        "%Y-%m-%dT%H:%M:%SZ")
 
197
 
 
198
            # Check if the difference between the timestamp in the request
 
199
            # and the time on our servers is larger than 5 minutes, the
 
200
            # request is too old (or too new).
 
201
            if query_time and expires:
 
202
                return timeutils.is_older_than(query_time, expires) or \
 
203
                       timeutils.is_newer_than(query_time, expires)
 
204
        return False
 
205
    except ValueError:
 
206
        LOG.audit(_("Timestamp is invalid."))
 
207
        return True
 
208
 
 
209
 
179
210
def get_int_id_from_instance_uuid(context, instance_uuid):
180
211
    if instance_uuid is None:
181
212
        return
220
251
    return db.get_snapshot_uuid_by_ec2_id(context, int_id)
221
252
 
222
253
 
223
 
def ec2_instance_id_to_uuid(context, ec2_id):
224
 
    int_id = ec2_id_to_id(ec2_id)
225
 
    return db.instance_get(context, int_id)['uuid']
226
 
 
227
254
_c2u = re.compile('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))')
228
255
 
229
256