Disable creation of public shares per configuration
Fix [1] for bug [2] disabled creating of public share types per configuration but did not address the part of the bug that required disabling of public *share* creation per configuration. Fix that here. [1] Ia3808486b8604270127c22d45e455e1955b36dba [2] https://bugs.launchpad.net/manila-ui/+bug/1593057 Change-Id: I0c256d0007395e659f804e8874424f4148021ca8 Closes-bug: #1650610
This commit is contained in:
parent
43bbdcdb1f
commit
a29fe60314
|
@ -13,6 +13,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.forms import ValidationError # noqa
|
||||
from django.template.defaultfilters import filesizeformat # noqa
|
||||
|
@ -46,6 +47,9 @@ class CreateForm(forms.SelfHandlingForm):
|
|||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(CreateForm, self).__init__(request, *args, **kwargs)
|
||||
manila_features = getattr(settings, 'OPENSTACK_MANILA_FEATURES', {})
|
||||
self.enable_public_shares = manila_features.get(
|
||||
'enable_public_shares', True)
|
||||
share_protos = ('NFS', 'CIFS', 'GlusterFS', 'HDFS', 'CephFS')
|
||||
share_networks = manila.share_network_list(request)
|
||||
share_types = manila.share_type_list(request)
|
||||
|
@ -94,6 +98,8 @@ class CreateForm(forms.SelfHandlingForm):
|
|||
self.fields['metadata'] = forms.CharField(
|
||||
label=_("Metadata"), required=False,
|
||||
widget=forms.Textarea(attrs={'rows': 4}))
|
||||
|
||||
if self.enable_public_shares:
|
||||
self.fields['is_public'] = forms.BooleanField(
|
||||
label=_("Make visible for all"), required=False,
|
||||
help_text=(
|
||||
|
@ -215,6 +221,7 @@ class CreateForm(forms.SelfHandlingForm):
|
|||
except ValidationError as e:
|
||||
self.api_error(e.messages[0])
|
||||
return False
|
||||
is_public = self.enable_public_shares and data['is_public']
|
||||
share = manila.share_create(
|
||||
request,
|
||||
size=data['size'],
|
||||
|
@ -224,7 +231,7 @@ class CreateForm(forms.SelfHandlingForm):
|
|||
share_network=share_network,
|
||||
snapshot_id=snapshot_id,
|
||||
share_type=data['share_type'],
|
||||
is_public=data['is_public'],
|
||||
is_public=is_public,
|
||||
metadata=metadata,
|
||||
availability_zone=data['availability_zone'])
|
||||
message = _('Creating share "%s"') % data['name']
|
||||
|
@ -254,13 +261,22 @@ class UpdateForm(forms.SelfHandlingForm):
|
|||
widget=forms.Select(
|
||||
attrs={'class': 'switched', 'data-slug': 'sharetype'}))
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(UpdateForm, self).__init__(request, *args, **kwargs)
|
||||
manila_features = getattr(settings, 'OPENSTACK_MANILA_FEATURES', {})
|
||||
self.enable_public_shares = manila_features.get(
|
||||
'enable_public_shares', True)
|
||||
if not self.enable_public_shares:
|
||||
self.fields.pop('is_public')
|
||||
|
||||
def handle(self, request, data):
|
||||
share_id = self.initial['share_id']
|
||||
is_public = data['is_public'] if self.enable_public_shares else False
|
||||
try:
|
||||
share = manila.share_get(self.request, share_id)
|
||||
manila.share_update(
|
||||
request, share, data['name'], data['description'],
|
||||
is_public=data['is_public'])
|
||||
is_public=is_public)
|
||||
message = _('Updating share "%s"') % data['name']
|
||||
messages.success(request, message)
|
||||
return True
|
||||
|
|
|
@ -13,11 +13,15 @@
|
|||
# under the License.
|
||||
|
||||
import ddt
|
||||
from django.core.handlers import wsgi
|
||||
from django.core.urlresolvers import reverse
|
||||
import mock
|
||||
import six
|
||||
|
||||
from horizon import messages as horizon_messages
|
||||
from manila_ui.api import manila as api_manila
|
||||
from manila_ui.dashboards.project.shares.shares import forms
|
||||
from manila_ui.dashboards import utils
|
||||
from manila_ui.tests.dashboards.project.shares import test_data
|
||||
from manila_ui.tests import helpers as test
|
||||
|
||||
|
@ -489,3 +493,129 @@ class ShareViewTests(test.TestCase):
|
|||
api_manila.share_set_metadata.assert_called_once_with(
|
||||
mock.ANY, share, form_data['metadata'])
|
||||
self.assertRedirectsNoFollow(res, SHARE_INDEX_URL)
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class ShareViewFormTests(ShareViewTests, test.APITestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(ShareViewFormTests, self).setUp()
|
||||
FAKE_ENVIRON = {'REQUEST_METHOD': 'GET', 'wsgi.input': 'fake_input'}
|
||||
self.request = wsgi.WSGIRequest(FAKE_ENVIRON)
|
||||
self.mock_object(
|
||||
horizon_messages, "success",
|
||||
mock.Mock())
|
||||
|
||||
@ddt.data((True, True), (True, False), (False, False))
|
||||
@ddt.unpack
|
||||
def test_enable_public_share_creation(self,
|
||||
enable_public_shares,
|
||||
is_public):
|
||||
def _get_form(**kwargs):
|
||||
return forms.CreateForm(self.request, **kwargs)
|
||||
|
||||
self.mock_object(
|
||||
api_manila, "share_create", mock.Mock(return_value=self.share))
|
||||
self.mock_object(
|
||||
api_manila, "share_snapshot_list", mock.Mock(return_value=[]))
|
||||
self.mock_object(
|
||||
api_manila, "share_network_list",
|
||||
mock.Mock(return_value=[test_data.active_share_network]))
|
||||
self.mock_object(
|
||||
api_manila, "share_type_list",
|
||||
mock.Mock(return_value=[self.fake_share_type, ]))
|
||||
self.mock_object(
|
||||
api_manila, "availability_zone_list",
|
||||
mock.Mock(return_value=[self.FakeAZ('fake_az'), ]))
|
||||
|
||||
data = {
|
||||
'name': u'new_share',
|
||||
'description': u'This is test share',
|
||||
'method': u'CreateForm',
|
||||
'share_network': test_data.active_share_network.id,
|
||||
'size': 1,
|
||||
'share_proto': u'NFS',
|
||||
'share_type': 'fake',
|
||||
'share-network-choices-fake': test_data.active_share_network.id,
|
||||
'availability_zone': 'fake_az',
|
||||
'metadata': 'key=value',
|
||||
'snapshot_id': None,
|
||||
}
|
||||
if enable_public_shares:
|
||||
data.update({'is_public': is_public})
|
||||
|
||||
with self.settings(OPENSTACK_MANILA_FEATURES={
|
||||
'enable_public_shares': enable_public_shares}):
|
||||
form = _get_form()
|
||||
result = form.handle(self.request, data)
|
||||
self.assertTrue(result)
|
||||
self.assertEqual(
|
||||
enable_public_shares,
|
||||
form.enable_public_shares)
|
||||
if enable_public_shares:
|
||||
self.assertIn("is_public", form.fields)
|
||||
self.assertTrue(form.fields["is_public"])
|
||||
else:
|
||||
self.assertNotIn("is_public", form.fields)
|
||||
api_manila.share_create.assert_called_once_with(
|
||||
self.request,
|
||||
availability_zone=data['availability_zone'],
|
||||
description=data['description'],
|
||||
is_public=is_public,
|
||||
metadata=utils.parse_str_meta(data['metadata'])[0],
|
||||
name=data['name'],
|
||||
proto=data['share_proto'],
|
||||
share_network=test_data.active_share_network.id,
|
||||
share_type=data['share_type'],
|
||||
size=data['size'],
|
||||
snapshot_id=data['snapshot_id'],
|
||||
)
|
||||
horizon_messages.success.assert_called_once_with(
|
||||
self.request, mock.ANY)
|
||||
|
||||
@ddt.data((True, True), (True, False), (False, False))
|
||||
@ddt.unpack
|
||||
def test_enable_public_share_update(self,
|
||||
enable_public_shares,
|
||||
is_public):
|
||||
def _get_form(initial):
|
||||
kwargs = {
|
||||
'prefix': None,
|
||||
'initial': initial,
|
||||
}
|
||||
return forms.UpdateForm(self.request, **kwargs)
|
||||
|
||||
initial = {'share_id': 'fake_share_id'}
|
||||
|
||||
self.mock_object(
|
||||
api_manila, "share_update", mock.Mock(return_value=self.share))
|
||||
|
||||
data = {
|
||||
'name': u'old_share',
|
||||
'description': u'This is test share',
|
||||
}
|
||||
if enable_public_shares:
|
||||
data.update({'is_public': is_public})
|
||||
|
||||
with self.settings(OPENSTACK_MANILA_FEATURES={
|
||||
'enable_public_shares': enable_public_shares}):
|
||||
form = _get_form(initial)
|
||||
result = form.handle(self.request, data)
|
||||
self.assertTrue(result)
|
||||
self.assertEqual(
|
||||
enable_public_shares,
|
||||
form.enable_public_shares)
|
||||
if enable_public_shares:
|
||||
self.assertIn("is_public", form.fields)
|
||||
self.assertTrue(form.fields["is_public"])
|
||||
else:
|
||||
self.assertNotIn("is_public", form.fields)
|
||||
api_manila.share_update.assert_called_once_with(
|
||||
self.request,
|
||||
self.share,
|
||||
data['name'],
|
||||
data['description'],
|
||||
is_public=is_public,
|
||||
)
|
||||
horizon_messages.success.assert_called_once_with(
|
||||
self.request, mock.ANY)
|
||||
|
|
Loading…
Reference in New Issue