~allenap/maas/xxx-a-thon

« back to all changes in this revision

Viewing changes to src/maasserver/api/volume_groups.py

  • Committer: LaMont Jones
  • Date: 2016-03-07 23:20:52 UTC
  • mfrom: (4657.1.84 maas)
  • mto: (4657.1.93 maas)
  • mto: This revision was merged to the branch mainline in revision 4660.
  • Revision ID: lamont@canonical.com-20160307232052-rgfxbq7dujj6s093
MergeĀ fromĀ trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2015 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2015-2016 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
"""API handlers: `VolumeGroups`."""
46
46
 
47
47
 
48
48
class VolumeGroupsHandler(OperationsHandler):
49
 
    """Manage volume groups on a node."""
 
49
    """Manage volume groups on a machine."""
50
50
    api_doc_section_name = "Volume groups"
51
51
    update = delete = None
52
52
    fields = DISPLAYED_VOLUME_GROUP_FIELDS
80
80
            system_id, request.user, NODE_PERMISSION.ADMIN)
81
81
        if machine.status != NODE_STATUS.READY:
82
82
            raise NodeStateViolation(
83
 
                "Cannot create volume group because the node is not Ready.")
 
83
                "Cannot create volume group because the machine is not Ready.")
84
84
        form = CreateVolumeGroupForm(machine, data=request.data)
85
85
        if not form.is_valid():
86
86
            raise MAASAPIValidationError(form.errors)
89
89
 
90
90
 
91
91
class VolumeGroupHandler(OperationsHandler):
92
 
    """Manage volume group on a node."""
 
92
    """Manage volume group on a machine."""
93
93
    api_doc_section_name = "Volume group"
94
94
    create = None
95
95
    model = VolumeGroup
143
143
        ]
144
144
 
145
145
    def read(self, request, system_id, volume_group_id):
146
 
        """Read volume group on node.
 
146
        """Read volume group on a machine.
147
147
 
148
 
        Returns 404 if the node or volume group is not found.
 
148
        Returns 404 if the machine or volume group is not found.
149
149
        """
150
150
        return VolumeGroup.objects.get_object_or_404(
151
151
            system_id, volume_group_id, request.user, NODE_PERMISSION.VIEW)
152
152
 
153
153
    def update(self, request, system_id, volume_group_id):
154
 
        """Read volume group on node.
 
154
        """Read volume group on a machine.
155
155
 
156
156
        :param name: Name of the volume group.
157
157
        :param uuid: UUID of the volume group.
161
161
        :param add_partitions: Partitions to add to the volume group.
162
162
        :param remove_partitions: Partitions to remove from the volume group.
163
163
 
164
 
        Returns 404 if the node or volume group is not found.
165
 
        Returns 409 if the node is not Ready.
 
164
        Returns 404 if the machine or volume group is not found.
 
165
        Returns 409 if the machine is not Ready.
166
166
        """
167
167
        volume_group = VolumeGroup.objects.get_object_or_404(
168
168
            system_id, volume_group_id, request.user, NODE_PERMISSION.ADMIN)
169
169
        node = volume_group.get_node()
170
170
        if node.status != NODE_STATUS.READY:
171
171
            raise NodeStateViolation(
172
 
                "Cannot update volume group because the node is not Ready.")
 
172
                "Cannot update volume group because the machine is not Ready.")
173
173
        form = UpdateVolumeGroupForm(volume_group, data=request.data)
174
174
        if not form.is_valid():
175
175
            raise MAASAPIValidationError(form.errors)
177
177
            return form.save()
178
178
 
179
179
    def delete(self, request, system_id, volume_group_id):
180
 
        """Delete volume group on node.
 
180
        """Delete volume group on a machine.
181
181
 
182
 
        Returns 404 if the node or volume group is not found.
183
 
        Returns 409 if the node is not Ready.
 
182
        Returns 404 if the machine or volume group is not found.
 
183
        Returns 409 if the machine is not Ready.
184
184
        """
185
185
        volume_group = VolumeGroup.objects.get_object_or_404(
186
186
            system_id, volume_group_id, request.user, NODE_PERMISSION.ADMIN)
187
187
        node = volume_group.get_node()
188
188
        if node.status != NODE_STATUS.READY:
189
189
            raise NodeStateViolation(
190
 
                "Cannot delete volume group because the node is not Ready.")
 
190
                "Cannot delete volume group because the machine is not Ready.")
191
191
        volume_group.delete()
192
192
        return rc.DELETED
193
193
 
199
199
        :param uuid: (optional) UUID of the logical volume.
200
200
        :param size: Size of the logical volume.
201
201
 
202
 
        Returns 404 if the node or volume group is not found.
203
 
        Returns 409 if the node is not Ready.
 
202
        Returns 404 if the machine or volume group is not found.
 
203
        Returns 409 if the machine is not Ready.
204
204
        """
205
205
        volume_group = VolumeGroup.objects.get_object_or_404(
206
206
            system_id, volume_group_id, request.user, NODE_PERMISSION.ADMIN)
207
207
        node = volume_group.get_node()
208
208
        if node.status != NODE_STATUS.READY:
209
209
            raise NodeStateViolation(
210
 
                "Cannot create logical volume because the node is not Ready.")
 
210
                "Cannot create logical volume because the machine is not "
 
211
                "Ready.")
211
212
        form = CreateLogicalVolumeForm(volume_group, data=request.data)
212
213
        if not form.is_valid():
213
214
            raise MAASAPIValidationError(form.errors)
221
222
        :param id: ID of the logical volume.
222
223
 
223
224
        Returns 403 if no logical volume with id.
224
 
        Returns 404 if the node or volume group is not found.
225
 
        Returns 409 if the node is not Ready.
 
225
        Returns 404 if the machine or volume group is not found.
 
226
        Returns 409 if the machine is not Ready.
226
227
        """
227
228
        volume_group = VolumeGroup.objects.get_object_or_404(
228
229
            system_id, volume_group_id, request.user, NODE_PERMISSION.ADMIN)
229
230
        node = volume_group.get_node()
230
231
        if node.status != NODE_STATUS.READY:
231
232
            raise NodeStateViolation(
232
 
                "Cannot delete logical volume because the node is not Ready.")
 
233
                "Cannot delete logical volume because the machine is not "
 
234
                "Ready.")
233
235
        volume_id = get_mandatory_param(request.data, 'id')
234
236
        try:
235
237
            logical_volume = volume_group.virtual_devices.get(id=volume_id)