~termie/nova/eventlet_objectstore

« back to all changes in this revision

Viewing changes to nova/compute/api.py

  • Committer: Tarmac
  • Author(s): Mark Washenberger
  • Date: 2011-03-16 19:37:00 UTC
  • mfrom: (749.4.50 file-inject)
  • Revision ID: tarmac-20110316193700-hzugm3i36ysmckay
Fix lp727225 by adding support for personality files to the openstack api.

Description:

This merge adds support for personality files to the openstack api. It leverages previous work which added this functionality to the compute api, compute manager, and xen api.

Show diffs side-by-side

added added

removed removed

Lines of Context:
80
80
                        topic,
81
81
                        {"method": "get_network_topic", "args": {'fake': 1}})
82
82
 
 
83
    def _check_injected_file_quota(self, context, injected_files):
 
84
        """
 
85
        Enforce quota limits on injected files
 
86
 
 
87
        Raises a QuotaError if any limit is exceeded
 
88
        """
 
89
        if injected_files is None:
 
90
            return
 
91
        limit = quota.allowed_injected_files(context)
 
92
        if len(injected_files) > limit:
 
93
            raise quota.QuotaError(code="OnsetFileLimitExceeded")
 
94
        path_limit = quota.allowed_injected_file_path_bytes(context)
 
95
        content_limit = quota.allowed_injected_file_content_bytes(context)
 
96
        for path, content in injected_files:
 
97
            if len(path) > path_limit:
 
98
                raise quota.QuotaError(code="OnsetFilePathLimitExceeded")
 
99
            if len(content) > content_limit:
 
100
                raise quota.QuotaError(code="OnsetFileContentLimitExceeded")
 
101
 
83
102
    def create(self, context, instance_type,
84
103
               image_id, kernel_id=None, ramdisk_id=None,
85
104
               min_count=1, max_count=1,
86
105
               display_name='', display_description='',
87
106
               key_name=None, key_data=None, security_group='default',
88
107
               availability_zone=None, user_data=None, metadata=[],
89
 
               onset_files=None):
 
108
               injected_files=None):
90
109
        """Create the number of instances requested if quota and
91
110
        other arguments check out ok."""
92
111
 
124
143
                LOG.warn(msg)
125
144
                raise quota.QuotaError(msg, "MetadataLimitExceeded")
126
145
 
 
146
        self._check_injected_file_quota(context, injected_files)
 
147
 
127
148
        image = self.image_service.show(context, image_id)
128
149
 
129
150
        os_type = None
225
246
                      "args": {"topic": FLAGS.compute_topic,
226
247
                               "instance_id": instance_id,
227
248
                               "availability_zone": availability_zone,
228
 
                               "onset_files": onset_files}})
 
249
                               "injected_files": injected_files}})
229
250
 
230
251
        for group_id in security_groups:
231
252
            self.trigger_security_group_members_refresh(elevated, group_id)